From 5eb73d3e9f1bb41f5ff8c655d2207d065a15422f Mon Sep 17 00:00:00 2001 From: Madanagopal19 <101558437+Madanagopal19@users.noreply.github.com> Date: Tue, 4 Jun 2024 21:31:47 +0530 Subject: [PATCH] Resource Name Change Validation (#2558) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * kubevirt vendor updates for schedops (#2420) Signed-off-by: Rohit-PX Co-authored-by: Rohit-PX * PB-6789:Create an app/vm in specific namespace (#2410) * Fix regex spelling error (#2429) * Fix restore NS name (#2430) * Ingore check for purefile (#2426) * Ingore check for purefile * [TC Automation] PTX-21440 Add test case VolAttachFAPxRestart (#2361) *[TC Automation] PTX-21440 Add test case VolAttachFAPxRestart,VolAttachSameFAPxRestart * Adding check to ignore Volume attaches in case of pure file volume (#2432) * Adding cloud create and s3 bucket deletion function for cloudsnaps (#2406) * Adding cloud create and s3 bucket deletion function for cloudsnaps * Adding bucket cleanup as part of cloudsnap tests --------- Co-authored-by: Leela Srinivas Siripurapu * Adding ZRS spec for aks (#2393) * Added method for creating volume snapshot class with the given provisioner (#2418) * PB-6789:Create an app/vm in specific namespace * Added snapclass creation * PB-5946: Added logic for PVC cleanup validation (#2282) * Added logic for PVC cleanup validation * Ptx 23576 VolResizeAllVolumes in parallel (#2433) * Trigger vol resize on all volumes at once * PTX-23652: be resilient to failures of GetVolumes() call (#2425) * PTX-23652: be resilient to failures of GetVolumes() call Signed-off-by: pnookala-px * move total computation to before settting migration Signed-off-by: pnookala-px * Retry GetVolumes() call Signed-off-by: pnookala-px --------- Signed-off-by: pnookala-px * Create and attach 250 + FADA volumes in Longevity or scale testing automation (#2421) Signed-off-by: Smit Jain * Fixing volume provisoner in case of back up test (#2437) Co-authored-by: Leela Srinivas Siripurapu * Add a new test case for bootstrapping with local disks (#2428) * Added a new testcase for PTX-22628 * Change to MoveDisks * skip the root disk for detaching * cosmetic changes * Different logic for move disks * Updating node.go * Changes with Detach and AttachDisk * Added print statements * typo * Try with sleep * test detach attachdisk * try with RemoveDevice * moving the comment * testing objects * change to moref.value * change to use the existing finder object * debug statement * newer logic * different way to fetch datastore object * debug statement * old logic * try with replace file op * remove replace * cleanup code * wait for PX to be online * Added logic to remove disks for nonpxnodes * Update node.go * Added log statement for disk operations * temp: commenting out debug statement * ignore master nodes for targetVM * graceful movement of disks, add PXstop to srcVM * add log state for failure * update registry * refreshing driverendpoints * disabling PX on the stopped node * adding another refresh node registry * adding a log statement for debug * update the randNonPxNode object * Added a log statement for successful check of node ID * Test log statement cleanup * move the test to misc_test * correct the import sections * addressed review comments * Added pxbackupversion check to verify api call (#2434) * [PTX-23625] Fix TriggerRebootManyNodes (#2442) * Test automation for VolHAIncreaseAllVolumes (#2441) * Test automation for VolHAIncreaseAllVolumes * Anthos upgrade is failing in anthos reconcile preflight check (#2443) Signed-off-by: Smit Jain * fixing MultiVolumeMountsForSharedV4 for chos-level (#2446) Co-authored-by: Leela Srinivas Siripurapu * [PWX-37026] Adding FBDAMultiTenancyBasicTest (#2419) * [PWX-37026] Adding FBDAMultiTenancyBasicTest Signed-off-by: Vinayak Shinde * [PWX-37026] Updated libopenstorage/openstorage dependancy Signed-off-by: Vinayak Shinde * [PWX-37026] Added FBDAMultiTenancyBasicTest Signed-off-by: Vinayak Shinde * [PWX-37026] Addressed review comments Signed-off-by: Vinayak Shinde --------- Signed-off-by: Vinayak Shinde * Add test case to bring down network interface of FA Controller (#2455) * Add test case to bring down network interface of FA Controller * Adding senarios for adding storage node and stoageless nodes for clou… (#2449) * Adding senarios for adding storage node and stoageless nodes for cloud platforms * Deleting node scaling reduntant code --------- Co-authored-by: Leela Srinivas Siripurapu * Adding test for new storkctl flow (#2431) * Ptx 23763 Get FB Cluster Details (#2457) * Add test case to bring down network interface of FB * Calculate node upgrade time for Anthos parallel upgrade (#2387) * Calculate node upgrade time for parallel upgrade * Updating vendoring for latest sched-ops Signed-off-by: Smit Jain --------- Signed-off-by: Smit Jain * Fixing the user name length because it is used in namespace creation and exceeding 63 chars (#2459) * Automation scripts for iscsi port drop scenarios [ PTX-23831, PTX-23832,PTX-23833,PTX-23818] (#2460) * Automation scripts for iscsi port drop scenarios * [PWX-33177] Skip pool expansions when app has only FBDA volumes. (#2456) Since FBDA volumes do not get created on PX pool, there is no use of this validation. Signed-off-by: Vinayak Shinde * PB-6777: Add Backup driver with WaitForBackupPartialCompletion method and its portworx implementation (#2448) * Fix retry for GetPxBackupVersionString (#2471) * Fix for NVME parsing (#2469) * Updating string split logic to split volume serial, extracted from the mount path * New Test case addition (#2466) * New Test case addition deletes Volume Delete on FA Backend * Fix nfs loc validation and pvc cleanup (#2474) * Adding test to recycle all storage driver nodes and validate drive set in cloud platforms (#2473) * adding debug logs for usable address * Adding test to recycle all nodes * Adding test to recycle all nodes --------- Co-authored-by: Leela Srinivas Siripurapu * [TC Improvement] Take px namespace where it is installed (#2476) * Temporary removeal of pvc cleanup validation (#2478) * Added retry for backup location validation (#2479) * Removed data validation after restore due to PB-6271 (#2480) * [PTX-23856] Increase Timeout In ValidateStorageCluster (#2465) * Ptx 23988 (#2486) function to check and list all the multipath devices present in the node * PB-6917: Add `CUSTOM_REGISTRY` and `CUSTOM_REPO` to support custom registry deployment (#2477) * PB-6917: Add fix to use docker.io in case of cloud * PB-6917: Add fix to use docker.io in case of cloud * Change implementation to `CUSTOM_REGISTRY ` and `CUSTOM_REPO ` * PB-6917: Add fix to use docker.io in case of cloud * Change implementation to `CUSTOM_REGISTRY ` and `CUSTOM_REPO ` * Minor fix * Minor fix * Adding test to increase max nodes per zone after scale up (#2484) Co-authored-by: Leela Srinivas Siripurapu * Ptx 23988 (#2490) * functions to fetch details on CLoud drives , multipaths , and skip Adddisk if not supported * [PWX-37028] Added FBDAMultiTenancyUpdatePureNFSEnpoint (#2485) * [PWX-37028] Added FBDAMultiTenancyUpdatePureNFSEnpoint * [PWX-37028] Addressed review comments Signed-off-by: Vinayak Shinde --------- Signed-off-by: Vinayak Shinde * Run torpedo as a pod in anthos user cluster (#2491) Signed-off-by: Smit Jain * PTX-24028 Vendor latest libopenstorage/operator package (#2489) Signed-off-by: nikolaypopov * Kubevirt specs for datavoltemplate , win22 , large datadisk (#2376) * Kubevirt specs for datavoltemplate , win22 , large datadisk * Renamed files * fix nit in vm.yaml to accept .vmID * fix small nit * rename large disk app * remove long names * New test case to Expand Multiple pool when FADA volumes are getting C… (#2495) * New test case to Expand Multiple pool when FADA volumes are getting Created * [PWX-37028] Skip volume validations. (#2497) * [TC Automation] kubevirt test cases (#2483) * Fbda topology creates (#2496) * fbda with top test1 Signed-off-by: pnookala-px * fbda with top test1 Signed-off-by: pnookala-px * fbda with top test1 Signed-off-by: pnookala-px * fbda with top test2 Signed-off-by: pnookala-px * sleep 30 seconds after deleting pvc Signed-off-by: pnookala-px * create sc without top Signed-off-by: pnookala-px * create sc without top Signed-off-by: pnookala-px * fix spelling Signed-off-by: pnookala-px * wait 3 mins only Signed-off-by: pnookala-px * Refactored common code --------- Signed-off-by: pnookala-px Co-authored-by: Vinayak Shinde * fixing debian VM spec to have internal mount (#2507) * adding retry with timeout for PDB validation (#2500) * [TC Automation] Add test case RestartPXAndCheckIfVmBindMount (#2510) * add test case RestartPXAndCheckIfVmBindMount * increasing cpu cores for bonnie app (#2488) Co-authored-by: Leela Srinivas Siripurapu * Vendored the latest px-backup api for 2.7.1 (#2506) * Power off and power on all worker nodes (#2436) Signed-off-by: smarakala_pure Co-authored-by: smarakala_pure * [PTX-24172] Fix validateAutoFsTrim (#2512) * Detach clouddrives while IO inprogress and verify pool can be back after maintenance cycle (#2408) * Adding detach drives to longevity Signed-off-by: smarakala_pure Co-authored-by: smarakala_pure * minor fix for update node id function (#2515) Co-authored-by: Leela Srinivas Siripurapu * [PTX-24076] Add Ginkgo Support To Deployment Script (#2509) * [PTX-24076] Add yq Install Command To Dockerfile * [PTX-24076] Add Ginkgo Support To Deployment Script * [PTX-23863] Fix SetupProxyServer (#2524) * PWX-36878: DMthin OCP VSphere pool expand test update (#2503) * DMthin OCP VSphere pool expand test update Signed-off-by: Priyanshu Pandey --------- Signed-off-by: Priyanshu Pandey * Adding cloudsnap delete event to longevity (#2444) * Adding cloudsnap delete event to longevity Signed-off-by: smarakala_pure * Adding params for px-security (#2527) * Fixing OCP zones (#2516) * Fixing OCP zones * Fixing ASG for openshift --------- Co-authored-by: Leela Srinivas Siripurapu * Removed aks node driver (#2533) * PTX-23958: Vendoring latest operator (#2531) * vendoring latest operator * vendoring after rke2 change * even newer operator code * PTX-24002 Create Volume clone for FADA volume and verify new volume is created in the backend (#2501) * PTX-24002 * PTX-24002 * PTX-24002 changes made according to comments * changes done to exit the loop if clone volume found in FA * changes done according to comments * minor nitpick changes * nitpick * New Libraries for FA RestAPIs 2.x (#2543) New Libraries for FA RestAPIs 2.x * Fixing Json Parsing Issue (#2550) Fixing Json Parsing Issue * Added mysql & postgres spec with restricted PSA (#2521) * Waiting for atleast 2 mongo pods to come up after scaling down to 0 and scaling backup to 3 again (#2552) * name change validation * latest pds api changes * added bronze acc * Fixed names in status * fixing manifest issue --------- Signed-off-by: Rohit-PX Signed-off-by: pnookala-px Signed-off-by: Smit Jain Signed-off-by: Vinayak Shinde Signed-off-by: nikolaypopov Signed-off-by: smarakala_pure Signed-off-by: Priyanshu Pandey Co-authored-by: Rohit-PX <32072909+Rohit-PX@users.noreply.github.com> Co-authored-by: Rohit-PX Co-authored-by: snigdha-px <110967459+snigdha-px@users.noreply.github.com> Co-authored-by: suhas <122518640+spai-px@users.noreply.github.com> Co-authored-by: Kshithij Iyer <81960124+kshithijiyer-px@users.noreply.github.com> Co-authored-by: vprabhakar-px <120549478+vprabhakar-px@users.noreply.github.com> Co-authored-by: Leela Srinivas <83946232+lsrinivas-pure@users.noreply.github.com> Co-authored-by: Leela Srinivas Siripurapu Co-authored-by: Adil Rahman <123445738+ak-px@users.noreply.github.com> Co-authored-by: sabrarhussaini <105486766+sabrarhussaini@users.noreply.github.com> Co-authored-by: pnookala-px <127919775+pnookala-px@users.noreply.github.com> Co-authored-by: jainsmit Co-authored-by: vumesh-px <125877317+vumesh-px@users.noreply.github.com> Co-authored-by: kphalgun-px <122591456+kphalgun-px@users.noreply.github.com> Co-authored-by: Vinayak Shinde Co-authored-by: Leela Srinivas Siripurapu Co-authored-by: Geet-PX <115655007+gejain@users.noreply.github.com> Co-authored-by: Mithun Koppal <114994232+mkoppal-px@users.noreply.github.com> Co-authored-by: sgajawada-px <116876049+sgajawada-px@users.noreply.github.com> Co-authored-by: Nikolay Popov <7504816+nikolaypopov@users.noreply.github.com> Co-authored-by: px-kannavarapu <147571353+px-kannavarapu@users.noreply.github.com> Co-authored-by: Dhruv Bhatnagar <117347853+dbhatnagar-px@users.noreply.github.com> Co-authored-by: Swarupa Vijaykumar <123443458+svijaykumar-px@users.noreply.github.com> Co-authored-by: Santhosh Marakala <75639214+Santhoshairody@users.noreply.github.com> Co-authored-by: smarakala_pure Co-authored-by: Priyanshu Pandey Co-authored-by: sayalasomayajula-px <162689439+sayalasomayajula-px@users.noreply.github.com> --- Dockerfile | 4 + apiServer/taas/apiserver.go | 1 + apiServer/taas/utils/k8sutils.go | 33 + apiServer/taas/utils/torpedoutils.go | 2 +- deployments/deploy-pxb-cloud.sh | 7 +- deployments/deploy-ssh.sh | 71 +- drivers/backup/backup.go | 5 + drivers/backup/portworx/portworx.go | 55 + drivers/node/node.go | 31 + drivers/node/node_registry.go | 14 + drivers/node/ssh/ssh.go | 4 +- drivers/node/vsphere/vsphere.go | 329 +- drivers/pure/flasharray/fa.go | 406 + drivers/pure/flasharray/volumeTypes.go | 82 + drivers/pure/flasharray/volumes.go | 18 + drivers/pure/flashblade/fb.go | 2 +- drivers/scheduler/anthos/anthos.go | 319 +- drivers/scheduler/dcos/dcos.go | 10 +- drivers/scheduler/k8s/k8s.go | 136 +- .../k8s/specs/aggr-mysql/px-mysql-app.yaml | 2 +- .../specs/bonnie-sharedv4/px-bonnie-app.yml | 4 +- .../specs/bonnie-sv4-svc/px-bonnie-app.yml | 4 +- .../k8s/specs/fio-fbda-ep/fio-config-map.yaml | 86 + .../scheduler/k8s/specs/fio-fbda-ep/fio.yaml | 94 + .../specs/fio-fbda-ep/px-storage-class.yaml | 35 + .../specs/kubevirt-debian-fio-low-ha/vm.yaml | 9 + .../specs/kubevirt-debian-fio-minimal/vm.yaml | 9 + .../boot-disk-template.yaml | 17 + .../data-disk-template.yaml | 14 + .../pxd/sc-wffc.yaml | 11 + .../kubevirt-fio-datavoltemplate/pxd/sc.yaml | 11 + .../vm-datavol.yaml | 235 + .../fio-boot-pvc.yaml | 20 + .../pxd/sc.yaml | 12 + .../kubevirt-forklift-fio-largedisk/vm.yaml | 236 + .../specs/kubevirt-win22-forklift/pxd/sc.yaml | 12 + .../kubevirt-win22-forklift/vm-template.yaml | 221 + .../windows-boot-pvc.yaml | 17 + .../px-mysql-app.yaml | 129 + .../px-mysql-storage.yaml | 37 + .../pxd/px-storage-class.yaml | 42 + .../k8s/specs/mysql-backup/px-mysql-app.yaml | 2 +- .../k8s/specs/mysql-ibm/mysql-app.yaml | 2 +- .../specs/mysql-without-enc/px-mysql-app.yaml | 2 +- .../k8s/specs/mysql/px-mysql-app.yaml | 2 +- .../azure/azure-storage-class.yaml | 11 + .../postgres-azure-zrsdisk-app.yaml | 61 + .../postgres-azure-disk-zone/storage.yaml | 12 + .../px-postgres-app.yaml | 92 + .../pxd/px-storage-class.yaml | 10 + .../storage.yaml | 12 + .../pure/pure-storage-class.yaml | 17 + .../postgres-fbda-ep/px-postgres-app.yaml | 62 + .../k8s/specs/postgres-fbda-ep/storage.yaml | 12 + .../k8s/specs/snap-mysql/px-mysql-app.yaml | 2 +- .../pure/pure-storage-class.yaml | 15 + .../specs/vdbench-fbda-ep/px-vdbench-app.yaml | 63 + .../k8s/specs/vdbench-fbda-ep/storage.yaml | 25 + drivers/scheduler/openshift/openshift.go | 121 +- drivers/scheduler/scheduler.go | 37 +- .../automationModels/common.go | 4 +- .../automationModels/deployments.go | 44 +- .../automationModels/wfDataServiceDetails.go | 3 - .../pds/backend/v1/api/backup.go | 2 +- .../pds/backend/v1/api/backupConfig.go | 2 +- .../pds/backend/v1/api/common.go | 12 +- .../pds/backend/v1/api/deployments.go | 36 +- .../backend/v1/api/deploymentsConfigUpdate.go | 8 +- .../pds/backend/v1/api/restore.go | 2 +- .../pds/backend/v1/grpc/deployments.go | 37 +- .../v1/grpc/deploymentsConfigUpdate.go | 26 +- .../pds/backend/v1/grpc/restore.go | 34 +- drivers/unifiedPlatform/pdsLibs/dsLib.go | 24 +- .../pdsLibs/validateBackupRestore.go | 24 +- .../pdsLibs/validateDataService.go | 8 +- .../platform/backend/v1/api/templates.go | 18 +- .../platform/backend/v1/grpc/templates.go | 2 +- drivers/unifiedPlatform/resiliency/utils.go | 8 +- .../stworkflows/pds/workflowDataservice.go | 8 +- .../stworkflows/pds/workflowRestore.go | 10 +- .../platform/workflowTargetCluster.go | 1 + drivers/unifiedPlatform/unifiedPlatform.go | 4 +- drivers/utilities/utilities.go | 6 +- drivers/volume/aws/aws.go | 22 + drivers/volume/azure/azure.go | 20 + drivers/volume/common.go | 25 + drivers/volume/gce/gce.go | 21 + drivers/volume/generic_csi/generic_csi.go | 22 + drivers/volume/ibm/ibm.go | 21 + drivers/volume/linstor/linstor.go | 23 +- drivers/volume/ocp/ocp.go | 21 + drivers/volume/portworx/portworx.go | 147 +- .../portworx/schedops/anthos-schedops.go | 12 + .../volume/portworx/schedops/dcos-schedops.go | 4 + .../volume/portworx/schedops/k8s-schedops.go | 40 +- drivers/volume/portworx/schedops/schedops.go | 2 + drivers/volume/pso/pso.go | 25 +- drivers/volume/volume.go | 15 + go.mod | 53 +- go.sum | 2243 +- pkg/pureutils/pure_types.go | 35 +- pkg/pureutils/purefa.go | 97 +- pkg/pureutils/purefa_rest2x.go | 41 + pkg/pureutils/purefb.go | 2 +- pkg/storkctlcli/storkctlcli.go | 135 + tests/backup/backup_basic_test.go | 39 +- tests/backup/backup_kubevirt_test.go | 14 +- tests/backup/backup_portworx_test.go | 2 + tests/backup/backup_resiliency_test.go | 16 +- tests/backup/backup_share_test.go | 2 +- tests/backup/backup_upgrade_test.go | 8 +- tests/backup_helper.go | 136 +- tests/basic/asg_test.go | 550 +- tests/basic/async_dr_test.go | 498 +- tests/basic/autopilot_test.go | 4 +- tests/basic/customer_issues_test.go | 35 +- tests/basic/kubevirt_test.go | 972 +- ..._shared_sharedv4_service_migration_test.go | 40 +- tests/basic/misc_test.go | 98 + tests/basic/node_decommission_test.go | 1 - tests/basic/ocp_node_recycle_test.go | 277 - tests/basic/pool_function_test.go | 527 +- tests/basic/pure_test.go | 1979 +- tests/basic/px_cluster_migration_test.go | 19 + tests/basic/sharedv4_multivol_test.go | 34 +- tests/basic/sharedv4_svc_test.go | 5 +- tests/basic/storage_pool_test.go | 573 +- tests/basic/upgrade_cluster_test.go | 4 +- tests/basic/upgrade_test.go | 3 +- tests/basic/volume_ops_test.go | 111 +- tests/common.go | 1386 +- tests/kubevirt_helper.go | 79 +- tests/longevity/longevity_helper.go | 57 +- tests/longevity/longevity_test.go | 31 +- tests/testTriggers.go | 759 +- tests/unifiedPlatform/pds2/pds_basic_test.go | 73 +- .../pds2/pds_dataservice_test.go | 2 +- .../pds2/pds_restore_negative_test.go | 2 +- .../unifiedPlatform/pds2/pds_restore_test.go | 2 +- .../github.com/evanphx/json-patch/v5/patch.go | 51 +- vendor/github.com/go-sql-driver/mysql/AUTHORS | 9 + .../go-sql-driver/mysql/CHANGELOG.md | 34 + .../github.com/go-sql-driver/mysql/README.md | 21 +- .../go-sql-driver/mysql/atomic_bool.go | 19 + .../go-sql-driver/mysql/atomic_bool_go118.go | 47 + vendor/github.com/go-sql-driver/mysql/auth.go | 56 +- .../go-sql-driver/mysql/collations.go | 3 +- .../go-sql-driver/mysql/conncheck.go | 1 + .../go-sql-driver/mysql/conncheck_dummy.go | 1 + .../go-sql-driver/mysql/connection.go | 26 +- .../github.com/go-sql-driver/mysql/const.go | 2 +- .../github.com/go-sql-driver/mysql/driver.go | 6 +- vendor/github.com/go-sql-driver/mysql/dsn.go | 73 +- .../github.com/go-sql-driver/mysql/errors.go | 18 +- .../github.com/go-sql-driver/mysql/fields.go | 14 +- vendor/github.com/go-sql-driver/mysql/fuzz.go | 1 + .../github.com/go-sql-driver/mysql/infile.go | 32 +- .../go-sql-driver/mysql/nulltime.go | 21 + .../go-sql-driver/mysql/nulltime_go113.go | 40 - .../go-sql-driver/mysql/nulltime_legacy.go | 39 - .../github.com/go-sql-driver/mysql/packets.go | 90 +- .../go-sql-driver/mysql/statement.go | 8 +- .../go-sql-driver/mysql/transaction.go | 4 +- .../github.com/go-sql-driver/mysql/utils.go | 122 +- vendor/github.com/jackc/pgconn/CHANGELOG.md | 12 + vendor/github.com/jackc/pgconn/auth_scram.go | 20 +- vendor/github.com/jackc/pgconn/config.go | 37 +- vendor/github.com/jackc/pgconn/krb5.go | 94 + vendor/github.com/jackc/pgconn/pgconn.go | 22 +- .../github.com/jackc/pgconn/stmtcache/lru.go | 12 +- .../jackc/pgproto3/v2/authentication_gss.go | 58 + .../v2/authentication_gss_continue.go | 67 + .../github.com/jackc/pgproto3/v2/backend.go | 11 +- .../jackc/pgproto3/v2/copy_both_response.go | 2 +- .../github.com/jackc/pgproto3/v2/frontend.go | 6 +- .../jackc/pgproto3/v2/gss_response.go | 48 + vendor/github.com/jackc/pgtype/CHANGELOG.md | 8 + vendor/github.com/jackc/pgtype/hstore.go | 2 + vendor/github.com/jackc/pgtype/int2.go | 17 + .../jackc/pgtype/int4_multirange.go | 239 + .../jackc/pgtype/int8_multirange.go | 239 + vendor/github.com/jackc/pgtype/jsonb_array.go | 29 + vendor/github.com/jackc/pgtype/multirange.go | 83 + .../github.com/jackc/pgtype/num_multirange.go | 239 + vendor/github.com/jackc/pgtype/pgtype.go | 143 +- vendor/github.com/jackc/pgtype/record.go | 2 +- .../github.com/jackc/pgtype/record_array.go | 318 + .../jackc/pgtype/typed_array.go.erb | 22 +- .../jackc/pgtype/typed_array_gen.sh | 50 +- .../jackc/pgtype/typed_multirange.go.erb | 239 + .../jackc/pgtype/typed_multirange_gen.sh | 8 + vendor/github.com/jackc/pgx/v4/CHANGELOG.md | 15 + vendor/github.com/jackc/pgx/v4/README.md | 28 +- vendor/github.com/jackc/pgx/v4/conn.go | 44 +- .../pgx/v4/internal/sanitize/sanitize.go | 2 +- .../github.com/jackc/pgx/v4/large_objects.go | 4 +- vendor/github.com/jackc/pgx/v4/tx.go | 32 +- .../libopenstorage/openstorage/api/api.go | 1 + .../libopenstorage/openstorage/api/api.pb.go | 15906 ++++++------ .../openstorage/api/api.pb.gw.go | 853 +- .../libopenstorage/openstorage/api/api.proto | 201 +- .../openstorage/api/client/cluster/client.go | 4 + .../openstorage/api/spec/spec_handler.go | 12 + .../openstorage/cluster/cluster.go | 8 + .../cluster/cluster_not_supported.go | 4 + .../openstorage/pkg/defrag/defrag.go | 62 + .../openstorage/pkg/schedule/schedule.go | 45 + .../drivers/storage/portworx/util/util.go | 76 +- .../operator/pkg/constants/metadata.go | 8 + .../operator/pkg/mock/kubevirtmanager.mock.go | 77 + .../operator/pkg/mock/openstoragesdk.mock.go | 105 +- .../operator/pkg/util/k8s/node.go | 4 +- .../operator/pkg/util/test/util.go | 212 +- .../libopenstorage/operator/pkg/util/util.go | 8 +- .../stork/pkg/apis/stork/v1alpha1/action.go | 97 +- .../controllers/migrationschedule.go | 88 +- .../stork/pkg/resourceutils/listResources.go | 61 + .../pkg/resourceutils/scaledownduringdr.go | 272 + .../pkg/resourceutils/scaleupduringdr.go | 347 + .../stork/pkg/schedule/schedule.go | 81 + .../stork/pkg/storkctl/action.go | 224 +- .../stork/pkg/storkctl/actionstatus.go | 185 + .../stork/pkg/storkctl/common.go | 2 +- .../libopenstorage/stork/pkg/storkctl/get.go | 2 + .../stork/pkg/storkctl/migration.go | 30 +- .../stork/pkg/storkctl/migrationschedule.go | 40 +- .../stork/pkg/storkctl/perform.go | 19 + .../stork/pkg/storkctl/storkctl.go | 2 +- .../libopenstorage/stork/pkg/utils/utils.go | 98 + .../github.com/montanaflynn/stats/.gitignore | 5 +- .../github.com/montanaflynn/stats/.travis.yml | 16 - .../montanaflynn/stats/CHANGELOG.md | 537 +- .../montanaflynn/stats/DOCUMENTATION.md | 1237 + vendor/github.com/montanaflynn/stats/LICENSE | 2 +- vendor/github.com/montanaflynn/stats/Makefile | 25 +- .../github.com/montanaflynn/stats/README.md | 220 +- .../montanaflynn/stats/correlation.go | 33 +- vendor/github.com/montanaflynn/stats/data.go | 28 +- .../montanaflynn/stats/deviation.go | 10 +- .../montanaflynn/stats/distances.go | 24 +- vendor/github.com/montanaflynn/stats/doc.go | 23 + .../github.com/montanaflynn/stats/entropy.go | 31 + .../github.com/montanaflynn/stats/errors.go | 33 +- .../stats/geometric_distribution.go | 42 + .../github.com/montanaflynn/stats/legacy.go | 13 + vendor/github.com/montanaflynn/stats/load.go | 15 + vendor/github.com/montanaflynn/stats/max.go | 6 +- vendor/github.com/montanaflynn/stats/mean.go | 6 +- .../github.com/montanaflynn/stats/median.go | 2 +- vendor/github.com/montanaflynn/stats/min.go | 2 +- vendor/github.com/montanaflynn/stats/mode.go | 4 +- vendor/github.com/montanaflynn/stats/norm.go | 254 + .../github.com/montanaflynn/stats/outlier.go | 2 +- .../montanaflynn/stats/percentile.go | 10 +- .../github.com/montanaflynn/stats/quartile.go | 8 +- .../github.com/montanaflynn/stats/ranksum.go | 183 + .../montanaflynn/stats/regression.go | 12 +- .../github.com/montanaflynn/stats/sample.go | 36 +- .../github.com/montanaflynn/stats/sigmoid.go | 18 + .../github.com/montanaflynn/stats/softmax.go | 25 + vendor/github.com/montanaflynn/stats/sum.go | 2 +- .../github.com/montanaflynn/stats/variance.go | 6 +- .../px-backup-api/pkg/apis/v1/api.pb.go | 2756 ++- .../px-backup-api/pkg/apis/v1/api.proto | 32 + .../pkg/apis/v1/api.swagger.json | 107 + .../portworx/sched-ops/k8s/anthos/anthos.go | 188 + .../sched-ops/k8s/anthos/anthosonprem.go | 69 + .../portworx/sched-ops/k8s/anthos/clusters.go | 217 + .../portworx/sched-ops/k8s/anthos/machines.go | 76 + .../portworx/sched-ops/k8s/core/core.go | 5 + .../portworx/sched-ops/k8s/core/events.go | 27 + .../portworx/sched-ops/k8s/core/nodes.go | 18 +- .../k8s/kubevirt-dynamic/kubevirt.go | 19 + .../virtualmachineinstance.go | 36 +- .../virtualmachineinstancemigration.go | 54 +- .../sched-ops/k8s/kubevirt/virtualmachine.go | 21 +- .../prometheus/collectors/expvar_collector.go | 2 +- .../collectors/go_collector_latest.go | 9 +- .../client_golang/prometheus/counter.go | 26 +- .../client_golang/prometheus/desc.go | 32 +- .../prometheus/expvar_collector.go | 2 +- .../client_golang/prometheus/gauge.go | 8 +- .../client_golang/prometheus/histogram.go | 126 +- .../prometheus/internal/difflib.go | 2 +- .../client_golang/prometheus/labels.go | 58 +- .../client_golang/prometheus/metric.go | 3 + .../client_golang/prometheus/promhttp/http.go | 19 +- .../prometheus/promhttp/instrument_server.go | 9 +- .../client_golang/prometheus/registry.go | 6 +- .../client_golang/prometheus/summary.go | 41 +- .../client_golang/prometheus/value.go | 55 +- .../client_golang/prometheus/vec.go | 87 +- .../prometheus/client_model/go/metrics.pb.go | 347 +- .../prometheus/common/expfmt/decode.go | 5 +- .../prometheus/common/expfmt/encode.go | 13 +- .../prometheus/common/expfmt/expfmt.go | 26 +- .../prometheus/common/expfmt/text_parse.go | 2 +- .../prometheus/procfs/.golangci.yml | 3 + .../prometheus/procfs/Makefile.common | 22 +- vendor/github.com/prometheus/procfs/README.md | 4 +- vendor/github.com/prometheus/procfs/arp.go | 6 +- .../github.com/prometheus/procfs/buddyinfo.go | 6 +- .../github.com/prometheus/procfs/cpuinfo.go | 17 +- vendor/github.com/prometheus/procfs/crypto.go | 7 +- vendor/github.com/prometheus/procfs/fs.go | 11 +- .../prometheus/procfs/fs_statfs_notype.go | 23 + .../prometheus/procfs/fs_statfs_type.go | 33 + .../github.com/prometheus/procfs/fscache.go | 6 +- .../prometheus/procfs/internal/util/parse.go | 15 + vendor/github.com/prometheus/procfs/ipvs.go | 7 +- .../github.com/prometheus/procfs/loadavg.go | 4 +- vendor/github.com/prometheus/procfs/mdstat.go | 36 +- .../github.com/prometheus/procfs/meminfo.go | 4 +- .../github.com/prometheus/procfs/mountinfo.go | 10 +- .../prometheus/procfs/mountstats.go | 38 +- .../prometheus/procfs/net_conntrackstat.go | 91 +- .../prometheus/procfs/net_ip_socket.go | 32 +- .../prometheus/procfs/net_protocols.go | 4 +- .../github.com/prometheus/procfs/net_route.go | 143 + .../prometheus/procfs/net_sockstat.go | 9 +- .../prometheus/procfs/net_softnet.go | 9 +- .../github.com/prometheus/procfs/net_unix.go | 16 +- .../prometheus/procfs/net_wireless.go | 182 + .../github.com/prometheus/procfs/net_xfrm.go | 2 +- .../github.com/prometheus/procfs/netstat.go | 25 +- vendor/github.com/prometheus/procfs/proc.go | 37 +- .../prometheus/procfs/proc_cgroup.go | 4 +- .../prometheus/procfs/proc_cgroups.go | 8 +- .../prometheus/procfs/proc_fdinfo.go | 2 +- .../prometheus/procfs/proc_interrupts.go | 2 +- .../prometheus/procfs/proc_limits.go | 4 +- .../github.com/prometheus/procfs/proc_maps.go | 8 +- .../prometheus/procfs/proc_netstat.go | 4 +- .../github.com/prometheus/procfs/proc_ns.go | 6 +- .../github.com/prometheus/procfs/proc_psi.go | 6 +- .../prometheus/procfs/proc_smaps.go | 4 +- .../github.com/prometheus/procfs/proc_snmp.go | 4 +- .../github.com/prometheus/procfs/proc_stat.go | 8 +- .../prometheus/procfs/proc_status.go | 32 + .../github.com/prometheus/procfs/proc_sys.go | 2 +- vendor/github.com/prometheus/procfs/slab.go | 2 +- .../github.com/prometheus/procfs/softirqs.go | 24 +- vendor/github.com/prometheus/procfs/stat.go | 28 +- vendor/github.com/prometheus/procfs/swaps.go | 8 +- vendor/github.com/prometheus/procfs/thread.go | 11 +- vendor/github.com/prometheus/procfs/vm.go | 2 +- .../github.com/prometheus/procfs/zoneinfo.go | 4 +- .../public/portworx/common/apiv1/Makefile | 3 +- .../portworx/common/apiv1/healthcheck.pb.go | 492 + .../portworx/common/apiv1/healthcheck.pb.md | 109 + .../portworx/common/apiv1/healthcheck.proto | 68 + .../apiv1/healthcheck.swagger.json} | 2 +- .../common/apiv1/platformresource.pb.go | 47 +- .../common/apiv1/platformresource.pb.md | 2 +- .../common/apiv1/platformresource.proto | 2 +- .../portworx/common/apiv1/selector.pb.go | 73 +- .../portworx/common/apiv1/selector.pb.md | 1 + .../portworx/common/apiv1/selector.proto | 2 + .../portworx/pds/backup/apiv1/backup.pb.go | 474 +- .../portworx/pds/backup/apiv1/backup.pb.gw.go | 18 + .../portworx/pds/backup/apiv1/backup.pb.md | 27 +- .../portworx/pds/backup/apiv1/backup.proto | 54 +- .../pds/backup/apiv1/backup.swagger.json | 74 +- .../pds/backupconfig/apiv1/backupconfig.pb.go | 1012 +- .../backupconfig/apiv1/backupconfig.pb.gw.go | 18 + .../pds/backupconfig/apiv1/backupconfig.pb.md | 67 +- .../pds/backupconfig/apiv1/backupconfig.proto | 131 +- .../apiv1/backupconfig.swagger.json | 125 +- .../apiv1/backupconfig_grpc.pb.go | 4 +- .../apiv1/templatedefinition.pb.go | 675 +- .../apiv1/templatedefinition.pb.gw.go | 180 + .../apiv1/templatedefinition.pb.md | 30 +- .../apiv1/templatedefinition.proto | 36 +- .../apiv1/templatedefinition.swagger.json | 134 +- .../apiv1/templatedefinition_grpc.pb.go | 53 + .../apiv1/Makefile | 2 +- .../apiv1/dataservicedeployment.pb.go | 1552 ++ .../apiv1/dataservicedeployment.pb.gw.go | 601 + .../apiv1/dataservicedeployment.pb.md | 290 + .../apiv1/dataservicedeployment.proto | 285 + .../apiv1/dataservicedeployment.swagger.json} | 589 +- .../apiv1/dataservicedeployment_grpc.pb.go | 294 + .../apiv1/Makefile | 5 + .../dataservicedeploymentconfigupdate.pb.go | 1006 + ...dataservicedeploymentconfigupdate.pb.gw.go | 498 + .../dataservicedeploymentconfigupdate.pb.md | 202 + .../dataservicedeploymentconfigupdate.proto | 153 + ...ervicedeploymentconfigupdate.swagger.json} | 149 +- ...taservicedeploymentconfigupdate_grpc.pb.go | 250 + .../apiv1/Makefile | 2 +- .../apiv1/dataservicedeploymenttopology.pb.go | 954 + .../dataservicedeploymenttopology.pb.md} | 68 +- .../dataservicedeploymenttopology.proto} | 74 +- ...dataservicedeploymenttopology.swagger.json | 39 + .../pds/deployment/apiv1/deployment.pb.go | 1577 -- .../pds/deployment/apiv1/deployment.pb.gw.go | 704 - .../pds/deployment/apiv1/deployment.pb.md | 300 - .../pds/deployment/apiv1/deployment.proto | 282 - .../deployment/apiv1/deployment_grpc.pb.go | 322 - .../apiv1/deploymentconfigupdate.pb.go | 962 - .../apiv1/deploymentconfigupdate.pb.gw.go | 498 - .../apiv1/deploymentconfigupdate.pb.md | 202 - .../apiv1/deploymentconfigupdate.proto | 154 - .../apiv1/deploymentconfigupdate_grpc.pb.go | 250 - .../pds/deploymenttopology/apiv1/Makefile | 5 - .../apiv1/deploymenttopology.pb.go | 933 - .../portworx/pds/restore/apiv1/restore.pb.go | 867 +- .../pds/restore/apiv1/restore.pb.gw.go | 103 - .../portworx/pds/restore/apiv1/restore.pb.md | 45 +- .../portworx/pds/restore/apiv1/restore.proto | 75 +- .../pds/restore/apiv1/restore.swagger.json | 83 +- .../pds/restore/apiv1/restore_grpc.pb.go | 39 - .../platform/account/apiv1/account.pb.go | 309 +- .../platform/account/apiv1/account.proto | 1 - .../apiv1/backuplocation.swagger.json | 5 +- .../backuppolicy/apiv1/backuppolicy.pb.go | 509 +- .../backuppolicy/apiv1/backuppolicy.pb.md | 20 +- .../backuppolicy/apiv1/backuppolicy.proto | 31 +- .../apiv1/backuppolicy.swagger.json | 52 +- .../apiv1/cloudcredential.swagger.json | 5 +- .../namespace/apiv1/namespace.swagger.json | 5 +- .../platform/project/apiv1/project.pb.go | 382 +- .../platform/project/apiv1/project.pb.md | 6 +- .../platform/project/apiv1/project.proto | 8 +- .../project/apiv1/project.swagger.json | 9 +- .../platform/project/apiv1/project_grpc.pb.go | 2 +- .../targetcluster/apiv1/targetcluster.pb.go | 491 +- .../targetcluster/apiv1/targetcluster.pb.md | 19 +- .../targetcluster/apiv1/targetcluster.proto | 16 +- .../apiv1/targetcluster.swagger.json | 40 +- .../application/apiv1/application.pb.go | 833 +- .../application/apiv1/application.pb.gw.go | 111 + .../application/apiv1/application.pb.md | 81 +- .../application/apiv1/application.proto | 61 +- .../apiv1/application.swagger.json | 205 + .../application/apiv1/application_grpc.pb.go | 39 + .../platform/template/apiv1/template.pb.go | 252 +- .../platform/template/apiv1/template.pb.gw.go | 26 +- .../platform/template/apiv1/template.pb.md | 3 +- .../platform/template/apiv1/template.proto | 21 +- .../template/apiv1/template.swagger.json | 91 +- .../template/apiv1/template_grpc.pb.go | 8 + .../platform/tenant/apiv1/tenant.pb.go | 283 +- .../platform/tenant/apiv1/tenant.pb.md | 1 + .../platform/tenant/apiv1/tenant.proto | 8 +- .../platform/tenant/apiv1/tenant.swagger.json | 60 + .../platform/tenant/apiv1/tenant_grpc.pb.go | 2 +- .../platform/whoami/apiv1/whoami.pb.go | 52 +- .../platform/whoami/apiv1/whoami.pb.gw.go | 69 + .../platform/whoami/apiv1/whoami.pb.md | 6 + .../platform/whoami/apiv1/whoami.proto | 8 + .../platform/whoami/apiv1/whoami.swagger.json | 31 + .../platform/whoami/apiv1/whoami_grpc.pb.go | 41 +- .../pds/v1/backup/README.md | 4 +- .../pds/v1/backup/api_backup_service.go | 12 +- .../pds/v1/backup/client.go | 2 +- .../pds/v1/backup/model_backupv1_status.go | 36 +- .../pds/v1/backup/model_status_phase.go | 2 +- ...l_v1_data_service_deployment_meta_data.go} | 140 +- .../pds/v1/backupconfig/README.md | 8 +- .../backupconfig/api_backup_config_service.go | 14 +- .../pds/v1/backupconfig/client.go | 2 +- ...onfig_service_create_backup_config_body.go | 30 +- .../model_backupconfigv1_status.go | 126 +- .../pds/v1/backupconfig/model_status_phase.go | 119 - ...l_v1_data_service_deployment_meta_data.go} | 114 +- .../pds/v1/backupconfig/model_v1_phase.go | 121 + .../v1/backupconfig/model_v1_references.go | 30 +- .../pds/v1/catalog/README.md | 2 +- .../pds/v1/catalog/client.go | 2 +- .../pds/v1/catalog/model_selector_operator.go | 4 +- .../catalog/model_v1_data_service_version.go | 12 +- .../pds/v1/catalog/model_v1_image.go | 12 +- .../pds/v1/catalog/model_v1_info1.go | 296 +- .../pds/v1/catalog/model_v1_info2.go | 296 +- .../.travis.yml | 0 .../pds/v1/dataservicedeployment/README.md | 156 + .../api_data_service_deployment_service.go} | 343 +- .../client.go | 12 +- .../configuration.go | 4 +- ...ice_create_data_service_deployment_body.go | 163 + .../model_dataservicedeploymentv1_status.go} | 161 +- .../model_googlerpc_status.go | 4 +- ...ication_selector_pds_application_filter.go | 207 + .../model_protobuf_any.go | 4 +- .../model_protobuf_null_value.go | 4 +- ...model_resource_selector_resource_filter.go | 207 + .../model_selector_filter.go | 204 + .../model_selector_operator.go | 115 + .../model_sort_by_field.go | 4 +- .../model_v1_config.go | 44 +- .../model_v1_connection_details.go | 42 +- .../model_v1_connection_info.go | 82 +- .../model_v1_data_service_deployment.go} | 78 +- ..._v1_data_service_deployment_credentials.go | 127 + ...el_v1_data_service_deployment_topology.go} | 152 +- ...data_service_deployment_topology_status.go | 243 + ...rvice_deployment_topology_status_health.go | 115 + ...ervice_deployment_topology_status_phase.go | 123 + .../model_v1_infra_resource_type.go | 127 + .../model_v1_instance_info.go} | 78 +- .../model_v1_key_performance_indicators.go | 349 + ...1_list_data_service_deployments_request.go | 375 + ..._list_data_service_deployments_response.go | 163 + .../model_v1_meta.go | 4 +- .../model_v1_page_based_pagination_request.go | 4 +- ...model_v1_page_based_pagination_response.go | 4 +- .../model_v1_pds_application_resource_type.go | 111 + .../model_v1_pds_application_selector.go | 127 + .../model_v1_reference.go | 4 +- .../model_v1_references.go | 6 +- .../model_v1_resource_selector.go | 127 + .../model_v1_selector.go | 127 + .../model_v1_sort.go | 4 +- .../model_v1_sort_order_value.go | 4 +- .../model_v1_status_health.go | 6 +- .../model_v1_status_phase.go | 6 +- .../model_v1_template.go | 4 +- .../model_v1_tls_config.go | 4 +- .../response.go | 4 +- .../utils.go | 4 +- .../.travis.yml | 0 .../README.md | 137 + ...rvice_deployment_config_update_service.go} | 160 +- .../client.go | 12 +- .../configuration.go | 4 +- ...t_for_which_config_update_is_requested_.go | 162 + ...rvice_config_deployment_update_request_.go | 198 + .../model_googlerpc_status.go | 4 +- ...f_the_data_service_deployment_resource_.go | 423 + ...aservicedeploymentconfigupdatev1_config.go | 162 + ...aservicedeploymentconfigupdatev1_status.go | 241 + ...cedeploymentconfigupdatev1_status_phase.go | 119 + ...model_pdsdataservicedeploymentv1_config.go | 199 + .../model_protobuf_any.go | 4 +- .../model_sort_by_field.go | 4 +- ...1_data_service_deployment_config_update.go | 198 + ...el_v1_data_service_deployment_topology.go} | 152 +- ...vice_deployment_config_updates_response.go | 163 + .../model_v1_meta.go | 4 +- .../model_v1_page_based_pagination_request.go | 4 +- ...model_v1_page_based_pagination_response.go | 4 +- .../model_v1_reference.go | 4 +- .../model_v1_references.go | 6 +- .../model_v1_sort.go | 4 +- .../model_v1_sort_order_value.go | 4 +- .../model_v1_template.go | 4 +- .../model_v1_tls_config.go | 4 +- .../response.go | 4 +- .../utils.go | 4 +- .../pds/v1/deployment/README.md | 144 - ...ployment_service_create_deployment_body.go | 163 - .../model_v1_deployment_credentials.go | 127 - .../model_v1_deployment_topology_status.go | 243 - ...el_v1_deployment_topology_status_health.go | 115 - ...del_v1_deployment_topology_status_phase.go | 123 - .../model_v1_list_deployments_response.go | 163 - .../pds/v1/deploymentconfigupdate/README.md | 137 - ...t_for_which_config_update_is_requested_.go | 162 - ...pdate_of_the_deployment_update_request_.go | 198 - ...odel_pdsdeploymentconfigupdatev1_config.go | 162 - ...odel_pdsdeploymentconfigupdatev1_status.go | 241 - ...dsdeploymentconfigupdatev1_status_phase.go | 119 - .../model_pdsdeploymentv1_config.go | 199 - .../model_v1_deployment_config_update.go | 198 - ...list_deployment_config_updates_response.go | 163 - .../pds/v1/restore/README.md | 6 +- .../pds/v1/restore/api_restore_service.go | 115 +- .../pds/v1/restore/client.go | 2 +- .../model_v1_destination_references.go | 34 +- .../pds/v1/restore/model_v1_error_code.go | 28 +- .../pds/v1/restore/model_v1_phase.go | 14 +- .../restore/model_v1_restorability_matrix.go | 127 - ...odel_v1_restore_compatibility_condition.go | 162 - ...v1_restore_compatibility_condition_list.go | 127 - .../v1/restore/model_v1_source_references.go | 34 +- .../platform/v1/account/README.md | 2 +- .../platform/v1/account/client.go | 2 +- .../platform/v1/backuplocation/README.md | 2 +- .../platform/v1/backuplocation/client.go | 2 +- .../backuplocation/model_selector_operator.go | 4 +- .../platform/v1/cloudcredential/README.md | 2 +- .../platform/v1/cloudcredential/client.go | 2 +- .../model_selector_operator.go | 4 +- .../platform/v1/iam/README.md | 2 +- .../platform/v1/iam/client.go | 2 +- .../platform/v1/namespace/README.md | 2 +- .../platform/v1/namespace/client.go | 2 +- .../v1/namespace/model_selector_operator.go | 4 +- .../platform/v1/onboard/README.md | 2 +- .../platform/v1/onboard/client.go | 2 +- .../platform/v1/project/README.md | 2 +- .../platform/v1/project/client.go | 2 +- .../v1/project/model_selector_operator.go | 4 +- .../v1/project/model_v1_pds_resources.go | 34 +- .../platform/v1/serviceaccount/README.md | 2 +- .../platform/v1/serviceaccount/client.go | 2 +- .../platform/v1/targetcluster/README.md | 9 +- .../targetcluster/api_application_service.go | 121 + .../platform/v1/targetcluster/client.go | 2 +- .../model_application_health_health.go | 115 + .../model_application_to_be_updated_.go | 198 + .../model_applicationv1_status.go | 77 + ...data_of_the_application_resource_meta__.go | 423 + .../model_pds_properties_global.go | 127 + .../model_platform_target_clusterv1_status.go | 28 +- .../targetcluster/model_selector_operator.go | 4 +- .../v1/targetcluster/model_v1_config.go | 36 + .../targetcluster/model_v1_pds_properties.go | 126 + .../v1/targetcluster/model_v1_pxe_metadata.go | 37 + ...el_v1_target_cluster_application_status.go | 207 + .../README.md | 2 +- .../client.go | 2 +- .../platform/v1/template/README.md | 7 +- .../v1/template/api_template_service.go | 25 +- .../platform/v1/template/client.go | 2 +- .../model_desired_template_configuration_.go | 198 + .../model_metadata_of_the_resource_.go} | 120 +- .../v1/template/model_selector_operator.go | 4 +- ...l_template_service_update_template_body.go | 126 + .../platform/v1/tenant/README.md | 2 +- .../platform/v1/tenant/client.go | 2 +- .../v1/tenant/model_selector_operator.go | 4 +- .../platform/v1/whoami/README.md | 3 +- .../v1/whoami/api_who_am_i_service.go | 105 + .../platform/v1/whoami/client.go | 2 +- vendor/go.uber.org/multierr/CHANGELOG.md | 7 + vendor/go.uber.org/multierr/error.go | 32 +- .../go.uber.org/multierr/error_post_go120.go | 19 + .../go.uber.org/multierr/error_pre_go120.go | 20 + .../api/gkeonprem/v1/gkeonprem-api.json | 6733 +++++ .../api/gkeonprem/v1/gkeonprem-gen.go | 20524 ++++++++++++++++ .../k8s.io/component-base/featuregate/OWNERS | 16 - .../featuregate/feature_gate.go | 375 - .../k8s.io/kube-openapi/pkg/cached/cache.go | 281 - .../k8s.io/kube-openapi/pkg/common/common.go | 48 +- .../kube-openapi/pkg/handler3/handler.go | 245 +- .../k8s.io/kube-openapi/pkg/internal/flags.go | 24 - .../pkg/internal/handler/handler_cache.go | 57 + .../pkg/internal/serialization.go | 65 - .../go-json-experiment/json/AUTHORS | 3 - .../go-json-experiment/json/CONTRIBUTORS | 3 - .../go-json-experiment/json/LICENSE | 27 - .../go-json-experiment/json/README.md | 321 - .../go-json-experiment/json/arshal.go | 513 - .../go-json-experiment/json/arshal_any.go | 238 - .../go-json-experiment/json/arshal_default.go | 1485 -- .../go-json-experiment/json/arshal_funcs.go | 387 - .../go-json-experiment/json/arshal_inlined.go | 213 - .../go-json-experiment/json/arshal_methods.go | 229 - .../go-json-experiment/json/arshal_time.go | 241 - .../go-json-experiment/json/decode.go | 1655 -- .../go-json-experiment/json/doc.go | 182 - .../go-json-experiment/json/encode.go | 1170 - .../go-json-experiment/json/errors.go | 183 - .../go-json-experiment/json/fields.go | 509 - .../go-json-experiment/json/fold.go | 56 - .../go-json-experiment/json/intern.go | 86 - .../go-json-experiment/json/pools.go | 182 - .../go-json-experiment/json/state.go | 747 - .../go-json-experiment/json/token.go | 522 - .../go-json-experiment/json/value.go | 381 - .../kube-openapi/pkg/schemaconv/openapi.go | 260 - .../pkg/schemaconv/proto_models.go | 178 - .../k8s.io/kube-openapi/pkg/schemaconv/smd.go | 306 +- .../k8s.io/kube-openapi/pkg/spec3/encoding.go | 22 +- .../k8s.io/kube-openapi/pkg/spec3/example.go | 25 +- .../pkg/spec3/external_documentation.go | 21 +- vendor/k8s.io/kube-openapi/pkg/spec3/fuzz.go | 254 - .../k8s.io/kube-openapi/pkg/spec3/header.go | 21 - .../kube-openapi/pkg/spec3/media_type.go | 22 +- .../kube-openapi/pkg/spec3/operation.go | 22 +- .../kube-openapi/pkg/spec3/parameter.go | 22 - vendor/k8s.io/kube-openapi/pkg/spec3/path.go | 82 +- .../kube-openapi/pkg/spec3/request_body.go | 23 +- .../k8s.io/kube-openapi/pkg/spec3/response.go | 121 +- .../pkg/spec3/security_requirement.go | 56 + .../kube-openapi/pkg/spec3/security_scheme.go | 2 +- .../k8s.io/kube-openapi/pkg/spec3/server.go | 41 +- vendor/k8s.io/kube-openapi/pkg/spec3/spec.go | 13 - .../pkg/util/proto/document_v3.go | 4 +- .../kube-openapi/pkg/validation/spec/fuzz.go | 502 - .../pkg/validation/spec/gnostic.go | 6 +- .../pkg/validation/spec/header.go | 43 - .../kube-openapi/pkg/validation/spec/info.go | 45 - .../kube-openapi/pkg/validation/spec/items.go | 71 - .../pkg/validation/spec/operation.go | 50 - .../pkg/validation/spec/parameter.go | 93 +- .../pkg/validation/spec/path_item.go | 39 - .../kube-openapi/pkg/validation/spec/paths.go | 79 - .../kube-openapi/pkg/validation/spec/ref.go | 18 +- .../pkg/validation/spec/response.go | 55 +- .../pkg/validation/spec/responses.go | 106 +- .../pkg/validation/spec/schema.go | 118 - .../pkg/validation/spec/security_scheme.go | 28 - .../pkg/validation/spec/swagger.go | 171 +- .../kube-openapi/pkg/validation/spec/tag.go | 32 - vendor/modules.txt | 102 +- .../api/v1beta1/cluster_phase_types.go | 55 - .../cluster-api/api/v1beta1/cluster_types.go | 480 - .../api/v1beta1/cluster_webhook.go | 240 - .../api/v1beta1/clusterclass_types.go | 451 - .../api/v1beta1/clusterclass_webhook.go | 373 - .../cluster-api/api/v1beta1/common_types.go | 186 - .../api/v1beta1/condition_consts.go | 280 - .../api/v1beta1/condition_types.go | 94 - .../cluster-api/api/v1beta1/conversion.go | 30 - .../cluster-api/api/v1beta1/doc.go | 18 - .../api/v1beta1/groupversion_info.go | 36 - .../api/v1beta1/machine_phase_types.go | 64 - .../cluster-api/api/v1beta1/machine_types.go | 270 - .../api/v1beta1/machine_webhook.go | 135 - .../api/v1beta1/machinedeployment_types.go | 317 - .../api/v1beta1/machinedeployment_webhook.go | 203 - .../api/v1beta1/machinehealthcheck_types.go | 173 - .../api/v1beta1/machinehealthcheck_webhook.go | 171 - .../api/v1beta1/machineset_webhook.go | 133 - .../api/v1beta1/zz_generated.deepcopy.go | 1640 -- .../cluster-api/errors/clusters.go | 5 +- .../sigs.k8s.io/cluster-api/errors/consts.go | 73 +- .../cluster-api/errors/controllers.go | 57 + .../doc.go => cluster-api/errors/deployer.go} | 9 +- .../cluster-api/errors/kubeadmcontrolplane.go | 31 - .../cluster-api/errors/machines.go | 6 +- .../sigs.k8s.io/cluster-api/errors/pointer.go | 5 - .../cluster-api/feature/feature.go | 67 - .../sigs.k8s.io/cluster-api/feature/gates.go | 33 - .../apis/deprecated/v1alpha1/cluster_types.go | 165 + .../apis/deprecated/v1alpha1/common_types.go | 143 + .../pkg/apis/deprecated/v1alpha1/defaults.go | 73 + .../apis/deprecated/v1alpha1}/doc.go | 11 +- .../apis/deprecated/v1alpha1/machine_types.go | 247 + .../deprecated/v1alpha1/machineclass_types.go | 78 + .../v1alpha1/machinedeployment_types.go | 200 + .../deprecated/v1alpha1}/machineset_types.go | 164 +- .../pkg/apis/deprecated/v1alpha1/register.go | 48 + .../v1alpha1/zz_generated.deepcopy.go | 834 + .../cluster-api/util/version/version.go | 235 - .../sigs.k8s.io/controller-runtime/.gitignore | 24 - .../controller-runtime/.golangci.yml | 143 - .../controller-runtime/CONTRIBUTING.md | 19 - vendor/sigs.k8s.io/controller-runtime/FAQ.md | 81 - .../sigs.k8s.io/controller-runtime/Makefile | 123 - vendor/sigs.k8s.io/controller-runtime/OWNERS | 10 - .../controller-runtime/OWNERS_ALIASES | 41 - .../sigs.k8s.io/controller-runtime/README.md | 66 - .../sigs.k8s.io/controller-runtime/RELEASE.md | 47 - .../controller-runtime/SECURITY_CONTACTS | 14 - .../controller-runtime/TMP-LOGGING.md | 169 - .../controller-runtime/VERSIONING.md | 30 - .../sigs.k8s.io/controller-runtime/alias.go | 150 - .../controller-runtime/code-of-conduct.md | 3 - vendor/sigs.k8s.io/controller-runtime/doc.go | 128 - .../pkg/builder/controller.go | 333 - .../controller-runtime/pkg/builder/doc.go | 28 - .../controller-runtime/pkg/builder/options.go | 140 - .../controller-runtime/pkg/builder/webhook.go | 216 - .../pkg/client/config/config.go | 157 - .../pkg/client/config/doc.go | 18 - .../controllerutil/controllerutil.go | 394 - .../pkg/conversion/conversion.go | 40 - .../pkg/manager/signals/doc.go | 20 - .../pkg/manager/signals/signal.go | 45 - .../pkg/manager/signals/signal_posix.go | 27 - .../pkg/manager/signals/signal_windows.go | 23 - .../pkg/webhook/conversion/conversion.go | 345 - .../pkg/webhook/conversion/decoder.go | 47 - 767 files changed, 85383 insertions(+), 47607 deletions(-) create mode 100644 drivers/pure/flasharray/fa.go create mode 100644 drivers/pure/flasharray/volumeTypes.go create mode 100644 drivers/pure/flasharray/volumes.go create mode 100644 drivers/scheduler/k8s/specs/fio-fbda-ep/fio-config-map.yaml create mode 100644 drivers/scheduler/k8s/specs/fio-fbda-ep/fio.yaml create mode 100644 drivers/scheduler/k8s/specs/fio-fbda-ep/px-storage-class.yaml create mode 100644 drivers/scheduler/k8s/specs/kubevirt-fio-datavoltemplate/boot-disk-template.yaml create mode 100644 drivers/scheduler/k8s/specs/kubevirt-fio-datavoltemplate/data-disk-template.yaml create mode 100644 drivers/scheduler/k8s/specs/kubevirt-fio-datavoltemplate/pxd/sc-wffc.yaml create mode 100644 drivers/scheduler/k8s/specs/kubevirt-fio-datavoltemplate/pxd/sc.yaml create mode 100644 drivers/scheduler/k8s/specs/kubevirt-fio-datavoltemplate/vm-datavol.yaml create mode 100644 drivers/scheduler/k8s/specs/kubevirt-forklift-fio-largedisk/fio-boot-pvc.yaml create mode 100644 drivers/scheduler/k8s/specs/kubevirt-forklift-fio-largedisk/pxd/sc.yaml create mode 100644 drivers/scheduler/k8s/specs/kubevirt-forklift-fio-largedisk/vm.yaml create mode 100644 drivers/scheduler/k8s/specs/kubevirt-win22-forklift/pxd/sc.yaml create mode 100644 drivers/scheduler/k8s/specs/kubevirt-win22-forklift/vm-template.yaml create mode 100644 drivers/scheduler/k8s/specs/kubevirt-win22-forklift/windows-boot-pvc.yaml create mode 100644 drivers/scheduler/k8s/specs/mysql-backup-psa-restricted/px-mysql-app.yaml create mode 100644 drivers/scheduler/k8s/specs/mysql-backup-psa-restricted/px-mysql-storage.yaml create mode 100644 drivers/scheduler/k8s/specs/mysql-backup-psa-restricted/pxd/px-storage-class.yaml create mode 100644 drivers/scheduler/k8s/specs/postgres-azure-disk-zone/azure/azure-storage-class.yaml create mode 100644 drivers/scheduler/k8s/specs/postgres-azure-disk-zone/postgres-azure-zrsdisk-app.yaml create mode 100644 drivers/scheduler/k8s/specs/postgres-azure-disk-zone/storage.yaml create mode 100644 drivers/scheduler/k8s/specs/postgres-backup-psa-restricted/px-postgres-app.yaml create mode 100644 drivers/scheduler/k8s/specs/postgres-backup-psa-restricted/pxd/px-storage-class.yaml create mode 100644 drivers/scheduler/k8s/specs/postgres-backup-psa-restricted/storage.yaml create mode 100644 drivers/scheduler/k8s/specs/postgres-fbda-ep/pure/pure-storage-class.yaml create mode 100644 drivers/scheduler/k8s/specs/postgres-fbda-ep/px-postgres-app.yaml create mode 100644 drivers/scheduler/k8s/specs/postgres-fbda-ep/storage.yaml create mode 100644 drivers/scheduler/k8s/specs/vdbench-fbda-ep/pure/pure-storage-class.yaml create mode 100644 drivers/scheduler/k8s/specs/vdbench-fbda-ep/px-vdbench-app.yaml create mode 100644 drivers/scheduler/k8s/specs/vdbench-fbda-ep/storage.yaml delete mode 100644 drivers/unifiedPlatform/automationModels/wfDataServiceDetails.go create mode 100644 drivers/volume/portworx/schedops/anthos-schedops.go create mode 100644 pkg/pureutils/purefa_rest2x.go create mode 100644 pkg/storkctlcli/storkctlcli.go delete mode 100644 tests/basic/ocp_node_recycle_test.go create mode 100644 vendor/github.com/go-sql-driver/mysql/atomic_bool.go create mode 100644 vendor/github.com/go-sql-driver/mysql/atomic_bool_go118.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/nulltime_go113.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/nulltime_legacy.go create mode 100644 vendor/github.com/jackc/pgconn/krb5.go create mode 100644 vendor/github.com/jackc/pgproto3/v2/authentication_gss.go create mode 100644 vendor/github.com/jackc/pgproto3/v2/authentication_gss_continue.go create mode 100644 vendor/github.com/jackc/pgproto3/v2/gss_response.go create mode 100644 vendor/github.com/jackc/pgtype/int4_multirange.go create mode 100644 vendor/github.com/jackc/pgtype/int8_multirange.go create mode 100644 vendor/github.com/jackc/pgtype/multirange.go create mode 100644 vendor/github.com/jackc/pgtype/num_multirange.go create mode 100644 vendor/github.com/jackc/pgtype/record_array.go create mode 100644 vendor/github.com/jackc/pgtype/typed_multirange.go.erb create mode 100644 vendor/github.com/jackc/pgtype/typed_multirange_gen.sh create mode 100644 vendor/github.com/libopenstorage/openstorage/pkg/defrag/defrag.go create mode 100644 vendor/github.com/libopenstorage/openstorage/pkg/schedule/schedule.go create mode 100644 vendor/github.com/libopenstorage/operator/pkg/mock/kubevirtmanager.mock.go create mode 100644 vendor/github.com/libopenstorage/stork/pkg/resourceutils/listResources.go create mode 100644 vendor/github.com/libopenstorage/stork/pkg/resourceutils/scaledownduringdr.go create mode 100644 vendor/github.com/libopenstorage/stork/pkg/resourceutils/scaleupduringdr.go create mode 100644 vendor/github.com/libopenstorage/stork/pkg/storkctl/actionstatus.go create mode 100644 vendor/github.com/libopenstorage/stork/pkg/storkctl/perform.go delete mode 100644 vendor/github.com/montanaflynn/stats/.travis.yml create mode 100644 vendor/github.com/montanaflynn/stats/DOCUMENTATION.md create mode 100644 vendor/github.com/montanaflynn/stats/doc.go create mode 100644 vendor/github.com/montanaflynn/stats/entropy.go create mode 100644 vendor/github.com/montanaflynn/stats/geometric_distribution.go create mode 100644 vendor/github.com/montanaflynn/stats/norm.go create mode 100644 vendor/github.com/montanaflynn/stats/ranksum.go create mode 100644 vendor/github.com/montanaflynn/stats/sigmoid.go create mode 100644 vendor/github.com/montanaflynn/stats/softmax.go create mode 100644 vendor/github.com/portworx/sched-ops/k8s/anthos/anthos.go create mode 100644 vendor/github.com/portworx/sched-ops/k8s/anthos/anthosonprem.go create mode 100644 vendor/github.com/portworx/sched-ops/k8s/anthos/clusters.go create mode 100644 vendor/github.com/portworx/sched-ops/k8s/anthos/machines.go create mode 100644 vendor/github.com/prometheus/procfs/fs_statfs_notype.go create mode 100644 vendor/github.com/prometheus/procfs/fs_statfs_type.go create mode 100644 vendor/github.com/prometheus/procfs/net_route.go create mode 100644 vendor/github.com/prometheus/procfs/net_wireless.go create mode 100644 vendor/github.com/pure-px/apis/public/portworx/common/apiv1/healthcheck.pb.go create mode 100644 vendor/github.com/pure-px/apis/public/portworx/common/apiv1/healthcheck.pb.md create mode 100644 vendor/github.com/pure-px/apis/public/portworx/common/apiv1/healthcheck.proto rename vendor/github.com/pure-px/apis/public/portworx/{pds/deploymenttopology/apiv1/deploymenttopology.swagger.json => common/apiv1/healthcheck.swagger.json} (91%) rename vendor/github.com/pure-px/apis/public/portworx/pds/{deployment => dataservicedeployment}/apiv1/Makefile (54%) create mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.pb.go create mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.pb.gw.go create mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.pb.md create mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto rename vendor/github.com/pure-px/apis/public/portworx/pds/{deployment/apiv1/deployment.swagger.json => dataservicedeployment/apiv1/dataservicedeployment.swagger.json} (62%) create mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment_grpc.pb.go create mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/Makefile create mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.pb.go create mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.pb.gw.go create mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.pb.md create mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto rename vendor/github.com/pure-px/apis/public/portworx/pds/{deploymentconfigupdate/apiv1/deploymentconfigupdate.swagger.json => dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.swagger.json} (80%) create mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate_grpc.pb.go rename vendor/github.com/pure-px/apis/public/portworx/pds/{deploymentconfigupdate => dataservicedeploymenttopology}/apiv1/Makefile (50%) create mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymenttopology/apiv1/dataservicedeploymenttopology.pb.go rename vendor/github.com/pure-px/apis/public/portworx/pds/{deploymenttopology/apiv1/deploymenttopology.pb.md => dataservicedeploymenttopology/apiv1/dataservicedeploymenttopology.pb.md} (69%) rename vendor/github.com/pure-px/apis/public/portworx/pds/{deploymenttopology/apiv1/deploymenttopology.proto => dataservicedeploymenttopology/apiv1/dataservicedeploymenttopology.proto} (56%) create mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymenttopology/apiv1/dataservicedeploymenttopology.swagger.json delete mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment.pb.go delete mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment.pb.gw.go delete mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment.pb.md delete mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment.proto delete mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment_grpc.pb.go delete mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.pb.go delete mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.pb.gw.go delete mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.pb.md delete mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto delete mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate_grpc.pb.go delete mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/deploymenttopology/apiv1/Makefile delete mode 100644 vendor/github.com/pure-px/apis/public/portworx/pds/deploymenttopology/apiv1/deploymenttopology.pb.go rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/{model_v1_deployment_meta_data.go => model_v1_data_service_deployment_meta_data.go} (60%) delete mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_status_phase.go rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/{model_v1_deployment_meta_data.go => model_v1_data_service_deployment_meta_data.go} (54%) create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_v1_phase.go rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeployment}/.travis.yml (100%) create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/README.md rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment/api_deployment_service.go => dataservicedeployment/api_data_service_deployment_service.go} (52%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeployment}/client.go (97%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeployment}/configuration.go (98%) create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_data_service_deployment_service_create_data_service_deployment_body.go rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment/model_deploymentv1_status.go => dataservicedeployment/model_dataservicedeploymentv1_status.go} (50%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeployment}/model_googlerpc_status.go (97%) create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_pds_application_selector_pds_application_filter.go rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeployment}/model_protobuf_any.go (97%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeployment}/model_protobuf_null_value.go (96%) create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_resource_selector_resource_filter.go create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_selector_filter.go create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_selector_operator.go rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeployment}/model_sort_by_field.go (96%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeployment}/model_v1_config.go (70%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeployment}/model_v1_connection_details.go (76%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeployment}/model_v1_connection_info.go (68%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment/model_v1_deployment.go => dataservicedeployment/model_v1_data_service_deployment.go} (54%) create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_data_service_deployment_credentials.go rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deploymentconfigupdate/model_v1_deployment_topology.go => dataservicedeployment/model_v1_data_service_deployment_topology.go} (60%) create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_data_service_deployment_topology_status.go create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_data_service_deployment_topology_status_health.go create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_data_service_deployment_topology_status_phase.go create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_infra_resource_type.go rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment/model_v1_pod_info.go => dataservicedeployment/model_v1_instance_info.go} (61%) create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_key_performance_indicators.go create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_list_data_service_deployments_request.go create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_list_data_service_deployments_response.go rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeployment}/model_v1_meta.go (99%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeployment}/model_v1_page_based_pagination_request.go (97%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeployment}/model_v1_page_based_pagination_response.go (98%) create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_pds_application_resource_type.go create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_pds_application_selector.go rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeployment}/model_v1_reference.go (97%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deploymentconfigupdate => dataservicedeployment}/model_v1_references.go (97%) create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_resource_selector.go create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_selector.go rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeployment}/model_v1_sort.go (97%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeployment}/model_v1_sort_order_value.go (96%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeployment}/model_v1_status_health.go (85%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeployment}/model_v1_status_phase.go (81%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeployment}/model_v1_template.go (97%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeployment}/model_v1_tls_config.go (97%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeployment}/response.go (93%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeployment}/utils.go (98%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deploymentconfigupdate => dataservicedeploymentconfigupdate}/.travis.yml (100%) create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/README.md rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deploymentconfigupdate/api_deployment_config_update_service.go => dataservicedeploymentconfigupdate/api_data_service_deployment_config_update_service.go} (55%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deploymentconfigupdate => dataservicedeploymentconfigupdate}/client.go (97%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deploymentconfigupdate => dataservicedeploymentconfigupdate}/configuration.go (97%) create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_config_of_the_data_service_deployment_for_which_config_update_is_requested_.go create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_data_service_deployment_config_update_of_the_data_service_config_deployment_update_request_.go rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deploymentconfigupdate => dataservicedeploymentconfigupdate}/model_googlerpc_status.go (97%) create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_metadata_of_the_data_service_deployment_resource_.go create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_pdsdataservicedeploymentconfigupdatev1_config.go create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_pdsdataservicedeploymentconfigupdatev1_status.go create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_pdsdataservicedeploymentconfigupdatev1_status_phase.go create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_pdsdataservicedeploymentv1_config.go rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deploymentconfigupdate => dataservicedeploymentconfigupdate}/model_protobuf_any.go (96%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deploymentconfigupdate => dataservicedeploymentconfigupdate}/model_sort_by_field.go (95%) create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_data_service_deployment_config_update.go rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment/model_v1_deployment_topology.go => dataservicedeploymentconfigupdate/model_v1_data_service_deployment_topology.go} (60%) create mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_list_data_service_deployment_config_updates_response.go rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deploymentconfigupdate => dataservicedeploymentconfigupdate}/model_v1_meta.go (98%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deploymentconfigupdate => dataservicedeploymentconfigupdate}/model_v1_page_based_pagination_request.go (97%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deploymentconfigupdate => dataservicedeploymentconfigupdate}/model_v1_page_based_pagination_response.go (98%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deploymentconfigupdate => dataservicedeploymentconfigupdate}/model_v1_reference.go (97%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deployment => dataservicedeploymentconfigupdate}/model_v1_references.go (97%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deploymentconfigupdate => dataservicedeploymentconfigupdate}/model_v1_sort.go (96%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deploymentconfigupdate => dataservicedeploymentconfigupdate}/model_v1_sort_order_value.go (95%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deploymentconfigupdate => dataservicedeploymentconfigupdate}/model_v1_template.go (97%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deploymentconfigupdate => dataservicedeploymentconfigupdate}/model_v1_tls_config.go (96%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deploymentconfigupdate => dataservicedeploymentconfigupdate}/response.go (91%) rename vendor/github.com/pure-px/platform-api-go-client/pds/v1/{deploymentconfigupdate => dataservicedeploymentconfigupdate}/utils.go (97%) delete mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/README.md delete mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_deployment_service_create_deployment_body.go delete mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_deployment_credentials.go delete mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_deployment_topology_status.go delete mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_deployment_topology_status_health.go delete mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_deployment_topology_status_phase.go delete mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_list_deployments_response.go delete mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/README.md delete mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_config_of_the_deployment_for_which_config_update_is_requested_.go delete mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_deployment_config_update_of_the_deployment_update_request_.go delete mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_pdsdeploymentconfigupdatev1_config.go delete mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_pdsdeploymentconfigupdatev1_status.go delete mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_pdsdeploymentconfigupdatev1_status_phase.go delete mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_pdsdeploymentv1_config.go delete mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_deployment_config_update.go delete mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_list_deployment_config_updates_response.go delete mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_restorability_matrix.go delete mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_restore_compatibility_condition.go delete mode 100644 vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_restore_compatibility_condition_list.go create mode 100644 vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_application_health_health.go create mode 100644 vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_application_to_be_updated_.go create mode 100644 vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_metadata_of_the_application_resource_meta__.go create mode 100644 vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_pds_properties_global.go create mode 100644 vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_v1_pds_properties.go create mode 100644 vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_v1_target_cluster_application_status.go create mode 100644 vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/model_desired_template_configuration_.go rename vendor/github.com/pure-px/platform-api-go-client/{pds/v1/deploymentconfigupdate/model_metadata_of_the_deployment_resource_.go => platform/v1/template/model_metadata_of_the_resource_.go} (66%) create mode 100644 vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/model_template_service_update_template_body.go create mode 100644 vendor/google.golang.org/api/gkeonprem/v1/gkeonprem-api.json create mode 100644 vendor/google.golang.org/api/gkeonprem/v1/gkeonprem-gen.go delete mode 100644 vendor/k8s.io/component-base/featuregate/OWNERS delete mode 100644 vendor/k8s.io/component-base/featuregate/feature_gate.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/cached/cache.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/flags.go create mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/handler/handler_cache.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/serialization.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/AUTHORS delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/CONTRIBUTORS delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/LICENSE delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/README.md delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_any.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_default.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_funcs.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_inlined.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_methods.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_time.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/decode.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/doc.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/encode.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/errors.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/fields.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/fold.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/intern.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/pools.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/state.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/token.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/value.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/schemaconv/openapi.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/schemaconv/proto_models.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/spec3/fuzz.go create mode 100644 vendor/k8s.io/kube-openapi/pkg/spec3/security_requirement.go delete mode 100644 vendor/k8s.io/kube-openapi/pkg/validation/spec/fuzz.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/api/v1beta1/cluster_phase_types.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/api/v1beta1/cluster_types.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/api/v1beta1/cluster_webhook.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/api/v1beta1/clusterclass_types.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/api/v1beta1/clusterclass_webhook.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/api/v1beta1/common_types.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/api/v1beta1/condition_consts.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/api/v1beta1/condition_types.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/api/v1beta1/conversion.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/api/v1beta1/doc.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/api/v1beta1/groupversion_info.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/api/v1beta1/machine_phase_types.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/api/v1beta1/machine_types.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/api/v1beta1/machine_webhook.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/api/v1beta1/machinedeployment_types.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/api/v1beta1/machinedeployment_webhook.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/api/v1beta1/machinehealthcheck_types.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/api/v1beta1/machinehealthcheck_webhook.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/api/v1beta1/machineset_webhook.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/api/v1beta1/zz_generated.deepcopy.go create mode 100644 vendor/sigs.k8s.io/cluster-api/errors/controllers.go rename vendor/sigs.k8s.io/{controller-runtime/pkg/controller/controllerutil/doc.go => cluster-api/errors/deployer.go} (81%) delete mode 100644 vendor/sigs.k8s.io/cluster-api/errors/kubeadmcontrolplane.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/feature/feature.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/feature/gates.go create mode 100644 vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/cluster_types.go create mode 100644 vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/common_types.go create mode 100644 vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/defaults.go rename vendor/sigs.k8s.io/cluster-api/{errors => pkg/apis/deprecated/v1alpha1}/doc.go (63%) create mode 100644 vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/machine_types.go create mode 100644 vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/machineclass_types.go create mode 100644 vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/machinedeployment_types.go rename vendor/sigs.k8s.io/cluster-api/{api/v1beta1 => pkg/apis/deprecated/v1alpha1}/machineset_types.go (61%) create mode 100644 vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/register.go create mode 100644 vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/zz_generated.deepcopy.go delete mode 100644 vendor/sigs.k8s.io/cluster-api/util/version/version.go delete mode 100644 vendor/sigs.k8s.io/controller-runtime/.gitignore delete mode 100644 vendor/sigs.k8s.io/controller-runtime/.golangci.yml delete mode 100644 vendor/sigs.k8s.io/controller-runtime/CONTRIBUTING.md delete mode 100644 vendor/sigs.k8s.io/controller-runtime/FAQ.md delete mode 100644 vendor/sigs.k8s.io/controller-runtime/Makefile delete mode 100644 vendor/sigs.k8s.io/controller-runtime/OWNERS delete mode 100644 vendor/sigs.k8s.io/controller-runtime/OWNERS_ALIASES delete mode 100644 vendor/sigs.k8s.io/controller-runtime/README.md delete mode 100644 vendor/sigs.k8s.io/controller-runtime/RELEASE.md delete mode 100644 vendor/sigs.k8s.io/controller-runtime/SECURITY_CONTACTS delete mode 100644 vendor/sigs.k8s.io/controller-runtime/TMP-LOGGING.md delete mode 100644 vendor/sigs.k8s.io/controller-runtime/VERSIONING.md delete mode 100644 vendor/sigs.k8s.io/controller-runtime/alias.go delete mode 100644 vendor/sigs.k8s.io/controller-runtime/code-of-conduct.md delete mode 100644 vendor/sigs.k8s.io/controller-runtime/doc.go delete mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/builder/controller.go delete mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/builder/doc.go delete mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/builder/options.go delete mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/builder/webhook.go delete mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/client/config/config.go delete mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/client/config/doc.go delete mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/controller/controllerutil/controllerutil.go delete mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/conversion/conversion.go delete mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/doc.go delete mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/signal.go delete mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/signal_posix.go delete mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/signal_windows.go delete mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/webhook/conversion/conversion.go delete mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/webhook/conversion/decoder.go diff --git a/Dockerfile b/Dockerfile index b1e9ab0b5..ab95930b2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -95,6 +95,10 @@ RUN apk add --no-cache openssh sshpass # Install dependancy for OCP 4.14 CLI RUN apk --update add gcompat +# Install yq +RUN wget https://github.com/mikefarah/yq/releases/download/v4.25.1/yq_linux_amd64 -O /usr/bin/yq && \ + chmod +x /usr/bin/yq + # Copy ginkgo & binaries over from previous container COPY --from=build /go/bin/ginkgo /bin/ginkgo COPY --from=build /go/src/github.com/portworx/torpedo/bin bin diff --git a/apiServer/taas/apiserver.go b/apiServer/taas/apiserver.go index 0a0ebd105..e7ab06204 100644 --- a/apiServer/taas/apiserver.go +++ b/apiServer/taas/apiserver.go @@ -33,5 +33,6 @@ func main() { router.POST("taas/stork/upgrade", utils.UpgradeStork) router.DELETE("taas/deletepod", utils.DeletePod) router.GET("taas/getpxbackupnamespace", utils.GetPxBackupNamespace) + router.POST("taas/createvolumesnapshotclass", utils.CreateVolumeSnapshotClass) log.Fatal(router.Run(":8080")) } diff --git a/apiServer/taas/utils/k8sutils.go b/apiServer/taas/utils/k8sutils.go index 8bb1b88d8..a7ce4fa93 100644 --- a/apiServer/taas/utils/k8sutils.go +++ b/apiServer/taas/utils/k8sutils.go @@ -4,6 +4,8 @@ import ( "fmt" "github.com/gin-gonic/gin" "github.com/portworx/torpedo/drivers/pds/lib" + "github.com/portworx/torpedo/pkg/log" + "github.com/portworx/torpedo/tests" v1 "k8s.io/api/core/v1" "net/http" "os/exec" @@ -117,3 +119,34 @@ func GetNodeStatus(c *gin.Context) { "DegradedNodes": degradedNodes, }) } + +// CreateVolumeSnapshotClass creates volume snapshot class +func CreateVolumeSnapshotClass(c *gin.Context) { + log.Infof("Creating volume snapshot class") + var createVolumeSnapshotClassRequest struct { + VolumeSnapshotClassName string `json:"volumeSnapshotClassName"` + Provisioner string `json:"provisioner"` + IsDefaultVolumeSnapshotClass bool `json:"isDefaultVolumeSnapshotClass"` + DeletePolicy string `json:"deletePolicy"` + } + if !checkTorpedoInit(c) { + c.JSON(http.StatusInternalServerError, gin.H{ + "error in init": fmt.Errorf("error in InitInstance()"), + }) + return + } + if err := c.BindJSON(&createVolumeSnapshotClassRequest); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error for request": err.Error()}) + return + } + if len(createVolumeSnapshotClassRequest.VolumeSnapshotClassName) == 0 || len(createVolumeSnapshotClassRequest.Provisioner) == 0 { + c.JSON(http.StatusBadRequest, gin.H{"error": "volumesnapshotclass name or provisioner cannot be empty", "vsc name": createVolumeSnapshotClassRequest.VolumeSnapshotClassName, "provisioner": createVolumeSnapshotClassRequest.Provisioner}) + return + } + _, err := tests.Inst().S.CreateVolumeSnapshotClasses(createVolumeSnapshotClassRequest.VolumeSnapshotClassName, createVolumeSnapshotClassRequest.Provisioner, createVolumeSnapshotClassRequest.IsDefaultVolumeSnapshotClass, createVolumeSnapshotClassRequest.DeletePolicy) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, gin.H{"message": fmt.Sprintf("VolumeSnapshotClass %v with provisioner %s and setting it as default: %v created successfully", createVolumeSnapshotClassRequest.VolumeSnapshotClassName, createVolumeSnapshotClassRequest.Provisioner, createVolumeSnapshotClassRequest.IsDefaultVolumeSnapshotClass)}) +} diff --git a/apiServer/taas/utils/torpedoutils.go b/apiServer/taas/utils/torpedoutils.go index 59470e18c..67cb1c791 100644 --- a/apiServer/taas/utils/torpedoutils.go +++ b/apiServer/taas/utils/torpedoutils.go @@ -199,7 +199,7 @@ func ScheduleAppsAndValidate(c *gin.Context) { } tests.Inst().AppList = requestBody.AppList - options := tests.CreateScheduleOptions("") + options := tests.CreateScheduleOptions(requestBody.NamespaceSuffix) context, err := tests.Inst().S.Schedule(requestBody.NamespaceSuffix, options) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) diff --git a/deployments/deploy-pxb-cloud.sh b/deployments/deploy-pxb-cloud.sh index e6b125519..cb5679743 100644 --- a/deployments/deploy-pxb-cloud.sh +++ b/deployments/deploy-pxb-cloud.sh @@ -356,9 +356,6 @@ if [ -z "${NODE_DRIVER}" ]; then fi if [ -n "${K8S_VENDOR}" ]; then case "$K8S_VENDOR" in - aks) - NODE_DRIVER="aks" - ;; oracle) NODE_DRIVER="oracle" ;; @@ -693,6 +690,10 @@ spec: value: "${S3_ENCRYPTION_POLICY}" - name: USE_GLOBAL_RULES value: "${USE_GLOBAL_RULES}" + - name: CUSTOM_REGISTRY + value: "${CUSTOM_REGISTRY}" + - name: CUSTOM_REPO + value: "${CUSTOM_REPO}" volumes: [${VOLUMES}] restartPolicy: Never serviceAccountName: torpedo-account diff --git a/deployments/deploy-ssh.sh b/deployments/deploy-ssh.sh index 3533bc90d..2bb50b75f 100755 --- a/deployments/deploy-ssh.sh +++ b/deployments/deploy-ssh.sh @@ -238,6 +238,11 @@ if [ -n "$ANTHOS_INST_PATH" ]; then ANTHOS_INST_PATH="${ANTHOS_INST_PATH}" fi +if [ -n "$ANTHOS_HOST_PATH" ]; then + ANTHOS_HOST_PATH="${ANTHOS_HOST_PATH}" +fi + + for i in $@ do case $i in @@ -249,7 +254,7 @@ case $i in esac done -echo "checking if we need to override test suite: ${TEST_SUITE}" +echo "Checking if we need to override test suite: ${TEST_SUITE}" # TODO: Remove this after all longevity jobs switch to 'bin/longevity.test' for TEST_SUITE. case $FOCUS_TESTS in @@ -317,6 +322,9 @@ TESTRESULTS_MOUNT="{ \"name\": \"testresults\", \"mountPath\": \"/testresults/\" AWS_VOLUME="{ \"name\": \"aws-volume\", \"configMap\": { \"name\": \"aws-cm\", \"items\": [{\"key\": \"credentials\", \"path\": \"credentials\"}, {\"key\": \"config\", \"path\": \"config\"}]} }" AWS_VOLUME_MOUNT="{ \"name\": \"aws-volume\", \"mountPath\": \"/root/.aws/\" }" +ANTHOS_VOLUME="{ \"name\": \"anthosdir\", \"hostPath\": { \"path\": \"${ANTHOS_HOST_PATH}\", \"type\": \"Directory\" } }" +ANTHOS_VOLUME_MOUNT="{ \"name\": \"anthosdir\", \"mountPath\": \"/anthosdir\" }" + VOLUMES="${TESTRESULTS_VOLUME}" if [ "${STORAGE_DRIVER}" == "aws" ]; then @@ -365,6 +373,11 @@ if [ -n "${TORPEDO_CUSTOM_PARAM_MOUNT}" ]; then VOLUME_MOUNTS="${VOLUME_MOUNTS},${TORPEDO_CUSTOM_PARAM_MOUNT}" fi +if [ -n "${ANTHOS_HOST_PATH}" ]; then + VOLUMES="${VOLUMES},${ANTHOS_VOLUME}" + VOLUME_MOUNTS="${VOLUME_MOUNTS},${ANTHOS_VOLUME_MOUNT}" +fi + BUSYBOX_IMG="busybox" if [ -n "${INTERNAL_DOCKER_REGISTRY}" ]; then BUSYBOX_IMG="${INTERNAL_DOCKER_REGISTRY}/busybox" @@ -497,7 +510,7 @@ spec: args: [ "--trace", "--timeout", "${TIMEOUT}", "$FAIL_FAST", - "--poll-progress-after", "10m", + "--poll-progress-after", "20m", --junit-report=$JUNIT_REPORT_PATH, "$FOCUS_ARG", "$SKIP_ARG", @@ -568,6 +581,7 @@ spec: "--torpedo-job-name=$TORPEDO_JOB_NAME", "--torpedo-job-type=$TORPEDO_JOB_TYPE", "--torpedo-skip-system-checks=$TORPEDO_SKIP_SYSTEM_CHECKS", + "--fa-secret=${FA_SECRET}", "$APP_DESTROY_TIMEOUT_ARG", "$SCALE_APP_TIMEOUT_ARG", ] @@ -797,6 +811,59 @@ spec: EOF +if [ "${RUN_GINKGO_COMMAND}" = "true" ]; then + torpedo_pod_command="ginkgo" + torpedo_pod_args=$(yq e '.spec.containers[] | select(.name == "torpedo") | .args[]' torpedo.yaml | sed 's/,$//') + + # This code removes the comma if the line ends with it. + # If the line is an empty string, it is quoted. + # Otherwise, the line is printed normally. + formatted_torpedo_pod_args=$(echo "$torpedo_pod_args" | awk '{ + if ($0 ~ /,$/) { + gsub(/,$/, "", $0); + printf "%s ", $0; + } else { + if ($0 == "") { + printf "\"\" "; + } else { + printf "%s ", $0; + } + } + }') + + torpedo_pod_ginkgo_command="$torpedo_pod_command $formatted_torpedo_pod_args" + echo "Formatted Ginkgo Command: $torpedo_pod_ginkgo_command" + + # This code skips a flag followed by an empty string ("") if the next token is another flag or if it is the end of the command. + # This is necessary because Torpedo does not handle empty strings as expected. + # Example: In the input ginkgo --trace --timeout "" --fail-fast ... --fa-secret "" + # --timeout "" is skipped because it is immediately followed by another flag --fail-fast + # --fa-secret "" is also skipped because it is the last token and followed by no other arguments. + cleaned_torpedo_pod_ginkgo_command=$(echo "$torpedo_pod_ginkgo_command" | awk ' + { + output = ""; + i = 1; + while (i <= NF) { + if ($(i) ~ /^--/ && $(i+1) == "\"\"") { + if (i+2 <= NF && $(i+2) ~ /^--/) { + i += 2; + continue; + } else if (i+2 > NF) { + i += 2; + continue; + } + } + output = output (output ? " " : "") $(i); + i++; + } + print output; + }') + echo "Cleaned Ginkgo Command: $cleaned_torpedo_pod_ginkgo_command" + + $cleaned_torpedo_pod_ginkgo_command + exit $? +fi + # If these are passed, we will create a docker config secret to use to pull images if [ ! -z $IMAGE_PULL_SERVER ] && [ ! -z $IMAGE_PULL_USERNAME ] && [ ! -z $IMAGE_PULL_PASSWORD ]; then echo "Adding Docker registry secret ..." diff --git a/drivers/backup/backup.go b/drivers/backup/backup.go index 25963dd40..f4afef89d 100644 --- a/drivers/backup/backup.go +++ b/drivers/backup/backup.go @@ -252,6 +252,11 @@ type Backup interface { WaitForBackupCompletion(ctx context.Context, backupName string, orgID string, timeout time.Duration, timeBeforeRetry time.Duration) error + // WaitForBackupPartialCompletion waits for backup to partial complete successfully + // or till timeout is reached. API should poll every `timeBeforeRetry` + WaitForBackupPartialCompletion(ctx context.Context, backupName string, orgID string, + timeout time.Duration, timeBeforeRetry time.Duration) error + // WaitForBackupDeletion waits for backup to be deleted successfully // or till timeout is reached. API should poll every `timeBeforeRetry WaitForBackupDeletion(ctx context.Context, backupName string, orgID string, diff --git a/drivers/backup/portworx/portworx.go b/drivers/backup/portworx/portworx.go index 5e5955d20..b338471e7 100644 --- a/drivers/backup/portworx/portworx.go +++ b/drivers/backup/portworx/portworx.go @@ -985,6 +985,61 @@ func (p *portworx) WaitForBackupCompletion( return nil } +// WaitForBackupPartialCompletion waits for backup to complete successfully +// or till timeout is reached. API should poll every `timeBeforeRetry` duration +func (p *portworx) WaitForBackupPartialCompletion( + ctx context.Context, + backupName, + orgID string, + timeout time.Duration, + timeBeforeRetry time.Duration, +) error { + + backupUID, err := p.GetBackupUID(ctx, backupName, orgID) + if err != nil { + return err + } + req := &api.BackupInspectRequest{ + Name: backupName, + OrgId: orgID, + Uid: backupUID, + } + var backupError error + f := func() (interface{}, bool, error) { + inspectBkpResp, err := p.backupManager.Inspect(ctx, req) + if err != nil { + // Error occured, just retry + return nil, true, err + } + + // Check if backup status is complete + currentStatus := inspectBkpResp.GetBackup().GetStatus().GetStatus() + if currentStatus == api.BackupInfo_StatusInfo_PartialSuccess { + // If backup is complete, dont retry again + return nil, false, nil + } else if currentStatus == api.BackupInfo_StatusInfo_Failed || + currentStatus == api.BackupInfo_StatusInfo_Aborted || + currentStatus == api.BackupInfo_StatusInfo_Invalid || + currentStatus == api.BackupInfo_StatusInfo_Success { + backupError = fmt.Errorf("backup [%v] is in [%s] state. reason: [%v]", + req.GetName(), currentStatus, + inspectBkpResp.GetBackup().GetStatus().GetReason()) + return nil, false, backupError + } + return nil, + true, + fmt.Errorf("backup [%v] is in [%s] state. Waiting to become Partial Complete", + req.GetName(), currentStatus) + } + + _, err = task.DoRetryWithTimeout(f, timeout, timeBeforeRetry) + if err != nil || backupError != nil { + return fmt.Errorf("failed to wait for backup. Error:[%v] Reason:[%v]", err, backupError) + } + + return nil +} + // WaitForBackupDeletion waits for backup to be deleted successfully // or till timeout is reached. API should poll every `timeBeforeRetry` duration func (p *portworx) WaitForBackupDeletion( diff --git a/drivers/node/node.go b/drivers/node/node.go index cfdd3a2e0..dd5a1ae14 100644 --- a/drivers/node/node.go +++ b/drivers/node/node.go @@ -5,6 +5,7 @@ import ( "time" "github.com/libopenstorage/openstorage/api" + corev1 "github.com/libopenstorage/operator/pkg/apis/core/v1" "github.com/portworx/torpedo/pkg/errors" ) @@ -201,12 +202,21 @@ type Driver interface { // DestroyVM powers VM DestroyVM(node Node) error + // MoveDisks moves disks from one node to another + MoveDisks(sourceNode Node, targetNode Node) error + + // RemoveNonRootDisks removes non-root disks from the node + RemoveNonRootDisks(node Node) error + // SystemctlUnitExist checks if a given service exists in a node SystemctlUnitExist(n Node, service string, options SystemctlOpts) (bool, error) // AddMachine adds the new machine instance to existing map AddMachine(machineName string) error + // DetachDisk vdisk from node. + DetachDrivesFromVM(stc *corev1.StorageCluster, nodeName string) error + // PowerOnVMByName power on the VM using the vm name PowerOnVMByName(vmName string) error @@ -284,6 +294,13 @@ func (d *notSupportedDriver) RebootNode(node Node, options RebootNodeOpts) error } } +func (d *notSupportedDriver) DetachDrivesFromVM(stc *corev1.StorageCluster, nodeName string) error { + return &errors.ErrNotSupported{ + Type: "Function", + Operation: "DetachDrivesFromVM()", + } +} + func (d *notSupportedDriver) RebootNodeAndWait(node Node) error { return &errors.ErrNotSupported{ Type: "Function", @@ -518,3 +535,17 @@ func (d *notSupportedDriver) GetSupportedDriveTypes() ([]string, error) { Operation: "GetSupportedDriveTypes()", } } + +func (d *notSupportedDriver) MoveDisks(sourceNode Node, targetNode Node) error { + return &errors.ErrNotSupported{ + Type: "Function", + Operation: "MoveDisks()", + } +} + +func (d *notSupportedDriver) RemoveNonRootDisks(node Node) error { + return &errors.ErrNotSupported{ + Type: "Function", + Operation: "RemoveNonRootDisks()", + } +} diff --git a/drivers/node/node_registry.go b/drivers/node/node_registry.go index 8af08d550..f1324c388 100644 --- a/drivers/node/node_registry.go +++ b/drivers/node/node_registry.go @@ -226,3 +226,17 @@ func GetNodeDetailsByNodeID(nodeID string) (Node, error) { } return Node{}, fmt.Errorf("failed to get Node Details by Node ID [%s] ", nodeID) } + +// GetPXDisabledNodes returns all the nodes where PX is disabled +func GetPXDisabledNodes() []Node { + var nodeList []Node + for _, n := range nodeRegistry { + if !n.IsStorageDriverInstalled { + // Ignore the control plane nodes + if !IsMasterNode(n) { + nodeList = append(nodeList, n) + } + } + } + return nodeList +} diff --git a/drivers/node/ssh/ssh.go b/drivers/node/ssh/ssh.go index 11b1806ed..b2f12bc17 100644 --- a/drivers/node/ssh/ssh.go +++ b/drivers/node/ssh/ssh.go @@ -820,7 +820,7 @@ func (s *SSH) doCmdSSH(n node.Node, options node.ConnectionOpts, cmd string, ign if ignoreErr == false && err != nil { log.Infof("SSH ERR: %v", err) return out, &node.ErrFailedToRunCommand{ - Addr: n.UsableAddr, + Addr: n.Name, Cause: fmt.Sprintf("failed to run command. sterr: %v, err: %v", sterr, err), } } @@ -839,6 +839,7 @@ func (s *SSH) getConnection(n node.Node, options node.ConnectionOpts) (*ssh_pkg. func (s *SSH) getConnectionOnUsableAddr(n node.Node, options node.ConnectionOpts) (*ssh_pkg.Client, error) { var sshErr error var cli interface{} + log.Debugf("checking for usable address in: %v for node [%s]", n.Addresses, n.Name) for _, addr := range n.Addresses { t := func() (interface{}, bool, error) { // check if address is responding on port 22 @@ -848,6 +849,7 @@ func (s *SSH) getConnectionOnUsableAddr(n node.Node, options node.ConnectionOpts } if cli, sshErr = task.DoRetryWithTimeout(t, options.Timeout, options.TimeBeforeRetry); sshErr == nil { n.UsableAddr = addr + log.Debugf("usable address: [%s] for node [%s]", n.UsableAddr, n.Name) return cli.(*ssh_pkg.Client), nil } } diff --git a/drivers/node/vsphere/vsphere.go b/drivers/node/vsphere/vsphere.go index f381069f8..9d6ff9fb6 100644 --- a/drivers/node/vsphere/vsphere.go +++ b/drivers/node/vsphere/vsphere.go @@ -2,14 +2,18 @@ package vsphere import ( "context" + "encoding/json" "fmt" - "github.com/vmware/govmomi/vim25/mo" "net/url" "os" + "path/filepath" "regexp" "strings" "time" + pxutil "github.com/libopenstorage/operator/drivers/storage/portworx/util" + corev1 "github.com/libopenstorage/operator/pkg/apis/core/v1" + coreops "github.com/portworx/sched-ops/k8s/core" "github.com/portworx/sched-ops/task" "github.com/portworx/torpedo/drivers/node" "github.com/portworx/torpedo/drivers/node/ssh" @@ -17,6 +21,7 @@ import ( "github.com/vmware/govmomi" "github.com/vmware/govmomi/find" "github.com/vmware/govmomi/object" + "github.com/vmware/govmomi/vim25/mo" "github.com/vmware/govmomi/vim25/types" ) @@ -43,6 +48,76 @@ const ( VMReadyRetryInterval = 5 * time.Second ) +type DriveSet struct { + // Configs describes the configuration of the drives present in this set + // The key is the volumeID + Configs map[string]DriveConfig + // NodeID is the id of the node where the drive set is being used/last + // used + NodeID string + // ReservedInstanceID if set is the instance ID of the node that's attempting to transfer the driveset to itself + ReservedInstanceID string + // SchedulerNodeName is the name of the node in scheduler context + SchedulerNodeName string + // NodeIndex is the index of the node where the drive set is being + // used/last used + NodeIndex int + // CreateTimestamp is the timestamp when the drive set was created + CreateTimestamp time.Time + // InstanceID is the cloud provider id of the instance using this drive set + InstanceID string + // Zone defines the zone in which the node exists + Zone string + // State state of the drive set from the well defined states + State string + // Labels associated with this drive set + Labels *map[string]string `json:"labels"` +} + +// DriveConfig defines the configuration for a cloud drive +type DriveConfig struct { + // Type defines the type of cloud drive + Type string + // Size defines the size of the cloud drive in Gi + Size int64 + // ID is the cloud drive id + ID string + // Path is the path where the drive is attached + Path string + // Iops is the iops that the drive supports + Iops int64 + // Vpus provide a measure of disk resources available for + // performance (IOPS/GBs) of Oracle drives. + // Oracle uses VPU in lieu of disk types. + Vpus int64 + // PXType indicates how this drive is being used by PX + PXType string + // State state of the drive config from the well defined states + State string + // Labels associated with this drive config + Labels map[string]string `json:"labels"` + // AttachOptions for cloud drives to be attached + AttachOptions map[string]string + // Provisioner is a name of provisioner which was used to create a drive + Provisioner string + // Encryption Key string to be passed in device specs + EncryptionKeyInfo string + // UUID of VMDK + DiskUUID string +} + +// DrivePaths stores the device paths of the disks which will be used by PX. +type DrivePaths struct { + // Storage drives + Storage []string + // Journal drive + Journal string + // Metadata drive + Metadata string + // Kvdb drive + Kvdb string +} + // Vsphere ssh driver type vsphere struct { ssh.SSH @@ -248,6 +323,139 @@ func (v *vsphere) connect() error { return nil } +// DetachDisk vdisks from node. +func (v *vsphere) DetachDrivesFromVM(stc *corev1.StorageCluster, nodeName string) error { + configData, err := GetCloudDriveConfigmapData(stc) + if err != nil { + err = fmt.Errorf("Failed to find configData: err %w", err) + return err + } + //Find out the instance VMUUID and then dettach. + for _, nodeConfigData := range configData { + if nodeName == nodeConfigData.SchedulerNodeName { + allDiskPaths := GetDiskPaths(nodeConfigData) + instanceId := nodeConfigData.InstanceID + for i := 0; i < len(allDiskPaths); i++ { + log.Infof("Diskpath for %v is %v and instance id is %v", nodeConfigData.NodeID, allDiskPaths[i], instanceId) + err = v.DetachDisk(instanceId, allDiskPaths[i]) + if err != nil { + //log.InfoD("Detach drives from the node failed %v", err) + err = fmt.Errorf("Detaching disk: %s on node %s failed: %w", allDiskPaths[i], nodeName, err) + return err + } + } + } else { + log.Infof(" Node Name from config %s, expected %s ", nodeConfigData.SchedulerNodeName, nodeName) + } + } + return nil +} + +func (v *vsphere) DetachDisk(vmUuid string, path string) error { + // Getting finder instance + f, err := v.getVMFinder() + if err != nil { + return err + } + // vmMap Reset to get the new valid VMs info. + vmMap = make(map[string]*object.VirtualMachine) + // Find virtual machines in datacenter + vms, err := f.VirtualMachineList(v.ctx, "*") + var vmMo *object.VirtualMachine + if err != nil { + return fmt.Errorf("failed to find any virtual machines on %s: %v", v.vsphereHostIP, err) + } + for _, vm := range vms { + if vm.UUID(v.ctx) == vmUuid { + //Found + vmMo = vm + log.Infof("VM found %v", vm) + break + } + } + //Error if not found + if vmMo == nil { + return fmt.Errorf("Virtual machine not found") + } + //Remove device and detach VM + var selectedDevice types.BaseVirtualDevice + deviceList, err := vmMo.Device(v.ctx) + if err != nil { + return fmt.Errorf("Failed to get the devices for VM: %q. err: %+v", vmMo, err) + } + log.Infof("All devices %v", deviceList) + // filter vm devices to retrieve device for the given vmdk file identified by disk path + for _, device := range deviceList { + if deviceList.TypeName(device) == "VirtualDisk" { + virtualDevice := device.GetVirtualDevice() + if backing, ok := virtualDevice.Backing.(*types.VirtualDiskFlatVer2BackingInfo); ok { + if matchVirtualDiskAndVolPath(backing.FileName, path) { + log.Infof("Found VirtualDisk backing with filename %q for diskPath %q", backing.FileName, path) + selectedDevice = device + } + } + } + } + if selectedDevice != nil { + log.Infof("Selected device %v", selectedDevice) + return vmMo.RemoveDevice(v.ctx, true, selectedDevice) + } + return fmt.Errorf("No device selected for VM: %q", vmMo) +} + +// Match the paths between fileNamePath and absolute vmdk path +func matchVirtualDiskAndVolPath(diskPath, volPath string) bool { + diskPath = strings.TrimSuffix(diskPath, filepath.Ext(diskPath)) + volPath = strings.TrimSuffix(volPath, filepath.Ext(volPath)) + return diskPath == volPath +} + +// Get virtual disk path. +// TODO need to filter only of type: DrivePaths +func GetDiskPaths(driveset DriveSet) []string { + diskPaths := []string{} + for vmdkPath, configs := range driveset.Configs { + //TODO need to change later + log.InfoD("PX type %s ", configs.PXType) + if configs.PXType == "data" { + diskPath := vmdkPath + datastore := GetDatastore(configs) + openBracketIndex := strings.Index(diskPath, "[") + closeBracketIndex := strings.Index(diskPath, "]") + // Extract the substring inside the square brackets + substring := diskPath[openBracketIndex+1 : closeBracketIndex] + // Replace the substring inside the square brackets with datastore + diskPath = strings.Replace(diskPath, substring, datastore, 1) + diskPaths = append(diskPaths, diskPath) + log.Infof("diskPath %s is of type data ", diskPath) + } + } + return diskPaths +} + +// GetDatastore +func GetDatastore(configs DriveConfig) string { + for key, val := range configs.Labels { + if key == "datastore" { + return val + } + } + return "" +} + +// GetCloudDriveConfigmapData Get clouddrive configMap data. +func GetCloudDriveConfigmapData(cluster *corev1.StorageCluster) (map[string]DriveSet, error) { + cloudDriveConfigmapName := pxutil.GetCloudDriveConfigMapName(cluster) + var PortworxNamespace = "kube-system" + cloudDriveConfifmap, _ := coreops.Instance().GetConfigMap(cloudDriveConfigmapName, PortworxNamespace) + var configData map[string]DriveSet + err := json.Unmarshal([]byte(cloudDriveConfifmap.Data["cloud-drive"]), &configData) + if err != nil { + return nil, err + } + return configData, nil +} + // AddVM adds a new VM object to vmMap func (v *vsphere) AddMachine(vmName string) error { var f *find.Finder @@ -270,6 +478,10 @@ func (v *vsphere) AddMachine(vmName string) error { return err } + if vmMo.Guest == nil { + return fmt.Errorf("failed to find guest info for virtual machine %s", vmName) + } + // Get the hostname hostname := vmMo.Guest.HostName log.Debugf("hostname: %v", hostname) @@ -358,7 +570,7 @@ func (v *vsphere) PowerOnVMByName(vmName string) error { // Make sure vmName is part of vmMap before using this method var err error - //Reestblish connection to avoid session timeout. + //Reestablish connection to avoid session timeout. err = v.connect() if err != nil { return err @@ -480,3 +692,116 @@ func init() { func (v *vsphere) GetSupportedDriveTypes() ([]string, error) { return []string{"thin", "zeroedthick", "eagerzeroedthick", "lazyzeroedthick"}, nil } + +// MoveDisks detaches all disks from the source VM and attaches it to the target +func (v *vsphere) MoveDisks(sourceNode node.Node, targetNode node.Node) error { + // Reestablish connection to avoid session timeout. + err := v.connect() + if err != nil { + return err + } + + sourceVM, ok := vmMap[sourceNode.Name] + if !ok { + return fmt.Errorf("could not fetch VM for node: %s", sourceNode.Name) + } + + targetVM, ok := vmMap[targetNode.Name] + if !ok { + return fmt.Errorf("could not fetch VM for node: %s", targetNode.Name) + } + + devices, err := sourceVM.Device(v.ctx) + if err != nil { + return err + } + + // Detach disks from source VM and attach to destination VM + var disks []*types.VirtualDisk + for _, device := range devices { + if disk, ok := device.(*types.VirtualDisk); ok { + // skip the first/root disk + if *disk.UnitNumber == 0 { + continue + } + disks = append(disks, disk) + + config := &types.VirtualMachineConfigSpec{ + DeviceChange: []types.BaseVirtualDeviceConfigSpec{ + &types.VirtualDeviceConfigSpec{ + Operation: types.VirtualDeviceConfigSpecOperationRemove, + Device: disk, + }, + }, + } + log.Debugf("Detaching disk %s from VM %s", disk.DeviceInfo.GetDescription().Label, sourceVM.Name()) + event, err := sourceVM.Reconfigure(v.ctx, *config) + if err != nil { + return err + } + + err = event.Wait(v.ctx) + if err != nil { + return err + } + } + } + + for _, disk := range disks { + config := &types.VirtualMachineConfigSpec{ + DeviceChange: []types.BaseVirtualDeviceConfigSpec{ + &types.VirtualDeviceConfigSpec{ + Operation: types.VirtualDeviceConfigSpecOperationAdd, + Device: disk, + }, + }, + } + log.Debugf("Attaching disk %s to VM %s", disk.DeviceInfo.GetDescription().Label, targetVM.Name()) + event, err := targetVM.Reconfigure(v.ctx, *config) + if err != nil { + return err + } + + err = event.Wait(v.ctx) + if err != nil { + return err + } + } + + return nil +} + +// RemoveNonRootDisks removes all disks except the root disk from the VM +func (v *vsphere) RemoveNonRootDisks(n node.Node) error { + // Reestablish connection to avoid session timeout. + err := v.connect() + if err != nil { + return err + } + + vm, ok := vmMap[n.Name] + if !ok { + return fmt.Errorf("could not fetch VM for node: %s", n.Name) + } + + devices, err := vm.Device(v.ctx) + if err != nil { + return err + } + + for _, device := range devices { + if disk, ok := device.(*types.VirtualDisk); ok { + // skip the first/root disk + if *disk.UnitNumber == 0 { + continue + } + log.Debugf("Deleting disk %s from VM %s", disk.DeviceInfo.GetDescription().Label, vm.Name()) + err = vm.RemoveDevice(v.ctx, false, disk) + if err != nil { + return err + } + } + } + + return nil +} \ No newline at end of file diff --git a/drivers/pure/flasharray/fa.go b/drivers/pure/flasharray/fa.go new file mode 100644 index 000000000..6df389187 --- /dev/null +++ b/drivers/pure/flasharray/fa.go @@ -0,0 +1,406 @@ +package flasharray + +import ( + "bytes" + "crypto/tls" + "encoding/json" + "errors" + "fmt" + "github.com/portworx/torpedo/pkg/log" + "io/ioutil" + "net/http" + "net/http/cookiejar" + "net/url" + "strings" + "time" +) + +// supportedRestVersions is used to negotiate the API version to use +var supportedRestVersions = [...]string{"2.2", "2.3", "2.4", "2.5", "2.6", "2.7", "2.8"} + +type Client struct { + MgmtIp string + ApiToken string + UserName string + Password string + RestVersion string + UserAgent string + AuthToken string + Kwargs map[string]string + + // Client object defined here + client *http.Client + Volumes *VolumeServices +} + +// Type supported is used for retrieving the support API versions from the Flash Array +type supported struct { + Versions []string `json:"version"` +} + +// Type auth is used to for the API token used in API authentication +type ApiToken struct { + Token string `json:"api_token,omitempty"` +} + +func (c *Client) CreateClientInstance() { + // Create Client Interface + cookieJar, _ := cookiejar.New(nil) + transport := &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + } + c.client = &http.Client{Transport: transport, Jar: cookieJar} +} + +func NewClient(mgmtIp string, apiToken string, userName string, password string, + restVersion string, verifyHTTPS bool, sslCert bool, + userAgent string, kwargs map[string]string) (*Client, error) { + + err := checkAuth(apiToken, userName, password) + if err != nil { + return nil, err + } + + c := &Client{MgmtIp: mgmtIp, + ApiToken: apiToken, + UserName: userName, + Password: password, + RestVersion: restVersion, + UserAgent: userAgent} + + requestKwargs := setDefaultRequestKwargs(kwargs, verifyHTTPS, sslCert) + c.Kwargs = requestKwargs + + authToken, err := c.getAuthToken(restVersion) + if err != nil { + return nil, err + } + c.AuthToken = authToken + // Create Client Instance + c.CreateClientInstance() + + // Authenticate to the API and store the session + err = c.login() + if err != nil { + return nil, err + } + + // Initialize services + c.InitializeServices() + + return c, err + +} + +// checkAuth validates +func checkAuth(apiToken string, username string, password string) error { + + if apiToken == "" && (username == "" && password == "") { + err := errors.New("[error] Must specify API token or both username and password") + return err + } + + if apiToken != "" && (username != "" && password != "") { + err := errors.New("specify only API token or both username and password") + return err + } + + return nil +} + +// Authenticate to the API and store the session +func (c *Client) login() error { + authURL := c.formatPath("auth/session", true) + data := map[string]string{"api_token": c.ApiToken} + jsonValue, _ := json.Marshal(data) + _, err := c.client.Post(authURL, "application/json", bytes.NewBuffer(jsonValue)) + if err != nil { + return err + } + return nil +} + +func (c *Client) Do(req *http.Request, v interface{}) (*http.Response, error) { + log.Infof("\nRequest [%v]\n", req) + resp, err := c.client.Do(req) + if err != nil { + log.Infof("Do request failed") + return nil, err + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("error getting auth-token,response status is [%d]", resp.StatusCode) + + } + if err := validateResponse(resp); err != nil { + return resp, err + } + + bodyBytes, _ := ioutil.ReadAll(resp.Body) + bodyString := string(bodyBytes) + err = json.Unmarshal([]byte(fmt.Sprintf("[%v]", bodyString)), v) + + if err != nil { + return nil, err + } + return resp, nil + +} + +func (c *Client) NewRequest(method string, path string, params map[string]string, data interface{}) (*http.Request, error) { + + var fpath string + if strings.HasPrefix(path, "http") { + fpath = path + } else { + fpath = c.formatPath(path, false) + } + bodyReader := bytes.NewReader([]byte{}) + baseURL, err := url.Parse(fpath) + if err != nil { + return nil, err + } + if params != nil { + ps := url.Values{} + for k, v := range params { + log.Infof("[DEBUG] key: %s, value: %s \n", k, v) + ps.Set(k, v) + } + baseURL.RawQuery = ps.Encode() + } + + log.Infof("Base URL [%v]", baseURL.String()) + + req, err := http.NewRequest(method, baseURL.String(), bodyReader) + if err != nil { + return nil, err + } + if data != nil { + jsonString, err := json.Marshal(data) + if err != nil { + return nil, err + } + req, err = http.NewRequest(method, baseURL.String(), bytes.NewBuffer(jsonString)) + if err != nil { + return nil, err + } + } + + log.Infof("Adding auth token [%v]", c.AuthToken) + req.Header.Add("x-auth-token", fmt.Sprintf("%v", c.AuthToken)) + req.Header.Add("Content-Type", "application/json") + req.Header.Add("Accept", "application/json") + if c.UserAgent != "" { + req.Header.Add("User-Agent", c.UserAgent) + } + + return req, err +} + +func (c *Client) NewGetRequests(path string, params map[string]string, data interface{}) (*http.Request, error) { + method := "GET" + httpRequest, err := c.NewRequest(method, path, params, data) + if err != nil { + return nil, err + } + return httpRequest, nil +} + +func (c *Client) getAuthToken(restVersion string) (string, error) { + + authURL, err := url.Parse(c.formatPath(fmt.Sprintf("api/%v/login", restVersion), true)) + if err != nil { + return "", err + } + log.Infof("Auth URL [%v]", authURL.String()) + + bodyReader := bytes.NewReader([]byte{}) + request, err := http.NewRequest("POST", authURL.String(), bodyReader) + if err != nil { + return "", err + } + log.Infof("API Token [%v]", c.ApiToken) + + request.Header.Add("Content-Type", "application/json") + request.Header.Add("api-token", c.ApiToken) + + log.Infof(fmt.Sprintf("API Token [%v]", c.ApiToken)) + + tempClient := &http.Client{ + // http.Client doesn't set the default Timeout, + // so it will be blocked forever without Timeout setting + Timeout: time.Second * time.Duration(10), + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + }, + } + httpResponse, err := tempClient.Do(request) + if err != nil { + return "", err + } + + // Response processing + defer httpResponse.Body.Close() + if httpResponse.StatusCode != http.StatusOK { + return "", fmt.Errorf("error getting auth-token,response status is [%d]", httpResponse.StatusCode) + + } + _, err = ioutil.ReadAll(httpResponse.Body) + if err != nil { + return "", err + } + + authToken := httpResponse.Header.Get("x-auth-token") + log.Infof("Login Success!") + return authToken, nil + +} + +// formatPath returns the formated string to be used for the base URL in +// all API calls +func (c *Client) formatPath(path string, ignoreRestVersion bool) string { + formatPath := "" + if ignoreRestVersion { + formatPath = fmt.Sprintf("https://%s/%s", c.MgmtIp, path) + } else { + formatPath = fmt.Sprintf("https://%s/api/%s/%s", c.MgmtIp, c.RestVersion, path) + } + log.Infof(formatPath) + return formatPath +} + +// getJSON is just a helper function that creates and retrieves information +// from the Flash Array before the actual session is established. +// Right now, its just grabbing the supported API versions. I should +// probably find a more graceful way to accomplish this. +func getJSON(uri string, target interface{}) error { + tr := &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + } + var c = &http.Client{Timeout: 10 * time.Second, Transport: tr} + r, err := c.Get(uri) + if err != nil { + return err + } + defer r.Body.Close() + + return json.NewDecoder(r.Body).Decode(target) +} + +func (c *Client) InitializeServices() *Client { + + // Initialize all services created here + c.Volumes = &VolumeServices{client: c} + return c +} + +// validateResponse checks that the http response is within the 200 range. +// Some functionality needs to be added here to check for some specific errors, +// and probably add the equivlents to PureError and PureHTTPError from the Python +// REST client. +func validateResponse(r *http.Response) error { + if c := r.StatusCode; 200 <= c && c <= 299 { + return nil + } + + bodyBytes, _ := ioutil.ReadAll(r.Body) + bodyString := string(bodyBytes) + return fmt.Errorf("Response code: %d, ResponeBody: %s", r.StatusCode, bodyString) +} + +// setDefaultRequestKwargs sets default request kwargs if not provided. +func setDefaultRequestKwargs(requestKwargs map[string]string, verifyHTTPS, sslCert bool) map[string]string { + if requestKwargs == nil { + requestKwargs = make(map[string]string) + } + + if _, ok := requestKwargs["verify"]; !ok { + if sslCert && verifyHTTPS { + requestKwargs["verify"] = "false" + } else { + requestKwargs["verify"] = "true" + } + } + return requestKwargs +} + +// getRestVersion retrieves and verifies the REST API version. +func getRestVersion(restVersion string, target string) (string, error) { + if restVersion != "" { + if err := checkRestVersion(restVersion, target); err != nil { + return "", err + } + } else { + r, err := chooseRestVersion(target) + if err != nil { + return "", err + } + restVersion = r + } + log.Infof("Selected rest Version is [%v]", restVersion) + return restVersion, nil +} + +// checkRestVersion checks if the specified REST API version is supported by the FlashArray and the library. +func checkRestVersion(version string, target string) error { + // Construct the URL for checking supported API versions + checkURL := fmt.Sprintf("https://%s/api/api_version", target) + log.Infof(fmt.Sprintf("URL is [%v]", checkURL)) + // Retrieve supported API versions from the FlashArray + supported := &supported{} + err := getJSON(checkURL, supported) + if err != nil { + return err + } + + // Check if the specified version is supported by the FlashArray + arraySupported := false + for _, v := range supported.Versions { + if version == v { + arraySupported = true + break + } + } + if !arraySupported { + return errors.New("[error] Array is incompatible with REST API version " + version) + } + + // Check if the specified version is supported by the library + librarySupported := false + for _, v := range supportedRestVersions { + if version == v { + librarySupported = true + break + } + } + if !librarySupported { + return errors.New("[error] Library is incompatible with REST API version " + version) + } + + return nil +} + +// chooseRestVersion negotiates the highest REST API version supported by the library and the FlashArray. +func chooseRestVersion(target string) (string, error) { + // Construct the URL for checking supported API versions + checkURL := fmt.Sprintf("https://%s/api/api_version", target) + + // Retrieve supported API versions from the FlashArray + supported := &supported{} + err := getJSON(checkURL, supported) + if err != nil { + return "", err + } + + // Find the highest supported API version + for i := len(supported.Versions) - 1; i >= 0; i-- { + for _, version := range supportedRestVersions { + if supported.Versions[i] == version { + return version, nil + } + } + } + + // If no compatible version found, return an error + return "", errors.New("[error] Array is incompatible with all supported REST API versions") +} diff --git a/drivers/pure/flasharray/volumeTypes.go b/drivers/pure/flasharray/volumeTypes.go new file mode 100644 index 000000000..f892a96f7 --- /dev/null +++ b/drivers/pure/flasharray/volumeTypes.go @@ -0,0 +1,82 @@ +package flasharray + +type Space struct { + DataReduction float64 `json:"data_reduction"` + Shared *string `json:"shared"` + Snapshots int `json:"snapshots"` + System *string `json:"system"` + ThinProvisioning float64 `json:"thin_provisioning"` + TotalPhysical int64 `json:"total_physical"` + TotalProvisioned int64 `json:"total_provisioned"` + TotalReduction float64 `json:"total_reduction"` + Unique int64 `json:"unique"` + Virtual int64 `json:"virtual"` +} + +type Source struct { + Name *string `json:"name"` + ID *string `json:"id"` +} + +type Pod struct { + Name *string `json:"name"` + ID *string `json:"id"` +} + +type QoS struct { + BandwidthLimit uint64 `json:"bandwidth_limit"` + IopsLimit uint64 `json:"iops_limit"` +} + +type VolumeGroup struct { + Name *string `json:"name"` + ID *string `json:"id"` +} + +type Item struct { + Space Space `json:"space"` + ConnectionCount int `json:"connection_count"` + Provisioned int64 `json:"provisioned"` + Created int64 `json:"created"` + Source Source `json:"source"` + Name string `json:"name"` + ID string `json:"id"` + Serial string `json:"serial"` + Destroyed bool `json:"destroyed"` + TimeRemaining *string `json:"time_remaining"` + HostEncryptionKeyStatus string `json:"host_encryption_key_status"` + RequestedPromotionState string `json:"requested_promotion_state"` + PromotionStatus string `json:"promotion_status"` + Pod Pod `json:"pod"` + QoS QoS `json:"qos"` + Subtype string `json:"subtype"` + VolumeGroup VolumeGroup `json:"volume_group"` +} + +type Total struct { + Space Space `json:"space"` + ConnectionCount *int `json:"connection_count"` + Provisioned int64 `json:"provisioned"` + Created *int64 `json:"created"` + Source Source `json:"source"` + Name *string `json:"name"` + ID *string `json:"id"` + Serial *string `json:"serial"` + Destroyed *bool `json:"destroyed"` + TimeRemaining *string `json:"time_remaining"` + HostEncryptionKeyStatus *string `json:"host_encryption_key_status"` + RequestedPromotionState *string `json:"requested_promotion_state"` + PromotionStatus *string `json:"promotion_status"` + Pod Pod `json:"pod"` + QoS QoS `json:"qos"` + Subtype *string `json:"subtype"` + VolumeGroup VolumeGroup `json:"volume_group"` +} + +type VolResponse struct { + ContinuationToken *string `json:"continuation_token"` + Items []Item `json:"items"` + MoreItemsRemaining bool `json:"more_items_remaining"` + Total []Total `json:"total"` + TotalItemCount *int `json:"total_item_count"` +} diff --git a/drivers/pure/flasharray/volumes.go b/drivers/pure/flasharray/volumes.go new file mode 100644 index 000000000..3b9a2ccc7 --- /dev/null +++ b/drivers/pure/flasharray/volumes.go @@ -0,0 +1,18 @@ +package flasharray + +type VolumeServices struct { + client *Client +} + +func (vols *VolumeServices) ListAllAvailableVolumes(params map[string]string, data interface{}) ([]VolResponse, error) { + req, err := vols.client.NewRequest("GET", "volumes", params, data) + if err != nil { + return nil, err + } + m := []VolResponse{} + _, err = vols.client.Do(req, &m) + if err != nil { + return nil, err + } + return m, nil +} diff --git a/drivers/pure/flashblade/fb.go b/drivers/pure/flashblade/fb.go index ed7a5ed83..fee7dd91d 100644 --- a/drivers/pure/flashblade/fb.go +++ b/drivers/pure/flashblade/fb.go @@ -16,7 +16,7 @@ import ( ) // supportedRestVersions is used to negotiate the API version to use -var supportedRestVersions = [...]string{"1.0", "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.8.1", "1.9", "1.10", "1.11", "1.12", "2.0", "2.1", "2.2", "2.3", "2.4"} +var supportedRestVersions = [...]string{"2.0", "2.1", "2.2", "2.3", "2.4"} type Client struct { MgmtIp string diff --git a/drivers/scheduler/anthos/anthos.go b/drivers/scheduler/anthos/anthos.go index 5eab158c0..86976f190 100644 --- a/drivers/scheduler/anthos/anthos.go +++ b/drivers/scheduler/anthos/anthos.go @@ -1,9 +1,9 @@ package anthos import ( + "context" "encoding/json" "fmt" - "github.com/portworx/torpedo/pkg/errors" "io/ioutil" "os" "os/exec" @@ -14,16 +14,22 @@ import ( "strings" "time" + "github.com/portworx/torpedo/pkg/errors" + "github.com/hashicorp/go-version" - "github.com/portworx/sched-ops/k8s/core" + anthosops "github.com/portworx/sched-ops/k8s/anthos" k8s "github.com/portworx/sched-ops/k8s/core" + "github.com/portworx/sched-ops/k8s/operator" "github.com/portworx/torpedo/drivers/node" "github.com/portworx/torpedo/drivers/node/ssh" "github.com/portworx/torpedo/drivers/scheduler" kube "github.com/portworx/torpedo/drivers/scheduler/k8s" + "github.com/portworx/torpedo/drivers/volume/portworx/schedops" "github.com/portworx/torpedo/pkg/log" + gkeonprem "google.golang.org/api/gkeonprem/v1" "gopkg.in/yaml.v2" corev1 "k8s.io/api/core/v1" + "sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1" ) type Gcp struct { @@ -117,6 +123,11 @@ const ( logCollectFrequencyDuration = 15 * time.Minute defaultTestConnectionTimeout = 15 * time.Minute defaultWaitUpgradeRetry = 10 * time.Second + skipReconcilePreflightFlag = "--skip-reconcile-before-preflight" + project = "portworx-eng" + location = "us-west1" + storagePDBMinAvailable = "portworx.io/storage-pdb-min-available" + clusterNameSpace = "default" ) var ( @@ -168,6 +179,7 @@ type AnthosInstance struct { type anthos struct { version string kube.K8s + Ops anthosops.Ops adminWsSSHInstance *ssh.SSH instances []AnthosInstance adminWsNode *node.Node @@ -175,6 +187,7 @@ type anthos struct { instPath string confPath string adminClusterUpgrade bool + clusterName string } // Init Initialize the driver @@ -185,6 +198,7 @@ func (anth *anthos) Init(schedOpts scheduler.InitOptions) error { if schedOpts.AnthosInstancePath == "" { return fmt.Errorf("anthos conf path is needed for anthos scheduler") } + anth.Ops = anthosops.Instance() anth.adminWsSSHInstance = &ssh.SSH{} anth.adminWsNode = &node.Node{} anth.instPath = schedOpts.AnthosInstancePath @@ -211,7 +225,10 @@ func (anth *anthos) Init(schedOpts scheduler.InitOptions) error { if len(schedOpts.UpgradeHops) > 0 && len(strings.Split(schedOpts.UpgradeHops, ",")) > 1 { anth.adminClusterUpgrade = true } - log.Infof("Skip admin cluster upgrade is: [%t]", anth.adminClusterUpgrade) + if err := anth.getUserClusterName(); err != nil { + return err + } + log.Infof("Admin cluster upgrade is: [%t]", anth.adminClusterUpgrade) return nil } @@ -312,7 +329,7 @@ func (anth *anthos) updateNodeInstance() error { log.Info("Updating node Instance") var startAdminNodeIndex int = 2 var lastAdminNodeIndex int = 4 - k8sOps, err := core.NewInstanceFromConfigFile(path.Join(anth.confPath, kubeConfig)) + k8sOps, err := k8s.NewInstanceFromConfigFile(path.Join(anth.confPath, kubeConfig)) if err != nil { return err } @@ -461,13 +478,9 @@ func (anth *anthos) upgradeUserCluster(version string) error { logChan := make(chan bool) enableControlplaneV2 := false controlPlaneEnableReg := regexp.MustCompile(`enableControlplaneV2:\s+true`) - userClusterName, err := anth.getUserClusterName() - if err != nil { - return err - } // Describe user cluster command help to identify dataplanev2 cluster cmd := fmt.Sprintf("%s --kubeconfig %s --cluster %s", - userClusterDescribeCmd, adminKubeconfPath, userClusterName) + userClusterDescribeCmd, adminKubeconfPath, anth.clusterName) log.Debugf("Executing command: %s", cmd) out, err := anth.execOnAdminWSNode(cmd) if err != nil { @@ -479,13 +492,13 @@ func (anth *anthos) upgradeUserCluster(version string) error { enableControlplaneV2 = true } - upgradeLogger := anth.startLogCollector(logChan, userClusterName, enableControlplaneV2) + upgradeLogger := anth.startLogCollector(logChan, anth.clusterName, enableControlplaneV2) cmd = fmt.Sprintf("%s%s.tgz --kubeconfig %s", upgradePrepareCmd, version, adminKubeconfPath) if out, err := anth.execOnAdminWSNode(cmd); err != nil { return fmt.Errorf("preparing user cluster for upgrade is failing: [%s]. Err: (%v)", out, err) } - cmd = fmt.Sprintf("%s --kubeconfig %s --config %s", - upgradeUserClusterCmd, adminKubeconfPath, userClusterConfPath) + cmd = fmt.Sprintf("%s --kubeconfig %s --config %s %s", + upgradeUserClusterCmd, adminKubeconfPath, userClusterConfPath, skipReconcilePreflightFlag) if out, err := anth.execOnAdminWSNode(cmd); err != nil { return fmt.Errorf("upgrading user cluster is failing: [%s]. Err: (%v)", out, err) } @@ -588,51 +601,47 @@ func (anth *anthos) unsetUserNameAndKey() error { // checkUserClusterNodesUpgradeTime measure the time taken by each node and report error func (anth *anthos) checkUserClusterNodesUpgradeTime() error { log.Info("Validating user cluster nodes upgrade time") - userCluster, err := anth.getUserClusterName() + initNodeUpgradeTime, err := anth.getStartTimeForNodePoolUpgrade(anth.clusterName) if err != nil { return err } - initNodeUpgradeTime, err := anth.getStartTimeForNodePoolUpgrade(userCluster) + log.Debugf("User cluster node pool upgrade started at: [%v]", initNodeUpgradeTime.Format(time.UnixDate)) + storagePdbVal, err := getStoragePDBMinAvailableSet() if err != nil { return err } - log.Debugf("User cluster node pool upgrade started at: [%v]", initNodeUpgradeTime.Format(time.UnixDate)) + log.Debugf("Storage PDB value is set to : [%d]", storagePdbVal) sortedNodes, err := getNodesSortByAge() if err != nil { return err } - - // As PX support one extra static IP across all node pool - // this means Anthos node upgrade will be sequential - startTime := initNodeUpgradeTime - errorMessages := make([]string, 0) - for _, node := range sortedNodes { - diff := node.CreationTimestamp.Sub(startTime) - log.Infof("[%s] node took: [%v] time to upgrade the node", node.Name, diff) - if diff > errorTimeDuration { - errorMessages = append(errorMessages, fmt.Sprintf("[%s] node upgrade took: [%v] minutes which is longer than the expected timeout value: [%v]", - node.Name, diff, errorTimeDuration)) - } - startTime = node.CreationTimestamp.Time + nPoolsMap, err := getNodePoolMap(sortedNodes) + if err != nil { + return fmt.Errorf("failed to get number of node pools for a cluster: %s. Err: %v", anth.clusterName, err) } - if len(errorMessages) > 0 { - for _, errMsg := range errorMessages { - log.Errorf(errMsg) - } - return fmt.Errorf("anthos node upgrade time exceeded the expected time") + log.Debugf("User cluster contains [%d] node pools", len(nPoolsMap)) + maxNode, err := anth.getMaxNodesUpgraded(len(sortedNodes), storagePdbVal, len(nPoolsMap)) + if err != nil { + return fmt.Errorf("failed to get max number of nodes simulataneously upgraded") } - return nil + log.Debugf("[%d] number of nodes can be upgraded at same time", maxNode) + if len(nPoolsMap) > 1 && storagePdbVal > 1 && maxNode > 1 { + log.Info("Last Anthos cluster upgrade was parallel upgrade") + return getParallelUpgradeTime(initNodeUpgradeTime, sortedNodes, maxNode) + } + + return getSequentialUpgradeTime(initNodeUpgradeTime, sortedNodes) } -// getUserClusterName return Anthos user cluster name -func (anth *anthos) getUserClusterName() (string, error) { +// getUserClusterName update Anthos cluster name +func (anth *anthos) getUserClusterName() error { log.Info("Retrieving user cluster name") var userCluster string // Listing user cluster to get user cluster name cmd := fmt.Sprintf("%s --kubeconfig %s clusters |grep -v NAME", listUserClustersCmd, adminKubeconfPath) out, err := anth.execOnAdminWSNode(cmd) if err != nil { - return "", fmt.Errorf("listing user clusters is failing: [%s]. Err: (%v)", out, err) + return fmt.Errorf("listing user clusters is failing: [%s]. Err: (%v)", out, err) } userClusters := strings.Split(out, "\n") for _, cluster := range userClusters { @@ -641,10 +650,11 @@ func (anth *anthos) getUserClusterName() (string, error) { break } if userCluster == "" { - return "", fmt.Errorf("failed to find user cluster name") + return fmt.Errorf("failed to find user cluster name") } log.Infof("Successfully retrieved user cluster name: [%s]", userCluster) - return userCluster, nil + anth.clusterName = userCluster + return nil } // getStartTimeForNodePoolUpgrade return start time when node pool upgrade started @@ -689,7 +699,7 @@ func (anth *anthos) updateFileOwnership(dirPath string) error { // dumpUpgradeLogs collects upgrade logs func (anth *anthos) dumpUpgradeLogs(clusterName string, enableControlplaneV2 bool) error { adminKubeConfPath := path.Join(anth.confPath, kubeConfig) - adminInstance, err := core.NewInstanceFromConfigFile(adminKubeConfPath) + adminInstance, err := k8s.NewInstanceFromConfigFile(adminKubeConfPath) if err != nil { return fmt.Errorf("creating admin cluster instance failing with error. Err: (%v)", err) } @@ -769,7 +779,6 @@ func (anth *anthos) startLogCollector(logChan chan bool, clusterName string, ena } }() return logTicker - } // stopLogCollector stop ticker for collecting upgrade logs @@ -779,17 +788,110 @@ func (anth *anthos) stopLogCollector(logTicker *time.Ticker, logChan chan bool) logChan <- true } -// getNodesSortByAge return sorted node list by their age +// GetNumberOfNodePool return number of nodes pools in a cluster +func (anth *anthos) GetNumberOfNodePools() (int, error) { + nodePoolList, err := anth.Ops.ListVMwareNodePools(project, location, anth.clusterName) + if err != nil { + return -1, err + } + listNodePoolResp := &gkeonprem.ListVmwareNodePoolsResponse{} + if err = json.Unmarshal(nodePoolList, listNodePoolResp); err != nil { + return -1, fmt.Errorf("fail to unmarshal list node pool response. Err: %v", err) + } + return len(listNodePoolResp.VmwareNodePools), nil +} + +// getMaxNodesUpgraded return max number of nodes can be upgraded at a time. +func (anth *anthos) getMaxNodesUpgraded(totalNodes int, storagePdbVal int, nodepoolCount int) (int, error) { + maxNodesCanBeUpgraded := 1 + // Retrieving extra static IPs for a upgrade + clusterProviderSpec, err := anth.GetProviderSpec() + if err != nil { + return -1, err + } + if clusterProviderSpec.NetworkSpec.ReservedAddresses != nil { + extraStaticIP := len(clusterProviderSpec.NetworkSpec.ReservedAddresses) - totalNodes + if extraStaticIP > maxNodesCanBeUpgraded { + maxNodesCanBeUpgraded = extraStaticIP + } + } + + // For DHCP IPs clusterProviderSpec.NetworkSpec.ReservedAddresses will be nil + if clusterProviderSpec.NetworkSpec.ReservedAddresses == nil && (nodepoolCount <= storagePdbVal || storagePdbVal == 0) { + return nodepoolCount, nil + } + + if storagePdbVal == 0 { + return minInt(maxNodesCanBeUpgraded, nodepoolCount), nil + } + + minVal := minInt(maxNodesCanBeUpgraded, storagePdbVal) + + return minInt(minVal, nodepoolCount), nil +} + +// GetVMWareCluster return VMwareCluster +func (anth *anthos) GetVMwareCluster() (*gkeonprem.VmwareCluster, error) { + vmwareClusterResp := &gkeonprem.VmwareCluster{} + vmwareCluster, err := anth.Ops.GetVMwareCluster(project, location, anth.clusterName) + if err != nil { + return vmwareClusterResp, err + } + if err = json.Unmarshal(vmwareCluster, vmwareClusterResp); err != nil { + return vmwareClusterResp, fmt.Errorf("fail to unmarshal vmware cluster response. Err: %v", err) + } + log.Debugf("Anthos VMware cluster: %v", vmwareCluster) + return vmwareClusterResp, nil +} + +// GetCluster return cluster objects +func (anth *anthos) GetCluster() (*v1alpha1.Cluster, error) { + cluster, err := anth.Ops.GetCluster(context.TODO(), anth.clusterName, clusterNameSpace) + if err != nil { + return nil, fmt.Errorf("unable to get cluster: [%s] in namespace: [%s]. Err: %v", anth.clusterName, clusterNameSpace, err) + } + return cluster, nil +} + +// GetClusterStatus return cluster status +func (anth *anthos) GetClusterStatus() (*v1alpha1.ClusterStatus, error) { + clusterStatus, err := anth.Ops.GetClusterStatus(context.TODO(), anth.clusterName, clusterNameSpace) + if err != nil { + return nil, fmt.Errorf("unable to get cluster status for cluster: [%s]. Err: %v", anth.clusterName, err) + } + log.Debugf("Anthos cluster status: %v", clusterStatus) + return clusterStatus, nil +} + +// ListCluster list anthos clusters +func (anth *anthos) ListCluster() error { + clustersList, err := anth.Ops.ListCluster(context.TODO()) + if err != nil { + return fmt.Errorf("unable to list cluster. Err: %v", err) + } + log.Debugf("List of clusters are: %v", clustersList) + return nil +} + +// GetClusterProviderSpec return providerSpec for anthos cluster +func (anth *anthos) GetProviderSpec() (*anthosops.ClusterProviderConfig, error) { + clusterProviderSpec, err := anth.Ops.GetClusterProviderSpec(context.TODO(), anth.clusterName, clusterNameSpace) + if err != nil { + return nil, err + } + log.Debugf("clusters provider spec: %v", clusterProviderSpec) + return clusterProviderSpec, nil +} + +// getNodesSortByAge return node pool map by their age func getNodesSortByAge() ([]corev1.Node, error) { nodeList, err := k8sCore.GetNodes() if err != nil { return nil, err } - sort.Slice(nodeList.Items, func(i, j int) bool { return nodeList.Items[i].CreationTimestamp.Before(&nodeList.Items[j].CreationTimestamp) }) - log.Infof("Successfully retrieved sorted nodes: [%v]", nodeList.Items) return nodeList.Items, nil } @@ -845,28 +947,127 @@ func getExecPath() (string, error) { } -func (anth *anthos) DeleteNode(node node.Node) error { - // TODO: Add implementation - return &errors.ErrNotSupported{ - Type: "Function", - Operation: "DeleteNode()", +// getStoragePDBMinAvailableSet return storage min PDB value if set else "" +func getStoragePDBMinAvailableSet() (int, error) { + pxOperator := operator.Instance() + schedOps, err := schedops.Get(SchedName) + if err != nil { + return -1, fmt.Errorf("failed to get driver for scheduler: %s. Err: %v", SchedName, err) } + pxNameSpace, err := schedOps.GetPortworxNamespace() + if err != nil { + return -1, fmt.Errorf("failed to get portworx namespace. Err: %v", err) + } + stcList, err := pxOperator.ListStorageClusters(pxNameSpace) + if err != nil { + return -1, fmt.Errorf("failed get StorageCluster list from namespace [%s], Err: %v", pxNameSpace, err) + } + + stc, err := pxOperator.GetStorageCluster(stcList.Items[0].Name, stcList.Items[0].Namespace) + if err != nil { + return -1, fmt.Errorf("failed to get StorageCluster [%s] from namespace [%s], Err: %v", stcList.Items[0].Name, stcList.Items[0].Namespace, err.Error()) + } + val, ok := stc.Annotations[storagePDBMinAvailable] + if !ok { + return 0, nil + } + pdbVal, err := strconv.Atoi(val) + if err != nil { + return -1, fmt.Errorf("failed to parse pdb value. Err: %v", err) + } + return pdbVal, nil } -func (anth *anthos) GetZones() ([]string, error) { - // TODO: Add implementation - return nil, &errors.ErrNotSupported{ - Type: "Function", - Operation: "GetZones()", +// getNodePoolMap return node pool map +func getNodePoolMap(nodeList []corev1.Node) (map[int][]corev1.Node, error) { + nodePoolMap := make(map[int][]corev1.Node) + for _, node := range nodeList { + poolVal, ok := node.Labels[labelKey] + if ok && poolVal != "" { + key, err := strconv.Atoi(strings.Split(poolVal, "-")[1]) + if err != nil { + return nodePoolMap, err + } + poolList, ok := nodePoolMap[key] + if !ok { + poolList = make([]corev1.Node, 0) + } + nodePoolMap[key] = append(poolList, node) + } + } + for _, poolNodeList := range nodePoolMap { + sort.Slice(poolNodeList, func(i, j int) bool { + return poolNodeList[i].CreationTimestamp.Before(&poolNodeList[j].CreationTimestamp) + }) } + return nodePoolMap, nil } -func (anth *anthos) GetASGClusterSize() (int64, error) { - // TODO: Add implementation - return 0, &errors.ErrNotSupported{ - Type: "Function", - Operation: "GetASGClusterSize()", +// getSequentialUpgradeTime calculate upgrade times for sequential upgrade +func getSequentialUpgradeTime(upgradeStartTime time.Time, sortedNodes []corev1.Node) error { + return printUpgradeTimeExceededErrorMessage(printNodeUpgradeTime(upgradeStartTime, sortedNodes)) +} + +// getParallelUpgradeTime calculate upgrade times for parallel upgrade +func getParallelUpgradeTime(upgradeStartTime time.Time, sortedNodes []corev1.Node, maxNode int) error { + errorMessages := make([]string, 0) + timeQueue := make([]time.Time, maxNode) + nodePoolMap, err := getNodePoolMap(sortedNodes) + if err != nil { + return fmt.Errorf("fail to retrieve node pool map. Err: %v", err) + } + log.Debugf("Retrieved node pool map: %v", nodePoolMap) + for pool := 0; pool < len(nodePoolMap); pool++ { + startTime := upgradeStartTime + // When number of pools is more than the number of nodes can be upgraded simultaneously. + // In that case upgrade will not start simultaneously in all node pools. + // Finding the new upgrade start time for node pools where upgrade will start later + if pool > maxNode { + if pool%maxNode == 0 { + sort.Slice(timeQueue, func(i, j int) bool { + return timeQueue[i].Before(timeQueue[j]) + }) + } + startTime = timeQueue[0] + timeQueue = timeQueue[1:] + } + timeQueue = append(timeQueue, nodePoolMap[pool][len(nodePoolMap[pool])-1].CreationTimestamp.Time) + errorMessages = append(errorMessages, printNodeUpgradeTime(startTime, nodePoolMap[pool])...) + } + return printUpgradeTimeExceededErrorMessage(errorMessages) +} + +// printNodeUpgradeTime print time taken by node upgrade +func printNodeUpgradeTime(startTime time.Time, sortedNodes []corev1.Node) []string { + errorMessages := make([]string, 0) + for _, node := range sortedNodes { + diff := node.CreationTimestamp.Sub(startTime) + log.Infof("[%s] node took: [%v] time to upgrade the node", node.Name, diff) + if diff > errorTimeDuration { + errorMessages = append(errorMessages, fmt.Sprintf("[%s] node upgrade took: [%v] minutes which is longer than the expected timeout value: [%v]", + node.Name, diff, errorTimeDuration)) + } + startTime = node.CreationTimestamp.Time + } + return errorMessages +} + +// printUpgradeTimeExceededErrorMessage print error messages +func printUpgradeTimeExceededErrorMessage(errorMessages []string) error { + if len(errorMessages) > 0 { + for _, errMsg := range errorMessages { + log.Errorf(errMsg) + } + return fmt.Errorf("anthos node upgrade time exceeded the expected time") + } + return nil +} + +func minInt(x int, y int) int { + if x < y { + return x } + return y } func (anth *anthos) SetASGClusterSize(perZoneCount int64, timeout time.Duration) error { diff --git a/drivers/scheduler/dcos/dcos.go b/drivers/scheduler/dcos/dcos.go index 4e896cba6..8ab686f52 100644 --- a/drivers/scheduler/dcos/dcos.go +++ b/drivers/scheduler/dcos/dcos.go @@ -974,6 +974,14 @@ func (d *dcos) CreateCsiSnapshotClass(snapClassName string, deleionPolicy string } } +func (d *dcos) CreateVolumeSnapshotClasses(snapClassName string, provisioner string, isDefault bool, deletePolicy string) (*volsnapv1.VolumeSnapshotClass, error) { + //CreateVolumeSnapshotClasses is not supported + return nil, &errors.ErrNotSupported{ + Type: "Function", + Operation: "CreateVolumeSnapshotClasses()", + } +} + func (d *dcos) CreateCsiSnapshot(name string, namespace string, class string, pvc string) (*volsnapv1.VolumeSnapshot, error) { //CreateCsiSanpshot is not supported return nil, &errors.ErrNotSupported{ @@ -998,7 +1006,7 @@ func (d *dcos) CSICloneTest(ctx *scheduler.Context, request scheduler.CSICloneRe } } -func (d *dcos) WaitForSinglePVCToBound(pvcName, namespace string) error { +func (d *dcos) WaitForSinglePVCToBound(pvcName, namespace string, timeout int) error { //WaitForSinglePVCToBound is not supported for DCOS return &errors.ErrNotSupported{ Type: "Function", diff --git a/drivers/scheduler/k8s/k8s.go b/drivers/scheduler/k8s/k8s.go index f2cb04c6b..ac8953161 100644 --- a/drivers/scheduler/k8s/k8s.go +++ b/drivers/scheduler/k8s/k8s.go @@ -883,6 +883,7 @@ func (k *K8s) parseK8SNode(n corev1.Node) node.Node { } func isCsiApp(options scheduler.ScheduleOptions, appName string) bool { + log.Debugf("checking for app [%s] in [%v] for csi enabled apps", appName, options.CsiAppKeys) for _, app := range options.CsiAppKeys { if app == appName { return true @@ -901,6 +902,7 @@ func (k *K8s) Schedule(instanceID string, options scheduler.ScheduleOptions) ([] return nil, err } if isCsiApp(options, key) { + log.Debugf("app [%s] is csi enabled", key) appSpec.IsCSI = true } apps = append(apps, appSpec) @@ -1922,8 +1924,8 @@ func (k *K8s) createStorageObject(spec interface{}, ns *corev1.Namespace, app *s if obj, ok := spec.(*storageapi.StorageClass); ok { obj.Namespace = ns.Name - if options.StorageProvisioner == "" { - if volume.GetStorageProvisioner() != PortworxStrict { + if volume.GetStorageProvisioner() != PortworxStrict { + if options.StorageProvisioner == string(volume.DefaultStorageProvisioner) || options.StorageProvisioner == CsiProvisioner { if app.IsCSI { obj.Provisioner = CsiProvisioner } else { @@ -2218,44 +2220,57 @@ func (k *K8s) addSecurityAnnotation(spec interface{}, configMap *corev1.ConfigMa encryptionFlag = true } + setSecureParams := func(obj *storageapi.StorageClass) { + if encryptionFlag { + log.Infof("Adding encryption parameter to storage class app %s", app.Key) + obj.Parameters[encryptionName] = "true" + } + if app.IsCSI { + obj.Parameters[CsiProvisionerSecretName] = configMap.Data[secretNameKey] + obj.Parameters[CsiProvisionerSecretNamespace] = configMap.Data[secretNamespaceKey] + obj.Parameters[CsiNodePublishSecretName] = configMap.Data[secretNameKey] + obj.Parameters[CsiNodePublishSecretNamespace] = configMap.Data[secretNamespaceKey] + obj.Parameters[CsiControllerExpandSecretName] = configMap.Data[secretNameKey] + obj.Parameters[CsiControllerExpandSecretNamespace] = configMap.Data[secretNamespaceKey] + } + if strings.Contains(volume.GetStorageProvisioner(), "pxd") { + if secretNameKeyFlag { + obj.Parameters[CsiProvisionerSecretName] = configMap.Data[secretNameKey] + obj.Parameters[CsiNodePublishSecretName] = configMap.Data[secretNameKey] + obj.Parameters[CsiControllerExpandSecretName] = configMap.Data[secretNameKey] + } + if secretNamespaceKeyFlag { + obj.Parameters[CsiProvisionerSecretNamespace] = configMap.Data[secretNamespaceKey] + obj.Parameters[CsiNodePublishSecretNamespace] = configMap.Data[secretNamespaceKey] + obj.Parameters[CsiControllerExpandSecretNamespace] = configMap.Data[secretNamespaceKey] + } + } else { + if secretNameKeyFlag { + obj.Parameters[secretName] = configMap.Data[secretNameKey] + } + if secretNamespaceKeyFlag { + obj.Parameters[secretNamespace] = configMap.Data[secretNamespaceKey] + } + } + } + if obj, ok := spec.(*storageapi.StorageClass); ok { - //secure-apps list is provided for which volumes should be encrypted - if len(k.secureApps) > 0 || k.secretConfigMapName != "" { - if k.isSecureEnabled(app.Key, k.secureApps) || k.secretConfigMapName != "" { - if obj.Parameters == nil { - obj.Parameters = make(map[string]string) - } - if encryptionFlag { - log.Infof("Adding encryption parameter to storage class app %s", app.Key) - obj.Parameters[encryptionName] = "true" - } - if app.IsCSI { - obj.Parameters[CsiProvisionerSecretName] = configMap.Data[secretNameKey] - obj.Parameters[CsiProvisionerSecretNamespace] = configMap.Data[secretNamespaceKey] - obj.Parameters[CsiNodePublishSecretName] = configMap.Data[secretNameKey] - obj.Parameters[CsiNodePublishSecretNamespace] = configMap.Data[secretNamespaceKey] - } - if strings.Contains(volume.GetStorageProvisioner(), "pxd") { - if secretNameKeyFlag { - obj.Parameters[CsiProvisionerSecretName] = configMap.Data[secretNameKey] - obj.Parameters[CsiNodePublishSecretName] = configMap.Data[secretNameKey] - obj.Parameters[CsiControllerExpandSecretName] = configMap.Data[secretNameKey] - } - if secretNamespaceKeyFlag { - obj.Parameters[CsiProvisionerSecretNamespace] = configMap.Data[secretNamespaceKey] - obj.Parameters[CsiNodePublishSecretNamespace] = configMap.Data[secretNamespaceKey] - obj.Parameters[CsiControllerExpandSecretNamespace] = configMap.Data[secretNamespaceKey] - } - } else { - if secretNameKeyFlag { - obj.Parameters[secretName] = configMap.Data[secretNameKey] - } - if secretNamespaceKeyFlag { - obj.Parameters[secretNamespace] = configMap.Data[secretNamespaceKey] - } - } + + if k.secretConfigMapName != "" { + if obj.Parameters == nil { + obj.Parameters = make(map[string]string) + } + + //if secure-apps list is provided, check if the app is in the list and set the secure parameters for only that app + if len(k.secureApps) > 0 && k.isSecureEnabled(app.Key, k.secureApps) { + setSecureParams(obj) + } + //if secure-apps list is not provided, set the secure parameters for all apps if secret config map is provided + if len(k.secureApps) == 0 { + setSecureParams(obj) } } + } else if obj, ok := spec.(*corev1.PersistentVolumeClaim); ok { if obj.Annotations == nil { @@ -7519,7 +7534,7 @@ func (k *K8s) snapshotAndVerify(size resource.Quantity, data, snapName, namespac } // Wait for PVC to be bound - err = k.WaitForSinglePVCToBound(restoredPVCName, restoredPVC.Namespace) + err = k.WaitForSinglePVCToBound(restoredPVCName, restoredPVC.Namespace, 0) if err != nil { return fmt.Errorf("failed to wait for cloned PVC %s to bind: %v", restoredPVCName, err) } @@ -7604,7 +7619,7 @@ func (k *K8s) cloneAndVerify(size resource.Quantity, data, namespace, storageCla } // Wait for PVC to be bound - err = k.WaitForSinglePVCToBound(clonedPVCName, clonedPVC.Namespace) + err = k.WaitForSinglePVCToBound(clonedPVCName, clonedPVC.Namespace, 0) if err != nil { return fmt.Errorf("failed to wait for cloned PVC %s to bind: %v", clonedPVCName, err) } @@ -8052,6 +8067,40 @@ func (k *K8s) CreateCsiSnapshotClass(snapClassName string, deleionPolicy string) return volumeSnapClass, nil } +// CreateVolumeSnapshotClasses creates a volume snapshot class +func (k *K8s) CreateVolumeSnapshotClasses(snapClassName string, provisioner string, isDefault bool, deletePolicy string) (*volsnapv1.VolumeSnapshotClass, error) { + var err error + var annotation = make(map[string]string) + var volumeSnapClass *volsnapv1.VolumeSnapshotClass + if isDefault { + annotation["snapshot.storage.kubernetes.io/is-default-class"] = "true" + } else { + annotation = make(map[string]string) + } + + v1obj := metav1.ObjectMeta{ + Name: snapClassName, + Annotations: annotation, + } + if len(deletePolicy) == 0 { + deletePolicy = "Delete" + } + snapClass := volsnapv1.VolumeSnapshotClass{ + ObjectMeta: v1obj, + Driver: provisioner, + DeletionPolicy: volsnapv1.DeletionPolicy(deletePolicy), + } + + log.Infof("Creating volume snapshot class: %v with provisioner %v", snapClassName, provisioner) + if volumeSnapClass, err = k8sExternalsnap.CreateSnapshotClass(&snapClass); err != nil { + return nil, &scheduler.ErrFailedToCreateSnapshotClass{ + Name: snapClassName, + Cause: err, + } + } + return volumeSnapClass, nil +} + // waitForCsiSnapToBeReady wait for snapshot status to be ready func (k *K8s) waitForCsiSnapToBeReady(snapName string, namespace string) error { var snap *volsnapv1.VolumeSnapshot @@ -8103,10 +8152,15 @@ func (k *K8s) waitForPodToBeReady(podname string, namespace string) error { } // WaitForSinglePVCToBound retries and waits up to 30 minutes for a single PVC to be bound -func (k *K8s) WaitForSinglePVCToBound(pvcName, namespace string) error { +func (k *K8s) WaitForSinglePVCToBound(pvcName, namespace string, timeout int) error { var pvc *v1.PersistentVolumeClaim var err error kubeClient, err := k.getKubeClient("") + var timeLimit int + timeLimit = 30 + if timeout != 0 && timeout < 60 { + timeLimit = timeout + } if err != nil { log.Error("Failed to get Kube client") return err @@ -8121,7 +8175,7 @@ func (k *K8s) WaitForSinglePVCToBound(pvcName, namespace string) error { } return "", false, nil } - if _, err := task.DoRetryWithTimeout(t, 30*time.Minute, 30*time.Second); err != nil { + if _, err := task.DoRetryWithTimeout(t, time.Duration(timeLimit)*time.Minute, 30*time.Second); err != nil { return err } log.Infof("PVC is in bound: %s", pvc.Name) diff --git a/drivers/scheduler/k8s/specs/aggr-mysql/px-mysql-app.yaml b/drivers/scheduler/k8s/specs/aggr-mysql/px-mysql-app.yaml index 5ce19b6af..7f7dcb642 100644 --- a/drivers/scheduler/k8s/specs/aggr-mysql/px-mysql-app.yaml +++ b/drivers/scheduler/k8s/specs/aggr-mysql/px-mysql-app.yaml @@ -88,7 +88,7 @@ spec: spec: containers: - name: mysqlslap - image: adityadani/mysqlslap + image: portworx/mysqlslap imagePullPolicy: IfNotPresent env: - name: MYSQL_ROOT_PASSWORD diff --git a/drivers/scheduler/k8s/specs/bonnie-sharedv4/px-bonnie-app.yml b/drivers/scheduler/k8s/specs/bonnie-sharedv4/px-bonnie-app.yml index 9179aa49d..cbdf74e9e 100644 --- a/drivers/scheduler/k8s/specs/bonnie-sharedv4/px-bonnie-app.yml +++ b/drivers/scheduler/k8s/specs/bonnie-sharedv4/px-bonnie-app.yml @@ -21,8 +21,8 @@ spec: runAsUser: 0 resources: limits: - memory: 1Gi - cpu: 100m + memory: 3Gi + cpu: 2 {{ if .CustomCommand }} command: {{ .CustomCommand | array }} {{ else }} diff --git a/drivers/scheduler/k8s/specs/bonnie-sv4-svc/px-bonnie-app.yml b/drivers/scheduler/k8s/specs/bonnie-sv4-svc/px-bonnie-app.yml index 9da1817e7..31e9466e2 100644 --- a/drivers/scheduler/k8s/specs/bonnie-sv4-svc/px-bonnie-app.yml +++ b/drivers/scheduler/k8s/specs/bonnie-sv4-svc/px-bonnie-app.yml @@ -19,8 +19,8 @@ spec: imagePullPolicy: IfNotPresent resources: limits: - memory: 1Gi - cpu: 100m + memory: 3Gi + cpu: 2 {{ if .CustomCommand }} command: {{ .CustomCommand | array }} {{ else }} diff --git a/drivers/scheduler/k8s/specs/fio-fbda-ep/fio-config-map.yaml b/drivers/scheduler/k8s/specs/fio-fbda-ep/fio-config-map.yaml new file mode 100644 index 000000000..f6e337fcd --- /dev/null +++ b/drivers/scheduler/k8s/specs/fio-fbda-ep/fio-config-map.yaml @@ -0,0 +1,86 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: fio-job-config +data: + fio.job: | + [global] + name=fio-rand-RW + directory=/scratch/ + rw=randwrite + rwmixread=75 + randrepeat=1 + blocksize_range=4k-512k + direct=1 + end_fsync=1 + do_verify=1 + verify=crc32c + verify_pattern=0xdeadbeef + disable_lat=0 + time_based=1 + runtime=99999999 + [file1] + filesize=1M-10M + nrfiles=10000 + ioengine=libaio + iodepth=128 +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: grok-exporter +data: + config.yml: |- + global: + config_version: 3 + input: + type: file + path: /logs/fio.log + readall: false + fail_on_missing_logfile: true + imports: + - type: grok_patterns + dir: ./patterns + grok_patterns: + - 'FIO_IOPS [0-9]*[.][0-9]k$|[0-9]*' + metrics: + - type: gauge + name: iops + help: FIO IOPS Write Gauge Metrics + match: ' write: %{GREEDYDATA}, iops=%{NUMBER:val1}%{GREEDYDATA:thsd}, %{GREEDYDATA}' + value: '{{`{{if eq .thsd "k"}}{{multiply .val1 1000}}{{else}}{{.val1}}{{end}}`}}' + labels: + iops_suffix: '{{`{{.thsd}}`}}' + cumulative: false + retention: 1s + - type: gauge + name: bandwidth + help: FIO Bandwidth Write Gauge Metrics + match: ' write: io=%{GREEDYDATA}, bw=%{NUMBER:val2}%{GREEDYDATA:kbs}, %{GREEDYDATA}, %{GREEDYDATA}' + value: '{{`{{if eq .kbs "KB/s"}}{{divide .val2 1024}}{{else}}{{.val2}}{{end}}`}}' + labels: + bw_unit: '{{`{{.kbs}}`}}' + cumulative: false + retention: 1s + - type: gauge + name: avg_latency + help: FIO AVG Latency Write Gauge Metrics + match: ' lat (%{GREEDYDATA:nsec}): min=%{GREEDYDATA}, max=%{GREEDYDATA}, avg=%{NUMBER:val3}, stdev=%{GREEDYDATA}' + value: '{{`{{if eq .nsec "(usec)"}}{{divide .val3 1000}}{{else}}{{.val3}}{{end}}`}}' + labels: + lat_unit: '{{`{{.nsec}}`}}' + cumulative: false + retention: 1s +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: fio-ready-probe +data: + ready-probe.sh: | + #!/bin/bash + if [ `cat /root/fio.log | grep 'error\|bad magic header' | wc -l` -ge 1 ]; then + exit 1; + else + exit 0; + fi diff --git a/drivers/scheduler/k8s/specs/fio-fbda-ep/fio.yaml b/drivers/scheduler/k8s/specs/fio-fbda-ep/fio.yaml new file mode 100644 index 000000000..d136e0532 --- /dev/null +++ b/drivers/scheduler/k8s/specs/fio-fbda-ep/fio.yaml @@ -0,0 +1,94 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: fio +spec: + serviceName: fio + {{ if .Replicas }} + replicas: {{ .Replicas }} + {{ else }} + replicas: 6{{ end }} + selector: + matchLabels: + app: fio + template: + metadata: + labels: + app: fio + spec: + schedulerName: stork + containers: + - name: fio + image: portworx/fio_drv + command: ["fio"] + resources: + limits: + cpu: "2" + memory: 4Gi + requests: + cpu: "1" + memory: 4Gi + args: ["/configs/fio.job", "--status-interval=1", "--eta=never", "--output=/logs/fio.log"] + volumeMounts: + - name: fio-config-vol + mountPath: /configs + - name: fio-data + mountPath: /scratch + - name: fio-log + mountPath: /logs + - name: grok + image: pwxvin/grok-exporter:v1.0.0-RC4 + imagePullPolicy: IfNotPresent + ports: + - name: grok-port + containerPort: 9144 + protocol: TCP + volumeMounts: + - name: grok-config-volume + mountPath: /etc/grok_exporter + - name: fio-log + mountPath: /logs + volumes: + - name: fio-config-vol + configMap: + name: fio-job-config + - name: grok-config-volume + configMap: + name: grok-exporter + volumeClaimTemplates: + - metadata: + name: fio-data + spec: + storageClassName: fio-fb-sc-ep + accessModes: + - ReadWriteOnce + resources: + requests: + {{ if .VolumeSize }} + storage: {{ .VolumeSize }} + {{ else }} + storage: 200Gi{{ end }} + - metadata: + name: fio-log + spec: + storageClassName: fio-log-fb-sc-ep + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 50Gi +--- +apiVersion: v1 +kind: Service +metadata: + name: grok-exporter-svc + labels: + app: fio +spec: + clusterIP: None + selector: + app: fio + ports: + - name: grok-port + port: 9144 + targetPort: 9144 \ No newline at end of file diff --git a/drivers/scheduler/k8s/specs/fio-fbda-ep/px-storage-class.yaml b/drivers/scheduler/k8s/specs/fio-fbda-ep/px-storage-class.yaml new file mode 100644 index 000000000..2d66fb936 --- /dev/null +++ b/drivers/scheduler/k8s/specs/fio-fbda-ep/px-storage-class.yaml @@ -0,0 +1,35 @@ +##### FB direct access storage class +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: fio-fb-sc-ep +provisioner: pxd.portworx.com +parameters: + backend: "pure_file" + pure_export_rules: "*(rw)" + {{ if .StorageClassPureNfsEndpoint }} + pure_nfs_endpoint: "{{ .StorageClassPureNfsEndpoint }}" + {{ end }} +mountOptions: + - nfsvers=4.1 + - tcp +volumeBindingMode: WaitForFirstConsumer +allowVolumeExpansion: true +--- +##### FB direct access storage class +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: fio-log-fb-sc-ep +provisioner: pxd.portworx.com +parameters: + backend: "pure_file" + pure_export_rules: "*(rw)" + {{ if .StorageClassPureNfsEndpoint }} + pure_nfs_endpoint: "{{ .StorageClassPureNfsEndpoint }}" + {{ end }} +mountOptions: + - nfsvers=4.1 + - tcp +volumeBindingMode: WaitForFirstConsumer +allowVolumeExpansion: true \ No newline at end of file diff --git a/drivers/scheduler/k8s/specs/kubevirt-debian-fio-low-ha/vm.yaml b/drivers/scheduler/k8s/specs/kubevirt-debian-fio-low-ha/vm.yaml index 9cd24942a..f6dd555f8 100644 --- a/drivers/scheduler/k8s/specs/kubevirt-debian-fio-low-ha/vm.yaml +++ b/drivers/scheduler/k8s/specs/kubevirt-debian-fio-low-ha/vm.yaml @@ -25,6 +25,15 @@ spec: disk: bus: virtio name: rootdisk + - name: fio-data-disk-1 + disk: + bus: virtio + - name: fio-data-disk-2 + disk: + bus: virtio + - name: fio-data-disk-3 + disk: + bus: virtio interfaces: - name: default masquerade: {} diff --git a/drivers/scheduler/k8s/specs/kubevirt-debian-fio-minimal/vm.yaml b/drivers/scheduler/k8s/specs/kubevirt-debian-fio-minimal/vm.yaml index f65d9bcfa..6377a3eda 100644 --- a/drivers/scheduler/k8s/specs/kubevirt-debian-fio-minimal/vm.yaml +++ b/drivers/scheduler/k8s/specs/kubevirt-debian-fio-minimal/vm.yaml @@ -25,6 +25,15 @@ spec: disk: bus: virtio name: rootdisk + - name: fio-data-disk-1 + disk: + bus: virtio + - name: fio-data-disk-2 + disk: + bus: virtio + - name: fio-data-disk-3 + disk: + bus: virtio interfaces: - name: default masquerade: {} diff --git a/drivers/scheduler/k8s/specs/kubevirt-fio-datavoltemplate/boot-disk-template.yaml b/drivers/scheduler/k8s/specs/kubevirt-fio-datavoltemplate/boot-disk-template.yaml new file mode 100644 index 000000000..4ca461542 --- /dev/null +++ b/drivers/scheduler/k8s/specs/kubevirt-fio-datavoltemplate/boot-disk-template.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: root-disk-template-pvc-ea-build + namespace: openshift-virtualization-os-images + labels: + app: containerized-data-importer + annotations: + cdi.kubevirt.io/storage.import.endpoint: http://kubevirt-disk-registry.pwx.dev.purestorage.com/more_images/fio-multi-disk.qcow2 + pvc.source: "cloned" +spec: + storageClassName: sv4-repl2-multi-disk + accessModes: + - ReadWriteMany + resources: + requests: + storage: 200Gi diff --git a/drivers/scheduler/k8s/specs/kubevirt-fio-datavoltemplate/data-disk-template.yaml b/drivers/scheduler/k8s/specs/kubevirt-fio-datavoltemplate/data-disk-template.yaml new file mode 100644 index 000000000..0b2ce2068 --- /dev/null +++ b/drivers/scheduler/k8s/specs/kubevirt-fio-datavoltemplate/data-disk-template.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: fio-disk-template + namespace: openshift-virtualization-os-images + annotations: + pvc.source: "cloned" +spec: + storageClassName: sv4-repl2-multi-disk + accessModes: + - ReadWriteMany + resources: + requests: + storage: 50Gi diff --git a/drivers/scheduler/k8s/specs/kubevirt-fio-datavoltemplate/pxd/sc-wffc.yaml b/drivers/scheduler/k8s/specs/kubevirt-fio-datavoltemplate/pxd/sc-wffc.yaml new file mode 100644 index 000000000..fa8c78f76 --- /dev/null +++ b/drivers/scheduler/k8s/specs/kubevirt-fio-datavoltemplate/pxd/sc-wffc.yaml @@ -0,0 +1,11 @@ +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: test-multi-disk-wffc +provisioner: pxd.portworx.com +parameters: + repl: "2" + sharedv4_mount_options: vers=3.0,nolock + io_profile: db_remote +allowVolumeExpansion: true +volumeBindingMode: WaitForFirstConsumer diff --git a/drivers/scheduler/k8s/specs/kubevirt-fio-datavoltemplate/pxd/sc.yaml b/drivers/scheduler/k8s/specs/kubevirt-fio-datavoltemplate/pxd/sc.yaml new file mode 100644 index 000000000..4c1eec484 --- /dev/null +++ b/drivers/scheduler/k8s/specs/kubevirt-fio-datavoltemplate/pxd/sc.yaml @@ -0,0 +1,11 @@ +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: sv4-repl2-multi-disk +provisioner: pxd.portworx.com +parameters: + repl: "2" + sharedv4_mount_options: vers=3.0,nolock + io_profile: db_remote +allowVolumeExpansion: true +volumeBindingMode: Immediate diff --git a/drivers/scheduler/k8s/specs/kubevirt-fio-datavoltemplate/vm-datavol.yaml b/drivers/scheduler/k8s/specs/kubevirt-fio-datavoltemplate/vm-datavol.yaml new file mode 100644 index 000000000..59a26390b --- /dev/null +++ b/drivers/scheduler/k8s/specs/kubevirt-fio-datavoltemplate/vm-datavol.yaml @@ -0,0 +1,235 @@ +apiVersion: kubevirt.io/v1 +kind: VirtualMachine +metadata: + name: fio-vm-multi-disk +spec: + running: true + template: + metadata: + labels: + kubevirt.io/domain: ubuntu-bionic + kubevirt-key: kubevirt-val + app: vm-multi-disk + pvc.source: "cloned" + spec: + domain: + cpu: + cores: 4 + devices: + disks: + - name: containervolume + disk: + bus: virtio + - name: datavolume1 + disk: + bus: virtio + - name: datavolume2 + disk: + bus: virtio + - name: datavolume3 + disk: + bus: virtio + - name: datavolume4 + disk: + bus: virtio + - name: datavolume5 + disk: + bus: virtio + - name: datavolume6 + disk: + bus: virtio + - name: datavolume7 + disk: + bus: virtio + - name: datavolume8 + disk: + bus: virtio + - name: cloudinitvolume + disk: + bus: virtio + interfaces: + - name: default + masquerade: {} + resources: + requests: + cpu: 6 + memory: 8192M + networks: + - name: default + pod: {} + volumes: + - name: containervolume + persistentVolumeClaim: + claimName: fio-boot-pvc + - name: datavolume1 + dataVolume: + name: fio-disk-1 + - name: datavolume2 + dataVolume: + name: fio-disk-2 + - name: datavolume3 + dataVolume: + name: fio-disk-3 + - name: datavolume4 + dataVolume: + name: fio-disk-4 + - name: datavolume5 + dataVolume: + name: fio-disk-5 + - name: datavolume6 + dataVolume: + name: fio-disk-6 + - name: datavolume7 + dataVolume: + name: fio-disk-7 + - name: datavolume8 + dataVolume: + name: fio-disk-8 + - name: cloudinitvolume + cloudInitNoCloud: + userData: |- + #cloud-config + chpasswd: + list: | + ubuntu:ubuntu + root:toor + expire: False + runcmd: + - while true; do + sleep 60 + done + dataVolumeTemplates: + - metadata: + name: fio-boot-pvc + spec: + source: + pvc: + name: root-disk-template-pvc-ea-build + namespace: openshift-virtualization-os-images + pvc: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 200Gi + storageClassName: test-multi-disk-wffc + volumeMode: Filesystem + - metadata: + name: fio-disk-1 + spec: + source: + pvc: + name: fio-disk-template + namespace: openshift-virtualization-os-images + pvc: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 100Gi + storageClassName: test-multi-disk-wffc + volumeMode: Filesystem + - metadata: + name: fio-disk-2 + spec: + source: + pvc: + name: fio-disk-template + namespace: openshift-virtualization-os-images + pvc: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 100Gi + storageClassName: test-multi-disk-wffc + - metadata: + name: fio-disk-3 + spec: + source: + pvc: + name: fio-disk-template + namespace: openshift-virtualization-os-images + pvc: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 100Gi + storageClassName: test-multi-disk-wffc + volumeMode: Filesystem + - metadata: + name: fio-disk-4 + spec: + source: + pvc: + name: fio-disk-template + namespace: openshift-virtualization-os-images + pvc: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 100Gi + storageClassName: test-multi-disk-wffc + volumeMode: Filesystem + - metadata: + name: fio-disk-5 + spec: + source: + pvc: + name: fio-disk-template + namespace: openshift-virtualization-os-images + pvc: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 100Gi + storageClassName: test-multi-disk-wffc + volumeMode: Filesystem + - metadata: + name: fio-disk-6 + spec: + source: + pvc: + name: fio-disk-template + namespace: openshift-virtualization-os-images + pvc: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 100Gi + storageClassName: test-multi-disk-wffc + volumeMode: Filesystem + - metadata: + name: fio-disk-7 + spec: + source: + pvc: + name: fio-disk-template + namespace: openshift-virtualization-os-images + pvc: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 100Gi + storageClassName: test-multi-disk-wffc + volumeMode: Filesystem + - metadata: + name: fio-disk-8 + spec: + source: + pvc: + name: fio-disk-template + namespace: openshift-virtualization-os-images + pvc: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 100Gi + storageClassName: test-multi-disk-wffc + volumeMode: Filesystem diff --git a/drivers/scheduler/k8s/specs/kubevirt-forklift-fio-largedisk/fio-boot-pvc.yaml b/drivers/scheduler/k8s/specs/kubevirt-forklift-fio-largedisk/fio-boot-pvc.yaml new file mode 100644 index 000000000..61bc14b9f --- /dev/null +++ b/drivers/scheduler/k8s/specs/kubevirt-forklift-fio-largedisk/fio-boot-pvc.yaml @@ -0,0 +1,20 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: fio-boot-pvc + labels: + app: containerized-data-importer + annotations: + "cdi.kubevirt.io/storage.import.endpoint": "http://kubevirt-disk-registry.pwx.dev.purestorage.com/more_images/fio-multi-disk.qcow2" + "cdi.kubevirt.io/storage.contentType": "kubevirt" + forklift.konveyor.io/disk-source: "[VCD-DEV-LINUX2-PURE-002] satdaap00886/satdaap00886_1.vmdk" + "vmID": {{ .VmID }} + cdi.kubevirt.io/storage.bind.immediate.requested: "true" + pvc.source: "cloned" +spec: + storageClassName: sv4-wffc-localattach-multi-disk + accessModes: + - ReadWriteMany + resources: + requests: + storage: 50Gi diff --git a/drivers/scheduler/k8s/specs/kubevirt-forklift-fio-largedisk/pxd/sc.yaml b/drivers/scheduler/k8s/specs/kubevirt-forklift-fio-largedisk/pxd/sc.yaml new file mode 100644 index 000000000..45e8e6cd2 --- /dev/null +++ b/drivers/scheduler/k8s/specs/kubevirt-forklift-fio-largedisk/pxd/sc.yaml @@ -0,0 +1,12 @@ +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: sv4-wffc-localattach-multi-disk +provisioner: pxd.portworx.com +parameters: + repl: "2" + sharedv4_mount_options: "vers=3.0,nolock" + io_profile: "db_remote" +allowVolumeExpansion: true +reclaimPolicy: Delete +volumeBindingMode: WaitForFirstConsumer diff --git a/drivers/scheduler/k8s/specs/kubevirt-forklift-fio-largedisk/vm.yaml b/drivers/scheduler/k8s/specs/kubevirt-forklift-fio-largedisk/vm.yaml new file mode 100644 index 000000000..6e3f424c0 --- /dev/null +++ b/drivers/scheduler/k8s/specs/kubevirt-forklift-fio-largedisk/vm.yaml @@ -0,0 +1,236 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: fio-disk-1 + annotations: + "cdi.kubevirt.io/storage.contentType": "kubevirt" + "forklift.konveyor.io/disk-source": "[VCD-DEV-LINUX2-PURE-002] satdaap00886/satdaap00886_1.vmdk" + "vmID": {{ .VmID }} +spec: + storageClassName: sv4-wffc-localattach-multi-disk + accessModes: + - ReadWriteMany + resources: + requests: + storage: 2048Gi + +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: fio-disk-2 + annotations: + "cdi.kubevirt.io/storage.contentType": "kubevirt" + "forklift.konveyor.io/disk-source": "[VCD-DEV-LINUX2-PURE-002] satdaap00886/satdaap00886_1.vmdk" + "vmID": {{ .VmID }} +spec: + storageClassName: sv4-wffc-localattach-multi-disk + accessModes: + - ReadWriteMany + resources: + requests: + storage: 120Gi + +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: fio-disk-3 + annotations: + "cdi.kubevirt.io/storage.contentType": "kubevirt" + "forklift.konveyor.io/disk-source": "[VCD-DEV-LINUX2-PURE-002] satdaap00886/satdaap00886_1.vmdk" + "vmID": {{ .VmID }} +spec: + storageClassName: sv4-wffc-localattach-multi-disk + accessModes: + - ReadWriteMany + resources: + requests: + storage: 20Gi + +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: fio-disk-4 + annotations: + "cdi.kubevirt.io/storage.contentType": "kubevirt" + "forklift.konveyor.io/disk-source": "[VCD-DEV-LINUX2-PURE-002] satdaap00886/satdaap00886_1.vmdk" + "vmID": {{ .VmID }} +spec: + storageClassName: sv4-wffc-localattach-multi-disk + accessModes: + - ReadWriteMany + resources: + requests: + storage: 20Gi + +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: fio-disk-5 + annotations: + "cdi.kubevirt.io/storage.contentType": "kubevirt" + "forklift.konveyor.io/disk-source": "[VCD-DEV-LINUX2-PURE-002] satdaap00886/satdaap00886_1.vmdk" + "vmID": {{ .VmID }} +spec: + storageClassName: sv4-wffc-localattach-multi-disk + accessModes: + - ReadWriteMany + resources: + requests: + storage: 20Gi + +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: fio-disk-6 + annotations: + "cdi.kubevirt.io/storage.contentType": "kubevirt" + "forklift.konveyor.io/disk-source": "[VCD-DEV-LINUX2-PURE-002] satdaap00886/satdaap00886_1.vmdk" + "vmID": {{ .VmID }} +spec: + storageClassName: sv4-wffc-localattach-multi-disk + accessModes: + - ReadWriteMany + resources: + requests: + storage: 20Gi + +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: fio-disk-7 + annotations: + "cdi.kubevirt.io/storage.contentType": "kubevirt" + "forklift.konveyor.io/disk-source": "[VCD-DEV-LINUX2-PURE-002] satdaap00886/satdaap00886_1.vmdk" + "vmID": {{ .VmID }} +spec: + storageClassName: sv4-wffc-localattach-multi-disk + accessModes: + - ReadWriteMany + resources: + requests: + storage: 20Gi + +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: fio-disk-8 + annotations: + "cdi.kubevirt.io/storage.contentType": "kubevirt" + "forklift.konveyor.io/disk-source": "[VCD-DEV-LINUX2-PURE-002] satdaap00886/satdaap00886_1.vmdk" + "vmID": {{ .VmID }} +spec: + storageClassName: sv4-wffc-localattach-multi-disk + accessModes: + - ReadWriteMany + resources: + requests: + storage: 20Gi + +--- +apiVersion: kubevirt.io/v1 +kind: VirtualMachine +metadata: + name: fio-vm-multi-disk +spec: + running: true + template: + metadata: + labels: + kubevirt.io/domain: ubuntu-bionic + kubevirt-key: kubevirt-val + app: vm-multi-disk + "vmID": {{ .VmID }} + spec: + domain: + cpu: + cores: 4 + devices: + disks: + - name: containervolume + disk: + bus: virtio + - name: datavolume1 + disk: + bus: virtio + - name: datavolume2 + disk: + bus: virtio + - name: datavolume3 + disk: + bus: virtio + - name: datavolume4 + disk: + bus: virtio + - name: datavolume5 + disk: + bus: virtio + - name: datavolume6 + disk: + bus: virtio + - name: datavolume7 + disk: + bus: virtio + - name: datavolume8 + disk: + bus: virtio + - name: cloudinitvolume + disk: + bus: virtio + interfaces: + - name: default + masquerade: {} + resources: + requests: + cpu: 6 + memory: 8192M + networks: + - name: default + pod: {} + volumes: + - name: containervolume + persistentVolumeClaim: + claimName: fio-boot-pvc + - name: datavolume1 + dataVolume: + name: fio-disk-1 + - name: datavolume2 + dataVolume: + name: fio-disk-2 + - name: datavolume3 + dataVolume: + name: fio-disk-3 + - name: datavolume4 + dataVolume: + name: fio-disk-4 + - name: datavolume5 + dataVolume: + name: fio-disk-5 + - name: datavolume6 + dataVolume: + name: fio-disk-6 + - name: datavolume7 + dataVolume: + name: fio-disk-7 + - name: datavolume8 + dataVolume: + name: fio-disk-8 + - name: cloudinitvolume + cloudInitNoCloud: + userData: |- + #cloud-config + chpasswd: + list: | + ubuntu:ubuntu + root:toor + expire: False + runcmd: + - while true; do + sleep 60 + done diff --git a/drivers/scheduler/k8s/specs/kubevirt-win22-forklift/pxd/sc.yaml b/drivers/scheduler/k8s/specs/kubevirt-win22-forklift/pxd/sc.yaml new file mode 100644 index 000000000..45e8e6cd2 --- /dev/null +++ b/drivers/scheduler/k8s/specs/kubevirt-win22-forklift/pxd/sc.yaml @@ -0,0 +1,12 @@ +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: sv4-wffc-localattach-multi-disk +provisioner: pxd.portworx.com +parameters: + repl: "2" + sharedv4_mount_options: "vers=3.0,nolock" + io_profile: "db_remote" +allowVolumeExpansion: true +reclaimPolicy: Delete +volumeBindingMode: WaitForFirstConsumer diff --git a/drivers/scheduler/k8s/specs/kubevirt-win22-forklift/vm-template.yaml b/drivers/scheduler/k8s/specs/kubevirt-win22-forklift/vm-template.yaml new file mode 100644 index 000000000..fd13afbd3 --- /dev/null +++ b/drivers/scheduler/k8s/specs/kubevirt-win22-forklift/vm-template.yaml @@ -0,0 +1,221 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: win-disk-1 + annotations: + "cdi.kubevirt.io/storage.contentType": "kubevirt" + "forklift.konveyor.io/disk-source": "[VCD-DEV-LINUX2-PURE-002] satdaap00886/satdaap00886_1.vmdk" + "vmID": {{ .VmID }} +spec: + storageClassName: sv4-wffc-localattach-multi-disk + accessModes: + - ReadWriteMany + resources: + requests: + storage: 20Gi + +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: win-disk-2 + annotations: + "cdi.kubevirt.io/storage.contentType": "kubevirt" + "forklift.konveyor.io/disk-source": "[VCD-DEV-LINUX2-PURE-002] satdaap00886/satdaap00886_1.vmdk" + "vmID": {{ .VmID }} +spec: + storageClassName: sv4-wffc-localattach-multi-disk + accessModes: + - ReadWriteMany + resources: + requests: + storage: 20Gi + +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: win-disk-3 + annotations: + "cdi.kubevirt.io/storage.contentType": "kubevirt" + "forklift.konveyor.io/disk-source": "[VCD-DEV-LINUX2-PURE-002] satdaap00886/satdaap00886_1.vmdk" + "vmID": {{ .VmID }} +spec: + storageClassName: sv4-wffc-localattach-multi-disk + accessModes: + - ReadWriteMany + resources: + requests: + storage: 20Gi + +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: win-disk-4 + annotations: + "cdi.kubevirt.io/storage.contentType": "kubevirt" + "forklift.konveyor.io/disk-source": "[VCD-DEV-LINUX2-PURE-002] satdaap00886/satdaap00886_1.vmdk" + "vmID": {{ .VmID }} +spec: + storageClassName: sv4-wffc-localattach-multi-disk + accessModes: + - ReadWriteMany + resources: + requests: + storage: 20Gi + +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: win-disk-5 + annotations: + "cdi.kubevirt.io/storage.contentType": "kubevirt" + "forklift.konveyor.io/disk-source": "[VCD-DEV-LINUX2-PURE-002] satdaap00886/satdaap00886_1.vmdk" + "vmID": {{ .VmID }} +spec: + storageClassName: sv4-wffc-localattach-multi-disk + accessModes: + - ReadWriteMany + resources: + requests: + storage: 20Gi + +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: win-disk-6 + annotations: + "cdi.kubevirt.io/storage.contentType": "kubevirt" + "forklift.konveyor.io/disk-source": "[VCD-DEV-LINUX2-PURE-002] satdaap00886/satdaap00886_1.vmdk" + "vmID": {{ .VmID }} +spec: + storageClassName: sv4-wffc-localattach-multi-disk + accessModes: + - ReadWriteMany + resources: + requests: + storage: 20Gi + +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: win-disk-7 + annotations: + "cdi.kubevirt.io/storage.contentType": "kubevirt" + "forklift.konveyor.io/disk-source": "[VCD-DEV-LINUX2-PURE-002] satdaap00886/satdaap00886_1.vmdk" + "vmID": {{ .VmID }} +spec: + storageClassName: sv4-wffc-localattach-multi-disk + accessModes: + - ReadWriteMany + resources: + requests: + storage: 20Gi + +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: win-disk-8 + annotations: + "cdi.kubevirt.io/storage.contentType": "kubevirt" + "forklift.konveyor.io/disk-source": "[VCD-DEV-LINUX2-PURE-002] satdaap00886/satdaap00886_1.vmdk" + "vmID": {{ .VmID }} +spec: + storageClassName: sv4-wffc-localattach-multi-disk + accessModes: + - ReadWriteMany + resources: + requests: + storage: 20Gi + +--- + +apiVersion: kubevirt.io/v1 +kind: VirtualMachine +metadata: + name: win22-multi-disk +spec: + running: true + template: + metadata: + labels: + kubevirt.io/domain: ubuntu-bionic + app: vm-multi-disk + annotations: + pvc.source: "cloned" + spec: + domain: + cpu: + cores: 4 + devices: + disks: + - name: containervolume + disk: + bus: virtio + - name: datavolume1 + disk: + bus: virtio + - name: datavolume2 + disk: + bus: virtio + - name: datavolume3 + disk: + bus: virtio + - name: datavolume4 + disk: + bus: virtio + - name: datavolume5 + disk: + bus: virtio + - name: datavolume6 + disk: + bus: virtio + - name: datavolume7 + disk: + bus: virtio + - name: datavolume8 + disk: + bus: virtio + interfaces: + - name: default + masquerade: {} + resources: + requests: + cpu: 4 + memory: 4096M + networks: + - name: default + pod: {} + volumes: + - name: containervolume + persistentVolumeClaim: + claimName: win22-boot-pvc + - name: datavolume1 + dataVolume: + name: win-disk-1 + - name: datavolume2 + dataVolume: + name: win-disk-2 + - name: datavolume3 + dataVolume: + name: win-disk-3 + - name: datavolume4 + dataVolume: + name: win-disk-4 + - name: datavolume5 + dataVolume: + name: win-disk-5 + - name: datavolume6 + dataVolume: + name: win-disk-6 + - name: datavolume7 + dataVolume: + name: win-disk-7 + - name: datavolume8 + dataVolume: + name: win-disk-8 diff --git a/drivers/scheduler/k8s/specs/kubevirt-win22-forklift/windows-boot-pvc.yaml b/drivers/scheduler/k8s/specs/kubevirt-win22-forklift/windows-boot-pvc.yaml new file mode 100644 index 000000000..bcdf2f1a9 --- /dev/null +++ b/drivers/scheduler/k8s/specs/kubevirt-win22-forklift/windows-boot-pvc.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: win22-boot-pvc + labels: + app: containerized-data-importer + annotations: + cdi.kubevirt.io/storage.import.endpoint: http://pwx-ova.pwx.purestorage.com/templates/qcow2/win2022en-standard-minimal.qcow2 + cdi.kubevirt.io/storage.bind.immediate.requested: "true" + pvc.source: "cloned" +spec: + storageClassName: sv4-wffc-localattach-multi-disk + accessModes: + - ReadWriteMany + resources: + requests: + storage: 50Gi diff --git a/drivers/scheduler/k8s/specs/mysql-backup-psa-restricted/px-mysql-app.yaml b/drivers/scheduler/k8s/specs/mysql-backup-psa-restricted/px-mysql-app.yaml new file mode 100644 index 000000000..75ca7a7a2 --- /dev/null +++ b/drivers/scheduler/k8s/specs/mysql-backup-psa-restricted/px-mysql-app.yaml @@ -0,0 +1,129 @@ +apiVersion: v1 +kind: Service +metadata: + name: mysql + annotations: + startDataSupported: "true" + username: "root" + password: "password" + databaseName: "mysql" + port: "3306" + appType: "mysql" +spec: + type: NodePort + selector: + app: mysql + ports: + - port: 3306 + targetPort: 3306 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: mysql + labels: + app: mysql +spec: + selector: + matchLabels: + app: mysql + strategy: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 1 + type: RollingUpdate + replicas: 1 + template: + metadata: + labels: + app: mysql + spec: + schedulerName: stork + securityContext: + seccompProfile: + type: RuntimeDefault + fsGroup: 1010 + containers: + - image: mysql:8.4 + name: mysql + securityContext: + runAsUser: 1010 + runAsNonRoot: true + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + env: + - name: MYSQL_ROOT_PASSWORD + value: password + ports: + - containerPort: 3306 + livenessProbe: + exec: + command: ["sh", "-c", "mysqladmin -u root -p$MYSQL_ROOT_PASSWORD ping"] + initialDelaySeconds: 70 + periodSeconds: 10 + timeoutSeconds: 5 + readinessProbe: + exec: + command: ["sh", "-c", "mysql -u root -p$MYSQL_ROOT_PASSWORD -e \"select 1\""] + initialDelaySeconds: 60 + periodSeconds: 10 + timeoutSeconds: 5 + volumeMounts: + - name: mysql-persistent-storage + mountPath: /var/lib/mysql + - mountPath: /var/lib/mysql-aggr + name: mysql-persistent-storage-aggr + - mountPath: /var/lib/mysql-seq + name: mysql-persistent-storage-seq + volumes: + - name: mysql-persistent-storage + persistentVolumeClaim: + claimName: mysql-data + - name: mysql-persistent-storage-aggr + persistentVolumeClaim: + claimName: mysql-data-aggr + - name: mysql-persistent-storage-seq + persistentVolumeClaim: + claimName: mysql-data-seq +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: mysqlslap + labels: + app: mysqlslap +spec: + selector: + matchLabels: + app: mysqlslap + strategy: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 1 + type: RollingUpdate + replicas: 1 + template: + metadata: + labels: + app: mysqlslap + spec: + containers: + - name: mysqlslap + image: portworx/mysqlslap + imagePullPolicy: IfNotPresent + securityContext: + runAsNonRoot: true + runAsUser: 1003 + allowPrivilegeEscalation: false + seccompProfile: + type: RuntimeDefault + capabilities: + drop: + - ALL + env: + - name: MYSQL_ROOT_PASSWORD + value: password + - name: MYSQL_SERVICE_PORT + value: "3306" diff --git a/drivers/scheduler/k8s/specs/mysql-backup-psa-restricted/px-mysql-storage.yaml b/drivers/scheduler/k8s/specs/mysql-backup-psa-restricted/px-mysql-storage.yaml new file mode 100644 index 000000000..e9810461a --- /dev/null +++ b/drivers/scheduler/k8s/specs/mysql-backup-psa-restricted/px-mysql-storage.yaml @@ -0,0 +1,37 @@ + +##### Portworx persistent volume claim +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: mysql-data +spec: + storageClassName: mysql-sc + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 2Gi +--- +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: mysql-data-seq +spec: + storageClassName: mysql-sc-seq + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 2Gi +--- +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: mysql-data-aggr +spec: + storageClassName: mysql-sc-aggr + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 2Gi diff --git a/drivers/scheduler/k8s/specs/mysql-backup-psa-restricted/pxd/px-storage-class.yaml b/drivers/scheduler/k8s/specs/mysql-backup-psa-restricted/pxd/px-storage-class.yaml new file mode 100644 index 000000000..c2ae14fce --- /dev/null +++ b/drivers/scheduler/k8s/specs/mysql-backup-psa-restricted/pxd/px-storage-class.yaml @@ -0,0 +1,42 @@ +##### Portworx storage class +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: mysql-sc +provisioner: pxd.portworx.com +parameters: + repl: "3" + priority_io: "high" + io_profile: "db" +allowVolumeExpansion: true +--- +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: mysql-sc-aggr +provisioner: pxd.portworx.com +parameters: + fs: "ext4" + block_size: "512b" + repl: "1" + aggregation_level: "1" + io_profile: "random" + priority_io: "high" + snap_schedule: "periodic=60,5" + labels: "type=aggregated" +allowVolumeExpansion: true +--- +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: mysql-sc-seq +provisioner: pxd.portworx.com +parameters: + fs: "xfs" + repl: "3" + aggregation_level: "1" + io_profile: "sequential" + priority_io: "high" + snap_schedule: "daily=12:00,7" + labels: "type=replicated" +allowVolumeExpansion: true diff --git a/drivers/scheduler/k8s/specs/mysql-backup/px-mysql-app.yaml b/drivers/scheduler/k8s/specs/mysql-backup/px-mysql-app.yaml index f8f7f6aa7..d2ec28b74 100644 --- a/drivers/scheduler/k8s/specs/mysql-backup/px-mysql-app.yaml +++ b/drivers/scheduler/k8s/specs/mysql-backup/px-mysql-app.yaml @@ -100,7 +100,7 @@ spec: spec: containers: - name: mysqlslap - image: adityadani/mysqlslap + image: portworx/mysqlslap imagePullPolicy: IfNotPresent env: - name: MYSQL_ROOT_PASSWORD diff --git a/drivers/scheduler/k8s/specs/mysql-ibm/mysql-app.yaml b/drivers/scheduler/k8s/specs/mysql-ibm/mysql-app.yaml index 34467492a..b75389836 100644 --- a/drivers/scheduler/k8s/specs/mysql-ibm/mysql-app.yaml +++ b/drivers/scheduler/k8s/specs/mysql-ibm/mysql-app.yaml @@ -82,7 +82,7 @@ spec: spec: containers: - name: mysqlslap - image: adityadani/mysqlslap + image: portworx/mysqlslap imagePullPolicy: IfNotPresent env: - name: MYSQL_ROOT_PASSWORD diff --git a/drivers/scheduler/k8s/specs/mysql-without-enc/px-mysql-app.yaml b/drivers/scheduler/k8s/specs/mysql-without-enc/px-mysql-app.yaml index eeda27411..358f1b81f 100644 --- a/drivers/scheduler/k8s/specs/mysql-without-enc/px-mysql-app.yaml +++ b/drivers/scheduler/k8s/specs/mysql-without-enc/px-mysql-app.yaml @@ -93,7 +93,7 @@ spec: spec: containers: - name: mysqlslap - image: adityadani/mysqlslap + image: portworx/mysqlslap imagePullPolicy: IfNotPresent env: - name: MYSQL_ROOT_PASSWORD diff --git a/drivers/scheduler/k8s/specs/mysql/px-mysql-app.yaml b/drivers/scheduler/k8s/specs/mysql/px-mysql-app.yaml index eeda27411..358f1b81f 100644 --- a/drivers/scheduler/k8s/specs/mysql/px-mysql-app.yaml +++ b/drivers/scheduler/k8s/specs/mysql/px-mysql-app.yaml @@ -93,7 +93,7 @@ spec: spec: containers: - name: mysqlslap - image: adityadani/mysqlslap + image: portworx/mysqlslap imagePullPolicy: IfNotPresent env: - name: MYSQL_ROOT_PASSWORD diff --git a/drivers/scheduler/k8s/specs/postgres-azure-disk-zone/azure/azure-storage-class.yaml b/drivers/scheduler/k8s/specs/postgres-azure-disk-zone/azure/azure-storage-class.yaml new file mode 100644 index 000000000..6fe69a46a --- /dev/null +++ b/drivers/scheduler/k8s/specs/postgres-azure-disk-zone/azure/azure-storage-class.yaml @@ -0,0 +1,11 @@ +##### Azure storage class +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: postgres-sc-zrs +provisioner: disk.csi.azure.com +parameters: + storageaccounttype: StandardSSD_ZRS +reclaimPolicy: Delete +volumeBindingMode: WaitForFirstConsumer +allowVolumeExpansion: true \ No newline at end of file diff --git a/drivers/scheduler/k8s/specs/postgres-azure-disk-zone/postgres-azure-zrsdisk-app.yaml b/drivers/scheduler/k8s/specs/postgres-azure-disk-zone/postgres-azure-zrsdisk-app.yaml new file mode 100644 index 000000000..0fd5e23d5 --- /dev/null +++ b/drivers/scheduler/k8s/specs/postgres-azure-disk-zone/postgres-azure-zrsdisk-app.yaml @@ -0,0 +1,61 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: postgres +spec: + strategy: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 1 + type: RollingUpdate + replicas: 1 + selector: + matchLabels: + app: postgres + template: + metadata: + labels: + app: postgres + spec: + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: "app" + operator: In + values: + - postgres + topologyKey: "kubernetes.io/hostname" + containers: + - name: postgres + image: postgres:9.5 + imagePullPolicy: "IfNotPresent" + ports: + - containerPort: 5432 + env: + - name: POSTGRES_USER + value: pgbench + - name: POSTGRES_PASSWORD + value: superpostgres + - name: PGBENCH_PASSWORD + value: superpostgres + - name: PGDATA + value: /var/lib/postgresql/data/pgdata + volumeMounts: + - mountPath: /var/lib/postgresql/data + name: postgredb + readinessProbe: + exec: + command: ["psql", "-U", "pgbench", "-c", "CREATE TABLE IF NOT EXISTS test_table ( test_text TEXT ); INSERT INTO test_table VALUES ( 'test_message' ); SELECT * FROM test_table; SELECT pg_sleep(1); DELETE FROM test_table;"] + initialDelaySeconds: 15 + timeoutSeconds: 2 + livenessProbe: + exec: + command: ["psql", "-U", "pgbench", "-c", "CREATE TABLE IF NOT EXISTS test_table ( test_text TEXT ); INSERT INTO test_table VALUES ( 'test_message' ); SELECT * FROM test_table; SELECT pg_sleep(1); DELETE FROM test_table;"] + initialDelaySeconds: 45 + timeoutSeconds: 2 + volumes: + - name: postgredb + persistentVolumeClaim: + claimName: postgres-data diff --git a/drivers/scheduler/k8s/specs/postgres-azure-disk-zone/storage.yaml b/drivers/scheduler/k8s/specs/postgres-azure-disk-zone/storage.yaml new file mode 100644 index 000000000..cdad1d421 --- /dev/null +++ b/drivers/scheduler/k8s/specs/postgres-azure-disk-zone/storage.yaml @@ -0,0 +1,12 @@ +##### Portworx persistent volume claim +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: postgres-data +spec: + storageClassName: postgres-sc-zrs + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 2Gi diff --git a/drivers/scheduler/k8s/specs/postgres-backup-psa-restricted/px-postgres-app.yaml b/drivers/scheduler/k8s/specs/postgres-backup-psa-restricted/px-postgres-app.yaml new file mode 100644 index 000000000..a05779085 --- /dev/null +++ b/drivers/scheduler/k8s/specs/postgres-backup-psa-restricted/px-postgres-app.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: Service +metadata: + name: postgres + annotations: + startDataSupported: "true" + username: "pgbench" + password: "superpostgres" + databaseName: "postgres" + port: "5432" + appType: "postgres" +spec: + type: NodePort + selector: + app: postgres + ports: + - port: 5432 + targetPort: 5432 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: postgres +spec: + strategy: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 1 + type: RollingUpdate + replicas: 1 + selector: + matchLabels: + app: postgres + template: + metadata: + labels: + app: postgres + spec: + schedulerName: stork + securityContext: + seccompProfile: + type: RuntimeDefault + fsGroup: 1003 + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: "app" + operator: In + values: + - postgres + topologyKey: "kubernetes.io/hostname" + containers: + - name: postgres + image: postgres:16.0 + imagePullPolicy: "IfNotPresent" + securityContext: + runAsNonRoot: true + runAsUser: 1003 + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + ports: + - containerPort: 5432 + env: + - name: POSTGRES_USER + value: pgbench + - name: POSTGRES_PASSWORD + value: superpostgres + - name: PGBENCH_PASSWORD + value: superpostgres + - name: PGDATA + value: /var/lib/postgresql/data/pgdata + volumeMounts: + - mountPath: /var/lib/postgresql/data + name: postgredb + readinessProbe: + exec: + command: ["psql", "-U", "pgbench", "-c", "CREATE TABLE IF NOT EXISTS test_table ( test_text TEXT ); INSERT INTO test_table VALUES ( 'test_message' ); SELECT * FROM test_table; SELECT pg_sleep(1); DELETE FROM test_table;"] + initialDelaySeconds: 15 + timeoutSeconds: 2 + livenessProbe: + exec: + command: ["psql", "-U", "pgbench", "-c", "CREATE TABLE IF NOT EXISTS test_table ( test_text TEXT ); INSERT INTO test_table VALUES ( 'test_message' ); SELECT * FROM test_table; SELECT pg_sleep(1); DELETE FROM test_table;"] + initialDelaySeconds: 45 + timeoutSeconds: 2 + volumes: + - name: postgredb + persistentVolumeClaim: + claimName: postgres-data diff --git a/drivers/scheduler/k8s/specs/postgres-backup-psa-restricted/pxd/px-storage-class.yaml b/drivers/scheduler/k8s/specs/postgres-backup-psa-restricted/pxd/px-storage-class.yaml new file mode 100644 index 000000000..3a84b91e8 --- /dev/null +++ b/drivers/scheduler/k8s/specs/postgres-backup-psa-restricted/pxd/px-storage-class.yaml @@ -0,0 +1,10 @@ +##### Portworx storage class +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: postgres-sc +provisioner: pxd.portworx.com +parameters: + repl: "3" + priority_io: "high" +allowVolumeExpansion: true diff --git a/drivers/scheduler/k8s/specs/postgres-backup-psa-restricted/storage.yaml b/drivers/scheduler/k8s/specs/postgres-backup-psa-restricted/storage.yaml new file mode 100644 index 000000000..1f5a8e7fb --- /dev/null +++ b/drivers/scheduler/k8s/specs/postgres-backup-psa-restricted/storage.yaml @@ -0,0 +1,12 @@ +##### Portworx persistent volume claim +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: postgres-data +spec: + storageClassName: postgres-sc + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 2Gi diff --git a/drivers/scheduler/k8s/specs/postgres-fbda-ep/pure/pure-storage-class.yaml b/drivers/scheduler/k8s/specs/postgres-fbda-ep/pure/pure-storage-class.yaml new file mode 100644 index 000000000..1dc8439cf --- /dev/null +++ b/drivers/scheduler/k8s/specs/postgres-fbda-ep/pure/pure-storage-class.yaml @@ -0,0 +1,17 @@ +##### Portworx Storage Class for FBDA +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: px-sc-fbda-ep +provisioner: pxd.portworx.com +parameters: + backend: "pure_file" + pure_export_rules: "*(no_root_squash,rw)" + {{ if .StorageClassPureNfsEndpoint}} + pure_nfs_endpoint: "{{ .StorageClassPureNfsEndpoint }}" + {{ end }} +mountOptions: + - nfsvers=4.1 + - tcp +volumeBindingMode: Immediate +allowVolumeExpansion: true diff --git a/drivers/scheduler/k8s/specs/postgres-fbda-ep/px-postgres-app.yaml b/drivers/scheduler/k8s/specs/postgres-fbda-ep/px-postgres-app.yaml new file mode 100644 index 000000000..66ead7ee4 --- /dev/null +++ b/drivers/scheduler/k8s/specs/postgres-fbda-ep/px-postgres-app.yaml @@ -0,0 +1,62 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: postgres +spec: + strategy: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 1 + type: RollingUpdate + replicas: 1 + selector: + matchLabels: + app: postgres + template: + metadata: + labels: + app: postgres + spec: + schedulerName: stork + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: "app" + operator: In + values: + - postgres + topologyKey: "kubernetes.io/hostname" + containers: + - name: postgres + image: postgres:9.5 + imagePullPolicy: "IfNotPresent" + ports: + - containerPort: 5432 + env: + - name: POSTGRES_USER + value: pgbench + - name: POSTGRES_PASSWORD + value: superpostgres + - name: PGBENCH_PASSWORD + value: superpostgres + - name: PGDATA + value: /var/lib/postgresql/data/pgdata + volumeMounts: + - mountPath: /var/lib/postgresql/data + name: postgredb + readinessProbe: + exec: + command: ["psql", "-U", "pgbench", "-c", "CREATE TABLE IF NOT EXISTS test_table ( test_text TEXT ); INSERT INTO test_table VALUES ( 'test_message' ); SELECT * FROM test_table; SELECT pg_sleep(1); DELETE FROM test_table;"] + initialDelaySeconds: 60 + timeoutSeconds: 2 + livenessProbe: + exec: + command: ["psql", "-U", "pgbench", "-c", "CREATE TABLE IF NOT EXISTS test_table ( test_text TEXT ); INSERT INTO test_table VALUES ( 'test_message' ); SELECT * FROM test_table; SELECT pg_sleep(1); DELETE FROM test_table;"] + initialDelaySeconds: 60 + timeoutSeconds: 2 + volumes: + - name: postgredb + persistentVolumeClaim: + claimName: postgres-data diff --git a/drivers/scheduler/k8s/specs/postgres-fbda-ep/storage.yaml b/drivers/scheduler/k8s/specs/postgres-fbda-ep/storage.yaml new file mode 100644 index 000000000..2284b75f7 --- /dev/null +++ b/drivers/scheduler/k8s/specs/postgres-fbda-ep/storage.yaml @@ -0,0 +1,12 @@ +##### Portworx persistent volume claim +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: postgres-data +spec: + storageClassName: px-sc-fbda-ep + accessModes: + - ReadWriteMany + resources: + requests: + storage: 2Gi diff --git a/drivers/scheduler/k8s/specs/snap-mysql/px-mysql-app.yaml b/drivers/scheduler/k8s/specs/snap-mysql/px-mysql-app.yaml index 9abc8d8e6..d0671363d 100644 --- a/drivers/scheduler/k8s/specs/snap-mysql/px-mysql-app.yaml +++ b/drivers/scheduler/k8s/specs/snap-mysql/px-mysql-app.yaml @@ -83,7 +83,7 @@ spec: spec: containers: - name: mysqlslap - image: adityadani/mysqlslap + image: portworx/mysqlslap imagePullPolicy: IfNotPresent env: - name: MYSQL_ROOT_PASSWORD diff --git a/drivers/scheduler/k8s/specs/vdbench-fbda-ep/pure/pure-storage-class.yaml b/drivers/scheduler/k8s/specs/vdbench-fbda-ep/pure/pure-storage-class.yaml new file mode 100644 index 000000000..d05f9e76c --- /dev/null +++ b/drivers/scheduler/k8s/specs/vdbench-fbda-ep/pure/pure-storage-class.yaml @@ -0,0 +1,15 @@ +##### Portworx Storage Class for FBDA +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: px-sc-fbda-ep +provisioner: pxd.portworx.com +parameters: + backend: "pure_file" + pure_export_rules: "*(no_root_squash,rw)" + pure_nfs_endpoint: "{{ .StorageClassPureNfsEndpoint }}" +mountOptions: + - nfsvers=4.1 + - tcp +volumeBindingMode: Immediate +allowVolumeExpansion: true diff --git a/drivers/scheduler/k8s/specs/vdbench-fbda-ep/px-vdbench-app.yaml b/drivers/scheduler/k8s/specs/vdbench-fbda-ep/px-vdbench-app.yaml new file mode 100644 index 000000000..ae7a75a49 --- /dev/null +++ b/drivers/scheduler/k8s/specs/vdbench-fbda-ep/px-vdbench-app.yaml @@ -0,0 +1,63 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: vdbench-fb-volumes +spec: + progressDeadlineSeconds: 600 + replicas: 2 + revisionHistoryLimit: 10 + selector: + matchLabels: + app: vdbench-fb-volumes + strategy: + rollingUpdate: + maxSurge: 25% + maxUnavailable: 25% + type: RollingUpdate + template: + metadata: + creationTimestamp: null + labels: + app: vdbench-fb-volumes + spec: + containers: + - args: + - | + while true; do + dd if=/dev/urandom of=/tmp/pvc-fbda-1/file-$(date +%s).txt bs=1M count=1 & + dd if=/dev/urandom of=/tmp/pvc-fbda-2/file-$(date +%s).txt bs=1M count=1 & + sleep 500; + done + command: + - /bin/sh + - -c + image: portworx/vdbench:torpedo + imagePullPolicy: IfNotPresent + name: vdbench + resources: + limits: + cpu: "1" + memory: 500Mi + requests: + cpu: 100m + memory: 256Mi + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /tmp/pvc-fbda-1 + name: pvc-fbda-1 + - mountPath: /tmp/pvc-fbda-2 + name: pvc-fbda-2 + dnsPolicy: ClusterFirst + restartPolicy: Always + schedulerName: stork + securityContext: + fsGroupChangePolicy: OnRootMismatch + terminationGracePeriodSeconds: 30 + volumes: + - name: pvc-fbda-1 + persistentVolumeClaim: + claimName: pvc-fbda-1 + - name: pvc-fbda-2 + persistentVolumeClaim: + claimName: pvc-fbda-2 diff --git a/drivers/scheduler/k8s/specs/vdbench-fbda-ep/storage.yaml b/drivers/scheduler/k8s/specs/vdbench-fbda-ep/storage.yaml new file mode 100644 index 000000000..94c3bb114 --- /dev/null +++ b/drivers/scheduler/k8s/specs/vdbench-fbda-ep/storage.yaml @@ -0,0 +1,25 @@ +##### Portworx persistent volume claim +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: pvc-fbda-1 +spec: + storageClassName: px-sc-fbda-ep + accessModes: + - ReadWriteMany + resources: + requests: + storage: 5Gi + +--- +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: pvc-fbda-2 +spec: + storageClassName: px-sc-fbda-ep + accessModes: + - ReadWriteMany + resources: + requests: + storage: 5Gi diff --git a/drivers/scheduler/openshift/openshift.go b/drivers/scheduler/openshift/openshift.go index 578427a51..28e2f2e91 100644 --- a/drivers/scheduler/openshift/openshift.go +++ b/drivers/scheduler/openshift/openshift.go @@ -2,7 +2,6 @@ package openshift import ( "fmt" - "github.com/portworx/torpedo/pkg/errors" "io/ioutil" "net/http" "os/exec" @@ -1139,54 +1138,6 @@ func getMachineSetName() (string, error) { } -// ScaleCluster scale the cluster to the given replicas -func (k *openshift) ScaleCluster(replicas int) error { - - initialMachineCount, err := k.getMachinesCount() - - machineSetName, err := getMachineSetName() - if err != nil { - return err - } - // kubectl scale machineset leela-ocp-vx6zf-worker-0 --replicas 6 -n openshift-machine-api - cmd := fmt.Sprintf("kubectl -n %s scale %s --replicas %d", OpenshiftMachineNamespace, machineSetName, replicas) - log.Infof("Executing command [%s]", cmd) - output, err := exec.Command("sh", "-c", cmd).CombinedOutput() - if err != nil { - return err - } - log.Infof("output: %s", string(output)) - - if !strings.Contains(string(output), fmt.Sprintf("%s scaled", machineSetName)) { - return fmt.Errorf("failed to scale [%s], output: %s", machineSetName, string(output)) - } - - log.Infof("waiting for new machine to be created") - - t := func() (interface{}, bool, error) { - newMachineCount, err := k.getMachinesCount() - if err != nil { - return "", true, fmt.Errorf("error getting machine count, Err: %v", err) - } - if newMachineCount <= initialMachineCount { - return "", true, fmt.Errorf("waiting for new machine to provision initial count : [%d], current count: [%d]", initialMachineCount, newMachineCount) - } - return "", false, nil - } - if _, err := task.DoRetryWithTimeout(t, 5*time.Minute, 10*time.Second); err != nil { - return err - } - - if _, err := k.checkAndGetNewNode(); err != nil { - return err - } - if err := k.RefreshNodeRegistry(); err != nil { - return err - } - - return nil -} - // needOcpPrereq checks if we need to do OCP Prometheus prereq and returns true or false func (k *openshift) needOcpPrereq(ocpVer string) (bool, error) { log.Infof("Checking if OCP version [%s] requires Prometheus configuration changes...", ocpVer) @@ -1345,10 +1296,72 @@ func updatePrometheusAndAutopilot() error { return nil } -func (k *openshift) SetASGClusterSize(perZoneCount int64, timeout time.Duration) error { - // ScaleCluster is not supported - return &errors.ErrNotSupported{ - Type: "Function", - Operation: "SetASGClusterSize()", +func (k *openshift) SetASGClusterSize(replicas int64, timeout time.Duration) error { + initialMachineCount, err := k.getMachinesCount() + if err != nil { + return err + } + + machineSetName, err := getMachineSetName() + if err != nil { + return err + } + // kubectl scale machineset leela-ocp-vx6zf-worker-0 --replicas 6 -n openshift-machine-api + cmd := fmt.Sprintf("kubectl -n %s scale %s --replicas %d", OpenshiftMachineNamespace, machineSetName, replicas) + log.Infof("Executing command [%s]", cmd) + output, err := exec.Command("sh", "-c", cmd).CombinedOutput() + if err != nil { + return err + } + log.Infof("output: %s", string(output)) + + if !strings.Contains(string(output), fmt.Sprintf("%s scaled", machineSetName)) { + return fmt.Errorf("failed to scale [%s], output: %s", machineSetName, string(output)) + } + + log.Infof("waiting for new machine to be created") + + t := func() (interface{}, bool, error) { + newMachineCount, err := k.getMachinesCount() + if err != nil { + return "", true, fmt.Errorf("error getting machine count, Err: %v", err) + } + if newMachineCount <= initialMachineCount { + return "", true, fmt.Errorf("waiting for new machine to provision initial count : [%d], current count: [%d]", initialMachineCount, newMachineCount) + } + return "", false, nil + } + if _, err := task.DoRetryWithTimeout(t, 5*time.Minute, 10*time.Second); err != nil { + return err + } + + if _, err := k.checkAndGetNewNode(); err != nil { + return err + } + + return nil +} + +func (k *openshift) GetASGClusterSize() (int64, error) { + machineCount, err := k.getMachinesCount() + if err != nil { + return 0, err + } + + return int64(machineCount), nil +} + +func (k *openshift) GetZones() ([]string, error) { + //OCP has one zone + return []string{"zone-1"}, nil +} + +func (k *openshift) Init(schedOpts scheduler.InitOptions) error { + + err := k.K8s.Init(schedOpts) + if err != nil { + return err } + + return nil } diff --git a/drivers/scheduler/scheduler.go b/drivers/scheduler/scheduler.go index 147b736d5..9a0a99ee3 100644 --- a/drivers/scheduler/scheduler.go +++ b/drivers/scheduler/scheduler.go @@ -67,20 +67,22 @@ func (in *Context) GetID() string { // AppConfig custom settings type AppConfig struct { - Replicas int `yaml:"replicas"` - VolumeSize string `yaml:"volume_size"` - WorkloadSize string `yaml:"workload_size"` - ClaimsCount int `yaml:"claims_count"` - CustomCommand []string `yaml:"custom_command"` - CustomArgs []string `yaml:"custom_args"` - StorageClassSharedv4 string `yaml:"storage_class_sharedv4"` - PVCAccessMode string `yaml:"pvc_access_mode"` - Repl string `yaml:"repl"` - Fs string `yaml:"fs"` - AggregationLevel string `yaml:"aggregation_level"` - IoProfile string `yaml:"io_profile"` - Journal string `yaml:"journal"` - DataSize string `yaml:"data_size"` + Replicas int `yaml:"replicas"` + VolumeSize string `yaml:"volume_size"` + WorkloadSize string `yaml:"workload_size"` + ClaimsCount int `yaml:"claims_count"` + CustomCommand []string `yaml:"custom_command"` + CustomArgs []string `yaml:"custom_args"` + StorageClassSharedv4 string `yaml:"storage_class_sharedv4"` + StorageClassPureNfsEndpoint string `yaml:"storage_class_pure_nfs_endpoint"` + PVCAccessMode string `yaml:"pvc_access_mode"` + Repl string `yaml:"repl"` + Fs string `yaml:"fs"` + AggregationLevel string `yaml:"aggregation_level"` + IoProfile string `yaml:"io_profile"` + Journal string `yaml:"journal"` + DataSize string `yaml:"data_size"` + VmID string `yaml:"vm_id"` } // InitOptions initialization options @@ -382,6 +384,9 @@ type Driver interface { // CreateCsiSnapshotClass create csi snapshot class CreateCsiSnapshotClass(snapClassName string, deleionPolicy string) (*volsnapv1.VolumeSnapshotClass, error) + // CreateVolumeSnapshotClasses creates a volume snapshot class + CreateVolumeSnapshotClasses(snapClassName string, provisioner string, isDefault bool, deletePolicy string) (*volsnapv1.VolumeSnapshotClass, error) + // CreateCsiSnapshot create csi snapshot for given pvc // TODO: there's probably better place to place this test, it creates the snapshot and also does the validation. // At the same time, there's also other validation functions in this interface as well. So we should look into ways @@ -401,7 +406,7 @@ type Driver interface { CSICloneTest(*Context, CSICloneRequest) error // WaitForSinglePVCToBound retries and waits up to 30 minutes for a single PVC to be bound - WaitForSinglePVCToBound(pvcName, namespace string) error + WaitForSinglePVCToBound(pvcName, namespace string, timeout int) error // CreateCsiSnapsForVolumes create csi snapshots for all volumes in a context CreateCsiSnapsForVolumes(*Context, string) (map[string]*volsnapv1.VolumeSnapshot, error) @@ -436,8 +441,6 @@ type Driver interface { // GetNamespaceLabel gets the labels on given namespace GetNamespaceLabel(namespace string) (map[string]string, error) - // ScaleCluster scale the cluster to the given replicas - ScaleCluster(replicas int) error // GetZones get the zones of cluster GetZones() ([]string, error) // GetASGClusterSize gets node count for an asg cluster diff --git a/drivers/unifiedPlatform/automationModels/common.go b/drivers/unifiedPlatform/automationModels/common.go index 2bfff75fc..ca55a3edf 100644 --- a/drivers/unifiedPlatform/automationModels/common.go +++ b/drivers/unifiedPlatform/automationModels/common.go @@ -134,7 +134,7 @@ type SortOrder_Value int32 type SourceReferences struct { // UID of the deployment which was backed up. - DeploymentId string `copier:"must,nopanic"` + DataServiceDeploymentId string `copier:"must,nopanic"` // UID of the backup. BackupId string `copier:"must,nopanic"` // UID of the backup location. @@ -147,7 +147,7 @@ type DestinationReferences struct { // UID of the target cluster where restore will be created. TargetClusterId string `copier:"must,nopanic"` // UID of the deployment created by the restore. - DeploymentId string `copier:"must,nopanic"` + DataServiceDeploymentId string `copier:"must,nopanic"` // UID of the project. ProjectId string `copier:"must,nopanic"` } diff --git a/drivers/unifiedPlatform/automationModels/deployments.go b/drivers/unifiedPlatform/automationModels/deployments.go index 173add81f..fe124046a 100644 --- a/drivers/unifiedPlatform/automationModels/deployments.go +++ b/drivers/unifiedPlatform/automationModels/deployments.go @@ -20,7 +20,7 @@ type PDSDeploymentResponse struct { type V1DeploymentUpdate struct { Meta Meta - Config DeploymentUpdateConfig + Config DataServiceDeploymentUpdateConfig Status DeploymentUpdateStatus } @@ -35,9 +35,9 @@ type DeploymentUpdateStatus struct { Phase *Pdsdeploymentconfigupdatev1StatusPhase `copier:"must,nopanic"` } -type DeploymentUpdateConfig struct { - DeploymentMeta Meta `copier:"must,nopanic"` - DeploymentConfig V1Config1 `copier:"must,nopanic"` +type DataServiceDeploymentUpdateConfig struct { + DataServiceDeploymentMeta Meta `copier:"must,nopanic"` + DataServiceDeploymentConfig V1Config1 `copier:"must,nopanic"` } type V1Deployment struct { @@ -55,33 +55,33 @@ type Deploymentv1Status struct { // Initialize used to control startup scripts. Initialized *string `copier:"must,nopanic"` // Status of the deployment topology. - DeploymentTopologyStatus []V1DeploymentTopologyStatus `copier:"must,nopanic"` - CustomResourceName *string `copier:"must,nopanic"` + DataServiceDeploymentTopologyStatus []V1DataServiceDeploymentTopologyStatus `copier:"must,nopanic"` + CustomResourceName *string `copier:"must,nopanic"` } // V1DeploymentTopologyStatus Status of the deployment topology. It is consumed in Deployment. -type V1DeploymentTopologyStatus struct { +type V1DataServiceDeploymentTopologyStatus struct { Health *V1DeploymentTopologyStatusHealth `copier:"must,nopanic"` Phase *V1DeploymentTopologyStatusPhase `copier:"must,nopanic"` // Number of replicas reported by Target Cluster that are up and running. - ReadyReplicas *string `copier:"must,nopanic"` - ConnectionInfo *V1ConnectionInfo `copier:"must,nopanic"` - CustomResourceName *string + ReadyInstances *string `copier:"must,nopanic"` + ConnectionInfo *V1ConnectionInfo `copier:"must,nopanic"` + //CustomResourceName *string } // V1ConnectionInfo Connection Information for the Deployment Topology. type V1ConnectionInfo struct { // Ready pods. - Pods []V1PodInfo `copier:"must,nopanic"` + ReadyInstances []V1InstanceInfo `copier:"must,nopanic"` // Pods that are not ready. - NotReadyPods []V1PodInfo `copier:"must,nopanic"` + NotReadyPods []V1InstanceInfo `copier:"must,nopanic"` ConnectionDetails *V1ConnectionDetails `copier:"must,nopanic"` // Stores details about the cluster. ClusterDetails map[string]interface{} `copier:"must,nopanic"` } // V1PodInfo PodInfo contains information about a pod. -type V1PodInfo struct { +type V1InstanceInfo struct { // The IP of a pod. Ip *string `copier:"must,nopanic"` // Name is the Hostname of a pod. @@ -93,7 +93,7 @@ type V1PodInfo struct { // V1ConnectionDetails ConnectionDetails of data service. type V1ConnectionDetails struct { // Nodes of the data service. - Nodes []string `copier:"must,nopanic"` + Instances []string `copier:"must,nopanic"` // Ports provided by the data service (name and number). Ports *map[string]int32 `copier:"must,nopanic"` } @@ -101,17 +101,25 @@ type V1ConnectionDetails struct { type V1Config1 struct { References Reference `copier:"must,nopanic"` // Flag to enable TLS for the Data Service. - TlsEnabled *bool `copier:"must,nopanic"` + TlsEnabled *V1TLSConfig `copier:"must,nopanic"` // A deployment topology contains a number of nodes that have various attributes as a collective group. - DeploymentTopologies []DeploymentTopology `copier:"must,nopanic"` + DataServiceDeploymentTopologies []V1DataServiceDeploymentTopology `copier:"must,nopanic"` } -type DeploymentTopology struct { +// V1TLSConfig TLS configuration for the Data Service. +type V1TLSConfig struct { + // Flag to enable TLS for the Data Service. + Enabled *bool `json:"enabled,omitempty"` + // Issuer (Certificate Authority) name for the TLS certificates. + IssuerName *string `json:"issuerName,omitempty"` +} + +type V1DataServiceDeploymentTopology struct { Name *string `copier:"must,nopanic"` // Description of the deployment topology. Description *string `copier:"must,nopanic"` // Number of replicas of data services. - Replicas *string `copier:"must,nopanic"` + Instances *string `copier:"must,nopanic"` // Service type are standard Kubernetes service types such as clusterIP, NodePort, load balancers, etc. ServiceType *string `copier:"must,nopanic"` // Service name is the name of service as provided by user. diff --git a/drivers/unifiedPlatform/automationModels/wfDataServiceDetails.go b/drivers/unifiedPlatform/automationModels/wfDataServiceDetails.go deleted file mode 100644 index 43e75cc0f..000000000 --- a/drivers/unifiedPlatform/automationModels/wfDataServiceDetails.go +++ /dev/null @@ -1,3 +0,0 @@ -package automationModels - -//TODO: This needs to be moved to workflow level diff --git a/drivers/unifiedPlatform/pds/backend/v1/api/backup.go b/drivers/unifiedPlatform/pds/backend/v1/api/backup.go index 9ddc60ea0..ec4677f6a 100644 --- a/drivers/unifiedPlatform/pds/backend/v1/api/backup.go +++ b/drivers/unifiedPlatform/pds/backend/v1/api/backup.go @@ -36,7 +36,7 @@ func (backup *PDS_API_V1) ListBackup(listBackupRequest *automationModels.PDSBack } deploymentId := listBackupRequest.List.DeploymentId - listBkpRequest := bkpClient.BackupServiceListBackups(ctx).DeploymentId(deploymentId) + listBkpRequest := bkpClient.BackupServiceListBackups(ctx).DataServiceDeploymentId(deploymentId) if listBackupRequest.List.SortSortBy != "" { listBkpRequest = listBkpRequest.SortSortBy(listBackupRequest.List.SortSortBy) diff --git a/drivers/unifiedPlatform/pds/backend/v1/api/backupConfig.go b/drivers/unifiedPlatform/pds/backend/v1/api/backupConfig.go index a8b13596d..ea3ce296b 100644 --- a/drivers/unifiedPlatform/pds/backend/v1/api/backupConfig.go +++ b/drivers/unifiedPlatform/pds/backend/v1/api/backupConfig.go @@ -24,7 +24,7 @@ func (backupConf *PDS_API_V1) CreateBackupConfig(createBackupConfigRequest *auto } backupCreateRequest := backupClient.BackupConfigServiceCreateBackupConfig(ctx, createBackupConfigRequest.Create.ProjectId) backupCreateRequest = backupCreateRequest.BackupConfigServiceCreateBackupConfigBody(backupConfigV1.BackupConfigServiceCreateBackupConfigBody{ - DeploymentId: createBackupConfigRequest.Create.DeploymentId, + DataServiceDeploymentId: createBackupConfigRequest.Create.DeploymentId, BackupConfig: backupConfigV1.V1BackupConfig{ Meta: &backupConfigV1.V1Meta{ Name: createBackupConfigRequest.Create.BackupConfig.Meta.Name, diff --git a/drivers/unifiedPlatform/pds/backend/v1/api/common.go b/drivers/unifiedPlatform/pds/backend/v1/api/common.go index 7cbefd47a..7af63701a 100644 --- a/drivers/unifiedPlatform/pds/backend/v1/api/common.go +++ b/drivers/unifiedPlatform/pds/backend/v1/api/common.go @@ -7,8 +7,8 @@ import ( backupV1 "github.com/pure-px/platform-api-go-client/pds/v1/backup" backupConfigV1 "github.com/pure-px/platform-api-go-client/pds/v1/backupconfig" catalogV1 "github.com/pure-px/platform-api-go-client/pds/v1/catalog" - deploymentV1 "github.com/pure-px/platform-api-go-client/pds/v1/deployment" - deploymentsConfigUpdateV1 "github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate" + deploymentV1 "github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment" + deploymentsConfigUpdateV1 "github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate" restoreV1 "github.com/pure-px/platform-api-go-client/pds/v1/restore" ) @@ -62,25 +62,25 @@ func (restore *PDS_API_V1) getRestoreClient() (context.Context, *restoreV1.Resto } // GetClient updates the header with bearer token and returns the new client -func (ds *PDS_API_V1) getDeploymentClient() (context.Context, *deploymentV1.DeploymentServiceAPIService, error) { +func (ds *PDS_API_V1) getDeploymentClient() (context.Context, *deploymentV1.DataServiceDeploymentServiceAPIService, error) { ctx, token, err := utils.GetBearerToken() if err != nil { return nil, nil, fmt.Errorf("Error in getting bearer token: %v\n", err) } ds.DeploymentV1APIClient.GetConfig().DefaultHeader = utils.GetDefaultHeader(token, ds.AccountID) - client := ds.DeploymentV1APIClient.DeploymentServiceAPI + client := ds.DeploymentV1APIClient.DataServiceDeploymentServiceAPI return ctx, client, nil } // GetDeploymentConfigClient updates the header with bearer token and returns the new client -func (ds *PDS_API_V1) getDeploymentConfigClient() (context.Context, *deploymentsConfigUpdateV1.DeploymentConfigUpdateServiceAPIService, error) { +func (ds *PDS_API_V1) getDeploymentConfigClient() (context.Context, *deploymentsConfigUpdateV1.DataServiceDeploymentConfigUpdateServiceAPIService, error) { ctx, token, err := utils.GetBearerToken() if err != nil { return nil, nil, fmt.Errorf("Error in getting bearer token: %v\n", err) } ds.DeploymentsConfigUpdateV1APIClient.GetConfig().DefaultHeader = utils.GetDefaultHeader(token, ds.AccountID) - client := ds.DeploymentsConfigUpdateV1APIClient.DeploymentConfigUpdateServiceAPI + client := ds.DeploymentsConfigUpdateV1APIClient.DataServiceDeploymentConfigUpdateServiceAPI return ctx, client, nil } diff --git a/drivers/unifiedPlatform/pds/backend/v1/api/deployments.go b/drivers/unifiedPlatform/pds/backend/v1/api/deployments.go index e1722aa79..77240e5e1 100644 --- a/drivers/unifiedPlatform/pds/backend/v1/api/deployments.go +++ b/drivers/unifiedPlatform/pds/backend/v1/api/deployments.go @@ -8,11 +8,11 @@ import ( "github.com/jinzhu/copier" "github.com/portworx/torpedo/drivers/unifiedPlatform/automationModels" - deploymentV1 "github.com/pure-px/platform-api-go-client/pds/v1/deployment" + deploymentV1 "github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment" ) var ( - DeploymentRequest deploymentV1.V1Deployment + DeploymentRequest deploymentV1.V1DataServiceDeployment ) func (ds *PDS_API_V1) GetDeployment(deploymentId string) (*automationModels.PDSDeploymentResponse, error) { @@ -24,7 +24,7 @@ func (ds *PDS_API_V1) GetDeployment(deploymentId string) (*automationModels.PDSD return nil, fmt.Errorf("Error in getting context for backend call: %v\n", err) } - dsModel, res, err := dsClient.DeploymentServiceGetDeployment(ctx, deploymentId).Execute() + dsModel, res, err := dsClient.DataServiceDeploymentServiceGetDataServiceDeployment(ctx, deploymentId).Execute() if err != nil || res.StatusCode != status.StatusOK { return nil, fmt.Errorf("Error when calling `DeploymentServiceGetDeployment`: %v\n.Full HTTP response: %v", err, res) } @@ -43,9 +43,9 @@ func (ds *PDS_API_V1) DeleteDeployment(deploymentId string) error { return fmt.Errorf("Error in getting context for backend call: %v\n", err) } - _, res, err := dsClient.DeploymentServiceDeleteDeployment(ctx, deploymentId).Execute() + _, res, err := dsClient.DataServiceDeploymentServiceDeleteDataServiceDeployment(ctx, deploymentId).Execute() if err != nil || res.StatusCode != status.StatusOK { - return fmt.Errorf("Error when calling `DeploymentServiceCreateDeployment`: %v\n.Full HTTP response: %v", err, res) + return fmt.Errorf("Error when calling `DataServiceDeploymentServiceDeleteDataServiceDeployment`: %v\n.Full HTTP response: %v", err, res) } return nil @@ -60,12 +60,12 @@ func (ds *PDS_API_V1) ListDeployment(projectId string) (*automationModels.PDSDep return nil, fmt.Errorf("Error in getting context for backend call: %v\n", err) } - dsModel, res, err := dsClient.DeploymentServiceListDeployments(ctx).ProjectId(projectId).Execute() + dsModel, res, err := dsClient.DataServiceDeploymentServiceListDataServiceDeployments(ctx).Execute() if err != nil || res.StatusCode != status.StatusOK { - return nil, fmt.Errorf("Error when calling `DeploymentServiceCreateDeployment`: %v\n.Full HTTP response: %v", err, res) + return nil, fmt.Errorf("Error when calling `DataServiceDeploymentServiceCreateDataServiceDeployment`: %v\n.Full HTTP response: %v", err, res) } - err = utilities.CopyStruct(dsModel.Deployments, &dsResponse.List) + err = utilities.CopyStruct(dsModel.DataServiceDeployments, &dsResponse.List) if err != nil { return nil, fmt.Errorf("Error while copying list deployment response: %v\n", err) } @@ -78,7 +78,7 @@ func (ds *PDS_API_V1) CreateDeployment(createDeploymentRequest *automationModels dsResponse := automationModels.PDSDeploymentResponse{ Create: automationModels.V1Deployment{}, } - depCreateRequest := deploymentV1.ApiDeploymentServiceCreateDeploymentRequest{} + depCreateRequest := deploymentV1.ApiDataServiceDeploymentServiceCreateDataServiceDeploymentRequest{} ctx, dsClient, err := ds.getDeploymentClient() if err != nil { @@ -92,19 +92,19 @@ func (ds *PDS_API_V1) CreateDeployment(createDeploymentRequest *automationModels //Debug Print fmt.Println("DeploymentRequestBody Name ", *DeploymentRequest.Meta.Name) - fmt.Println("Storage Template Id: ", *DeploymentRequest.Config.DeploymentTopologies[0].StorageOptions.Id) - fmt.Println("App Template Id: ", *DeploymentRequest.Config.DeploymentTopologies[0].ServiceConfigurations.Id) - fmt.Println("Resource Template Id: ", *DeploymentRequest.Config.DeploymentTopologies[0].ResourceSettings.Id) + fmt.Println("Storage Template Id: ", *DeploymentRequest.Config.DataServiceDeploymentTopologies[0].StorageOptions.Id) + fmt.Println("App Template Id: ", *DeploymentRequest.Config.DataServiceDeploymentTopologies[0].ServiceConfigurations.Id) + fmt.Println("Resource Template Id: ", *DeploymentRequest.Config.DataServiceDeploymentTopologies[0].ResourceSettings.Id) - DeploymentRequestBody := deploymentV1.DeploymentServiceCreateDeploymentBody{ - ProjectId: &createDeploymentRequest.Create.ProjectID, - Deployment: &DeploymentRequest, + DeploymentRequestBody := deploymentV1.DataServiceDeploymentServiceCreateDataServiceDeploymentBody{ + ProjectId: &createDeploymentRequest.Create.ProjectID, + DataServiceDeployment: &DeploymentRequest, } - depCreateRequest = dsClient.DeploymentServiceCreateDeployment(ctx, createDeploymentRequest.Create.NamespaceID).DeploymentServiceCreateDeploymentBody(DeploymentRequestBody) - dsModel, res, err := dsClient.DeploymentServiceCreateDeploymentExecute(depCreateRequest) + depCreateRequest = dsClient.DataServiceDeploymentServiceCreateDataServiceDeployment(ctx, createDeploymentRequest.Create.NamespaceID).DataServiceDeploymentServiceCreateDataServiceDeploymentBody(DeploymentRequestBody) + dsModel, res, err := dsClient.DataServiceDeploymentServiceCreateDataServiceDeploymentExecute(depCreateRequest) if err != nil || res.StatusCode != status.StatusOK { - return nil, fmt.Errorf("Error when calling `DeploymentServiceCreateDeployment`: %v\n.Full HTTP response: %v", err, res) + return nil, fmt.Errorf("Error when calling `DataServiceDeploymentServiceCreateDataServiceDeployment`: %v\n.Full HTTP response: %v", err, res) } log.Debugf("deployment Name [%s]", *dsModel.Status.CustomResourceName) diff --git a/drivers/unifiedPlatform/pds/backend/v1/api/deploymentsConfigUpdate.go b/drivers/unifiedPlatform/pds/backend/v1/api/deploymentsConfigUpdate.go index dc6beed3a..e1b330309 100644 --- a/drivers/unifiedPlatform/pds/backend/v1/api/deploymentsConfigUpdate.go +++ b/drivers/unifiedPlatform/pds/backend/v1/api/deploymentsConfigUpdate.go @@ -4,14 +4,14 @@ import ( "fmt" "github.com/portworx/torpedo/drivers/utilities" "github.com/portworx/torpedo/pkg/log" - deploymentsConfigUpdateV1 "github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate" + deploymentsConfigUpdateV1 "github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate" status "net/http" "github.com/portworx/torpedo/drivers/unifiedPlatform/automationModels" ) var ( - UpdateDeploymentRequest deploymentsConfigUpdateV1.DeploymentConfigUpdateOfTheDeploymentUpdateRequest + UpdateDeploymentRequest deploymentsConfigUpdateV1.DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest ) func (ds *PDS_API_V1) GetDeploymentConfig(updateDeploymentRequest *automationModels.PDSDeploymentRequest) (*automationModels.PDSDeploymentResponse, error) { @@ -24,7 +24,7 @@ func (ds *PDS_API_V1) GetDeploymentConfig(updateDeploymentRequest *automationMod return nil, fmt.Errorf("Error in getting context for backend call: %v\n", err) } - dsModel, res, err := dsClient.DeploymentConfigUpdateServiceGetDeploymentConfigUpdate(ctx, updateDeploymentRequest.Update.DeploymentConfigId).Execute() + dsModel, res, err := dsClient.DataServiceDeploymentConfigUpdateServiceGetDataServiceDeploymentConfigUpdate(ctx, updateDeploymentRequest.Update.DeploymentConfigId).Execute() log.Debugf("updated dsModel [%v]", dsModel) log.Debugf("response [%v]", res) if err != nil || res.StatusCode != status.StatusOK { @@ -53,7 +53,7 @@ func (ds *PDS_API_V1) UpdateDeployment(updateDeploymentRequest *automationModels return nil, fmt.Errorf("Error occured while copying updateDeploymentRequest %v\n", err) } - dsModel, res, err := dsClient.DeploymentConfigUpdateServiceCreateDeploymentConfigUpdate(ctx, updateDeploymentRequest.Update.DeploymentID).DeploymentConfigUpdateOfTheDeploymentUpdateRequest(UpdateDeploymentRequest).Execute() + dsModel, res, err := dsClient.DataServiceDeploymentConfigUpdateServiceCreateDataServiceDeploymentConfigUpdate(ctx, updateDeploymentRequest.Update.DeploymentID).DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest(UpdateDeploymentRequest).Execute() log.Debugf("updated dsModel [%v]", dsModel) log.Debugf("response [%v]", res) if err != nil || res.StatusCode != status.StatusOK { diff --git a/drivers/unifiedPlatform/pds/backend/v1/api/restore.go b/drivers/unifiedPlatform/pds/backend/v1/api/restore.go index f0467e720..a896a75c4 100644 --- a/drivers/unifiedPlatform/pds/backend/v1/api/restore.go +++ b/drivers/unifiedPlatform/pds/backend/v1/api/restore.go @@ -139,7 +139,7 @@ func (restore *PDS_API_V1) ListRestore(listRestoresRequest *automationModels.PDS } restoreRequest := restoreClient.RestoreServiceListRestores(ctx) - restoreRequest = restoreRequest.DeploymentId(listRestoresRequest.List.DeploymentId) + restoreRequest = restoreRequest.DataServiceDeploymentId(listRestoresRequest.List.DeploymentId) restoreRequest = restoreRequest.BackupId(listRestoresRequest.List.BackupId) restoreRequest = restoreRequest.ProjectId(listRestoresRequest.List.ProjectId) restoreRequest = restoreRequest.TenantId(listRestoresRequest.List.TenantId) diff --git a/drivers/unifiedPlatform/pds/backend/v1/grpc/deployments.go b/drivers/unifiedPlatform/pds/backend/v1/grpc/deployments.go index 76c1f6e04..728e83290 100644 --- a/drivers/unifiedPlatform/pds/backend/v1/grpc/deployments.go +++ b/drivers/unifiedPlatform/pds/backend/v1/grpc/deployments.go @@ -7,15 +7,15 @@ import ( . "github.com/portworx/torpedo/drivers/unifiedPlatform/automationModels" . "github.com/portworx/torpedo/drivers/unifiedPlatform/utils" "github.com/portworx/torpedo/pkg/log" - publicdeploymentapis "github.com/pure-px/apis/public/portworx/pds/deployment/apiv1" - deploymenttopology "github.com/pure-px/apis/public/portworx/pds/deploymenttopology/apiv1" + publicdeploymentapis "github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1" + deploymenttopology "github.com/pure-px/apis/public/portworx/pds/dataservicedeploymenttopology/apiv1" "google.golang.org/grpc" ) // getDeploymentClient updates the header with bearer token and returns the new client -func (deployment *PdsGrpc) getDeploymentClient() (context.Context, publicdeploymentapis.DeploymentServiceClient, string, error) { +func (deployment *PdsGrpc) getDeploymentClient() (context.Context, publicdeploymentapis.DataServiceDeploymentServiceClient, string, error) { log.Infof("Creating client from grpc package") - var depClient publicdeploymentapis.DeploymentServiceClient + var depClient publicdeploymentapis.DataServiceDeploymentServiceClient ctx, token, err := GetBearerToken() if err != nil { @@ -26,7 +26,7 @@ func (deployment *PdsGrpc) getDeploymentClient() (context.Context, publicdeploym Token: token, } - depClient = publicdeploymentapis.NewDeploymentServiceClient(deployment.ApiClientV2) + depClient = publicdeploymentapis.NewDataServiceDeploymentServiceClient(deployment.ApiClientV2) return ctx, depClient, token, nil } @@ -40,11 +40,11 @@ func (deployment *PdsGrpc) GetDeployment(deploymentId string) (*PDSDeploymentRes return nil, fmt.Errorf("Error while getting grpc client: %v\n", err) } - getRequest := &publicdeploymentapis.GetDeploymentRequest{ + getRequest := &publicdeploymentapis.GetDataServiceDeploymentRequest{ Id: deploymentId, } ctx = WithAccountIDMetaCtx(ctx, deployment.AccountId) - apiResponse, err := client.GetDeployment(ctx, getRequest) + apiResponse, err := client.GetDataServiceDeployment(ctx, getRequest) log.Infof("api response [+%v]", apiResponse) if err != nil { return nil, fmt.Errorf("Error while getting the deployment: %v\n", err) @@ -63,12 +63,12 @@ func (deployment *PdsGrpc) DeleteDeployment(deploymentId string) error { return fmt.Errorf("Error while getting grpc client: %v\n", err) } - deleteRequest := &publicdeploymentapis.DeleteDeploymentRequest{ + deleteRequest := &publicdeploymentapis.DeleteDataServiceDeploymentRequest{ Id: deploymentId, } ctx = WithAccountIDMetaCtx(ctx, deployment.AccountId) - apiResponse, err := client.DeleteDeployment(ctx, deleteRequest) + apiResponse, err := client.DeleteDataServiceDeployment(ctx, deleteRequest) log.Infof("api response [+%v]", apiResponse) if err != nil { return fmt.Errorf("Error while deleting the deployment: %v\n", err) @@ -89,14 +89,13 @@ func (deployment *PdsGrpc) ListDeployment(projectId string) (*PDSDeploymentRespo return nil, fmt.Errorf("Error while getting grpc client: %v\n", err) } - listRequest := &publicdeploymentapis.ListDeploymentsRequest{ - ListBy: nil, + listRequest := &publicdeploymentapis.ListDataServiceDeploymentsRequest{ Pagination: NewPaginationRequest(1, 50), Sort: nil, } ctx = WithAccountIDMetaCtx(ctx, deployment.AccountId) - apiResponse, err := client.ListDeployments(ctx, listRequest, grpc.PerRPCCredentials(credentials)) + apiResponse, err := client.ListDataServiceDeployments(ctx, listRequest, grpc.PerRPCCredentials(credentials)) log.Infof("api response [+%v]", apiResponse) if err != nil { return nil, fmt.Errorf("Error while creating the deployment: %v\n", err) @@ -115,19 +114,19 @@ func (deployment *PdsGrpc) CreateDeployment(createDeploymentRequest *PDSDeployme } dep := createDeploymentRequest.Create.V1Deployment - createRequest := &publicdeploymentapis.CreateDeploymentRequest{ + createRequest := &publicdeploymentapis.CreateDataServiceDeploymentRequest{ NamespaceId: createDeploymentRequest.Create.NamespaceID, - Deployment: &publicdeploymentapis.Deployment{ + DataServiceDeployment: &publicdeploymentapis.DataServiceDeployment{ Meta: nil, Config: &publicdeploymentapis.Config{ References: nil, - DeploymentTopologies: []*deploymenttopology.DeploymentTopology{ + DataServiceDeploymentTopologies: []*deploymenttopology.DataServiceDeploymentTopology{ { Name: *dep.Meta.Name, Description: "", - Replicas: 3, + Instances: 3, ResourceSettings: &deploymenttopology.Template{ - Id: *dep.Config.DeploymentTopologies[0].ResourceSettings.Id, + Id: *dep.Config.DataServiceDeploymentTopologies[0].ResourceSettings.Id, ResourceVersion: "", Values: nil, }, @@ -144,11 +143,11 @@ func (deployment *PdsGrpc) CreateDeployment(createDeploymentRequest *PDSDeployme log.Debugf("Account ID: [%s]", deployment.AccountId) log.Debugf("Namespace ID: [%s]", createDeploymentRequest.Create.NamespaceID) - log.Debugf("workflowrequest ResourceTemplateId: [%s]", *createDeploymentRequest.Create.V1Deployment.Config.DeploymentTopologies[0].ResourceSettings.Id) + log.Debugf("workflowrequest ResourceTemplateId: [%s]", *createDeploymentRequest.Create.V1Deployment.Config.DataServiceDeploymentTopologies[0].ResourceSettings.Id) ctx = WithAccountIDMetaCtx(ctx, deployment.AccountId) - apiResponse, err := client.CreateDeployment(ctx, createRequest, grpc.PerRPCCredentials(credentials)) + apiResponse, err := client.CreateDataServiceDeployment(ctx, createRequest, grpc.PerRPCCredentials(credentials)) log.Infof("api response [+%v]", apiResponse) if err != nil { return nil, fmt.Errorf("Error while creating the deployment: %v\n", err) diff --git a/drivers/unifiedPlatform/pds/backend/v1/grpc/deploymentsConfigUpdate.go b/drivers/unifiedPlatform/pds/backend/v1/grpc/deploymentsConfigUpdate.go index 7aee88e13..c4e4182a2 100644 --- a/drivers/unifiedPlatform/pds/backend/v1/grpc/deploymentsConfigUpdate.go +++ b/drivers/unifiedPlatform/pds/backend/v1/grpc/deploymentsConfigUpdate.go @@ -8,16 +8,16 @@ import ( "github.com/portworx/torpedo/drivers/utilities" "github.com/portworx/torpedo/pkg/log" commonapiv1 "github.com/pure-px/apis/public/portworx/common/apiv1" - publicdeploymentapis "github.com/pure-px/apis/public/portworx/pds/deployment/apiv1" - publicdeploymentConfigUpdate "github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1" - deploymenttopology "github.com/pure-px/apis/public/portworx/pds/deploymenttopology/apiv1" + publicdeploymentapis "github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1" + publicdeploymentConfigUpdate "github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1" + deploymenttopology "github.com/pure-px/apis/public/portworx/pds/dataservicedeploymenttopology/apiv1" "google.golang.org/grpc" ) // GetClient updates the header with bearer token and returns the new client -func (deployment *PdsGrpc) getDeploymentConfigClient() (context.Context, publicdeploymentConfigUpdate.DeploymentConfigUpdateServiceClient, string, error) { +func (deployment *PdsGrpc) getDeploymentConfigClient() (context.Context, publicdeploymentConfigUpdate.DataServiceDeploymentConfigUpdateServiceClient, string, error) { log.Infof("Creating client from grpc package") - var depClient publicdeploymentConfigUpdate.DeploymentConfigUpdateServiceClient + var depClient publicdeploymentConfigUpdate.DataServiceDeploymentConfigUpdateServiceClient ctx, token, err := GetBearerToken() if err != nil { @@ -28,7 +28,7 @@ func (deployment *PdsGrpc) getDeploymentConfigClient() (context.Context, publicd Token: token, } - depClient = publicdeploymentConfigUpdate.NewDeploymentConfigUpdateServiceClient(deployment.ApiClientV2) + depClient = publicdeploymentConfigUpdate.NewDataServiceDeploymentConfigUpdateServiceClient(deployment.ApiClientV2) return ctx, depClient, token, nil } @@ -49,8 +49,8 @@ func (deployment *PdsGrpc) UpdateDeployment(updateDeploymentRequest *automationM } //TODO: try copy else go with the below approach - updateRequest := &publicdeploymentConfigUpdate.CreateDeploymentConfigUpdateRequest{ - DeploymentConfigUpdate: &publicdeploymentConfigUpdate.DeploymentConfigUpdate{ + updateRequest := &publicdeploymentConfigUpdate.CreateDataServiceDeploymentConfigUpdateRequest{ + DataServiceDeploymentConfigUpdate: &publicdeploymentConfigUpdate.DataServiceDeploymentConfigUpdate{ Meta: &commonapiv1.Meta{ Uid: "", Name: "", @@ -64,7 +64,7 @@ func (deployment *PdsGrpc) UpdateDeployment(updateDeploymentRequest *automationM ResourceNames: nil, }, Config: &publicdeploymentConfigUpdate.Config{ - DeploymentMeta: &commonapiv1.Meta{ + DataServiceDeploymentMeta: &commonapiv1.Meta{ Uid: "", Name: "", Description: "", @@ -76,14 +76,14 @@ func (deployment *PdsGrpc) UpdateDeployment(updateDeploymentRequest *automationM ParentReference: nil, ResourceNames: nil, }, - DeploymentConfig: &publicdeploymentapis.Config{ + DataServiceDeploymentConfig: &publicdeploymentapis.Config{ References: nil, //TlsEnabled: false, - DeploymentTopologies: []*deploymenttopology.DeploymentTopology{ + DataServiceDeploymentTopologies: []*deploymenttopology.DataServiceDeploymentTopology{ { Name: "", Description: "", - Replicas: 4, + Instances: 4, ResourceSettings: &deploymenttopology.Template{ Id: "", ResourceVersion: "", @@ -102,7 +102,7 @@ func (deployment *PdsGrpc) UpdateDeployment(updateDeploymentRequest *automationM return nil, fmt.Errorf("Error while c: %v\n", err) } - apiResponse, err := client.CreateDeploymentConfigUpdate(ctx, updateRequest, grpc.PerRPCCredentials(credentials)) + apiResponse, err := client.CreateDataServiceDeploymentConfigUpdate(ctx, updateRequest, grpc.PerRPCCredentials(credentials)) if err != nil { return nil, fmt.Errorf("Error while updating the deployment: %v\n", err) } diff --git a/drivers/unifiedPlatform/pds/backend/v1/grpc/restore.go b/drivers/unifiedPlatform/pds/backend/v1/grpc/restore.go index 937a9b070..3e82e90e1 100644 --- a/drivers/unifiedPlatform/pds/backend/v1/grpc/restore.go +++ b/drivers/unifiedPlatform/pds/backend/v1/grpc/restore.go @@ -144,25 +144,25 @@ func (restore *PdsGrpc) GetRestore(getRestoreRequest *automationModels.PDSRestor func (restore *PdsGrpc) DeleteRestore(deleteRestoreRequest *automationModels.PDSRestoreRequest) error { // log.Infof("Backup Delete - [%+v]", deleteBackupConfigRequest.BackupConfig.Delete) - deleteRequest := &publicRestoreapis.DeleteRestoreRequest{} - // log.Infof("Restore Delete - [%v]", deleteRequest) - err := utilities.CopyStruct(deleteRestoreRequest.Delete, deleteRequest) - if err != nil { - return err - } + //deleteRequest := &publicRestoreapis.DeleteRestoreRequest{} + //// log.Infof("Restore Delete - [%v]", deleteRequest) + //err := utilities.CopyStruct(deleteRestoreRequest.Delete, deleteRequest) + //if err != nil { + // return err + //} // log.Infof("Restore Delete - [%v]", deleteRequest) - ctx, client, _, err := restore.getRestoreClient() - if err != nil { - return fmt.Errorf("Error while getting grpc client: %v\n", err) - } - - ctx = WithAccountIDMetaCtx(ctx, restore.AccountId) - - _, err = client.DeleteRestore(ctx, deleteRequest, grpc.PerRPCCredentials(credentials)) - if err != nil { - return fmt.Errorf("Error while deleting the restore: %v\n", err) - } + //ctx, client, _, err := restore.getRestoreClient() + //if err != nil { + // return fmt.Errorf("Error while getting grpc client: %v\n", err) + //} + // + //ctx = WithAccountIDMetaCtx(ctx, restore.AccountId) + // + //_, err = client.DeleteRestore(ctx, deleteRequest, grpc.PerRPCCredentials(credentials)) + //if err != nil { + // return fmt.Errorf("Error while deleting the restore: %v\n", err) + //} return nil } diff --git a/drivers/unifiedPlatform/pdsLibs/dsLib.go b/drivers/unifiedPlatform/pdsLibs/dsLib.go index 77bdcbf6b..8b22175a1 100644 --- a/drivers/unifiedPlatform/pdsLibs/dsLib.go +++ b/drivers/unifiedPlatform/pdsLibs/dsLib.go @@ -70,18 +70,18 @@ func UpdateDataService(ds PDSDataService, deploymentId, namespaceId, projectId, Meta: automationModels.Meta{ Name: &ds.DeploymentName, }, - Config: automationModels.DeploymentUpdateConfig{ - DeploymentMeta: automationModels.Meta{ + Config: automationModels.DataServiceDeploymentUpdateConfig{ + DataServiceDeploymentMeta: automationModels.Meta{ Description: StringPtr("pds-qa-tests"), }, - DeploymentConfig: automationModels.V1Config1{ + DataServiceDeploymentConfig: automationModels.V1Config1{ References: automationModels.Reference{ ImageId: &imageId, }, - DeploymentTopologies: []automationModels.DeploymentTopology{ + DataServiceDeploymentTopologies: []automationModels.V1DataServiceDeploymentTopology{ { - Name: StringPtr(DEPLOYMENT_TOPOLOGY), - Replicas: intToPointerString(ds.ScaleReplicas), + Name: StringPtr(DEPLOYMENT_TOPOLOGY), + Instances: intToPointerString(ds.ScaleReplicas), ResourceSettings: &automationModels.PdsTemplates{ Id: &resConfigId, }, @@ -137,7 +137,7 @@ func GetDeploymentAndPodDetails(deploymentId string) (*automationModels.PDSDeplo return nil, "", err } log.Debugf("deployment [%+v]", deployment) - pod := deployment.Get.Status.DeploymentTopologyStatus[0].ConnectionInfo.Pods[0].Name + pod := deployment.Get.Status.DataServiceDeploymentTopologyStatus[0].ConnectionInfo.ReadyInstances[0].Name log.Debugf("pods [%+v]", *pod) podName := utilities.GetBasePodName(*pod) return deployment, podName, err @@ -159,10 +159,10 @@ func DeployDataService(ds PDSDataService, namespaceId, projectId, targetClusterI ImageId: &imageId, }, TlsEnabled: nil, - DeploymentTopologies: []automationModels.DeploymentTopology{ + DataServiceDeploymentTopologies: []automationModels.V1DataServiceDeploymentTopology{ { Name: StringPtr(DEPLOYMENT_TOPOLOGY), - Replicas: intToPointerString(ds.Replicas), + Instances: intToPointerString(ds.Replicas), ServiceType: StringPtr(ds.ServiceType), ResourceSettings: &automationModels.PdsTemplates{ Id: &resConfigId, @@ -180,9 +180,9 @@ func DeployDataService(ds PDSDataService, namespaceId, projectId, targetClusterI }, } - log.Infof("app template ids [%s]", *depInputs.Create.V1Deployment.Config.DeploymentTopologies[0].ServiceConfigurations.Id) - log.Infof("resource template ids [%s]", *depInputs.Create.V1Deployment.Config.DeploymentTopologies[0].ResourceSettings.Id) - log.Infof("storage template ids [%s]", *depInputs.Create.V1Deployment.Config.DeploymentTopologies[0].StorageOptions.Id) + log.Infof("app template ids [%s]", *depInputs.Create.V1Deployment.Config.DataServiceDeploymentTopologies[0].ServiceConfigurations.Id) + log.Infof("resource template ids [%s]", *depInputs.Create.V1Deployment.Config.DataServiceDeploymentTopologies[0].ResourceSettings.Id) + log.Infof("storage template ids [%s]", *depInputs.Create.V1Deployment.Config.DataServiceDeploymentTopologies[0].StorageOptions.Id) log.Infof("depInputs [+%v]", depInputs.Create) deployment, err := v2Components.PDS.CreateDeployment(depInputs) diff --git a/drivers/unifiedPlatform/pdsLibs/validateBackupRestore.go b/drivers/unifiedPlatform/pdsLibs/validateBackupRestore.go index 570492835..aea7fc445 100644 --- a/drivers/unifiedPlatform/pdsLibs/validateBackupRestore.go +++ b/drivers/unifiedPlatform/pdsLibs/validateBackupRestore.go @@ -55,24 +55,24 @@ func ValidateRestoreDeployment(restoreId, namespace string) error { } newDeployment := make(map[string]string) - newDeployment[*restore.Get.Meta.Name] = restore.Get.Config.DestinationReferences.DeploymentId + newDeployment[*restore.Get.Meta.Name] = restore.Get.Config.DestinationReferences.DataServiceDeploymentId - err = ValidateDataServiceDeploymentHealth(restore.Get.Config.DestinationReferences.DeploymentId, PDS_DEPLOYMENT_AVAILABLE) + err = ValidateDataServiceDeploymentHealth(restore.Get.Config.DestinationReferences.DataServiceDeploymentId, PDS_DEPLOYMENT_AVAILABLE) if err != nil { return fmt.Errorf("error while validating restored deployment readiness") } - sourceDeployment, err := GetDeployment(restore.Get.Config.SourceReferences.DeploymentId) + sourceDeployment, err := GetDeployment(restore.Get.Config.SourceReferences.DataServiceDeploymentId) if err != nil { return fmt.Errorf("error while fetching source deployment object") } - destinationDeployment, err := GetDeployment(restore.Get.Config.DestinationReferences.DeploymentId) + destinationDeployment, err := GetDeployment(restore.Get.Config.DestinationReferences.DataServiceDeploymentId) if err != nil { return fmt.Errorf("error while fetching destination deployment object") } - err = ValidateRestore(sourceDeployment.Get.Config.DeploymentTopologies[0], destinationDeployment.Get.Config.DeploymentTopologies[0]) + err = ValidateRestore(sourceDeployment.Get.Config.DataServiceDeploymentTopologies[0], destinationDeployment.Get.Config.DataServiceDeploymentTopologies[0]) if err != nil { return fmt.Errorf("error while validation data service entities(i.e App config, resource etc). Err: %v", err) } @@ -81,23 +81,23 @@ func ValidateRestoreDeployment(restoreId, namespace string) error { } // ValidateRestoreAfterSourceDeploymentUpgrade Validates the restored deployment config with source deployment config before upgrade -func ValidateRestoreAfterSourceDeploymentUpgrade(restoreId string, sourceDeploymentConfig automationModels.DeploymentTopology) error { +func ValidateRestoreAfterSourceDeploymentUpgrade(restoreId string, sourceDeploymentConfig automationModels.V1DataServiceDeploymentTopology) error { restore, err := ValidateRestoreStatus(restoreId) if err != nil { return err } - err = ValidateDataServiceDeploymentHealth(restore.Get.Config.DestinationReferences.DeploymentId, PDS_DEPLOYMENT_AVAILABLE) + err = ValidateDataServiceDeploymentHealth(restore.Get.Config.DestinationReferences.DataServiceDeploymentId, PDS_DEPLOYMENT_AVAILABLE) if err != nil { return fmt.Errorf("error while validating restored deployment readiness") } - destinationDeployment, err := GetDeployment(restore.Get.Config.DestinationReferences.DeploymentId) + destinationDeployment, err := GetDeployment(restore.Get.Config.DestinationReferences.DataServiceDeploymentId) if err != nil { return fmt.Errorf("error while fetching destination deployment object") } - err = ValidateRestore(sourceDeploymentConfig, destinationDeployment.Get.Config.DeploymentTopologies[0]) + err = ValidateRestore(sourceDeploymentConfig, destinationDeployment.Get.Config.DataServiceDeploymentTopologies[0]) if err != nil { return fmt.Errorf("error while validation data service entities(i.e App config, resource etc). Err: %v", err) } @@ -106,7 +106,7 @@ func ValidateRestoreAfterSourceDeploymentUpgrade(restoreId string, sourceDeploym } // ValidateRestore validates the Resource, App and Storage configurations of source and destination deployments -func ValidateRestore(sourceDep, destDep automationModels.DeploymentTopology) error { +func ValidateRestore(sourceDep, destDep automationModels.V1DataServiceDeploymentTopology) error { //TODO : This validation needs to be revisited once we have the working pds templates api @@ -145,8 +145,8 @@ func ValidateRestore(sourceDep, destDep automationModels.DeploymentTopology) err } // Validate the replicas - sourceReplicas := sourceDep.Replicas - destReplicas := destDep.Replicas + sourceReplicas := sourceDep.Instances + destReplicas := destDep.Instances log.Debugf("source replicas [%d], dest repicas [%d]", *sourceReplicas, *destReplicas) if *sourceReplicas != *destReplicas { return fmt.Errorf("restored replicas are not same as backed up resource config") diff --git a/drivers/unifiedPlatform/pdsLibs/validateDataService.go b/drivers/unifiedPlatform/pdsLibs/validateDataService.go index 800d33916..ab28a638b 100644 --- a/drivers/unifiedPlatform/pdsLibs/validateDataService.go +++ b/drivers/unifiedPlatform/pdsLibs/validateDataService.go @@ -194,12 +194,12 @@ func ValidateDataServiceDeploymentHealth(deploymentId string, expectedHealth aut return false, nil } if *res.Get.Status.Phase == stworkflows.FAILED { - log.Infof("Deployment details: Health status - %v, Replicas - %v, Ready replicas - %v", *res.Get.Status.Health, *res.Get.Config.DeploymentTopologies[0].Replicas, *res.Get.Status.DeploymentTopologyStatus[0].ReadyReplicas) + log.Infof("Deployment details: Health status - %v, Replicas - %v, Ready replicas - %v", *res.Get.Status.Health, *res.Get.Config.DataServiceDeploymentTopologies[0].Instances, *res.Get.Status.DataServiceDeploymentTopologyStatus[0].ReadyInstances) return true, fmt.Errorf("Deployment [%s] is [%s]", *res.Get.Meta.Name, *res.Get.Status.Phase) } log.Debugf("Health status - [%v]", *res.Get.Status.Health) if *res.Get.Status.Health == expectedHealth { - log.Infof("Deployment details: Health status - %v, Replicas - %v, Ready replicas - %v", *res.Get.Status.Health, *res.Get.Config.DeploymentTopologies[0].Replicas, *res.Get.Status.DeploymentTopologyStatus[0].ReadyReplicas) + log.Infof("Deployment details: Health status - %v, Replicas - %v, Ready replicas - %v", *res.Get.Status.Health, *res.Get.Config.DataServiceDeploymentTopologies[0].Instances, *res.Get.Status.DataServiceDeploymentTopologyStatus[0].ReadyInstances) if ResiFlag { ResiliencyCondition <- true log.InfoD("Resiliency Condition Met") @@ -228,10 +228,10 @@ func ValidateDeploymentIsDeleted(deploymentId string) error { return true, nil } log.Debugf("Health status - %v", *res.Get.Status.Health) - if *res.Get.Config.DeploymentTopologies[0].Replicas != *res.Get.Status.DeploymentTopologyStatus[0].ReadyReplicas || *res.Get.Status.Health != PDS_DEPLOYMENT_AVAILABLE { + if *res.Get.Config.DataServiceDeploymentTopologies[0].Instances != *res.Get.Status.DataServiceDeploymentTopologyStatus[0].ReadyInstances || *res.Get.Status.Health != PDS_DEPLOYMENT_AVAILABLE { return false, nil } - log.Infof("Deployment details: Health status - %v, Replicas - %v, Ready replicas - %v", *res.Get.Status.Health, *res.Get.Config.DeploymentTopologies[0].Replicas, *res.Get.Status.DeploymentTopologyStatus[0].ReadyReplicas) + log.Infof("Deployment details: Health status - %v, Replicas - %v, Ready replicas - %v", *res.Get.Status.Health, *res.Get.Config.DataServiceDeploymentTopologies[0].Instances, *res.Get.Status.DataServiceDeploymentTopologyStatus[0].ReadyInstances) return false, nil }) diff --git a/drivers/unifiedPlatform/platform/backend/v1/api/templates.go b/drivers/unifiedPlatform/platform/backend/v1/api/templates.go index fb551c602..87cccc348 100644 --- a/drivers/unifiedPlatform/platform/backend/v1/api/templates.go +++ b/drivers/unifiedPlatform/platform/backend/v1/api/templates.go @@ -84,17 +84,19 @@ func (template *PLATFORM_API_V1) UpdateTemplates(templateReq *PlatformTemplatesR return nil, fmt.Errorf("Error in getting context for backend call: %v\n", err) } templateResponse := PlatformTemplatesResponse{} - tempValueBody := templatesv1.V1Template{ - Meta: &templatesv1.V1Meta{Name: templateReq.Create.Template.Meta.Name}, - Config: &templatesv1.V1Config{ - Kind: templateReq.Create.Template.Config.Kind, - SemanticVersion: templateReq.Create.Template.Config.SemanticVersion, - RevisionUid: templateReq.Create.Template.Config.RevisionUid, - TemplateValues: templateReq.Create.Template.Config.TemplateValues, + tempValueBody := templatesv1.TemplateServiceUpdateTemplateBody{ + Template: &templatesv1.DesiredTemplateConfiguration{ + Meta: &templatesv1.MetadataOfTheResource{Name: templateReq.Create.Template.Meta.Name}, + Config: &templatesv1.V1Config{ + Kind: templateReq.Create.Template.Config.Kind, + SemanticVersion: templateReq.Create.Template.Config.SemanticVersion, + RevisionUid: templateReq.Create.Template.Config.RevisionUid, + TemplateValues: templateReq.Create.Template.Config.TemplateValues, + }, }, } templateUpdateRequest := client.TemplateServiceUpdateTemplate(ctx, templateReq.Update.Id) - templateUpdateRequest = templateUpdateRequest.V1Template(tempValueBody) + templateUpdateRequest = templateUpdateRequest.TemplateServiceUpdateTemplateBody(tempValueBody) templateModel, res, err := templateUpdateRequest.Execute() if err != nil || res.StatusCode != status.StatusOK { return nil, fmt.Errorf("Error when calling `TemplateServiceUpdateTemplateExecute`: %v\n.Full HTTP response: %v", err, res) diff --git a/drivers/unifiedPlatform/platform/backend/v1/grpc/templates.go b/drivers/unifiedPlatform/platform/backend/v1/grpc/templates.go index 338c649f3..adfe4ba62 100644 --- a/drivers/unifiedPlatform/platform/backend/v1/grpc/templates.go +++ b/drivers/unifiedPlatform/platform/backend/v1/grpc/templates.go @@ -88,7 +88,7 @@ func (templateGrpc *PlatformGrpc) UpdateTemplates(templateReq *PlatformTemplates } tempval := structpb.Struct{} updateTemplateReq := publictemplateapis.UpdateTemplateRequest{ - Id: templateReq.Update.Id, + //Id: templateReq.Update.Id, Template: &publictemplateapis.Template{ Meta: &commonapiv1.Meta{Name: *templateReq.Create.Template.Meta.Name}, Config: &publictemplateapis.Config{ diff --git a/drivers/unifiedPlatform/resiliency/utils.go b/drivers/unifiedPlatform/resiliency/utils.go index 1fb8ed1e1..16841bc72 100644 --- a/drivers/unifiedPlatform/resiliency/utils.go +++ b/drivers/unifiedPlatform/resiliency/utils.go @@ -648,9 +648,9 @@ func ResizeDataServiceStorage(deployment *automationModels.V1Deployment, ds dsli log.Debugf("Starting to resize the storage and UpdateDeploymentResourceConfig") //Get required Id's - stConfigId := *deployment.Config.DeploymentTopologies[0].StorageOptions.Id - appConfigId := *deployment.Config.DeploymentTopologies[0].ServiceConfigurations.Id - oldResConfigId := *deployment.Config.DeploymentTopologies[0].ResourceSettings.Id + stConfigId := *deployment.Config.DataServiceDeploymentTopologies[0].StorageOptions.Id + appConfigId := *deployment.Config.DataServiceDeploymentTopologies[0].ServiceConfigurations.Id + oldResConfigId := *deployment.Config.DataServiceDeploymentTopologies[0].ResourceSettings.Id projectId := *deployment.Config.References.ProjectId imageId := *deployment.Config.References.ImageId deploymentId := *deployment.Meta.Uid @@ -709,7 +709,7 @@ func ResizeDataServiceStorage(deployment *automationModels.V1Deployment, ds dsli return false, err } - newResourceTemp, err := dslibs.GetResourceTemplateConfigs(*UpdatedDeployment.Get.Config.DeploymentTopologies[0].ResourceSettings.Id) + newResourceTemp, err := dslibs.GetResourceTemplateConfigs(*UpdatedDeployment.Get.Config.DataServiceDeploymentTopologies[0].ResourceSettings.Id) if err != nil { if ResiliencyFlag { ResiliencyCondition <- false diff --git a/drivers/unifiedPlatform/stworkflows/pds/workflowDataservice.go b/drivers/unifiedPlatform/stworkflows/pds/workflowDataservice.go index 8056ddd36..5052b1076 100644 --- a/drivers/unifiedPlatform/stworkflows/pds/workflowDataservice.go +++ b/drivers/unifiedPlatform/stworkflows/pds/workflowDataservice.go @@ -146,7 +146,7 @@ func (wfDataService *WorkflowDataService) UpdateDataService(ds dslibs.PDSDataSer return nil, err } - err = wfDataService.ValidatePdsDataServiceDeployments(*deployment.Update.Config.DeploymentMeta.Uid, ds, ds.ScaleReplicas, resConfigId, stConfigId, namespaceName, version, image) + err = wfDataService.ValidatePdsDataServiceDeployments(*deployment.Update.Config.DataServiceDeploymentMeta.Uid, ds, ds.ScaleReplicas, resConfigId, stConfigId, namespaceName, version, image) if err != nil { return nil, err } @@ -210,13 +210,13 @@ func (wfDataService *WorkflowDataService) GetDsDeploymentResources(deploymentId return resourceTemp, storageOp, dbConfig, err } - log.Debugf("Resource Template Id After Update [%s]", *deployment.Get.Config.DeploymentTopologies[0].ResourceSettings.Id) - resourceTemp, err = dslibs.GetResourceTemplateConfigs(*deployment.Get.Config.DeploymentTopologies[0].ResourceSettings.Id) + log.Debugf("Resource Template Id After Update [%s]", *deployment.Get.Config.DataServiceDeploymentTopologies[0].ResourceSettings.Id) + resourceTemp, err = dslibs.GetResourceTemplateConfigs(*deployment.Get.Config.DataServiceDeploymentTopologies[0].ResourceSettings.Id) if err != nil { return resourceTemp, storageOp, dbConfig, err } - storageOp, err = dslibs.GetStorageTemplateConfigs(*deployment.Get.Config.DeploymentTopologies[0].StorageOptions.Id) + storageOp, err = dslibs.GetStorageTemplateConfigs(*deployment.Get.Config.DataServiceDeploymentTopologies[0].StorageOptions.Id) if err != nil { return resourceTemp, storageOp, dbConfig, err } diff --git a/drivers/unifiedPlatform/stworkflows/pds/workflowRestore.go b/drivers/unifiedPlatform/stworkflows/pds/workflowRestore.go index 6735071f2..6b85ef395 100644 --- a/drivers/unifiedPlatform/stworkflows/pds/workflowRestore.go +++ b/drivers/unifiedPlatform/stworkflows/pds/workflowRestore.go @@ -18,7 +18,7 @@ type WorkflowPDSRestore struct { Validatation map[string]bool Restores map[string]automationModels.PDSRestore RestoredDeployments *WorkflowDataService - SourceDeploymentConfigBeforeUpgrade *automationModels.DeploymentTopology + SourceDeploymentConfigBeforeUpgrade *automationModels.V1DataServiceDeploymentTopology SkipValidation map[string]bool WorkflowBackup *WorkflowPDSBackup } @@ -83,13 +83,13 @@ func (restore WorkflowPDSRestore) CreateRestore(name string, backupUid string, n } restore.Restores[name] = createRestore.Create - deployment, err := pdslibs.GetDeployment(createRestore.Create.Config.DestinationReferences.DeploymentId) + deployment, err := pdslibs.GetDeployment(createRestore.Create.Config.DestinationReferences.DataServiceDeploymentId) if err != nil { return nil, err } // TODO: The Get MD5Hash needs to be run here to get the Md5CheckSum - restore.RestoredDeployments.DataServiceDeployment[createRestore.Create.Config.DestinationReferences.DeploymentId] = &pdslibs.DataServiceDetails{ + restore.RestoredDeployments.DataServiceDeployment[createRestore.Create.Config.DestinationReferences.DataServiceDeploymentId] = &pdslibs.DataServiceDetails{ Deployment: deployment.Get, Namespace: namespace, NamespaceId: restore.Destination.Namespaces[namespace], @@ -99,12 +99,12 @@ func (restore WorkflowPDSRestore) CreateRestore(name string, backupUid string, n log.Infof("Validating data after restore") if value, ok := restore.SkipValidation[CheckDataAfterRestore]; ok || - slices.Contains(stworkflows.SKIPDATASERVICEFROMWORKLOAD, restore.RestoredDeployments.DataServiceDeployment[createRestore.Create.Config.DestinationReferences.DeploymentId].DSParams.Name) { + slices.Contains(stworkflows.SKIPDATASERVICEFROMWORKLOAD, restore.RestoredDeployments.DataServiceDeployment[createRestore.Create.Config.DestinationReferences.DataServiceDeploymentId].DSParams.Name) { if value == true { log.Infof("Skipping data validation for the restore [%s]", name) } } else { - err := restore.ValidateDataAfterRestore(createRestore.Create.Config.DestinationReferences.DeploymentId, backupUid, namespace) + err := restore.ValidateDataAfterRestore(createRestore.Create.Config.DestinationReferences.DataServiceDeploymentId, backupUid, namespace) if err != nil { return nil, fmt.Errorf("data validation failed. Error - [%s]", err.Error()) } diff --git a/drivers/unifiedPlatform/stworkflows/platform/workflowTargetCluster.go b/drivers/unifiedPlatform/stworkflows/platform/workflowTargetCluster.go index 9479f727a..b5d90b3ca 100644 --- a/drivers/unifiedPlatform/stworkflows/platform/workflowTargetCluster.go +++ b/drivers/unifiedPlatform/stworkflows/platform/workflowTargetCluster.go @@ -78,6 +78,7 @@ func (targetCluster *WorkflowTargetCluster) RegisterToControlPlane() (*WorkflowT cmd = fmt.Sprintf("echo '%s' > %s && kubectl apply -f %s && rm -f %s", *manifest.Manifest, ManifestPath, ManifestPath, ManifestPath) log.Infof("Manifest:\n%v\n", cmd) output, _, err := osutils.ExecShell(cmd) + log.Infof("Output: %v", output) if err != nil { return targetCluster, fmt.Errorf("Error occured shile installing manifests: %v\n", err) } diff --git a/drivers/unifiedPlatform/unifiedPlatform.go b/drivers/unifiedPlatform/unifiedPlatform.go index 4d818a941..bc2f15f87 100644 --- a/drivers/unifiedPlatform/unifiedPlatform.go +++ b/drivers/unifiedPlatform/unifiedPlatform.go @@ -14,8 +14,8 @@ import ( backupV1 "github.com/pure-px/platform-api-go-client/pds/v1/backup" backupConfigV1 "github.com/pure-px/platform-api-go-client/pds/v1/backupconfig" catalogV1 "github.com/pure-px/platform-api-go-client/pds/v1/catalog" - deploymentV1 "github.com/pure-px/platform-api-go-client/pds/v1/deployment" - deploymentsConfigUpdateV1 "github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate" + deploymentV1 "github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment" + deploymentsConfigUpdateV1 "github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate" restoreV1 "github.com/pure-px/platform-api-go-client/pds/v1/restore" accountv1 "github.com/pure-px/platform-api-go-client/platform/v1/account" backuplocationv1 "github.com/pure-px/platform-api-go-client/platform/v1/backuplocation" diff --git a/drivers/utilities/utilities.go b/drivers/utilities/utilities.go index 7ae0c2f29..e34a87d78 100644 --- a/drivers/utilities/utilities.go +++ b/drivers/utilities/utilities.go @@ -501,13 +501,13 @@ func ParseInterfaceAndGetDetails(connectionDetails interface{}, dataServiceName return "", fmt.Errorf("Error: connectionDetails is not of type map[string]interface{}") } - nodesInterface, ok := connDetailsMap["nodes"] + nodesInterface, ok := connDetailsMap["instances"] if !ok { - return "", fmt.Errorf("Error: nodes not found in connectionDetails") + return "", fmt.Errorf("Error: instances not found in connectionDetails") } nodes, ok := nodesInterface.([]interface{}) if !ok { - return "", fmt.Errorf("Error: nodes is not of type []interface{}") + return "", fmt.Errorf("Error: instances is not of type []interface{}") } log.Debugf("Available nodes") diff --git a/drivers/volume/aws/aws.go b/drivers/volume/aws/aws.go index 091844622..a7333913c 100644 --- a/drivers/volume/aws/aws.go +++ b/drivers/volume/aws/aws.go @@ -2,10 +2,14 @@ package aws import ( "fmt" + "github.com/libopenstorage/openstorage/api" + "github.com/portworx/torpedo/drivers/node" + "github.com/portworx/torpedo/drivers/volume" torpedovolume "github.com/portworx/torpedo/drivers/volume" "github.com/portworx/torpedo/drivers/volume/portworx/schedops" + "github.com/portworx/torpedo/pkg/errors" "github.com/portworx/torpedo/pkg/log" ) @@ -54,6 +58,24 @@ func (i *aws) DeleteSnapshotsForVolumes(volumeNames []string, clusterProviderCre return nil } +// UpdateFBDANFSEndpoint updates the NFS endpoint for a given FBDA volume +func (d *aws) UpdateFBDANFSEndpoint(volumeName string, newEndpoint string) error { + log.Warnf("UpdateFBDANFSEndpoint function has not been implemented for volume driver - %s", d.String()) + return &errors.ErrNotSupported{ + Type: "Function", + Operation: "UpdateFBDANFSEndpoint()", + } +} + +// ValidatePureFBDAMountSource checks that, on all the given nodes, all the provided FBDA volumes are mounted using the expected IP +func (d *aws) ValidatePureFBDAMountSource(nodes []node.Node, vols []*volume.Volume, expectedIP string) error { + log.Warnf("ValidatePureFBDAMountSource function has not been implemented for volume driver - %s", d.String()) + return &errors.ErrNotSupported{ + Type: "Function", + Operation: "ValidatePureFBDAMountSource()", + } +} + func (d *aws) Init(sched, nodeDriver, token, storageProvisioner, csiGenericDriverConfigMap string) error { log.Infof("Using the AWS EBS volume driver with provisioner %s under scheduler: %v", storageProvisioner, sched) torpedovolume.StorageDriver = DriverName diff --git a/drivers/volume/azure/azure.go b/drivers/volume/azure/azure.go index 388b4d32c..07e5bd311 100644 --- a/drivers/volume/azure/azure.go +++ b/drivers/volume/azure/azure.go @@ -5,6 +5,8 @@ import ( "github.com/libopenstorage/openstorage/api" + "github.com/portworx/torpedo/drivers/node" + "github.com/portworx/torpedo/drivers/volume" torpedovolume "github.com/portworx/torpedo/drivers/volume" "github.com/portworx/torpedo/drivers/volume/portworx/schedops" "github.com/portworx/torpedo/pkg/errors" @@ -92,6 +94,24 @@ func (d *azure) DeleteSnapshotsForVolumes(volumeNames []string, clusterProviderC return nil } +// UpdateFBDANFSEndpoint updates the NFS endpoint for a given FBDA volume +func (d *azure) UpdateFBDANFSEndpoint(volumeName string, newEndpoint string) error { + log.Warnf("UpdateFBDANFSEndpoint function has not been implemented for volume driver - %s", d.String()) + return &errors.ErrNotSupported{ + Type: "Function", + Operation: "UpdateFBDANFSEndpoint()", + } +} + +// ValidatePureFBDAMountSource checks that, on all the given nodes, all the provided FBDA volumes are mounted using the expected IP +func (d *azure) ValidatePureFBDAMountSource(nodes []node.Node, vols []*volume.Volume, expectedIP string) error { + log.Warnf("ValidatePureFBDAMountSource function has not been implemented for volume driver - %s", d.String()) + return &errors.ErrNotSupported{ + Type: "Function", + Operation: "ValidatePureFBDAMountSource()", + } +} + func (d *azure) Init(sched, nodeDriver, token, storageProvisioner, csiGenericDriverConfigMap string) error { log.Infof("Using the Azure volume driver with provisioner %s under scheduler: %v", storageProvisioner, sched) torpedovolume.StorageDriver = DriverName diff --git a/drivers/volume/common.go b/drivers/volume/common.go index fe38a8959..8d749e9b6 100644 --- a/drivers/volume/common.go +++ b/drivers/volume/common.go @@ -361,6 +361,15 @@ func (d *DefaultDriver) GetCloudsnaps(name string, params map[string]string) ([] } } +// GetCloudsnapsOfGivenVolume returns cloudsnap backups of given volume. +// params are the custom volume options passed when creating the volume. +func (d *DefaultDriver) GetCloudsnapsOfGivenVolume(name string, volumeID string, params map[string]string) ([]*api.SdkCloudBackupInfo, error) { + return nil, &errors.ErrNotSupported{ + Type: "Function", + Operation: "GetCloudsnapsOfGivenVolume()", + } +} + // DeleteAllCloudsnaps deletes all cloudsnap backups // params are the custom volume options passed when creating the volume. func (d *DefaultDriver) DeleteAllCloudsnaps(name, sourceVolumeID string, params map[string]string) error { @@ -1210,3 +1219,19 @@ func (d *DefaultDriver) GetPxctlStatus(n node.Node) (string, error) { func (d *DefaultDriver) IsPxReadyOnNode(n node.Node) bool { return false } + +// EnableSkinnySnap Enables skinnysnap on the cluster +func (d *DefaultDriver) EnableSkinnySnap() error { + return &errors.ErrNotSupported{ + Type: "Function", + Operation: "EnableSkinnySnap()", + } +} + +// UpdateSkinnySnapReplNum update skinnysnap Repl factor +func (d *DefaultDriver) UpdateSkinnySnapReplNum(repl string) error { + return &errors.ErrNotSupported{ + Type: "Function", + Operation: "UpdateSkinnySnapReplNum()", + } +} diff --git a/drivers/volume/gce/gce.go b/drivers/volume/gce/gce.go index 870464936..7de2e2056 100644 --- a/drivers/volume/gce/gce.go +++ b/drivers/volume/gce/gce.go @@ -2,10 +2,13 @@ package gce import ( "fmt" + "github.com/libopenstorage/openstorage/api" "github.com/portworx/torpedo/pkg/log" + "github.com/portworx/torpedo/drivers/node" + "github.com/portworx/torpedo/drivers/volume" torpedovolume "github.com/portworx/torpedo/drivers/volume" "github.com/portworx/torpedo/drivers/volume/portworx/schedops" "github.com/portworx/torpedo/pkg/errors" @@ -106,6 +109,24 @@ func (d *gce) DeleteSnapshotsForVolumes(volumeNames []string, clusterProviderCre return nil } +// UpdateFBDANFSEndpoint updates the NFS endpoint for a given FBDA volume +func (d *gce) UpdateFBDANFSEndpoint(volumeName string, newEndpoint string) error { + log.Warnf("UpdateFBDANFSEndpoint function has not been implemented for volume driver - %s", d.String()) + return &errors.ErrNotSupported{ + Type: "Function", + Operation: "UpdateFBDANFSEndpoint()", + } +} + +// ValidatePureFBDAMountSource checks that, on all the given nodes, all the provided FBDA volumes are mounted using the expected IP +func (d *gce) ValidatePureFBDAMountSource(nodes []node.Node, vols []*volume.Volume, expectedIP string) error { + log.Warnf("ValidatePureFBDAMountSource function has not been implemented for volume driver - %s", d.String()) + return &errors.ErrNotSupported{ + Type: "Function", + Operation: "ValidatePureFBDAMountSource()", + } +} + func init() { torpedovolume.Register(DriverName, provisioners, &gce{}) } diff --git a/drivers/volume/generic_csi/generic_csi.go b/drivers/volume/generic_csi/generic_csi.go index e47128a8c..2eb511e42 100644 --- a/drivers/volume/generic_csi/generic_csi.go +++ b/drivers/volume/generic_csi/generic_csi.go @@ -2,11 +2,15 @@ package csi import ( "fmt" + "github.com/libopenstorage/openstorage/api" "github.com/portworx/sched-ops/k8s/core" + "github.com/portworx/torpedo/drivers/node" + "github.com/portworx/torpedo/drivers/volume" torpedovolume "github.com/portworx/torpedo/drivers/volume" "github.com/portworx/torpedo/drivers/volume/portworx/schedops" + "github.com/portworx/torpedo/pkg/errors" "github.com/portworx/torpedo/pkg/log" ) @@ -76,6 +80,24 @@ func (d *genericCsi) DeleteSnapshotsForVolumes(volumeNames []string, clusterProv return nil } +// UpdateFBDANFSEndpoint updates the NFS endpoint for a given FBDA volume +func (d *genericCsi) UpdateFBDANFSEndpoint(volumeName string, newEndpoint string) error { + log.Warnf("UpdateFBDANFSEndpoint function has not been implemented for volume driver - %s", d.String()) + return &errors.ErrNotSupported{ + Type: "Function", + Operation: "UpdateFBDANFSEndpoint()", + } +} + +// ValidatePureFBDAMountSource checks that, on all the given nodes, all the provided FBDA volumes are mounted using the expected IP +func (d *genericCsi) ValidatePureFBDAMountSource(nodes []node.Node, vols []*volume.Volume, expectedIP string) error { + log.Warnf("ValidatePureFBDAMountSource function has not been implemented for volume driver - %s", d.String()) + return &errors.ErrNotSupported{ + Type: "Function", + Operation: "ValidatePureFBDAMountSource()", + } +} + func init() { torpedovolume.Register(DriverName, provisioners, &genericCsi{}) } diff --git a/drivers/volume/ibm/ibm.go b/drivers/volume/ibm/ibm.go index 377ff4831..c6666f6c6 100644 --- a/drivers/volume/ibm/ibm.go +++ b/drivers/volume/ibm/ibm.go @@ -2,9 +2,12 @@ package ibm import ( "fmt" + ibmcore "github.com/IBM/go-sdk-core/v5/core" "github.com/IBM/vpc-go-sdk/vpcv1" "github.com/libopenstorage/openstorage/api" + "github.com/portworx/torpedo/drivers/node" + "github.com/portworx/torpedo/drivers/volume" torpedovolume "github.com/portworx/torpedo/drivers/volume" "github.com/portworx/torpedo/drivers/volume/portworx" "github.com/portworx/torpedo/drivers/volume/portworx/schedops" @@ -98,6 +101,24 @@ func (i *ibm) InspectVolume(name string) (*api.Volume, error) { } } +// UpdateFBDANFSEndpoint updates the NFS endpoint for a given FBDA volume +func (i *ibm) UpdateFBDANFSEndpoint(volumeName string, newEndpoint string) error { + log.Warnf("UpdateFBDANFSEndpoint function has not been implemented for volume driver - %s", i.String()) + return &errors.ErrNotSupported{ + Type: "Function", + Operation: "UpdateFBDANFSEndpoint()", + } +} + +// ValidatePureFBDAMountSource checks that, on all the given nodes, all the provided FBDA volumes are mounted using the expected IP +func (i *ibm) ValidatePureFBDAMountSource(nodes []node.Node, vols []*volume.Volume, expectedIP string) error { + log.Warnf("ValidatePureFBDAMountSource function has not been implemented for volume driver - %s", i.String()) + return &errors.ErrNotSupported{ + Type: "Function", + Operation: "ValidatePureFBDAMountSource()", + } +} + // DeleteSnapshotsForVolumes deletes snapshots for the specified volumes in ibm cloud func (i *ibm) DeleteSnapshotsForVolumes(volumeNames []string, apiKey string) error { diff --git a/drivers/volume/linstor/linstor.go b/drivers/volume/linstor/linstor.go index 5551ae53d..ce64aa843 100644 --- a/drivers/volume/linstor/linstor.go +++ b/drivers/volume/linstor/linstor.go @@ -3,16 +3,19 @@ package linstor import ( "context" "fmt" - "github.com/libopenstorage/openstorage/api" "time" + "github.com/libopenstorage/openstorage/api" + lclient "github.com/LINBIT/golinstor/client" "github.com/portworx/sched-ops/k8s/core" "github.com/portworx/sched-ops/task" driver_api "github.com/portworx/torpedo/drivers/api" "github.com/portworx/torpedo/drivers/node" + "github.com/portworx/torpedo/drivers/volume" torpedovolume "github.com/portworx/torpedo/drivers/volume" "github.com/portworx/torpedo/drivers/volume/portworx/schedops" + "github.com/portworx/torpedo/pkg/errors" "github.com/portworx/torpedo/pkg/log" ) @@ -144,6 +147,24 @@ func (d *linstor) DeleteSnapshotsForVolumes(volumeNames []string, clusterProvide return nil } +// UpdateFBDANFSEndpoint updates the NFS endpoint for a given FBDA volume +func (d *linstor) UpdateFBDANFSEndpoint(volumeName string, newEndpoint string) error { + log.Warnf("UpdateFBDANFSEndpoint function has not been implemented for volume driver - %s", d.String()) + return &errors.ErrNotSupported{ + Type: "Function", + Operation: "UpdateFBDANFSEndpoint()", + } +} + +// ValidatePureFBDAMountSource checks that, on all the given nodes, all the provided FBDA volumes are mounted using the expected IP +func (d *linstor) ValidatePureFBDAMountSource(nodes []node.Node, vols []*volume.Volume, expectedIP string) error { + log.Warnf("ValidatePureFBDAMountSource function has not been implemented for volume driver - %s", d.String()) + return &errors.ErrNotSupported{ + Type: "Function", + Operation: "ValidatePureFBDAMountSource()", + } +} + func init() { torpedovolume.Register(DriverName, provisioners, &linstor{}) } diff --git a/drivers/volume/ocp/ocp.go b/drivers/volume/ocp/ocp.go index 14cf92d82..9e355be09 100644 --- a/drivers/volume/ocp/ocp.go +++ b/drivers/volume/ocp/ocp.go @@ -2,7 +2,10 @@ package ocp import ( "fmt" + "github.com/libopenstorage/openstorage/api" + "github.com/portworx/torpedo/drivers/node" + "github.com/portworx/torpedo/drivers/volume" torpedovolume "github.com/portworx/torpedo/drivers/volume" "github.com/portworx/torpedo/drivers/volume/portworx" "github.com/portworx/torpedo/drivers/volume/portworx/schedops" @@ -101,6 +104,24 @@ func (o *ocp) InspectVolume(name string) (*api.Volume, error) { } } +// UpdateFBDANFSEndpoint updates the NFS endpoint for a given FBDA volume +func (o *ocp) UpdateFBDANFSEndpoint(volumeName string, newEndpoint string) error { + log.Warnf("UpdateFBDANFSEndpoint function has not been implemented for volume driver - %s", o.String()) + return &errors.ErrNotSupported{ + Type: "Function", + Operation: "UpdateFBDANFSEndpoint()", + } +} + +// ValidatePureFBDAMountSource checks that, on all the given nodes, all the provided FBDA volumes are mounted using the expected IP +func (o *ocp) ValidatePureFBDAMountSource(nodes []node.Node, vols []*volume.Volume, expectedIP string) error { + log.Warnf("ValidatePureFBDAMountSource function has not been implemented for volume driver - %s", o.String()) + return &errors.ErrNotSupported{ + Type: "Function", + Operation: "ValidatePureFBDAMountSource()", + } +} + // DeleteSnapshotsForVolumes deletes snapshots for the specified volumes in ocp cluster func (o *ocp) DeleteSnapshotsForVolumes(volumeNames []string, clusterProviderCredential string) error { log.Warnf("DeleteSnapshotsForVolumes function has not been implemented for volume driver - %s", o.String()) diff --git a/drivers/volume/portworx/portworx.go b/drivers/volume/portworx/portworx.go index b4163c137..c8019683b 100644 --- a/drivers/volume/portworx/portworx.go +++ b/drivers/volume/portworx/portworx.go @@ -3,6 +3,7 @@ package portworx import ( "context" "encoding/json" + "flag" "fmt" "io/ioutil" "math" @@ -90,6 +91,7 @@ const ( pxctlVolumeListFilter = "pxctl volume list -l %s=%s" pxctlVolumeUpdate = "pxctl volume update " pxctlGroupSnapshotCreate = "pxctl volume snapshot group" + pxctlClusterOptionsUpdate = "pxctl cluster options update" pxctlDriveAddStart = "%s -j service drive add %s -o start" pxctlDriveAddStatus = "%s -j service drive add %s -o status" pxctlCloudDriveInspect = "%s -j cd inspect --node %s" @@ -147,6 +149,7 @@ const ( validateStorageClusterTimeout = 40 * time.Minute expandStoragePoolTimeout = 2 * time.Minute volumeUpdateTimeout = 2 * time.Minute + skinnySnapRetryInterval = 5 * time.Second ) const ( telemetryNotEnabled = "15" @@ -487,6 +490,16 @@ func (d *portworx) Init(sched, nodeDriver, token, storageProvisioner, csiGeneric func (d *portworx) RefreshDriverEndpoints() error { + secretConfigMap := flag.Lookup("config-map").Value.(flag.Getter).Get().(string) + if secretConfigMap != "" { + log.Infof("Fetching token from configmap: %s", secretConfigMap) + token, err := d.schedOps.GetTokenFromConfigMap(secretConfigMap) + if err != nil { + return err + } + d.token = token + } + // getting namespace again (refreshing it) as namespace of portworx in switched context might have changed namespace, err := d.GetVolumeDriverNamespace() if err != nil { @@ -649,16 +662,9 @@ func (d *portworx) comparePoolsAndDisks(srcNode *api.StorageNode, srcDisks := srcNode.Disks dstDisks := dstNode.Disks - for disk, value := range srcDisks { - if !srcDisks[disk].Metadata && !dstDisks[disk].Metadata { - if value.Id != dstDisks[disk].Id { - return false - } - } else if srcDisks[disk].Metadata && dstDisks[disk].Metadata { - if value.Id != dstDisks[disk].Id { - return false - } - } + if len(srcDisks) != len(dstDisks) { + log.Errorf("Source disks: [%v] not macthing with Destination disks: [%v]", srcDisks, dstDisks) + return false } return true } @@ -1206,7 +1212,7 @@ func (d *portworx) ExitPoolMaintenance(n node.Node) error { // no need to exit pool maintenance if node status is up pxStatus, err := d.GetPxctlStatus(n) - if err == nil && pxStatus == api.Status_STATUS_OK.String(){ + if err == nil && pxStatus == api.Status_STATUS_OK.String() { log.Infof("node is up, no need to exit pool maintenance mode") return nil } @@ -1256,6 +1262,7 @@ func (d *portworx) GetNodePoolsStatus(n node.Node) (map[string]string, error) { if err != nil { return nil, fmt.Errorf("error getting pool status on node [%s], Err: %v", n.Name, err) } + log.Debugf("GetNodePoolsStatus output: %s", out) outLines := strings.Split(out, "\n") poolsData := make(map[string]string) @@ -1503,10 +1510,10 @@ func (d *portworx) ValidateCreateVolume(volumeName string, params map[string]str return errFailedToInspectVolume(volumeName, k, requestedSpec.AggregationLevel, vol.Spec.AggregationLevel) } /* Ignore shared setting. - case api.SpecShared: - if requestedSpec.Shared != vol.Spec.Shared { - return errFailedToInspectVolume(volumeName, k, requestedSpec.Shared, vol.Spec.Shared) - } + case api.SpecShared: + if requestedSpec.Shared != vol.Spec.Shared { + return errFailedToInspectVolume(volumeName, k, requestedSpec.Shared, vol.Spec.Shared) + } */ case api.SpecSticky: if requestedSpec.Sticky != vol.Spec.Sticky { @@ -1797,7 +1804,7 @@ func constructSnapshotName(volumeName string) string { return volumeName + "-snapshot" } -// GetCloudsnaps returns all the cloud snaps of the given volume +// GetCloudsnaps returns all the cloud snaps of all volumes func (d *portworx) GetCloudsnaps(volumeName string, params map[string]string) ([]*api.SdkCloudBackupInfo, error) { var token string token = d.getTokenForVolume(volumeName, params) @@ -1815,6 +1822,21 @@ func (d *portworx) GetCloudsnaps(volumeName string, params map[string]string) ([ } +// GetCloudsnaps returns all the cloud snaps of the given volume +func (d *portworx) GetCloudsnapsOfGivenVolume(volumeName string, sourceVolumeID string, params map[string]string) ([]*api.SdkCloudBackupInfo, error) { + var token string + token = d.getTokenForVolume(volumeName, params) + if val, hasKey := params[refreshEndpointParam]; hasKey { + refreshEndpoint, _ := strconv.ParseBool(val) + d.refreshEndpoint = refreshEndpoint + } + cloudSnapResponse, err := d.csbackupManager.EnumerateWithFilters(d.getContextWithToken(context.Background(), token), &api.SdkCloudBackupEnumerateWithFiltersRequest{SrcVolumeId: sourceVolumeID}) + if err != nil { + return nil, fmt.Errorf("failed to get cloudsnap, Err: %v", err) + } + return cloudSnapResponse.GetBackups(), nil +} + // DeleteAllCloudsnaps delete all cloud snaps for a given volume func (d *portworx) DeleteAllCloudsnaps(volumeName, sourceVolumeID string, params map[string]string) error { var token string @@ -1900,6 +1922,29 @@ func (d *portworx) ValidateVolumeInPxctlList(volumeName string) error { return nil } +func (d *portworx) UpdateFBDANFSEndpoint(volumeName string, newEndpoint string) error { + nodes := node.GetStorageDriverNodes() + cmd := fmt.Sprintf("%s --pure_nfs_endpoint %s %s", pxctlVolumeUpdate, newEndpoint, volumeName) + _, err := d.nodeDriver.RunCommandWithNoRetry( + nodes[0], + cmd, + node.ConnectionOpts{ + Timeout: crashDriverTimeout, + TimeBeforeRetry: defaultRetryInterval, + }) + if err != nil { + return fmt.Errorf("failed setting FBDA NFS endpoint for volume [%s] to [%s] from node [%s], Err: %v", volumeName, newEndpoint, nodes[0], err) + } + return nil +} + +func (d *portworx) ValidatePureFBDAMountSource(nodes []node.Node, vols []*torpedovolume.Volume, expectedIP string) error { + // For each node + // Run `mount` on node + // Search through lines for our volume names, check that all contain right IP + return fmt.Errorf("not implemented (ValidatePureFBDAMountSource)") +} + func (d *portworx) ValidatePureVolumesNoReplicaSets(volumeName string, params map[string]string) error { var token string token = d.getTokenForVolume(volumeName, params) @@ -2446,8 +2491,17 @@ func (d *portworx) GetNodeForVolume(vol *torpedovolume.Volume, timeout time.Dura Cause: err.Error(), } } + isPureFile, err := d.IsPureFileVolume(vol) + if err != nil { + return nil, false, err + } + if isPureFile { + return nil, false, nil + } + pxVol := volumeInspectResponse.Volume for _, n := range node.GetStorageDriverNodes() { + ok, err := d.IsVolumeAttachedOnNode(pxVol, n) if err != nil { return nil, false, err @@ -2461,7 +2515,6 @@ func (d *portworx) GetNodeForVolume(vol *torpedovolume.Volume, timeout time.Dura if pxVol.Source.Parent != "" { return nil, false, nil } - return nil, true, fmt.Errorf("volume [%s] is not attached on any node", volumeName) } @@ -2690,7 +2743,13 @@ func (d *portworx) WaitDriverUpOnNode(n node.Node, timeout time.Duration) error case api.Status_STATUS_OFFLINE: // in case node is offline and it is a storageless node, the id might have changed so update it if len(pxNode.Pools) == 0 { - d.updateNodeID(&n, d.getNodeManager()) + _, err = d.updateNodeID(&n, d.getNodeManager()) + if err != nil { + return "", true, &ErrFailedToWaitForPx{ + Node: n, + Cause: fmt.Sprintf("failed to update node id [%s/%s], Err: %v", n.Name, n.VolDriverNodeID, err), + } + } } return "", true, &ErrFailedToWaitForPx{ Node: n, @@ -2698,6 +2757,7 @@ func (d *portworx) WaitDriverUpOnNode(n node.Node, timeout time.Duration) error n.Name, n.VolDriverNodeID, api.Status_STATUS_OK, pxNode.Status), } default: + log.Infof("Status PX available %s", pxNode.Status.String()) return "", true, &ErrFailedToWaitForPx{ Node: n, Cause: fmt.Sprintf("PX cluster is usable but node [%s/%s] status is not ok. Expected: %v Actual: %v", @@ -2835,7 +2895,7 @@ func (d *portworx) ValidateRebalanceJobs() error { } func (d *portworx) ResizeStoragePoolByPercentage(poolUUID string, e api.SdkStoragePool_ResizeOperationType, percentage uint64) error { - log.InfoD("Initiating pool %v resize by %v with operationtype %v", poolUUID, percentage, e.String()) + log.InfoD("Initiating pool %v resize by %v with operation-type %v", poolUUID, percentage, e.String()) // Start a task to check if pool resize is done t := func() (interface{}, bool, error) { @@ -4357,9 +4417,9 @@ func (d *portworx) updateNodeID(n *node.Node, nManager ...api.OpenStorageNodeCli return n, err } if err = d.updateNode(n, nodes); err != nil { - return &node.Node{}, fmt.Errorf("failed to update node ID for node [%s], Err: %v", n.Name, err) + return &node.Node{}, fmt.Errorf("failed to update node ID for node [%s] with ID [%s] in the cluster, Err: %v", n.Name, n.Id, err) } - return n, fmt.Errorf("failed to find node [%s] with ID [%s] in the cluster", n.Name, n.Id) + return n, nil } func getGroupMatches(groupRegex *regexp.Regexp, str string) map[string]string { @@ -5224,7 +5284,8 @@ func (d *portworx) ValidateDriver(endpointVersion string, autoUpdateComponents b } // Validate StorageCluster - if err = optest.ValidateStorageCluster(imageList, newStc, validateStorageClusterTimeout, defaultRetryInterval, true); err != nil { + storageClusterValidateTimeout := time.Duration(len(node.GetStorageDriverNodes())*9) * time.Minute + if err = optest.ValidateStorageCluster(imageList, newStc, storageClusterValidateTimeout, defaultRetryInterval, true); err != nil { return err } } @@ -5268,8 +5329,8 @@ func (d *portworx) updateAndValidateStorageCluster(cluster *v1.StorageCluster, f } } } - - if err = optest.ValidateStorageCluster(imageList, stc, validateStorageClusterTimeout, defaultRetryInterval, true); err != nil { + storageClusterValidateTimeout := time.Duration(len(node.GetStorageDriverNodes())*9) * time.Minute + if err = optest.ValidateStorageCluster(imageList, stc, storageClusterValidateTimeout, defaultRetryInterval, true); err != nil { return nil, err } return stc, nil @@ -6185,3 +6246,41 @@ func (d *portworx) GetAlertsUsingResourceTypeByTime(resourceType api.ResourceTyp func (d *portworx) IsPxReadyOnNode(n node.Node) bool { return d.schedOps.IsPXReadyOnNode(n) } + +// EnableSkinnySnap Enables skinnysnap on the cluster +func (d *portworx) EnableSkinnySnap() error { + for _, eachNode := range node.GetNodes() { + cmd := fmt.Sprintf("echo Y | %s --skinnysnap on", pxctlClusterOptionsUpdate) + _, err := d.nodeDriver.RunCommandWithNoRetry( + eachNode, + cmd, + node.ConnectionOpts{ + Timeout: skinnySnapRetryInterval, + TimeBeforeRetry: defaultRetryInterval, + }) + if err != nil { + return fmt.Errorf("Failed to enable skinny Snap on Cluster, Err: %v", err) + } + break + } + return nil +} + +// UpdateSkinnySnapReplNum update skinnysnap Repl factor +func (d *portworx) UpdateSkinnySnapReplNum(repl string) error { + for _, eachNode := range node.GetNodes() { + cmd := fmt.Sprintf("echo Y | %s --skinnysnap-num-repls %s", pxctlClusterOptionsUpdate, repl) + _, err := d.nodeDriver.RunCommandWithNoRetry( + eachNode, + cmd, + node.ConnectionOpts{ + Timeout: skinnySnapRetryInterval, + TimeBeforeRetry: defaultRetryInterval, + }) + if err != nil { + return fmt.Errorf("failed to Update SkinnySnap Repl Factor, Err: %v", err) + } + break + } + return nil +} \ No newline at end of file diff --git a/drivers/volume/portworx/schedops/anthos-schedops.go b/drivers/volume/portworx/schedops/anthos-schedops.go new file mode 100644 index 000000000..e47e8111b --- /dev/null +++ b/drivers/volume/portworx/schedops/anthos-schedops.go @@ -0,0 +1,12 @@ +package schedops + +// This is a subclass of k8sSchedOps +// This is needed to differentiate k8s and anthos scheduler +type anthosSchedOps struct { + k8sSchedOps +} + +func init() { + k := &anthosSchedOps{} + Register("anthos", k) +} diff --git a/drivers/volume/portworx/schedops/dcos-schedops.go b/drivers/volume/portworx/schedops/dcos-schedops.go index df7821dd3..5d7cfc48b 100644 --- a/drivers/volume/portworx/schedops/dcos-schedops.go +++ b/drivers/volume/portworx/schedops/dcos-schedops.go @@ -12,6 +12,10 @@ import ( type dcosSchedOps struct { } +func (d *dcosSchedOps) GetTokenFromConfigMap(configMapName string) (string, error) { + return "", nil +} + func (d *dcosSchedOps) GetKubernetesVersion() (*version.Info, error) { return nil, nil } diff --git a/drivers/volume/portworx/schedops/k8s-schedops.go b/drivers/volume/portworx/schedops/k8s-schedops.go index 30ddfee4a..192a511c2 100644 --- a/drivers/volume/portworx/schedops/k8s-schedops.go +++ b/drivers/volume/portworx/schedops/k8s-schedops.go @@ -65,6 +65,8 @@ const ( k8sRoleNodeInfraLabelKey = "node-role.kubernetes.io/infra" // k8sRoleNodeComputeLabelKey is the label used to check whether node has compute=true label on OpenShift Enterprise environment k8sRoleNodeComputeLabelKey = "node-role.kubernetes.io/compute" + secretNameKey = "secret_name" + secretNamespaceKey = "secret_namespace" // nodeType is label used to check kubernetes node-type dcosNodeType = "kubernetes.dcos.io/node-type" @@ -239,10 +241,12 @@ func (k *k8sSchedOps) ValidateVolumeSetup(vol *volume.Volume, d node.Driver) err t := func() (interface{}, bool, error) { pods, err := k8sCore.GetPodsUsingPV(pvName) - printStatus(k, pods...) if err != nil { return nil, true, err } + log.Infof("Found %d pods using PV [%s]", len(pods), pvName) + printStatus(k, pods...) + log.Infof("Validating volume setup for volume [%s]", vol.Name) resp := make([]string, 0) if vol.Raw { @@ -292,11 +296,8 @@ func (k *k8sSchedOps) ValidateVolumeSetup(vol *volume.Volume, d node.Driver) err return nil, true, fmt.Errorf("pods pending validation current: %d. Expected: %d", lenValidatedPods, lenExpectedPods) } - if _, err := task.DoRetryWithTimeout(t, defaultTimeout, defaultRetryInterval); err != nil { - return err - } - - return nil + _, err := task.DoRetryWithTimeout(t, 30*time.Minute, defaultRetryInterval) + return err } func (k *k8sSchedOps) validateDevicesInPods( @@ -361,6 +362,7 @@ func (k *k8sSchedOps) validateMountsInPods( validatedMountPods := make([]string, 0) nodes := node.GetNodesByName() + isNvme := false PodLoop: for _, p := range pods { pod, err := k8sCore.GetPodByName(p.Name, p.Namespace) @@ -415,10 +417,15 @@ PodLoop: } log.Infof("Pod [%s/%s] container [%s] and paths [%v] after checking sym links", p.Namespace, p.Name, containerName, paths) for _, path := range paths { - pxMountCheckRegex := regexp.MustCompile(fmt.Sprintf("^(/dev/pxd.+|pxfs.+|/dev/mapper/pxd-enc.+|%s.+|/dev/loop.+|\\d+\\.\\d+\\.\\d+\\.\\d+:/var/lib/osd/pxns.+|(.[A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}]:/var/lib/osd/pxns.+|\\d+.\\d+.\\d+.\\d+:/px_[0-9A-Za-z]{8}-pvc.+) %s", PureMapperRegex, path)) + pxMountCheckRegex := regexp.MustCompile(fmt.Sprintf("^(/dev/pxd.+|pxfs.+|/dev/mapper/pxd-enc.+|%s.+|/dev/loop.+|\\d+\\.\\d+\\.\\d+\\.\\d+:/var/lib/osd/pxns.+|(.[A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}]:/var/lib/osd/pxns.+|\\d+.\\d+.\\d+.\\d+:/px_[0-9A-Za-z]{8}-pvc.+) %s", + PureMapperRegex, path)) + pxMountNvmeRegex := regexp.MustCompile(`\/dev\/mapper\/eui\.00.*24a937.*`) pxMountFound := false for _, line := range mounts { pxMounts := pxMountCheckRegex.FindStringSubmatch(line) + if pxMountNvmeRegex.MatchString(line) { + isNvme = true + } if len(pxMounts) > 0 { log.Debugf("Pod [%s/%s] container [%s] has PX mount: %v", pod.Namespace, pod.Name, containerName, pxMounts) @@ -459,6 +466,9 @@ PodLoop: grepPattern := pvName // For normal PX vols, and for FBDA, we can grep for the filesystem name if pureType, ok := vol.Labels[k8sdriver.PureDAVolumeLabel]; ok && pureType == k8sdriver.PureDAVolumeLabelValueFA { grepPattern = strings.ToLower(vol.Labels[k8sdriver.FADAVolumeSerialLabel]) // FADA we need to grep by volume serial + if isNvme { + grepPattern = fmt.Sprintf("%s | grep %s", grepPattern[:14], grepPattern[14:]) + } } log.Debugf("Executing command [%s] on node [%s]", fmt.Sprintf("cat /proc/mounts | grep -E '(pxd|pxfs|pxns|pxd-enc|loop|px_|/dev/mapper)' | grep %s", grepPattern), currentNode.Name) volMount, _ := d.RunCommand(currentNode, @@ -1074,6 +1084,22 @@ func (k *k8sSchedOps) GetPortworxNamespace() (string, error) { } +func (k *k8sSchedOps) GetTokenFromConfigMap(configMapName string) (string, error) { + var token string + var err error + var configMap *corev1.ConfigMap + k8sOps := k8sCore + if configMap, err = k8sOps.GetConfigMap(configMapName, "default"); err == nil { + if secret, err := k8sOps.GetSecret(configMap.Data[secretNameKey], configMap.Data[secretNamespaceKey]); err == nil { + if tk, ok := secret.Data["auth-token"]; ok { + token = string(tk) + } + } + } + log.Infof("Token from secret: %s", token) + return token, err +} + func printStatus(k *k8sSchedOps, pods ...corev1.Pod) { for _, pod := range pods { status := "" diff --git a/drivers/volume/portworx/schedops/schedops.go b/drivers/volume/portworx/schedops/schedops.go index 050ad6d41..7d95b77b1 100644 --- a/drivers/volume/portworx/schedops/schedops.go +++ b/drivers/volume/portworx/schedops/schedops.go @@ -38,6 +38,8 @@ type Driver interface { GetVolumeName(v *volume.Volume) string // GetPortworxNamespace returns the Portworx namespace GetPortworxNamespace() (string, error) + // GetTokenFromConfigMap returns the token from the configmap + GetTokenFromConfigMap(configMapName string) (string, error) // GetServiceEndpoint returns the hostname of portworx service if it is present GetServiceEndpoint() (string, error) // UpgradePortworx upgrades portworx to the given docker image and tag diff --git a/drivers/volume/pso/pso.go b/drivers/volume/pso/pso.go index 3cc37657f..6d368e3d8 100644 --- a/drivers/volume/pso/pso.go +++ b/drivers/volume/pso/pso.go @@ -2,13 +2,17 @@ package pso import ( "fmt" - "github.com/libopenstorage/openstorage/api" "strings" + "github.com/libopenstorage/openstorage/api" + "github.com/portworx/sched-ops/k8s/core" + "github.com/portworx/torpedo/drivers/node" + "github.com/portworx/torpedo/drivers/volume" torpedovolume "github.com/portworx/torpedo/drivers/volume" "github.com/portworx/torpedo/drivers/volume/portworx" "github.com/portworx/torpedo/drivers/volume/portworx/schedops" + "github.com/portworx/torpedo/pkg/errors" "github.com/portworx/torpedo/pkg/log" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -111,6 +115,25 @@ func (i *pso) DeleteSnapshotsForVolumes(volumeNames []string, clusterProviderCre return nil } +// UpdateFBDANFSEndpoint updates the NFS endpoint for a given FBDA volume +func (i *pso) UpdateFBDANFSEndpoint(volumeName string, newEndpoint string) error { + log.Warnf("UpdateFBDANFSEndpoint function has not been implemented for volume driver - %s", i.String()) + return &errors.ErrNotSupported{ + Type: "Function", + Operation: "UpdateFBDANFSEndpoint()", + } +} + +// ValidatePureFBDAMountSource checks that, on all the given nodes, all the provided FBDA volumes are mounted using the expected IP +func (i *pso) ValidatePureFBDAMountSource(nodes []node.Node, vols []*volume.Volume, expectedIP string) error { + log.Warnf("ValidatePureFBDAMountSource function has not been implemented for volume driver - %s", i.String()) + return &errors.ErrNotSupported{ + Type: "Function", + Operation: "ValidatePureFBDAMountSource()", + } +} + + // GetPsoNamespace returns namespace where PSO is running func GetPsoNamespace() (string, error) { allServices, err := core.Instance().ListServices("", metav1.ListOptions{}) diff --git a/drivers/volume/volume.go b/drivers/volume/volume.go index d11ea42fa..70367b85b 100644 --- a/drivers/volume/volume.go +++ b/drivers/volume/volume.go @@ -142,6 +142,10 @@ type Driver interface { // params are the custom backup options passed DeleteAllCloudsnaps(name, sourceVolumeID string, params map[string]string) error + // GetCloudsnapsOfGivenVolume returns cloudsnap backups of given volume + // params are the custom backup options passed + GetCloudsnapsOfGivenVolume(volumeName string, sourceVolumeID string, params map[string]string) ([]*api.SdkCloudBackupInfo, error) + // ValidateCreateCloudsnap validates whether a cloudsnap backup can be created properly(or errored expectely) // params are the custom backup options passed ValidateCreateCloudsnap(name string, params map[string]string) error @@ -507,6 +511,17 @@ type Driver interface { GetPxctlStatus(n node.Node) (string, error) DeleteSnapshotsForVolumes(volumeNames []string, globalCredentialConfig string) error + + // EnableSkinnySnap Enables skinnysnap on the cluster + EnableSkinnySnap() error + + // UpdateSkinnySnapReplNum update skinnysnap Repl factor + UpdateSkinnySnapReplNum(repl string) error + // UpdateFBDANFSEndpoint updates the NFS endpoint for a given FBDA volume + UpdateFBDANFSEndpoint(volumeName string, newEndpoint string) error + + // ValidatePureFBDAMountSource checks that, on all the given nodes, all the provided FBDA volumes are mounted using the expected IP + ValidatePureFBDAMountSource(nodes []node.Node, vols []*Volume, expectedIP string) error } // StorageProvisionerType provisioner to be used for torpedo volumes diff --git a/go.mod b/go.mod index a8222eb36..289a01df9 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( github.com/fatih/color v1.15.0 github.com/gambol99/go-marathon v0.7.1 github.com/gin-gonic/gin v1.9.1 - github.com/go-sql-driver/mysql v1.6.0 + github.com/go-sql-driver/mysql v1.7.1 github.com/gofrs/flock v0.8.1 github.com/golang/protobuf v1.5.4 github.com/google/gnostic v0.6.9 @@ -31,19 +31,19 @@ require ( github.com/libopenstorage/autopilot-api v1.3.0 github.com/libopenstorage/cloudops v0.0.0-20230220114907-3e63dce1b413 github.com/libopenstorage/openstorage v9.4.47+incompatible - github.com/libopenstorage/operator v0.0.0-20240417190906-af0509c9db88 - github.com/libopenstorage/stork v1.4.1-0.20240417024347-acff28bbdb16 + github.com/libopenstorage/operator v0.0.0-20240523172951-e085c3099bd7 + github.com/libopenstorage/stork v1.4.1-0.20240424105137-8c6fa2a3f934 github.com/onsi/gomega v1.31.1 github.com/openshift/api v0.0.0-20230503133300-8bbcb7ca7183 github.com/oracle/oci-go-sdk/v65 v65.13.1 github.com/pborman/uuid v1.2.1 github.com/pkg/errors v0.9.1 github.com/portworx/pds-api-go-client v0.0.0-20231102112445-993d38984eae - github.com/portworx/px-backup-api v1.2.2-0.20240229114136-e58baeb9fbe1 - github.com/portworx/sched-ops v1.20.4-rc1.0.20240411193047-d17313c6c11b + github.com/portworx/px-backup-api v1.2.2-0.20240513165102-9eda9e2fc169 + github.com/portworx/sched-ops v1.20.4-rc1.0.20240514213912-ff0ae32b859a github.com/portworx/talisman v1.1.3 github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.63.0 - github.com/prometheus/client_golang v1.15.1 + github.com/prometheus/client_golang v1.17.0 github.com/rancher/norman v0.0.0-20230222213531-275a3e921940 github.com/rancher/rancher/pkg/client v0.0.0-20230203155537-a67566517525 github.com/sirupsen/logrus v1.9.3 @@ -62,9 +62,9 @@ require ( gopkg.in/natefinch/lumberjack.v2 v2.0.0 gopkg.in/yaml.v2 v2.4.0 helm.sh/helm/v3 v3.7.1 - k8s.io/api v0.27.1 - k8s.io/apiextensions-apiserver v0.26.5 - k8s.io/apimachinery v0.29.2 + k8s.io/api v0.29.3 + k8s.io/apiextensions-apiserver v0.28.4 + k8s.io/apimachinery v0.29.3 k8s.io/client-go v12.0.0+incompatible kubevirt.io/api v1.0.0 ) @@ -104,14 +104,14 @@ require ( github.com/google/pprof v0.0.0-20230228050547-1710fef4ab10 // indirect github.com/hashicorp/cronexpr v1.1.2 // indirect github.com/jackc/chunkreader/v2 v2.0.1 // indirect - github.com/jackc/pgconn v1.11.0 // indirect + github.com/jackc/pgconn v1.12.1 // indirect github.com/jackc/pgio v1.0.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect - github.com/jackc/pgproto3/v2 v2.2.0 // indirect + github.com/jackc/pgproto3/v2 v2.3.0 // indirect github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect - github.com/jackc/pgtype v1.10.0 // indirect + github.com/jackc/pgtype v1.11.0 // indirect github.com/k8snetworkplumbingwg/network-attachment-definition-client v0.0.0-20191119172530-79f836b90111 // indirect - github.com/montanaflynn/stats v0.0.0-20180911141734-db72e6cae808 // indirect + github.com/montanaflynn/stats v0.7.0 // indirect github.com/oklog/ulid v1.3.1 // indirect github.com/openshift/custom-resource-status v1.1.2 // indirect github.com/prometheus/statsd_exporter v0.21.0 // indirect @@ -127,7 +127,6 @@ require ( go.opentelemetry.io/otel/metric v1.23.0 // indirect go.opentelemetry.io/otel/trace v1.23.0 // indirect go.uber.org/zap v1.26.0 // indirect - golang.org/x/exp v0.0.0-20230728194245-b0cb94b80691 // indirect golang.org/x/mod v0.14.0 // indirect golang.org/x/tools v0.16.1 // indirect knative.dev/pkg v0.0.0-20231023150739-56bfe0dd9626 // indirect @@ -147,15 +146,16 @@ require ( github.com/aws/aws-sdk-go-v2/service/eks v1.39.2 github.com/devans10/pugo/flasharray v0.0.0-20230602184138-1a5d930c950e github.com/hashicorp/nomad/api v0.0.0-20240209231933-e2bfdf0c1034 - github.com/jackc/pgx/v4 v4.15.0 + github.com/jackc/pgx/v4 v4.16.1 github.com/jetstack/cert-manager v1.7.3 github.com/jinzhu/copier v0.4.0 github.com/onsi/ginkgo/v2 v2.15.0 - github.com/pure-px/apis v0.0.0-20240326194748-e9f7f27de779 - github.com/pure-px/platform-api-go-client v0.0.0-20240422094205-23129136cfd2 + github.com/pure-px/apis v0.0.3 + github.com/pure-px/platform-api-go-client v0.0.0-20240529124619-a3e5f98d62f0 github.com/tektoncd/pipeline v0.56.0 go.mongodb.org/mongo-driver v1.14.0 - go.uber.org/multierr v1.10.0 + go.uber.org/multierr v1.11.0 + golang.org/x/exp v0.0.0-20230905200255-921286631fa9 ) require ( @@ -211,7 +211,7 @@ require ( github.com/donovanhide/eventsource v0.0.0-20171031113327-3ed64d21fb0b // indirect github.com/emicklei/go-restful/v3 v3.10.2 // indirect github.com/evanphx/json-patch v5.6.0+incompatible // indirect - github.com/evanphx/json-patch/v5 v5.6.0 // indirect + github.com/evanphx/json-patch/v5 v5.7.0 // indirect github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect github.com/fatih/structs v1.1.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect @@ -317,9 +317,9 @@ require ( github.com/portworx/kvdb v0.0.0-20230326003017-21a38cf82d4b // indirect github.com/pquerna/cachecontrol v0.1.0 // indirect github.com/prometheus-operator/prometheus-operator/pkg/client v0.46.0 // indirect - github.com/prometheus/client_model v0.4.0 // indirect - github.com/prometheus/common v0.42.0 // indirect - github.com/prometheus/procfs v0.9.0 // indirect + github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 // indirect + github.com/prometheus/common v0.44.0 // indirect + github.com/prometheus/procfs v0.11.1 // indirect github.com/rancher/wrangler v1.1.0 // indirect github.com/rubenv/sql-migrate v1.1.2 // indirect github.com/russross/blackfriday v1.6.0 // indirect @@ -361,12 +361,12 @@ require ( k8s.io/component-helpers v0.25.1 // indirect k8s.io/klog v1.0.0 // indirect k8s.io/klog/v2 v2.120.1 // indirect - k8s.io/kube-openapi v0.0.0-20230515203736-54b630e78af5 // indirect + k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect k8s.io/kubectl v0.25.2 // indirect k8s.io/kubernetes v1.25.1 // indirect k8s.io/utils v0.0.0-20240102154912-e7106e64919e // indirect oras.land/oras-go v1.2.0 // indirect - sigs.k8s.io/cluster-api v1.1.6 // indirect + sigs.k8s.io/cluster-api v0.2.11 sigs.k8s.io/controller-runtime v0.14.5 // indirect sigs.k8s.io/gcp-compute-persistent-disk-csi-driver v0.7.0 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect @@ -393,10 +393,10 @@ replace ( github.com/libopenstorage/autopilot-api => github.com/libopenstorage/autopilot-api v0.6.1-0.20210301232050-ca2633c6e114 // PX dependencies - github.com/libopenstorage/openstorage => github.com/libopenstorage/openstorage v1.0.1-0.20240221210452-7757fdc2b8ff + github.com/libopenstorage/openstorage => github.com/libopenstorage/openstorage v1.0.1-0.20240416193513-1e07b4359307 // Stork dependencies - // github.com/libopenstorage/stork => github.com/libopenstorage/stork v1.4.1-0.20230330233319-e17ea1b3fd81 + github.com/portworx/sched-ops => github.com/portworx/sched-ops v1.20.4-rc1.0.20240514213912-ff0ae32b859a helm.sh/helm/v3 => helm.sh/helm/v3 v3.10.3 @@ -419,6 +419,7 @@ replace ( k8s.io/klog/v2 => k8s.io/klog/v2 v2.70.1 k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.25.1 k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.25.1 + k8s.io/kube-openapi => k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 k8s.io/kube-proxy => k8s.io/kube-proxy v0.25.1 k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.25.1 k8s.io/kubectl => k8s.io/kubectl v0.25.1 diff --git a/go.sum b/go.sum index f177bc931..cc2efa0b0 100644 --- a/go.sum +++ b/go.sum @@ -5,6 +5,7 @@ bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxo bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= bitbucket.org/bertimus9/systemstat v0.5.0/go.mod h1:EkUWPp8lKFPMXP8vnbpT5JDI0W/sTiLZAvN8ONWErHY= bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= +bitbucket.org/creachadair/shell v0.0.7/go.mod h1:oqtXSSvSYr4624lnnabXHaBsYW6RD80caLi2b3hJk0U= cloud.google.com/go v0.25.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.30.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= @@ -35,6 +36,7 @@ cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPT cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.82.0/go.mod h1:vlKccHJGuFBFufnAnuB08dfEH9Y3H7dzDzRECFdC2TA= cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= @@ -51,49 +53,171 @@ cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34h cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= +cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go v0.110.2/go.mod h1:k04UEeEtb6ZBRTv3dZz4CeJC3jKGxyhl0sAiVVquxiw= +cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.6/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.7/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= +cloud.google.com/go v0.110.9/go.mod h1:rpxevX/0Lqvlbc88b7Sc1SPNdyK1riNBTUU6JXhYNpM= +cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= +cloud.google.com/go v0.111.0/go.mod h1:0mibmpKP1TyOOFYQY5izo0LnT+ecvOQ0Sg3OdmMiNRU= cloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM= cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4= cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= +cloud.google.com/go/accessapproval v1.7.1/go.mod h1:JYczztsHRMK7NTXb6Xw+dwbs/WnOJxbo/2mTI+Kgg68= +cloud.google.com/go/accessapproval v1.7.2/go.mod h1:/gShiq9/kK/h8T/eEn1BTzalDvk0mZxJlhfw0p+Xuc0= +cloud.google.com/go/accessapproval v1.7.3/go.mod h1:4l8+pwIxGTNqSf4T3ds8nLO94NQf0W/KnMNuQ9PbnP8= +cloud.google.com/go/accessapproval v1.7.4/go.mod h1:/aTEh45LzplQgFYdQdwPMR9YdX0UlhBmvB84uAmQKUc= cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= +cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= +cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= +cloud.google.com/go/accesscontextmanager v1.8.0/go.mod h1:uI+AI/r1oyWK99NN8cQ3UK76AMelMzgZCvJfsi2c+ps= +cloud.google.com/go/accesscontextmanager v1.8.1/go.mod h1:JFJHfvuaTC+++1iL1coPiG1eu5D24db2wXCDWDjIrxo= +cloud.google.com/go/accesscontextmanager v1.8.2/go.mod h1:E6/SCRM30elQJ2PKtFMs2YhfJpZSNcJyejhuzoId4Zk= +cloud.google.com/go/accesscontextmanager v1.8.3/go.mod h1:4i/JkF2JiFbhLnnpnfoTX5vRXfhf9ukhU1ANOTALTOQ= +cloud.google.com/go/accesscontextmanager v1.8.4/go.mod h1:ParU+WbMpD34s5JFEnGAnPBYAgUHozaTmDJU7aCU9+M= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= +cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ= +cloud.google.com/go/aiplatform v1.36.1/go.mod h1:WTm12vJRPARNvJ+v6P52RDHCNe4AhvjcIZ/9/RRHy/k= +cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw= +cloud.google.com/go/aiplatform v1.45.0/go.mod h1:Iu2Q7sC7QGhXUeOhAj/oCK9a+ULz1O4AotZiqjQ8MYA= +cloud.google.com/go/aiplatform v1.48.0/go.mod h1:Iu2Q7sC7QGhXUeOhAj/oCK9a+ULz1O4AotZiqjQ8MYA= +cloud.google.com/go/aiplatform v1.50.0/go.mod h1:IRc2b8XAMTa9ZmfJV1BCCQbieWWvDnP1A8znyz5N7y4= +cloud.google.com/go/aiplatform v1.51.0/go.mod h1:IRc2b8XAMTa9ZmfJV1BCCQbieWWvDnP1A8znyz5N7y4= +cloud.google.com/go/aiplatform v1.51.1/go.mod h1:kY3nIMAVQOK2XDqDPHaOuD9e+FdMA6OOpfBjsvaFSOo= +cloud.google.com/go/aiplatform v1.51.2/go.mod h1:hCqVYB3mY45w99TmetEoe8eCQEwZEp9WHxeZdcv9phw= +cloud.google.com/go/aiplatform v1.52.0/go.mod h1:pwZMGvqe0JRkI1GWSZCtnAfrR4K1bv65IHILGA//VEU= +cloud.google.com/go/aiplatform v1.54.0/go.mod h1:pwZMGvqe0JRkI1GWSZCtnAfrR4K1bv65IHILGA//VEU= +cloud.google.com/go/aiplatform v1.57.0/go.mod h1:pwZMGvqe0JRkI1GWSZCtnAfrR4K1bv65IHILGA//VEU= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/analytics v0.17.0/go.mod h1:WXFa3WSym4IZ+JiKmavYdJwGG/CvpqiqczmL59bTD9M= +cloud.google.com/go/analytics v0.18.0/go.mod h1:ZkeHGQlcIPkw0R/GW+boWHhCOR43xz9RN/jn7WcqfIE= +cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE= +cloud.google.com/go/analytics v0.21.2/go.mod h1:U8dcUtmDmjrmUTnnnRnI4m6zKn/yaA5N9RlEkYFHpQo= +cloud.google.com/go/analytics v0.21.3/go.mod h1:U8dcUtmDmjrmUTnnnRnI4m6zKn/yaA5N9RlEkYFHpQo= +cloud.google.com/go/analytics v0.21.4/go.mod h1:zZgNCxLCy8b2rKKVfC1YkC2vTrpfZmeRCySM3aUbskA= +cloud.google.com/go/analytics v0.21.5/go.mod h1:BQtOBHWTlJ96axpPPnw5CvGJ6i3Ve/qX2fTxR8qWyr8= +cloud.google.com/go/analytics v0.21.6/go.mod h1:eiROFQKosh4hMaNhF85Oc9WO97Cpa7RggD40e/RBy8w= cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= +cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= +cloud.google.com/go/apigateway v1.6.1/go.mod h1:ufAS3wpbRjqfZrzpvLC2oh0MFlpRJm2E/ts25yyqmXA= +cloud.google.com/go/apigateway v1.6.2/go.mod h1:CwMC90nnZElorCW63P2pAYm25AtQrHfuOkbRSHj0bT8= +cloud.google.com/go/apigateway v1.6.3/go.mod h1:k68PXWpEs6BVDTtnLQAyG606Q3mz8pshItwPXjgv44Y= +cloud.google.com/go/apigateway v1.6.4/go.mod h1:0EpJlVGH5HwAN4VF4Iec8TAzGN1aQgbxAWGJsnPCGGY= cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= +cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= +cloud.google.com/go/apigeeconnect v1.6.1/go.mod h1:C4awq7x0JpLtrlQCr8AzVIzAaYgngRqWf9S5Uhg+wWs= +cloud.google.com/go/apigeeconnect v1.6.2/go.mod h1:s6O0CgXT9RgAxlq3DLXvG8riw8PYYbU/v25jqP3Dy18= +cloud.google.com/go/apigeeconnect v1.6.3/go.mod h1:peG0HFQ0si2bN15M6QSjEW/W7Gy3NYkWGz7pFz13cbo= +cloud.google.com/go/apigeeconnect v1.6.4/go.mod h1:CapQCWZ8TCjnU0d7PobxhpOdVz/OVJ2Hr/Zcuu1xFx0= +cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= +cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM= +cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc= +cloud.google.com/go/apigeeregistry v0.7.1/go.mod h1:1XgyjZye4Mqtw7T9TsY4NW10U7BojBvG4RMD+vRDrIw= +cloud.google.com/go/apigeeregistry v0.7.2/go.mod h1:9CA2B2+TGsPKtfi3F7/1ncCCsL62NXBRfM6iPoGSM+8= +cloud.google.com/go/apigeeregistry v0.8.1/go.mod h1:MW4ig1N4JZQsXmBSwH4rwpgDonocz7FPBSw6XPGHmYw= +cloud.google.com/go/apigeeregistry v0.8.2/go.mod h1:h4v11TDGdeXJDJvImtgK2AFVvMIgGWjSb0HRnBSjcX8= +cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= +cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI= +cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8= cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= +cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84= +cloud.google.com/go/appengine v1.7.0/go.mod h1:eZqpbHFCqRGa2aCdope7eC0SWLV1j0neb/QnMJVWx6A= +cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E= +cloud.google.com/go/appengine v1.8.1/go.mod h1:6NJXGLVhZCN9aQ/AEDvmfzKEfoYBlfB80/BHiKVputY= +cloud.google.com/go/appengine v1.8.2/go.mod h1:WMeJV9oZ51pvclqFN2PqHoGnys7rK0rz6s3Mp6yMvDo= +cloud.google.com/go/appengine v1.8.3/go.mod h1:2oUPZ1LVZ5EXi+AF1ihNAF+S8JrzQ3till5m9VQkrsk= +cloud.google.com/go/appengine v1.8.4/go.mod h1:TZ24v+wXBujtkK77CXCpjZbnuTvsFNT41MUaZ28D6vg= cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/area120 v0.7.0/go.mod h1:a3+8EUD1SX5RUcCs3MY5YasiO1z6yLiNLRiFrykbynY= +cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= +cloud.google.com/go/area120 v0.8.1/go.mod h1:BVfZpGpB7KFVNxPiQBuHkX6Ed0rS51xIgmGyjrAfzsg= +cloud.google.com/go/area120 v0.8.2/go.mod h1:a5qfo+x77SRLXnCynFWPUZhnZGeSgvQ+Y0v1kSItkh4= +cloud.google.com/go/area120 v0.8.3/go.mod h1:5zj6pMzVTH+SVHljdSKC35sriR/CVvQZzG/Icdyriw0= +cloud.google.com/go/area120 v0.8.4/go.mod h1:jfawXjxf29wyBXr48+W+GyX/f8fflxp642D/bb9v68M= cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= +cloud.google.com/go/artifactregistry v1.11.1/go.mod h1:lLYghw+Itq9SONbCa1YWBoWs1nOucMH0pwXN1rOBZFI= +cloud.google.com/go/artifactregistry v1.11.2/go.mod h1:nLZns771ZGAwVLzTX/7Al6R9ehma4WUEhZGWV6CeQNQ= +cloud.google.com/go/artifactregistry v1.12.0/go.mod h1:o6P3MIvtzTOnmvGagO9v/rOjjA0HmhJ+/6KAXrmYDCI= +cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08= +cloud.google.com/go/artifactregistry v1.14.1/go.mod h1:nxVdG19jTaSTu7yA7+VbWL346r3rIdkZ142BSQqhn5E= +cloud.google.com/go/artifactregistry v1.14.2/go.mod h1:Xk+QbsKEb0ElmyeMfdHAey41B+qBq3q5R5f5xD4XT3U= +cloud.google.com/go/artifactregistry v1.14.3/go.mod h1:A2/E9GXnsyXl7GUvQ/2CjHA+mVRoWAXC0brg2os+kNI= +cloud.google.com/go/artifactregistry v1.14.4/go.mod h1:SJJcZTMv6ce0LDMUnihCN7WSrI+kBSFV0KIKo8S8aYU= +cloud.google.com/go/artifactregistry v1.14.6/go.mod h1:np9LSFotNWHcjnOgh8UVK0RFPCTUGbO0ve3384xyHfE= cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= +cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo= +cloud.google.com/go/asset v1.12.0/go.mod h1:h9/sFOa4eDIyKmH6QMpm4eUK3pDojWnUhTgJlk762Hg= +cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw= +cloud.google.com/go/asset v1.14.1/go.mod h1:4bEJ3dnHCqWCDbWJ/6Vn7GVI9LerSi7Rfdi03hd+WTQ= +cloud.google.com/go/asset v1.15.0/go.mod h1:tpKafV6mEut3+vN9ScGvCHXHj7FALFVta+okxFECHcg= +cloud.google.com/go/asset v1.15.1/go.mod h1:yX/amTvFWRpp5rcFq6XbCxzKT8RJUam1UoboE179jU4= +cloud.google.com/go/asset v1.15.2/go.mod h1:B6H5tclkXvXz7PD22qCA2TDxSVQfasa3iDlM89O2NXs= +cloud.google.com/go/asset v1.15.3/go.mod h1:yYLfUD4wL4X589A9tYrv4rFrba0QlDeag0CMcM5ggXU= cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= +cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= +cloud.google.com/go/assuredworkloads v1.11.1/go.mod h1:+F04I52Pgn5nmPG36CWFtxmav6+7Q+c5QyJoL18Lry0= +cloud.google.com/go/assuredworkloads v1.11.2/go.mod h1:O1dfr+oZJMlE6mw0Bp0P1KZSlj5SghMBvTpZqIcUAW4= +cloud.google.com/go/assuredworkloads v1.11.3/go.mod h1:vEjfTKYyRUaIeA0bsGJceFV2JKpVRgyG2op3jfa59Zs= +cloud.google.com/go/assuredworkloads v1.11.4/go.mod h1:4pwwGNwy1RP0m+y12ef3Q/8PaiWrIDQ6nD2E8kvWI9U= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= +cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= +cloud.google.com/go/automl v1.13.1/go.mod h1:1aowgAHWYZU27MybSCFiukPO7xnyawv7pt3zK4bheQE= +cloud.google.com/go/automl v1.13.2/go.mod h1:gNY/fUmDEN40sP8amAX3MaXkxcqPIn7F1UIIPZpy4Mg= +cloud.google.com/go/automl v1.13.3/go.mod h1:Y8KwvyAZFOsMAPqUCfNu1AyclbC6ivCUF/MTwORymyY= +cloud.google.com/go/automl v1.13.4/go.mod h1:ULqwX/OLZ4hBVfKQaMtxMSTlPx0GqGbWN8uA/1EqCP8= cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= +cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= +cloud.google.com/go/baremetalsolution v1.1.1/go.mod h1:D1AV6xwOksJMV4OSlWHtWuFNZZYujJknMAP4Qa27QIA= +cloud.google.com/go/baremetalsolution v1.2.0/go.mod h1:68wi9AwPYkEWIUT4SvSGS9UJwKzNpshjHsH4lzk8iOw= +cloud.google.com/go/baremetalsolution v1.2.1/go.mod h1:3qKpKIw12RPXStwQXcbhfxVj1dqQGEvcmA+SX/mUR88= +cloud.google.com/go/baremetalsolution v1.2.2/go.mod h1:O5V6Uu1vzVelYahKfwEWRMaS3AbCkeYHy3145s1FkhM= +cloud.google.com/go/baremetalsolution v1.2.3/go.mod h1:/UAQ5xG3faDdy180rCUv47e0jvpp3BFxT+Cl0PFjw5g= cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= +cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= +cloud.google.com/go/batch v1.3.1/go.mod h1:VguXeQKXIYaeeIYbuozUmBR13AfL4SJP7IltNPS+A4A= +cloud.google.com/go/batch v1.4.1/go.mod h1:KdBmDD61K0ovcxoRHGrN6GmOBWeAOyCgKD0Mugx4Fkk= +cloud.google.com/go/batch v1.5.0/go.mod h1:KdBmDD61K0ovcxoRHGrN6GmOBWeAOyCgKD0Mugx4Fkk= +cloud.google.com/go/batch v1.5.1/go.mod h1:RpBuIYLkQu8+CWDk3dFD/t/jOCGuUpkpX+Y0n1Xccs8= +cloud.google.com/go/batch v1.6.1/go.mod h1:urdpD13zPe6YOK+6iZs/8/x2VBRofvblLpx0t57vM98= +cloud.google.com/go/batch v1.6.3/go.mod h1:J64gD4vsNSA2O5TtDB5AAux3nJ9iV8U3ilg3JDBYejU= +cloud.google.com/go/batch v1.7.0/go.mod h1:J64gD4vsNSA2O5TtDB5AAux3nJ9iV8U3ilg3JDBYejU= cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= +cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM= +cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU= +cloud.google.com/go/beyondcorp v0.6.1/go.mod h1:YhxDWw946SCbmcWo3fAhw3V4XZMSpQ/VYfcKGAEU8/4= +cloud.google.com/go/beyondcorp v1.0.0/go.mod h1:YhxDWw946SCbmcWo3fAhw3V4XZMSpQ/VYfcKGAEU8/4= +cloud.google.com/go/beyondcorp v1.0.1/go.mod h1:zl/rWWAFVeV+kx+X2Javly7o1EIQThU4WlkynffL/lk= +cloud.google.com/go/beyondcorp v1.0.2/go.mod h1:m8cpG7caD+5su+1eZr+TSvF6r21NdLJk4f9u4SP2Ntc= +cloud.google.com/go/beyondcorp v1.0.3/go.mod h1:HcBvnEd7eYr+HGDd5ZbuVmBYX019C6CEXBonXbCVwJo= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -104,26 +228,87 @@ cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM7 cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= +cloud.google.com/go/bigquery v1.47.0/go.mod h1:sA9XOgy0A8vQK9+MWhEQTY6Tix87M/ZurWFIxmF9I/E= +cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac= +cloud.google.com/go/bigquery v1.49.0/go.mod h1:Sv8hMmTFFYBlt/ftw2uN6dFdQPzBlREY9yBh7Oy7/4Q= +cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU= +cloud.google.com/go/bigquery v1.52.0/go.mod h1:3b/iXjRQGU4nKa87cXeg6/gogLjO8C6PmuM8i5Bi/u4= +cloud.google.com/go/bigquery v1.53.0/go.mod h1:3b/iXjRQGU4nKa87cXeg6/gogLjO8C6PmuM8i5Bi/u4= +cloud.google.com/go/bigquery v1.55.0/go.mod h1:9Y5I3PN9kQWuid6183JFhOGOW3GcirA5LpsKCUn+2ec= +cloud.google.com/go/bigquery v1.56.0/go.mod h1:KDcsploXTEY7XT3fDQzMUZlpQLHzE4itubHrnmhUrZA= +cloud.google.com/go/bigquery v1.57.1/go.mod h1:iYzC0tGVWt1jqSzBHqCr3lrRn0u13E8e+AqowBsDgug= +cloud.google.com/go/bigtable v1.18.1/go.mod h1:NAVyfJot9jlo+KmgWLUJ5DJGwNDoChzAcrecLpmuAmY= cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= +cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss= +cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc= +cloud.google.com/go/billing v1.16.0/go.mod h1:y8vx09JSSJG02k5QxbycNRrN7FGZB6F3CAcgum7jvGA= +cloud.google.com/go/billing v1.17.0/go.mod h1:Z9+vZXEq+HwH7bhJkyI4OQcR6TSbeMrjlpEjO2vzY64= +cloud.google.com/go/billing v1.17.1/go.mod h1:Z9+vZXEq+HwH7bhJkyI4OQcR6TSbeMrjlpEjO2vzY64= +cloud.google.com/go/billing v1.17.2/go.mod h1:u/AdV/3wr3xoRBk5xvUzYMS1IawOAPwQMuHgHMdljDg= +cloud.google.com/go/billing v1.17.3/go.mod h1:z83AkoZ7mZwBGT3yTnt6rSGI1OOsHSIi6a5M3mJ8NaU= +cloud.google.com/go/billing v1.17.4/go.mod h1:5DOYQStCxquGprqfuid/7haD7th74kyMBHkjO/OvDtk= +cloud.google.com/go/billing v1.18.0/go.mod h1:5DOYQStCxquGprqfuid/7haD7th74kyMBHkjO/OvDtk= cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= +cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= +cloud.google.com/go/binaryauthorization v1.6.1/go.mod h1:TKt4pa8xhowwffiBmbrbcxijJRZED4zrqnwZ1lKH51U= +cloud.google.com/go/binaryauthorization v1.7.0/go.mod h1:Zn+S6QqTMn6odcMU1zDZCJxPjU2tZPV1oDl45lWY154= +cloud.google.com/go/binaryauthorization v1.7.1/go.mod h1:GTAyfRWYgcbsP3NJogpV3yeunbUIjx2T9xVeYovtURE= +cloud.google.com/go/binaryauthorization v1.7.2/go.mod h1:kFK5fQtxEp97m92ziy+hbu+uKocka1qRRL8MVJIgjv0= +cloud.google.com/go/binaryauthorization v1.7.3/go.mod h1:VQ/nUGRKhrStlGr+8GMS8f6/vznYLkdK5vaKfdCIpvU= +cloud.google.com/go/binaryauthorization v1.8.0/go.mod h1:VQ/nUGRKhrStlGr+8GMS8f6/vznYLkdK5vaKfdCIpvU= cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= +cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= +cloud.google.com/go/certificatemanager v1.7.1/go.mod h1:iW8J3nG6SaRYImIa+wXQ0g8IgoofDFRp5UMzaNk1UqI= +cloud.google.com/go/certificatemanager v1.7.2/go.mod h1:15SYTDQMd00kdoW0+XY5d9e+JbOPjp24AvF48D8BbcQ= +cloud.google.com/go/certificatemanager v1.7.3/go.mod h1:T/sZYuC30PTag0TLo28VedIRIj1KPGcOQzjWAptHa00= +cloud.google.com/go/certificatemanager v1.7.4/go.mod h1:FHAylPe/6IIKuaRmHbjbdLhGhVQ+CWHSD5Jq0k4+cCE= cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= +cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE= +cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= +cloud.google.com/go/channel v1.16.0/go.mod h1:eN/q1PFSl5gyu0dYdmxNXscY/4Fi7ABmeHCJNf/oHmc= +cloud.google.com/go/channel v1.17.0/go.mod h1:RpbhJsGi/lXWAUM1eF4IbQGbsfVlg2o8Iiy2/YLfVT0= +cloud.google.com/go/channel v1.17.1/go.mod h1:xqfzcOZAcP4b/hUDH0GkGg1Sd5to6di1HOJn/pi5uBQ= +cloud.google.com/go/channel v1.17.2/go.mod h1:aT2LhnftnyfQceFql5I/mP8mIbiiJS4lWqgXA815zMk= +cloud.google.com/go/channel v1.17.3/go.mod h1:QcEBuZLGGrUMm7kNj9IbU1ZfmJq2apotsV83hbxX7eE= cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= +cloud.google.com/go/cloudbuild v1.6.0/go.mod h1:UIbc/w9QCbH12xX+ezUsgblrWv+Cv4Tw83GiSMHOn9M= +cloud.google.com/go/cloudbuild v1.7.0/go.mod h1:zb5tWh2XI6lR9zQmsm1VRA+7OCuve5d8S+zJUul8KTg= +cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s= +cloud.google.com/go/cloudbuild v1.10.1/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU= +cloud.google.com/go/cloudbuild v1.13.0/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU= +cloud.google.com/go/cloudbuild v1.14.0/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU= +cloud.google.com/go/cloudbuild v1.14.1/go.mod h1:K7wGc/3zfvmYWOWwYTgF/d/UVJhS4pu+HAy7PL7mCsU= +cloud.google.com/go/cloudbuild v1.14.2/go.mod h1:Bn6RO0mBYk8Vlrt+8NLrru7WXlQ9/RDWz2uo5KG1/sg= +cloud.google.com/go/cloudbuild v1.14.3/go.mod h1:eIXYWmRt3UtggLnFGx4JvXcMj4kShhVzGndL1LwleEM= +cloud.google.com/go/cloudbuild v1.15.0/go.mod h1:eIXYWmRt3UtggLnFGx4JvXcMj4kShhVzGndL1LwleEM= cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= +cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= +cloud.google.com/go/clouddms v1.6.1/go.mod h1:Ygo1vL52Ov4TBZQquhz5fiw2CQ58gvu+PlS6PVXCpZI= +cloud.google.com/go/clouddms v1.7.0/go.mod h1:MW1dC6SOtI/tPNCciTsXtsGNEM0i0OccykPvv3hiYeM= +cloud.google.com/go/clouddms v1.7.1/go.mod h1:o4SR8U95+P7gZ/TX+YbJxehOCsM+fe6/brlrFquiszk= +cloud.google.com/go/clouddms v1.7.2/go.mod h1:Rk32TmWmHo64XqDvW7jgkFQet1tUKNVzs7oajtJT3jU= +cloud.google.com/go/clouddms v1.7.3/go.mod h1:fkN2HQQNUYInAU3NQ3vRLkV2iWs8lIdmBKOx4nrL6Hc= cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= +cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y= +cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= +cloud.google.com/go/cloudtasks v1.11.1/go.mod h1:a9udmnou9KO2iulGscKR0qBYjreuX8oHwpmFsKspEvM= +cloud.google.com/go/cloudtasks v1.12.1/go.mod h1:a9udmnou9KO2iulGscKR0qBYjreuX8oHwpmFsKspEvM= +cloud.google.com/go/cloudtasks v1.12.2/go.mod h1:A7nYkjNlW2gUoROg1kvJrQGhJP/38UaWwsnuBDOBVUk= +cloud.google.com/go/cloudtasks v1.12.3/go.mod h1:GPVXhIOSGEaR+3xT4Fp72ScI+HjHffSS4B8+BaBB5Ys= +cloud.google.com/go/cloudtasks v1.12.4/go.mod h1:BEPu0Gtt2dU6FxZHNqqNdGqIG86qyWKBPGnsb7udGY0= cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= @@ -134,167 +319,558 @@ cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOt cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= +cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= +cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= +cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= +cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= +cloud.google.com/go/compute v1.19.3/go.mod h1:qxvISKp/gYnXkSAD1ppcSOveRAmzxicEv/JlizULFrI= +cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.21.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.23.1/go.mod h1:CqB3xpmPKKt3OJpW2ndFIXnA9A4xAy/F3Xp1ixncW78= +cloud.google.com/go/compute v1.23.2/go.mod h1:JJ0atRC0J/oWYiiVBmsSsrRnh92DhZPG4hFDcR04Rns= +cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg= cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40= cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= +cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= +cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= +cloud.google.com/go/contactcenterinsights v1.9.1/go.mod h1:bsg/R7zGLYMVxFFzfh9ooLTruLRCG9fnzhH9KznHhbM= +cloud.google.com/go/contactcenterinsights v1.10.0/go.mod h1:bsg/R7zGLYMVxFFzfh9ooLTruLRCG9fnzhH9KznHhbM= +cloud.google.com/go/contactcenterinsights v1.11.0/go.mod h1:hutBdImE4XNZ1NV4vbPJKSFOnQruhC5Lj9bZqWMTKiU= +cloud.google.com/go/contactcenterinsights v1.11.1/go.mod h1:FeNP3Kg8iteKM80lMwSk3zZZKVxr+PGnAId6soKuXwE= +cloud.google.com/go/contactcenterinsights v1.11.2/go.mod h1:A9PIR5ov5cRcd28KlDbmmXE8Aay+Gccer2h4wzkYFso= +cloud.google.com/go/contactcenterinsights v1.11.3/go.mod h1:HHX5wrz5LHVAwfI2smIotQG9x8Qd6gYilaHcLLLmNis= +cloud.google.com/go/contactcenterinsights v1.12.0/go.mod h1:HHX5wrz5LHVAwfI2smIotQG9x8Qd6gYilaHcLLLmNis= +cloud.google.com/go/contactcenterinsights v1.12.1/go.mod h1:HHX5wrz5LHVAwfI2smIotQG9x8Qd6gYilaHcLLLmNis= cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= +cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4= +cloud.google.com/go/container v1.14.0/go.mod h1:3AoJMPhHfLDxLvrlVWaK57IXzaPnLaZq63WX59aQBfM= +cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA= +cloud.google.com/go/container v1.22.1/go.mod h1:lTNExE2R7f+DLbAN+rJiKTisauFCaoDq6NURZ83eVH4= +cloud.google.com/go/container v1.24.0/go.mod h1:lTNExE2R7f+DLbAN+rJiKTisauFCaoDq6NURZ83eVH4= +cloud.google.com/go/container v1.26.0/go.mod h1:YJCmRet6+6jnYYRS000T6k0D0xUXQgBSaJ7VwI8FBj4= +cloud.google.com/go/container v1.26.1/go.mod h1:5smONjPRUxeEpDG7bMKWfDL4sauswqEtnBK1/KKpR04= +cloud.google.com/go/container v1.26.2/go.mod h1:YlO84xCt5xupVbLaMY4s3XNE79MUJ+49VmkInr6HvF4= +cloud.google.com/go/container v1.27.1/go.mod h1:b1A1gJeTBXVLQ6GGw9/9M4FG94BEGsqJ5+t4d/3N7O4= +cloud.google.com/go/container v1.28.0/go.mod h1:b1A1gJeTBXVLQ6GGw9/9M4FG94BEGsqJ5+t4d/3N7O4= +cloud.google.com/go/container v1.29.0/go.mod h1:b1A1gJeTBXVLQ6GGw9/9M4FG94BEGsqJ5+t4d/3N7O4= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI= +cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s= +cloud.google.com/go/containeranalysis v0.10.1/go.mod h1:Ya2jiILITMY68ZLPaogjmOMNkwsDrWBSTyBubGXO7j0= +cloud.google.com/go/containeranalysis v0.11.0/go.mod h1:4n2e99ZwpGxpNcz+YsFT1dfOHPQFGcAC8FN2M2/ne/U= +cloud.google.com/go/containeranalysis v0.11.1/go.mod h1:rYlUOM7nem1OJMKwE1SadufX0JP3wnXj844EtZAwWLY= +cloud.google.com/go/containeranalysis v0.11.2/go.mod h1:xibioGBC1MD2j4reTyV1xY1/MvKaz+fyM9ENWhmIeP8= +cloud.google.com/go/containeranalysis v0.11.3/go.mod h1:kMeST7yWFQMGjiG9K7Eov+fPNQcGhb8mXj/UcTiWw9U= cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= +cloud.google.com/go/datacatalog v1.8.1/go.mod h1:RJ58z4rMp3gvETA465Vg+ag8BGgBdnRPEMMSTr5Uv+M= +cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0= +cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8= +cloud.google.com/go/datacatalog v1.14.0/go.mod h1:h0PrGtlihoutNMp/uvwhawLQ9+c63Kz65UFqh49Yo+E= +cloud.google.com/go/datacatalog v1.14.1/go.mod h1:d2CevwTG4yedZilwe+v3E3ZBDRMobQfSG/a6cCCN5R4= +cloud.google.com/go/datacatalog v1.16.0/go.mod h1:d2CevwTG4yedZilwe+v3E3ZBDRMobQfSG/a6cCCN5R4= +cloud.google.com/go/datacatalog v1.17.1/go.mod h1:nCSYFHgtxh2MiEktWIz71s/X+7ds/UT9kp0PC7waCzE= +cloud.google.com/go/datacatalog v1.18.0/go.mod h1:nCSYFHgtxh2MiEktWIz71s/X+7ds/UT9kp0PC7waCzE= +cloud.google.com/go/datacatalog v1.18.1/go.mod h1:TzAWaz+ON1tkNr4MOcak8EBHX7wIRX/gZKM+yTVsv+A= +cloud.google.com/go/datacatalog v1.18.2/go.mod h1:SPVgWW2WEMuWHA+fHodYjmxPiMqcOiWfhc9OD5msigk= +cloud.google.com/go/datacatalog v1.18.3/go.mod h1:5FR6ZIF8RZrtml0VUao22FxhdjkoG+a0866rEnObryM= +cloud.google.com/go/datacatalog v1.19.0/go.mod h1:5FR6ZIF8RZrtml0VUao22FxhdjkoG+a0866rEnObryM= cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= +cloud.google.com/go/dataflow v0.9.1/go.mod h1:Wp7s32QjYuQDWqJPFFlnBKhkAtiFpMTdg00qGbnIHVw= +cloud.google.com/go/dataflow v0.9.2/go.mod h1:vBfdBZ/ejlTaYIGB3zB4T08UshH70vbtZeMD+urnUSo= +cloud.google.com/go/dataflow v0.9.3/go.mod h1:HI4kMVjcHGTs3jTHW/kv3501YW+eloiJSLxkJa/vqFE= +cloud.google.com/go/dataflow v0.9.4/go.mod h1:4G8vAkHYCSzU8b/kmsoR2lWyHJD85oMJPHMtan40K8w= cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= +cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA= +cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= +cloud.google.com/go/dataform v0.8.1/go.mod h1:3BhPSiw8xmppbgzeBbmDvmSWlwouuJkXsXsb8UBih9M= +cloud.google.com/go/dataform v0.8.2/go.mod h1:X9RIqDs6NbGPLR80tnYoPNiO1w0wenKTb8PxxlhTMKM= +cloud.google.com/go/dataform v0.8.3/go.mod h1:8nI/tvv5Fso0drO3pEjtowz58lodx8MVkdV2q0aPlqg= +cloud.google.com/go/dataform v0.9.1/go.mod h1:pWTg+zGQ7i16pyn0bS1ruqIE91SdL2FDMvEYu/8oQxs= cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= +cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= +cloud.google.com/go/datafusion v1.7.1/go.mod h1:KpoTBbFmoToDExJUso/fcCiguGDk7MEzOWXUsJo0wsI= +cloud.google.com/go/datafusion v1.7.2/go.mod h1:62K2NEC6DRlpNmI43WHMWf9Vg/YvN6QVi8EVwifElI0= +cloud.google.com/go/datafusion v1.7.3/go.mod h1:eoLt1uFXKGBq48jy9LZ+Is8EAVLnmn50lNncLzwYokE= +cloud.google.com/go/datafusion v1.7.4/go.mod h1:BBs78WTOLYkT4GVZIXQCZT3GFpkpDN4aBY4NDX/jVlM= cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= +cloud.google.com/go/datalabeling v0.8.1/go.mod h1:XS62LBSVPbYR54GfYQsPXZjTW8UxCK2fkDciSrpRFdY= +cloud.google.com/go/datalabeling v0.8.2/go.mod h1:cyDvGHuJWu9U/cLDA7d8sb9a0tWLEletStu2sTmg3BE= +cloud.google.com/go/datalabeling v0.8.3/go.mod h1:tvPhpGyS/V7lqjmb3V0TaDdGvhzgR1JoW7G2bpi2UTI= +cloud.google.com/go/datalabeling v0.8.4/go.mod h1:Z1z3E6LHtffBGrNUkKwbwbDxTiXEApLzIgmymj8A3S8= cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= +cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ= +cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= +cloud.google.com/go/dataplex v1.8.1/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE= +cloud.google.com/go/dataplex v1.9.0/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE= +cloud.google.com/go/dataplex v1.9.1/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE= +cloud.google.com/go/dataplex v1.10.1/go.mod h1:1MzmBv8FvjYfc7vDdxhnLFNskikkB+3vl475/XdCDhs= +cloud.google.com/go/dataplex v1.10.2/go.mod h1:xdC8URdTrCrZMW6keY779ZT1cTOfV8KEPNsw+LTRT1Y= +cloud.google.com/go/dataplex v1.11.1/go.mod h1:mHJYQQ2VEJHsyoC0OdNyy988DvEbPhqFs5OOLffLX0c= +cloud.google.com/go/dataplex v1.11.2/go.mod h1:mHJYQQ2VEJHsyoC0OdNyy988DvEbPhqFs5OOLffLX0c= +cloud.google.com/go/dataplex v1.13.0/go.mod h1:mHJYQQ2VEJHsyoC0OdNyy988DvEbPhqFs5OOLffLX0c= cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= +cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= +cloud.google.com/go/dataproc/v2 v2.0.1/go.mod h1:7Ez3KRHdFGcfY7GcevBbvozX+zyWGcwLJvvAMwCaoZ4= +cloud.google.com/go/dataproc/v2 v2.2.0/go.mod h1:lZR7AQtwZPvmINx5J87DSOOpTfof9LVZju6/Qo4lmcY= +cloud.google.com/go/dataproc/v2 v2.2.1/go.mod h1:QdAJLaBjh+l4PVlVZcmrmhGccosY/omC1qwfQ61Zv/o= +cloud.google.com/go/dataproc/v2 v2.2.2/go.mod h1:aocQywVmQVF4i8CL740rNI/ZRpsaaC1Wh2++BJ7HEJ4= +cloud.google.com/go/dataproc/v2 v2.2.3/go.mod h1:G5R6GBc9r36SXv/RtZIVfB8SipI+xVn0bX5SxUzVYbY= +cloud.google.com/go/dataproc/v2 v2.3.0/go.mod h1:G5R6GBc9r36SXv/RtZIVfB8SipI+xVn0bX5SxUzVYbY= cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= +cloud.google.com/go/dataqna v0.8.1/go.mod h1:zxZM0Bl6liMePWsHA8RMGAfmTG34vJMapbHAxQ5+WA8= +cloud.google.com/go/dataqna v0.8.2/go.mod h1:KNEqgx8TTmUipnQsScOoDpq/VlXVptUqVMZnt30WAPs= +cloud.google.com/go/dataqna v0.8.3/go.mod h1:wXNBW2uvc9e7Gl5k8adyAMnLush1KVV6lZUhB+rqNu4= +cloud.google.com/go/dataqna v0.8.4/go.mod h1:mySRKjKg5Lz784P6sCov3p1QD+RZQONRMRjzGNcFd0c= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= +cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= +cloud.google.com/go/datastore v1.12.0/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= +cloud.google.com/go/datastore v1.12.1/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= +cloud.google.com/go/datastore v1.13.0/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= +cloud.google.com/go/datastore v1.14.0/go.mod h1:GAeStMBIt9bPS7jMJA85kgkpsMkvseWWXiaHya9Jes8= +cloud.google.com/go/datastore v1.15.0/go.mod h1:GAeStMBIt9bPS7jMJA85kgkpsMkvseWWXiaHya9Jes8= cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= +cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs= +cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww= +cloud.google.com/go/datastream v1.9.1/go.mod h1:hqnmr8kdUBmrnk65k5wNRoHSCYksvpdZIcZIEl8h43Q= +cloud.google.com/go/datastream v1.10.0/go.mod h1:hqnmr8kdUBmrnk65k5wNRoHSCYksvpdZIcZIEl8h43Q= +cloud.google.com/go/datastream v1.10.1/go.mod h1:7ngSYwnw95YFyTd5tOGBxHlOZiL+OtpjheqU7t2/s/c= +cloud.google.com/go/datastream v1.10.2/go.mod h1:W42TFgKAs/om6x/CdXX5E4oiAsKlH+e8MTGy81zdYt0= +cloud.google.com/go/datastream v1.10.3/go.mod h1:YR0USzgjhqA/Id0Ycu1VvZe8hEWwrkjuXrGbzeDOSEA= cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= +cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI= +cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ= +cloud.google.com/go/deploy v1.11.0/go.mod h1:tKuSUV5pXbn67KiubiUNUejqLs4f5cxxiCNCeyl0F2g= +cloud.google.com/go/deploy v1.13.0/go.mod h1:tKuSUV5pXbn67KiubiUNUejqLs4f5cxxiCNCeyl0F2g= +cloud.google.com/go/deploy v1.13.1/go.mod h1:8jeadyLkH9qu9xgO3hVWw8jVr29N1mnW42gRJT8GY6g= +cloud.google.com/go/deploy v1.14.1/go.mod h1:N8S0b+aIHSEeSr5ORVoC0+/mOPUysVt8ae4QkZYolAw= +cloud.google.com/go/deploy v1.14.2/go.mod h1:e5XOUI5D+YGldyLNZ21wbp9S8otJbBE4i88PtO9x/2g= +cloud.google.com/go/deploy v1.15.0/go.mod h1:e5XOUI5D+YGldyLNZ21wbp9S8otJbBE4i88PtO9x/2g= +cloud.google.com/go/deploy v1.16.0/go.mod h1:e5XOUI5D+YGldyLNZ21wbp9S8otJbBE4i88PtO9x/2g= cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= +cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= +cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4= +cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE= +cloud.google.com/go/dialogflow v1.38.0/go.mod h1:L7jnH+JL2mtmdChzAIcXQHXMvQkE3U4hTaNltEuxXn4= +cloud.google.com/go/dialogflow v1.40.0/go.mod h1:L7jnH+JL2mtmdChzAIcXQHXMvQkE3U4hTaNltEuxXn4= +cloud.google.com/go/dialogflow v1.43.0/go.mod h1:pDUJdi4elL0MFmt1REMvFkdsUTYSHq+rTCS8wg0S3+M= +cloud.google.com/go/dialogflow v1.44.0/go.mod h1:pDUJdi4elL0MFmt1REMvFkdsUTYSHq+rTCS8wg0S3+M= +cloud.google.com/go/dialogflow v1.44.1/go.mod h1:n/h+/N2ouKOO+rbe/ZnI186xImpqvCVj2DdsWS/0EAk= +cloud.google.com/go/dialogflow v1.44.2/go.mod h1:QzFYndeJhpVPElnFkUXxdlptx0wPnBWLCBT9BvtC3/c= +cloud.google.com/go/dialogflow v1.44.3/go.mod h1:mHly4vU7cPXVweuB5R0zsYKPMzy240aQdAu06SqBbAQ= +cloud.google.com/go/dialogflow v1.47.0/go.mod h1:mHly4vU7cPXVweuB5R0zsYKPMzy240aQdAu06SqBbAQ= cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= +cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= +cloud.google.com/go/dlp v1.10.1/go.mod h1:IM8BWz1iJd8njcNcG0+Kyd9OPnqnRNkDV8j42VT5KOI= +cloud.google.com/go/dlp v1.10.2/go.mod h1:ZbdKIhcnyhILgccwVDzkwqybthh7+MplGC3kZVZsIOQ= +cloud.google.com/go/dlp v1.10.3/go.mod h1:iUaTc/ln8I+QT6Ai5vmuwfw8fqTk2kaz0FvCwhLCom0= +cloud.google.com/go/dlp v1.11.1/go.mod h1:/PA2EnioBeXTL/0hInwgj0rfsQb3lpE3R8XUJxqUNKI= cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= +cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM= +cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= +cloud.google.com/go/documentai v1.20.0/go.mod h1:yJkInoMcK0qNAEdRnqY/D5asy73tnPe88I1YTZT+a8E= +cloud.google.com/go/documentai v1.22.0/go.mod h1:yJkInoMcK0qNAEdRnqY/D5asy73tnPe88I1YTZT+a8E= +cloud.google.com/go/documentai v1.22.1/go.mod h1:LKs22aDHbJv7ufXuPypzRO7rG3ALLJxzdCXDPutw4Qc= +cloud.google.com/go/documentai v1.23.0/go.mod h1:LKs22aDHbJv7ufXuPypzRO7rG3ALLJxzdCXDPutw4Qc= +cloud.google.com/go/documentai v1.23.2/go.mod h1:Q/wcRT+qnuXOpjAkvOV4A+IeQl04q2/ReT7SSbytLSo= +cloud.google.com/go/documentai v1.23.4/go.mod h1:4MYAaEMnADPN1LPN5xboDR5QVB6AgsaxgFdJhitlE2Y= +cloud.google.com/go/documentai v1.23.5/go.mod h1:ghzBsyVTiVdkfKaUCum/9bGBEyBjDO4GfooEcYKhN+g= +cloud.google.com/go/documentai v1.23.6/go.mod h1:ghzBsyVTiVdkfKaUCum/9bGBEyBjDO4GfooEcYKhN+g= cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= +cloud.google.com/go/domains v0.9.1/go.mod h1:aOp1c0MbejQQ2Pjf1iJvnVyT+z6R6s8pX66KaCSDYfE= +cloud.google.com/go/domains v0.9.2/go.mod h1:3YvXGYzZG1Temjbk7EyGCuGGiXHJwVNmwIf+E/cUp5I= +cloud.google.com/go/domains v0.9.3/go.mod h1:29k66YNDLDY9LCFKpGFeh6Nj9r62ZKm5EsUJxAl84KU= +cloud.google.com/go/domains v0.9.4/go.mod h1:27jmJGShuXYdUNjyDG0SodTfT5RwLi7xmH334Gvi3fY= cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc= +cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= +cloud.google.com/go/edgecontainer v1.1.1/go.mod h1:O5bYcS//7MELQZs3+7mabRqoWQhXCzenBu0R8bz2rwk= +cloud.google.com/go/edgecontainer v1.1.2/go.mod h1:wQRjIzqxEs9e9wrtle4hQPSR1Y51kqN75dgF7UllZZ4= +cloud.google.com/go/edgecontainer v1.1.3/go.mod h1:Ll2DtIABzEfaxaVSbwj3QHFaOOovlDFiWVDu349jSsA= +cloud.google.com/go/edgecontainer v1.1.4/go.mod h1:AvFdVuZuVGdgaE5YvlL1faAoa1ndRR/5XhXZvPBHbsE= cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= +cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= +cloud.google.com/go/essentialcontacts v1.6.2/go.mod h1:T2tB6tX+TRak7i88Fb2N9Ok3PvY3UNbUsMag9/BARh4= +cloud.google.com/go/essentialcontacts v1.6.3/go.mod h1:yiPCD7f2TkP82oJEFXFTou8Jl8L6LBRPeBEkTaO0Ggo= +cloud.google.com/go/essentialcontacts v1.6.4/go.mod h1:iju5Vy3d9tJUg0PYMd1nHhjV7xoCXaOAVabrwLaPBEM= +cloud.google.com/go/essentialcontacts v1.6.5/go.mod h1:jjYbPzw0x+yglXC890l6ECJWdYeZ5dlYACTFL0U/VuM= cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= +cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw= +cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= +cloud.google.com/go/eventarc v1.12.1/go.mod h1:mAFCW6lukH5+IZjkvrEss+jmt2kOdYlN8aMx3sRJiAI= +cloud.google.com/go/eventarc v1.13.0/go.mod h1:mAFCW6lukH5+IZjkvrEss+jmt2kOdYlN8aMx3sRJiAI= +cloud.google.com/go/eventarc v1.13.1/go.mod h1:EqBxmGHFrruIara4FUQ3RHlgfCn7yo1HYsu2Hpt/C3Y= +cloud.google.com/go/eventarc v1.13.2/go.mod h1:X9A80ShVu19fb4e5sc/OLV7mpFUKZMwfJFeeWhcIObM= +cloud.google.com/go/eventarc v1.13.3/go.mod h1:RWH10IAZIRcj1s/vClXkBgMHwh59ts7hSWcqD3kaclg= cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= +cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs= +cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg= +cloud.google.com/go/filestore v1.7.1/go.mod h1:y10jsorq40JJnjR/lQ8AfFbbcGlw3g+Dp8oN7i7FjV4= +cloud.google.com/go/filestore v1.7.2/go.mod h1:TYOlyJs25f/omgj+vY7/tIG/E7BX369triSPzE4LdgE= +cloud.google.com/go/filestore v1.7.3/go.mod h1:Qp8WaEERR3cSkxToxFPHh/b8AACkSut+4qlCjAmKTV0= +cloud.google.com/go/filestore v1.7.4/go.mod h1:S5JCxIbFjeBhWMTfIYH2Jx24J6BqjwpkkPl+nBA5DlI= +cloud.google.com/go/filestore v1.8.0/go.mod h1:S5JCxIbFjeBhWMTfIYH2Jx24J6BqjwpkkPl+nBA5DlI= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= cloud.google.com/go/firestore v1.2.0/go.mod h1:iISCjWnTpnoJT1R287xRdjvQHJrxQOpeah4phb5D3h0= cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= +cloud.google.com/go/firestore v1.11.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= +cloud.google.com/go/firestore v1.12.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= +cloud.google.com/go/firestore v1.13.0/go.mod h1:QojqqOh8IntInDUSTAh0c8ZsPYAr68Ma8c5DWOy8xb8= +cloud.google.com/go/firestore v1.14.0/go.mod h1:96MVaHLsEhbvkBEdZgfN+AS/GIkco1LRpH9Xp9YZfzQ= cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= +cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw= +cloud.google.com/go/functions v1.12.0/go.mod h1:AXWGrF3e2C/5ehvwYo/GH6O5s09tOPksiKhz+hH8WkA= +cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c= +cloud.google.com/go/functions v1.15.1/go.mod h1:P5yNWUTkyU+LvW/S9O6V+V423VZooALQlqoXdoPz5AE= +cloud.google.com/go/functions v1.15.2/go.mod h1:CHAjtcR6OU4XF2HuiVeriEdELNcnvRZSk1Q8RMqy4lE= +cloud.google.com/go/functions v1.15.3/go.mod h1:r/AMHwBheapkkySEhiZYLDBwVJCdlRwsm4ieJu35/Ug= +cloud.google.com/go/functions v1.15.4/go.mod h1:CAsTc3VlRMVvx+XqXxKqVevguqJpnVip4DdonFsX28I= cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= +cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= +cloud.google.com/go/gaming v1.10.1/go.mod h1:XQQvtfP8Rb9Rxnxm5wFVpAp9zCQkJi2bLIb7iHGwB3s= cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= +cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= +cloud.google.com/go/gkebackup v1.3.0/go.mod h1:vUDOu++N0U5qs4IhG1pcOnD1Mac79xWy6GoBFlWCWBU= +cloud.google.com/go/gkebackup v1.3.1/go.mod h1:vUDOu++N0U5qs4IhG1pcOnD1Mac79xWy6GoBFlWCWBU= +cloud.google.com/go/gkebackup v1.3.2/go.mod h1:OMZbXzEJloyXMC7gqdSB+EOEQ1AKcpGYvO3s1ec5ixk= +cloud.google.com/go/gkebackup v1.3.3/go.mod h1:eMk7/wVV5P22KBakhQnJxWSVftL1p4VBFLpv0kIft7I= +cloud.google.com/go/gkebackup v1.3.4/go.mod h1:gLVlbM8h/nHIs09ns1qx3q3eaXcGSELgNu1DWXYz1HI= cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= +cloud.google.com/go/gkeconnect v0.8.1/go.mod h1:KWiK1g9sDLZqhxB2xEuPV8V9NYzrqTUmQR9shJHpOZw= +cloud.google.com/go/gkeconnect v0.8.2/go.mod h1:6nAVhwchBJYgQCXD2pHBFQNiJNyAd/wyxljpaa6ZPrY= +cloud.google.com/go/gkeconnect v0.8.3/go.mod h1:i9GDTrfzBSUZGCe98qSu1B8YB8qfapT57PenIb820Jo= +cloud.google.com/go/gkeconnect v0.8.4/go.mod h1:84hZz4UMlDCKl8ifVW8layK4WHlMAFeq8vbzjU0yJkw= cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E= +cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= +cloud.google.com/go/gkehub v0.14.1/go.mod h1:VEXKIJZ2avzrbd7u+zeMtW00Y8ddk/4V9511C9CQGTY= +cloud.google.com/go/gkehub v0.14.2/go.mod h1:iyjYH23XzAxSdhrbmfoQdePnlMj2EWcvnR+tHdBQsCY= +cloud.google.com/go/gkehub v0.14.3/go.mod h1:jAl6WafkHHW18qgq7kqcrXYzN08hXeK/Va3utN8VKg8= +cloud.google.com/go/gkehub v0.14.4/go.mod h1:Xispfu2MqnnFt8rV/2/3o73SK1snL8s9dYJ9G2oQMfc= cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= +cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= +cloud.google.com/go/gkemulticloud v0.6.1/go.mod h1:kbZ3HKyTsiwqKX7Yw56+wUGwwNZViRnxWK2DVknXWfw= +cloud.google.com/go/gkemulticloud v1.0.0/go.mod h1:kbZ3HKyTsiwqKX7Yw56+wUGwwNZViRnxWK2DVknXWfw= +cloud.google.com/go/gkemulticloud v1.0.1/go.mod h1:AcrGoin6VLKT/fwZEYuqvVominLriQBCKmbjtnbMjG8= +cloud.google.com/go/gkemulticloud v1.0.2/go.mod h1:+ee5VXxKb3H1l4LZAcgWB/rvI16VTNTrInWxDjAGsGo= +cloud.google.com/go/gkemulticloud v1.0.3/go.mod h1:7NpJBN94U6DY1xHIbsDqB2+TFZUfjLUKLjUX8NGLor0= cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/grafeas v0.3.0/go.mod h1:P7hgN24EyONOTMyeJH6DxG4zD7fwiYa5Q6GUgyFSOU8= cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= +cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= +cloud.google.com/go/gsuiteaddons v1.6.1/go.mod h1:CodrdOqRZcLp5WOwejHWYBjZvfY0kOphkAKpF/3qdZY= +cloud.google.com/go/gsuiteaddons v1.6.2/go.mod h1:K65m9XSgs8hTF3X9nNTPi8IQueljSdYo9F+Mi+s4MyU= +cloud.google.com/go/gsuiteaddons v1.6.3/go.mod h1:sCFJkZoMrLZT3JTb8uJqgKPNshH2tfXeCwTFRebTq48= +cloud.google.com/go/gsuiteaddons v1.6.4/go.mod h1:rxtstw7Fx22uLOXBpsvb9DUbC+fiXs7rF4U29KHM/pE= cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/iam v0.4.0/go.mod h1:cbaZxyScUhxl7ZAkNWiALgihfP75wS/fUsVNaa1r3vA= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= cloud.google.com/go/iam v0.10.0/go.mod h1:nXAECrMt2qHpF6RZUZseteD6QyanL68reN4OXPw0UWM= +cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= +cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= +cloud.google.com/go/iam v1.0.1/go.mod h1:yR3tmSL8BcZB4bxByRv2jkSIahVmCtfKZwLYGBalRE8= +cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= +cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= +cloud.google.com/go/iam v1.1.2/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= +cloud.google.com/go/iam v1.1.3/go.mod h1:3khUlaBXfPKKe7huYgEpDn6FtgRyMEqbkvBxrQyY5SE= +cloud.google.com/go/iam v1.1.4/go.mod h1:l/rg8l1AaA+VFMho/HYx2Vv6xinPSLMF8qfhRPIZ0L8= +cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc= cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI= cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= +cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk= +cloud.google.com/go/iap v1.7.0/go.mod h1:beqQx56T9O1G1yNPph+spKpNibDlYIiIixiqsQXxLIo= +cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74= +cloud.google.com/go/iap v1.8.1/go.mod h1:sJCbeqg3mvWLqjZNsI6dfAtbbV1DL2Rl7e1mTyXYREQ= +cloud.google.com/go/iap v1.9.0/go.mod h1:01OFxd1R+NFrg78S+hoPV5PxEzv22HXaNqUUlmNHFuY= +cloud.google.com/go/iap v1.9.1/go.mod h1:SIAkY7cGMLohLSdBR25BuIxO+I4fXJiL06IBL7cy/5Q= +cloud.google.com/go/iap v1.9.2/go.mod h1:GwDTOs047PPSnwRD0Us5FKf4WDRcVvHg1q9WVkKBhdI= +cloud.google.com/go/iap v1.9.3/go.mod h1:DTdutSZBqkkOm2HEOTBzhZxh2mwwxshfD/h3yofAiCw= cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= +cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= +cloud.google.com/go/ids v1.4.1/go.mod h1:np41ed8YMU8zOgv53MMMoCntLTn2lF+SUzlM+O3u/jw= +cloud.google.com/go/ids v1.4.2/go.mod h1:3vw8DX6YddRu9BncxuzMyWn0g8+ooUjI2gslJ7FH3vk= +cloud.google.com/go/ids v1.4.3/go.mod h1:9CXPqI3GedjmkjbMWCUhMZ2P2N7TUMzAkVXYEH2orYU= +cloud.google.com/go/ids v1.4.4/go.mod h1:z+WUc2eEl6S/1aZWzwtVNWoSZslgzPxAboS0lZX0HjI= cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= +cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o= +cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE= +cloud.google.com/go/iot v1.7.1/go.mod h1:46Mgw7ev1k9KqK1ao0ayW9h0lI+3hxeanz+L1zmbbbk= +cloud.google.com/go/iot v1.7.2/go.mod h1:q+0P5zr1wRFpw7/MOgDXrG/HVA+l+cSwdObffkrpnSg= +cloud.google.com/go/iot v1.7.3/go.mod h1:t8itFchkol4VgNbHnIq9lXoOOtHNR3uAACQMYbN9N4I= +cloud.google.com/go/iot v1.7.4/go.mod h1:3TWqDVvsddYBG++nHSZmluoCAVGr1hAcabbWZNKEZLk= cloud.google.com/go/kms v1.3.0/go.mod h1:EIdZ6hpR15zmiaKC8YKYoXplDFnL+Z6f5VCGHJMDhLs= cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= +cloud.google.com/go/kms v1.8.0/go.mod h1:4xFEhYFqvW+4VMELtZyxomGSYtSQKzM178ylFW4jMAg= +cloud.google.com/go/kms v1.9.0/go.mod h1:qb1tPTgfF9RQP8e1wq4cLFErVuTJv7UsSC915J8dh3w= +cloud.google.com/go/kms v1.10.0/go.mod h1:ng3KTUtQQU9bPX3+QGLsflZIHlkbn8amFAMY63m8d24= +cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI= +cloud.google.com/go/kms v1.11.0/go.mod h1:hwdiYC0xjnWsKQQCQQmIQnS9asjYVSK6jtXm+zFqXLM= +cloud.google.com/go/kms v1.12.1/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM= +cloud.google.com/go/kms v1.15.0/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM= +cloud.google.com/go/kms v1.15.2/go.mod h1:3hopT4+7ooWRCjc2DxgnpESFxhIraaI2IpAVUEhbT/w= +cloud.google.com/go/kms v1.15.3/go.mod h1:AJdXqHxS2GlPyduM99s9iGqi2nwbviBbhV/hdmt4iOQ= +cloud.google.com/go/kms v1.15.4/go.mod h1:L3Sdj6QTHK8dfwK5D1JLsAyELsNMnd3tAIwGS4ltKpc= +cloud.google.com/go/kms v1.15.5/go.mod h1:cU2H5jnp6G2TDpUGZyqTCoy1n16fbubHZjmVXSMtwDI= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= +cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= +cloud.google.com/go/language v1.10.1/go.mod h1:CPp94nsdVNiQEt1CNjF5WkTcisLiHPyIbMhvR8H2AW0= +cloud.google.com/go/language v1.11.0/go.mod h1:uDx+pFDdAKTY8ehpWbiXyQdz8tDSYLJbQcXsCkjYyvQ= +cloud.google.com/go/language v1.11.1/go.mod h1:Xyid9MG9WOX3utvDbpX7j3tXDmmDooMyMDqgUVpH17U= +cloud.google.com/go/language v1.12.1/go.mod h1:zQhalE2QlQIxbKIZt54IASBzmZpN/aDASea5zl1l+J4= +cloud.google.com/go/language v1.12.2/go.mod h1:9idWapzr/JKXBBQ4lWqVX/hcadxB194ry20m/bTrhWc= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= +cloud.google.com/go/lifesciences v0.9.1/go.mod h1:hACAOd1fFbCGLr/+weUKRAJas82Y4vrL3O5326N//Wc= +cloud.google.com/go/lifesciences v0.9.2/go.mod h1:QHEOO4tDzcSAzeJg7s2qwnLM2ji8IRpQl4p6m5Z9yTA= +cloud.google.com/go/lifesciences v0.9.3/go.mod h1:gNGBOJV80IWZdkd+xz4GQj4mbqaz737SCLHn2aRhQKM= +cloud.google.com/go/lifesciences v0.9.4/go.mod h1:bhm64duKhMi7s9jR9WYJYvjAFJwRqNj+Nia7hF0Z7JA= cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= +cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= +cloud.google.com/go/logging v1.8.1/go.mod h1:TJjR+SimHwuC8MZ9cjByQulAMgni+RkXeI3wwctHJEI= cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= +cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= +cloud.google.com/go/longrunning v0.4.2/go.mod h1:OHrnaYyLUV6oqwh0xiS7e5sLQhP1m0QU9R+WhGDMgIQ= +cloud.google.com/go/longrunning v0.5.0/go.mod h1:0JNuqRShmscVAhIACGtskSAWtqtOoPkwP0YF1oVEchc= +cloud.google.com/go/longrunning v0.5.1/go.mod h1:spvimkwdz6SPWKEt/XBij79E9fiTkHSQl/fRUUQJYJc= +cloud.google.com/go/longrunning v0.5.2/go.mod h1:nqo6DQbNV2pXhGDbDMoN2bWz68MjZUzqv2YttZiveCs= +cloud.google.com/go/longrunning v0.5.3/go.mod h1:y/0ga59EYu58J6SHmmQOvekvND2qODbu8ywBBW7EK7Y= +cloud.google.com/go/longrunning v0.5.4/go.mod h1:zqNVncI0BOP8ST6XQD1+VcvuShMmq7+xFSzOL++V0dI= cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= +cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= +cloud.google.com/go/managedidentities v1.6.1/go.mod h1:h/irGhTN2SkZ64F43tfGPMbHnypMbu4RB3yl8YcuEak= +cloud.google.com/go/managedidentities v1.6.2/go.mod h1:5c2VG66eCa0WIq6IylRk3TBW83l161zkFvCj28X7jn8= +cloud.google.com/go/managedidentities v1.6.3/go.mod h1:tewiat9WLyFN0Fi7q1fDD5+0N4VUoL0SCX0OTCthZq4= +cloud.google.com/go/managedidentities v1.6.4/go.mod h1:WgyaECfHmF00t/1Uk8Oun3CQ2PGUtjc3e9Alh79wyiM= +cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= +cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw= +cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY= +cloud.google.com/go/maps v1.3.0/go.mod h1:6mWTUv+WhnOwAgjVsSW2QPPECmW+s3PcRyOa9vgG/5s= +cloud.google.com/go/maps v1.4.0/go.mod h1:6mWTUv+WhnOwAgjVsSW2QPPECmW+s3PcRyOa9vgG/5s= +cloud.google.com/go/maps v1.4.1/go.mod h1:BxSa0BnW1g2U2gNdbq5zikLlHUuHW0GFWh7sgML2kIY= +cloud.google.com/go/maps v1.5.1/go.mod h1:NPMZw1LJwQZYCfz4y+EIw+SI+24A4bpdFJqdKVr0lt4= +cloud.google.com/go/maps v1.6.1/go.mod h1:4+buOHhYXFBp58Zj/K+Lc1rCmJssxxF4pJ5CJnhdz18= +cloud.google.com/go/maps v1.6.2/go.mod h1:4+buOHhYXFBp58Zj/K+Lc1rCmJssxxF4pJ5CJnhdz18= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= +cloud.google.com/go/mediatranslation v0.8.1/go.mod h1:L/7hBdEYbYHQJhX2sldtTO5SZZ1C1vkapubj0T2aGig= +cloud.google.com/go/mediatranslation v0.8.2/go.mod h1:c9pUaDRLkgHRx3irYE5ZC8tfXGrMYwNZdmDqKMSfFp8= +cloud.google.com/go/mediatranslation v0.8.3/go.mod h1:F9OnXTy336rteOEywtY7FOqCk+J43o2RF638hkOQl4Y= +cloud.google.com/go/mediatranslation v0.8.4/go.mod h1:9WstgtNVAdN53m6TQa5GjIjLqKQPXe74hwSCxUP6nj4= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= +cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= +cloud.google.com/go/memcache v1.10.1/go.mod h1:47YRQIarv4I3QS5+hoETgKO40InqzLP6kpNLvyXuyaA= +cloud.google.com/go/memcache v1.10.2/go.mod h1:f9ZzJHLBrmd4BkguIAa/l/Vle6uTHzHokdnzSWOdQ6A= +cloud.google.com/go/memcache v1.10.3/go.mod h1:6z89A41MT2DVAW0P4iIRdu5cmRTsbsFn4cyiIx8gbwo= +cloud.google.com/go/memcache v1.10.4/go.mod h1:v/d8PuC8d1gD6Yn5+I3INzLR01IDn0N4Ym56RgikSI0= cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= +cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= +cloud.google.com/go/metastore v1.11.1/go.mod h1:uZuSo80U3Wd4zi6C22ZZliOUJ3XeM/MlYi/z5OAOWRA= +cloud.google.com/go/metastore v1.12.0/go.mod h1:uZuSo80U3Wd4zi6C22ZZliOUJ3XeM/MlYi/z5OAOWRA= +cloud.google.com/go/metastore v1.13.0/go.mod h1:URDhpG6XLeh5K+Glq0NOt74OfrPKTwS62gEPZzb5SOk= +cloud.google.com/go/metastore v1.13.1/go.mod h1:IbF62JLxuZmhItCppcIfzBBfUFq0DIB9HPDoLgWrVOU= +cloud.google.com/go/metastore v1.13.2/go.mod h1:KS59dD+unBji/kFebVp8XU/quNSyo8b6N6tPGspKszA= +cloud.google.com/go/metastore v1.13.3/go.mod h1:K+wdjXdtkdk7AQg4+sXS8bRrQa9gcOr+foOMF2tqINE= +cloud.google.com/go/monitoring v1.1.0/go.mod h1:L81pzz7HKn14QCMaCs6NTQkdBnE87TElyanS95vIcl4= cloud.google.com/go/monitoring v1.2.0/go.mod h1:tE8I08OzjWmXLhCopnPaUDpfGOEJOonfWXGR9E9SsFo= cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= +cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w= +cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= +cloud.google.com/go/monitoring v1.15.1/go.mod h1:lADlSAlFdbqQuwwpaImhsJXu1QSdd3ojypXrFSMr2rM= +cloud.google.com/go/monitoring v1.16.0/go.mod h1:Ptp15HgAyM1fNICAojDMoNc/wUmn67mLHQfyqbw+poY= +cloud.google.com/go/monitoring v1.16.1/go.mod h1:6HsxddR+3y9j+o/cMJH6q/KJ/CBTvM/38L/1m7bTRJ4= +cloud.google.com/go/monitoring v1.16.2/go.mod h1:B44KGwi4ZCF8Rk/5n+FWeispDXoKSk9oss2QNlXJBgc= +cloud.google.com/go/monitoring v1.16.3/go.mod h1:KwSsX5+8PnXv5NJnICZzW2R8pWTis8ypC4zmdRD63Tw= cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= +cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E= +cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM= +cloud.google.com/go/networkconnectivity v1.12.1/go.mod h1:PelxSWYM7Sh9/guf8CFhi6vIqf19Ir/sbfZRUwXh92E= +cloud.google.com/go/networkconnectivity v1.13.0/go.mod h1:SAnGPes88pl7QRLUen2HmcBSE9AowVAcdug8c0RSBFk= +cloud.google.com/go/networkconnectivity v1.14.0/go.mod h1:SAnGPes88pl7QRLUen2HmcBSE9AowVAcdug8c0RSBFk= +cloud.google.com/go/networkconnectivity v1.14.1/go.mod h1:LyGPXR742uQcDxZ/wv4EI0Vu5N6NKJ77ZYVnDe69Zug= +cloud.google.com/go/networkconnectivity v1.14.2/go.mod h1:5UFlwIisZylSkGG1AdwK/WZUaoz12PKu6wODwIbFzJo= +cloud.google.com/go/networkconnectivity v1.14.3/go.mod h1:4aoeFdrJpYEXNvrnfyD5kIzs8YtHg945Og4koAjHQek= cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= +cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= +cloud.google.com/go/networkmanagement v1.8.0/go.mod h1:Ho/BUGmtyEqrttTgWEe7m+8vDdK74ibQc+Be0q7Fof0= +cloud.google.com/go/networkmanagement v1.9.0/go.mod h1:UTUaEU9YwbCAhhz3jEOHr+2/K/MrBk2XxOLS89LQzFw= +cloud.google.com/go/networkmanagement v1.9.1/go.mod h1:CCSYgrQQvW73EJawO2QamemYcOb57LvrDdDU51F0mcI= +cloud.google.com/go/networkmanagement v1.9.2/go.mod h1:iDGvGzAoYRghhp4j2Cji7sF899GnfGQcQRQwgVOWnDw= +cloud.google.com/go/networkmanagement v1.9.3/go.mod h1:y7WMO1bRLaP5h3Obm4tey+NquUvB93Co1oh4wpL+XcU= cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k= +cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= +cloud.google.com/go/networksecurity v0.9.1/go.mod h1:MCMdxOKQ30wsBI1eI659f9kEp4wuuAueoC9AJKSPWZQ= +cloud.google.com/go/networksecurity v0.9.2/go.mod h1:jG0SeAttWzPMUILEHDUvFYdQTl8L/E/KC8iZDj85lEI= +cloud.google.com/go/networksecurity v0.9.3/go.mod h1:l+C0ynM6P+KV9YjOnx+kk5IZqMSLccdBqW6GUoF4p/0= +cloud.google.com/go/networksecurity v0.9.4/go.mod h1:E9CeMZ2zDsNBkr8axKSYm8XyTqNhiCHf1JO/Vb8mD1w= cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= +cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE= +cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ= +cloud.google.com/go/notebooks v1.9.1/go.mod h1:zqG9/gk05JrzgBt4ghLzEepPHNwE5jgPcHZRKhlC1A8= +cloud.google.com/go/notebooks v1.10.0/go.mod h1:SOPYMZnttHxqot0SGSFSkRrwE29eqnKPBJFqgWmiK2k= +cloud.google.com/go/notebooks v1.10.1/go.mod h1:5PdJc2SgAybE76kFQCWrTfJolCOUQXF97e+gteUUA6A= +cloud.google.com/go/notebooks v1.11.1/go.mod h1:V2Zkv8wX9kDCGRJqYoI+bQAaoVeE5kSiz4yYHd2yJwQ= +cloud.google.com/go/notebooks v1.11.2/go.mod h1:z0tlHI/lREXC8BS2mIsUeR3agM1AkgLiS+Isov3SS70= cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= +cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= +cloud.google.com/go/optimization v1.4.1/go.mod h1:j64vZQP7h9bO49m2rVaTVoNM0vEBEN5eKPUPbZyXOrk= +cloud.google.com/go/optimization v1.5.0/go.mod h1:evo1OvTxeBRBu6ydPlrIRizKY/LJKo/drDMMRKqGEUU= +cloud.google.com/go/optimization v1.5.1/go.mod h1:NC0gnUD5MWVAF7XLdoYVPmYYVth93Q6BUzqAq3ZwtV8= +cloud.google.com/go/optimization v1.6.1/go.mod h1:hH2RYPTTM9e9zOiTaYPTiGPcGdNZVnBSBxjIAJzUkqo= +cloud.google.com/go/optimization v1.6.2/go.mod h1:mWNZ7B9/EyMCcwNl1frUGEuY6CPijSkz88Fz2vwKPOY= cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= +cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= +cloud.google.com/go/orchestration v1.8.1/go.mod h1:4sluRF3wgbYVRqz7zJ1/EUNc90TTprliq9477fGobD8= +cloud.google.com/go/orchestration v1.8.2/go.mod h1:T1cP+6WyTmh6LSZzeUhvGf0uZVmJyTx7t8z7Vg87+A0= +cloud.google.com/go/orchestration v1.8.3/go.mod h1:xhgWAYqlbYjlz2ftbFghdyqENYW+JXuhBx9KsjMoGHs= +cloud.google.com/go/orchestration v1.8.4/go.mod h1:d0lywZSVYtIoSZXb0iFjv9SaL13PGyVOKDxqGxEf/qI= cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= +cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= +cloud.google.com/go/orgpolicy v1.11.0/go.mod h1:2RK748+FtVvnfuynxBzdnyu7sygtoZa1za/0ZfpOs1M= +cloud.google.com/go/orgpolicy v1.11.1/go.mod h1:8+E3jQcpZJQliP+zaFfayC2Pg5bmhuLK755wKhIIUCE= +cloud.google.com/go/orgpolicy v1.11.2/go.mod h1:biRDpNwfyytYnmCRWZWxrKF22Nkz9eNVj9zyaBdpm1o= +cloud.google.com/go/orgpolicy v1.11.3/go.mod h1:oKAtJ/gkMjum5icv2aujkP4CxROxPXsBbYGCDbPO8MM= +cloud.google.com/go/orgpolicy v1.11.4/go.mod h1:0+aNV/nrfoTQ4Mytv+Aw+stBDBjNf4d8fYRA9herfJI= cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= +cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= +cloud.google.com/go/osconfig v1.12.0/go.mod h1:8f/PaYzoS3JMVfdfTubkowZYGmAhUCjjwnjqWI7NVBc= +cloud.google.com/go/osconfig v1.12.1/go.mod h1:4CjBxND0gswz2gfYRCUoUzCm9zCABp91EeTtWXyz0tE= +cloud.google.com/go/osconfig v1.12.2/go.mod h1:eh9GPaMZpI6mEJEuhEjUJmaxvQ3gav+fFEJon1Y8Iw0= +cloud.google.com/go/osconfig v1.12.3/go.mod h1:L/fPS8LL6bEYUi1au832WtMnPeQNT94Zo3FwwV1/xGM= +cloud.google.com/go/osconfig v1.12.4/go.mod h1:B1qEwJ/jzqSRslvdOCI8Kdnp0gSng0xW4LOnIebQomA= cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= +cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= +cloud.google.com/go/oslogin v1.10.1/go.mod h1:x692z7yAue5nE7CsSnoG0aaMbNoRJRXO4sn73R+ZqAs= +cloud.google.com/go/oslogin v1.11.0/go.mod h1:8GMTJs4X2nOAUVJiPGqIWVcDaF0eniEto3xlOxaboXE= +cloud.google.com/go/oslogin v1.11.1/go.mod h1:OhD2icArCVNUxKqtK0mcSmKL7lgr0LVlQz+v9s1ujTg= +cloud.google.com/go/oslogin v1.12.1/go.mod h1:VfwTeFJGbnakxAY236eN8fsnglLiVXndlbcNomY4iZU= +cloud.google.com/go/oslogin v1.12.2/go.mod h1:CQ3V8Jvw4Qo4WRhNPF0o+HAM4DiLuE27Ul9CX9g2QdY= cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= +cloud.google.com/go/phishingprotection v0.8.1/go.mod h1:AxonW7GovcA8qdEk13NfHq9hNx5KPtfxXNeUxTDxB6I= +cloud.google.com/go/phishingprotection v0.8.2/go.mod h1:LhJ91uyVHEYKSKcMGhOa14zMMWfbEdxG032oT6ECbC8= +cloud.google.com/go/phishingprotection v0.8.3/go.mod h1:3B01yO7T2Ra/TMojifn8EoGd4G9jts/6cIO0DgDY9J8= +cloud.google.com/go/phishingprotection v0.8.4/go.mod h1:6b3kNPAc2AQ6jZfFHioZKg9MQNybDg4ixFd4RPZZ2nE= cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= +cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw= +cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= +cloud.google.com/go/policytroubleshooter v1.7.1/go.mod h1:0NaT5v3Ag1M7U5r0GfDCpUFkWd9YqpubBWsQlhanRv0= +cloud.google.com/go/policytroubleshooter v1.8.0/go.mod h1:tmn5Ir5EToWe384EuboTcVQT7nTag2+DuH3uHmKd1HU= +cloud.google.com/go/policytroubleshooter v1.9.0/go.mod h1:+E2Lga7TycpeSTj2FsH4oXxTnrbHJGRlKhVZBLGgU64= +cloud.google.com/go/policytroubleshooter v1.9.1/go.mod h1:MYI8i0bCrL8cW+VHN1PoiBTyNZTstCg2WUw2eVC4c4U= +cloud.google.com/go/policytroubleshooter v1.10.1/go.mod h1:5C0rhT3TDZVxAu8813bwmTvd57Phbl8mr9F4ipOsxEs= +cloud.google.com/go/policytroubleshooter v1.10.2/go.mod h1:m4uF3f6LseVEnMV6nknlN2vYGRb+75ylQwJdnOXfnv0= cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg= +cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs= +cloud.google.com/go/privatecatalog v0.9.1/go.mod h1:0XlDXW2unJXdf9zFz968Hp35gl/bhF4twwpXZAW50JA= +cloud.google.com/go/privatecatalog v0.9.2/go.mod h1:RMA4ATa8IXfzvjrhhK8J6H4wwcztab+oZph3c6WmtFc= +cloud.google.com/go/privatecatalog v0.9.3/go.mod h1:K5pn2GrVmOPjXz3T26mzwXLcKivfIJ9R5N79AFCF9UE= +cloud.google.com/go/privatecatalog v0.9.4/go.mod h1:SOjm93f+5hp/U3PqMZAHTtBtluqLygrDrVO8X8tYtG0= +cloud.google.com/go/profiler v0.3.1/go.mod h1:GsG14VnmcMFQ9b+kq71wh3EKMZr3WRMgLzNiFRpW7tE= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -302,68 +878,185 @@ cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjp cloud.google.com/go/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w= cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= +cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8= +cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4= +cloud.google.com/go/pubsub v1.32.0/go.mod h1:f+w71I33OMyxf9VpMVcZbnG5KSUkCOUHYpFd5U1GdRc= +cloud.google.com/go/pubsub v1.33.0/go.mod h1:f+w71I33OMyxf9VpMVcZbnG5KSUkCOUHYpFd5U1GdRc= cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= +cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k= +cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM= +cloud.google.com/go/pubsublite v1.8.1/go.mod h1:fOLdU4f5xldK4RGJrBMm+J7zMWNj/k4PxwEZXy39QS0= cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= +cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA= +cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c= +cloud.google.com/go/recaptchaenterprise/v2 v2.7.2/go.mod h1:kR0KjsJS7Jt1YSyWFkseQ756D45kaYNTlDPPaRAvDBU= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.0/go.mod h1:QuE8EdU9dEnesG8/kG3XuJyNsjEqMlMzg3v3scCJ46c= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.1/go.mod h1:JZYZJOeZjgSSTGP4uz7NlQ4/d1w5hGmksVgM0lbEij0= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.2/go.mod h1:kpaDBOpkwD4G0GVMzG1W6Doy1tFFC97XAV3xy+Rd/pw= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.3/go.mod h1:Dak54rw6lC2gBY8FBznpOCAR58wKf+R+ZSJRoeJok4w= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.4/go.mod h1:Dak54rw6lC2gBY8FBznpOCAR58wKf+R+ZSJRoeJok4w= +cloud.google.com/go/recaptchaenterprise/v2 v2.9.0/go.mod h1:Dak54rw6lC2gBY8FBznpOCAR58wKf+R+ZSJRoeJok4w= cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= +cloud.google.com/go/recommendationengine v0.8.1/go.mod h1:MrZihWwtFYWDzE6Hz5nKcNz3gLizXVIDI/o3G1DLcrE= +cloud.google.com/go/recommendationengine v0.8.2/go.mod h1:QIybYHPK58qir9CV2ix/re/M//Ty10OxjnnhWdaKS1Y= +cloud.google.com/go/recommendationengine v0.8.3/go.mod h1:m3b0RZV02BnODE9FeSvGv1qibFo8g0OnmB/RMwYy4V8= +cloud.google.com/go/recommendationengine v0.8.4/go.mod h1:GEteCf1PATl5v5ZsQ60sTClUE0phbWmo3rQ1Js8louU= cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= +cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= +cloud.google.com/go/recommender v1.10.1/go.mod h1:XFvrE4Suqn5Cq0Lf+mCP6oBHD/yRMA8XxP5sb7Q7gpA= +cloud.google.com/go/recommender v1.11.0/go.mod h1:kPiRQhPyTJ9kyXPCG6u/dlPLbYfFlkwHNRwdzPVAoII= +cloud.google.com/go/recommender v1.11.1/go.mod h1:sGwFFAyI57v2Hc5LbIj+lTwXipGu9NW015rkaEM5B18= +cloud.google.com/go/recommender v1.11.2/go.mod h1:AeoJuzOvFR/emIcXdVFkspVXVTYpliRCmKNYDnyBv6Y= +cloud.google.com/go/recommender v1.11.3/go.mod h1:+FJosKKJSId1MBFeJ/TTyoGQZiEelQQIZMKYYD8ruK4= cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= +cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= +cloud.google.com/go/redis v1.13.1/go.mod h1:VP7DGLpE91M6bcsDdMuyCm2hIpB6Vp2hI090Mfd1tcg= +cloud.google.com/go/redis v1.13.2/go.mod h1:0Hg7pCMXS9uz02q+LoEVl5dNHUkIQv+C/3L76fandSA= +cloud.google.com/go/redis v1.13.3/go.mod h1:vbUpCKUAZSYzFcWKmICnYgRAhTFg9r+djWqFxDYXi4U= +cloud.google.com/go/redis v1.14.1/go.mod h1:MbmBxN8bEnQI4doZPC1BzADU4HGocHBk2de3SbgOkqs= cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= +cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots= +cloud.google.com/go/resourcemanager v1.6.0/go.mod h1:YcpXGRs8fDzcUl1Xw8uOVmI8JEadvhRIkoXXUNVYcVo= +cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI= +cloud.google.com/go/resourcemanager v1.9.1/go.mod h1:dVCuosgrh1tINZ/RwBufr8lULmWGOkPS8gL5gqyjdT8= +cloud.google.com/go/resourcemanager v1.9.2/go.mod h1:OujkBg1UZg5lX2yIyMo5Vz9O5hf7XQOSV7WxqxxMtQE= +cloud.google.com/go/resourcemanager v1.9.3/go.mod h1:IqrY+g0ZgLsihcfcmqSe+RKp1hzjXwG904B92AwBz6U= +cloud.google.com/go/resourcemanager v1.9.4/go.mod h1:N1dhP9RFvo3lUfwtfLWVxfUWq8+KUQ+XLlHLH3BoFJ0= cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= +cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= +cloud.google.com/go/resourcesettings v1.6.1/go.mod h1:M7mk9PIZrC5Fgsu1kZJci6mpgN8o0IUzVx3eJU3y4Jw= +cloud.google.com/go/resourcesettings v1.6.2/go.mod h1:mJIEDd9MobzunWMeniaMp6tzg4I2GvD3TTmPkc8vBXk= +cloud.google.com/go/resourcesettings v1.6.3/go.mod h1:pno5D+7oDYkMWZ5BpPsb4SO0ewg3IXcmmrUZaMJrFic= +cloud.google.com/go/resourcesettings v1.6.4/go.mod h1:pYTTkWdv2lmQcjsthbZLNBP4QW140cs7wqA3DuqErVI= cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= +cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= +cloud.google.com/go/retail v1.14.1/go.mod h1:y3Wv3Vr2k54dLNIrCzenyKG8g8dhvhncT2NcNjb/6gE= +cloud.google.com/go/retail v1.14.2/go.mod h1:W7rrNRChAEChX336QF7bnMxbsjugcOCPU44i5kbLiL8= +cloud.google.com/go/retail v1.14.3/go.mod h1:Omz2akDHeSlfCq8ArPKiBxlnRpKEBjUH386JYFLUvXo= +cloud.google.com/go/retail v1.14.4/go.mod h1:l/N7cMtY78yRnJqp5JW8emy7MB1nz8E4t2yfOmklYfg= cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= +cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM= +cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg= +cloud.google.com/go/run v1.2.0/go.mod h1:36V1IlDzQ0XxbQjUx6IYbw8H3TJnWvhii963WW3B/bo= +cloud.google.com/go/run v1.3.0/go.mod h1:S/osX/4jIPZGg+ssuqh6GNgg7syixKe3YnprwehzHKU= +cloud.google.com/go/run v1.3.1/go.mod h1:cymddtZOzdwLIAsmS6s+Asl4JoXIDm/K1cpZTxV4Q5s= +cloud.google.com/go/run v1.3.2/go.mod h1:SIhmqArbjdU/D9M6JoHaAqnAMKLFtXaVdNeq04NjnVE= +cloud.google.com/go/run v1.3.3/go.mod h1:WSM5pGyJ7cfYyYbONVQBN4buz42zFqwG67Q3ch07iK4= cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= +cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc= +cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc= +cloud.google.com/go/scheduler v1.10.1/go.mod h1:R63Ldltd47Bs4gnhQkmNDse5w8gBRrhObZ54PxgR2Oo= +cloud.google.com/go/scheduler v1.10.2/go.mod h1:O3jX6HRH5eKCA3FutMw375XHZJudNIKVonSCHv7ropY= +cloud.google.com/go/scheduler v1.10.3/go.mod h1:8ANskEM33+sIbpJ+R4xRfw/jzOG+ZFE8WVLy7/yGvbc= +cloud.google.com/go/scheduler v1.10.4/go.mod h1:MTuXcrJC9tqOHhixdbHDFSIuh7xZF2IysiINDuiq6NI= +cloud.google.com/go/scheduler v1.10.5/go.mod h1:MTuXcrJC9tqOHhixdbHDFSIuh7xZF2IysiINDuiq6NI= cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= +cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= +cloud.google.com/go/secretmanager v1.11.1/go.mod h1:znq9JlXgTNdBeQk9TBW/FnR/W4uChEKGeqQWAJ8SXFw= +cloud.google.com/go/secretmanager v1.11.2/go.mod h1:MQm4t3deoSub7+WNwiC4/tRYgDBHJgJPvswqQVB1Vss= +cloud.google.com/go/secretmanager v1.11.3/go.mod h1:0bA2o6FabmShrEy328i67aV+65XoUFFSmVeLBn/51jI= +cloud.google.com/go/secretmanager v1.11.4/go.mod h1:wreJlbS9Zdq21lMzWmJ0XhWW2ZxgPeahsqeV/vZoJ3w= cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= +cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8= +cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= +cloud.google.com/go/security v1.15.1/go.mod h1:MvTnnbsWnehoizHi09zoiZob0iCHVcL4AUBj76h9fXA= +cloud.google.com/go/security v1.15.2/go.mod h1:2GVE/v1oixIRHDaClVbHuPcZwAqFM28mXuAKCfMgYIg= +cloud.google.com/go/security v1.15.3/go.mod h1:gQ/7Q2JYUZZgOzqKtw9McShH+MjNvtDpL40J1cT+vBs= +cloud.google.com/go/security v1.15.4/go.mod h1:oN7C2uIZKhxCLiAAijKUCuHLZbIt/ghYEo8MqwD/Ty4= cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= +cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0= +cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag= +cloud.google.com/go/securitycenter v1.23.0/go.mod h1:8pwQ4n+Y9WCWM278R8W3nF65QtY172h4S8aXyI9/hsQ= +cloud.google.com/go/securitycenter v1.23.1/go.mod h1:w2HV3Mv/yKhbXKwOCu2i8bCuLtNP1IMHuiYQn4HJq5s= +cloud.google.com/go/securitycenter v1.24.1/go.mod h1:3h9IdjjHhVMXdQnmqzVnM7b0wMn/1O/U20eWVpMpZjI= +cloud.google.com/go/securitycenter v1.24.2/go.mod h1:l1XejOngggzqwr4Fa2Cn+iWZGf+aBLTXtB/vXjy5vXM= +cloud.google.com/go/securitycenter v1.24.3/go.mod h1:l1XejOngggzqwr4Fa2Cn+iWZGf+aBLTXtB/vXjy5vXM= cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= +cloud.google.com/go/servicecontrol v1.10.0/go.mod h1:pQvyvSRh7YzUF2efw7H87V92mxU8FnFDawMClGCNuAA= +cloud.google.com/go/servicecontrol v1.11.0/go.mod h1:kFmTzYzTUIuZs0ycVqRHNaNhgR+UMUpw9n02l/pY+mc= +cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk= cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= +cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY= +cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s= +cloud.google.com/go/servicedirectory v1.10.1/go.mod h1:Xv0YVH8s4pVOwfM/1eMTl0XJ6bzIOSLDt8f8eLaGOxQ= +cloud.google.com/go/servicedirectory v1.11.0/go.mod h1:Xv0YVH8s4pVOwfM/1eMTl0XJ6bzIOSLDt8f8eLaGOxQ= +cloud.google.com/go/servicedirectory v1.11.1/go.mod h1:tJywXimEWzNzw9FvtNjsQxxJ3/41jseeILgwU/QLrGI= +cloud.google.com/go/servicedirectory v1.11.2/go.mod h1:KD9hCLhncWRV5jJphwIpugKwM5bn1x0GyVVD4NO8mGg= +cloud.google.com/go/servicedirectory v1.11.3/go.mod h1:LV+cHkomRLr67YoQy3Xq2tUXBGOs5z5bPofdq7qtiAw= cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= +cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc= +cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4= cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= +cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec= +cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA= cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= +cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= +cloud.google.com/go/shell v1.7.1/go.mod h1:u1RaM+huXFaTojTbW4g9P5emOrrmLE69KrxqQahKn4g= +cloud.google.com/go/shell v1.7.2/go.mod h1:KqRPKwBV0UyLickMn0+BY1qIyE98kKyI216sH/TuHmc= +cloud.google.com/go/shell v1.7.3/go.mod h1:cTTEz/JdaBsQAeTQ3B6HHldZudFoYBOqjteev07FbIc= +cloud.google.com/go/shell v1.7.4/go.mod h1:yLeXB8eKLxw0dpEmXQ/FjriYrBijNsONpwnWsdPqlKM= cloud.google.com/go/spanner v1.5.1/go.mod h1:e1+8M6PF3ntV9Xr57X2Gf+UhylXXYF6gI4WRZ1kfu2A= cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= +cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk= +cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M= +cloud.google.com/go/spanner v1.45.1/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M= +cloud.google.com/go/spanner v1.47.0/go.mod h1:IXsJwVW2j4UKs0eYDqodab6HgGuA1bViSqW4uH9lfUI= +cloud.google.com/go/spanner v1.49.0/go.mod h1:eGj9mQGK8+hkgSVbHNQ06pQ4oS+cyc4tXXd6Dif1KoM= +cloud.google.com/go/spanner v1.50.0/go.mod h1:eGj9mQGK8+hkgSVbHNQ06pQ4oS+cyc4tXXd6Dif1KoM= +cloud.google.com/go/spanner v1.51.0/go.mod h1:c5KNo5LQ1X5tJwma9rSQZsXNBDNvj4/n8BVc3LNahq0= +cloud.google.com/go/spanner v1.53.0/go.mod h1:liG4iCeLqm5L3fFLU5whFITqP0e0orsAW1uUSrd4rws= +cloud.google.com/go/spanner v1.53.1/go.mod h1:liG4iCeLqm5L3fFLU5whFITqP0e0orsAW1uUSrd4rws= cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= +cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0= +cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI= +cloud.google.com/go/speech v1.17.1/go.mod h1:8rVNzU43tQvxDaGvqOhpDqgkJTFowBpDvCJ14kGlJYo= +cloud.google.com/go/speech v1.19.0/go.mod h1:8rVNzU43tQvxDaGvqOhpDqgkJTFowBpDvCJ14kGlJYo= +cloud.google.com/go/speech v1.19.1/go.mod h1:WcuaWz/3hOlzPFOVo9DUsblMIHwxP589y6ZMtaG+iAA= +cloud.google.com/go/speech v1.19.2/go.mod h1:2OYFfj+Ch5LWjsaSINuCZsre/789zlcCI3SY4oAi2oI= +cloud.google.com/go/speech v1.20.1/go.mod h1:wwolycgONvfz2EDU8rKuHRW3+wc9ILPsAWoikBEWavY= +cloud.google.com/go/speech v1.21.0/go.mod h1:wwolycgONvfz2EDU8rKuHRW3+wc9ILPsAWoikBEWavY= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.3.0/go.mod h1:9IAwXhoyBJ7z9LcAwkj0/7NnPzYaPeZxxVp3zm+5IqA= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= @@ -375,50 +1068,147 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= +cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= cloud.google.com/go/storage v1.38.0 h1:Az68ZRGlnNTpIBbLjSMIV2BDcwwXYlRlQzis0llkpJg= cloud.google.com/go/storage v1.38.0/go.mod h1:tlUADB0mAb9BgYls9lq+8MGkfzOXuLrnHXlpHmvFJoY= cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= +cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4= +cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw= +cloud.google.com/go/storagetransfer v1.10.0/go.mod h1:DM4sTlSmGiNczmV6iZyceIh2dbs+7z2Ayg6YAiQlYfA= +cloud.google.com/go/storagetransfer v1.10.1/go.mod h1:rS7Sy0BtPviWYTTJVWCSV4QrbBitgPeuK4/FKa4IdLs= +cloud.google.com/go/storagetransfer v1.10.2/go.mod h1:meIhYQup5rg9juQJdyppnA/WLQCOguxtk1pr3/vBWzA= +cloud.google.com/go/storagetransfer v1.10.3/go.mod h1:Up8LY2p6X68SZ+WToswpQbQHnJpOty/ACcMafuey8gc= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= +cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= +cloud.google.com/go/talent v1.6.2/go.mod h1:CbGvmKCG61mkdjcqTcLOkb2ZN1SrQI8MDyma2l7VD24= +cloud.google.com/go/talent v1.6.3/go.mod h1:xoDO97Qd4AK43rGjJvyBHMskiEf3KulgYzcH6YWOVoo= +cloud.google.com/go/talent v1.6.4/go.mod h1:QsWvi5eKeh6gG2DlBkpMaFYZYrYUnIpo34f6/V5QykY= +cloud.google.com/go/talent v1.6.5/go.mod h1:Mf5cma696HmE+P2BWJ/ZwYqeJXEeU0UqjHFXVLadEDI= cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= +cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= +cloud.google.com/go/texttospeech v1.7.1/go.mod h1:m7QfG5IXxeneGqTapXNxv2ItxP/FS0hCZBwXYqucgSk= +cloud.google.com/go/texttospeech v1.7.2/go.mod h1:VYPT6aTOEl3herQjFHYErTlSZJ4vB00Q2ZTmuVgluD4= +cloud.google.com/go/texttospeech v1.7.3/go.mod h1:Av/zpkcgWfXlDLRYob17lqMstGZ3GqlvJXqKMp2u8so= +cloud.google.com/go/texttospeech v1.7.4/go.mod h1:vgv0002WvR4liGuSd5BJbWy4nDn5Ozco0uJymY5+U74= cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= +cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= +cloud.google.com/go/tpu v1.6.1/go.mod h1:sOdcHVIgDEEOKuqUoi6Fq53MKHJAtOwtz0GuKsWSH3E= +cloud.google.com/go/tpu v1.6.2/go.mod h1:NXh3NDwt71TsPZdtGWgAG5ThDfGd32X1mJ2cMaRlVgU= +cloud.google.com/go/tpu v1.6.3/go.mod h1:lxiueqfVMlSToZY1151IaZqp89ELPSrk+3HIQ5HRkbY= +cloud.google.com/go/tpu v1.6.4/go.mod h1:NAm9q3Rq2wIlGnOhpYICNI7+bpBebMJbh0yyp3aNw1Y= +cloud.google.com/go/trace v1.0.0/go.mod h1:4iErSByzxkyHWzzlAj63/Gmjz0NH1ASqhJguHpGcr6A= cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= +cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA= +cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= +cloud.google.com/go/trace v1.10.1/go.mod h1:gbtL94KE5AJLH3y+WVpfWILmqgc6dXcqgNXdOPAQTYk= +cloud.google.com/go/trace v1.10.2/go.mod h1:NPXemMi6MToRFcSxRl2uDnu/qAlAQ3oULUphcHGh1vA= +cloud.google.com/go/trace v1.10.3/go.mod h1:Ke1bgfc73RV3wUFml+uQp7EsDw4dGaETLxB7Iq/r4CY= +cloud.google.com/go/trace v1.10.4/go.mod h1:Nso99EDIK8Mj5/zmB+iGr9dosS/bzWCJ8wGmE6TXNWY= cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= +cloud.google.com/go/translate v1.5.0/go.mod h1:29YDSYveqqpA1CQFD7NQuP49xymq17RXNaUDdc0mNu0= +cloud.google.com/go/translate v1.6.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/translate v1.8.1/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs= +cloud.google.com/go/translate v1.8.2/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs= +cloud.google.com/go/translate v1.9.0/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs= +cloud.google.com/go/translate v1.9.1/go.mod h1:TWIgDZknq2+JD4iRcojgeDtqGEp154HN/uL6hMvylS8= +cloud.google.com/go/translate v1.9.2/go.mod h1:E3Tc6rUTsQkVrXW6avbUhKJSr7ZE3j7zNmqzXKHqRrY= +cloud.google.com/go/translate v1.9.3/go.mod h1:Kbq9RggWsbqZ9W5YpM94Q1Xv4dshw/gr/SHfsl5yCZ0= cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= +cloud.google.com/go/video v1.12.0/go.mod h1:MLQew95eTuaNDEGriQdcYn0dTwf9oWiA4uYebxM5kdg= +cloud.google.com/go/video v1.13.0/go.mod h1:ulzkYlYgCp15N2AokzKjy7MQ9ejuynOJdf1tR5lGthk= +cloud.google.com/go/video v1.14.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/video v1.17.1/go.mod h1:9qmqPqw/Ib2tLqaeHgtakU+l5TcJxCJbhFXM7UJjVzU= +cloud.google.com/go/video v1.19.0/go.mod h1:9qmqPqw/Ib2tLqaeHgtakU+l5TcJxCJbhFXM7UJjVzU= +cloud.google.com/go/video v1.20.0/go.mod h1:U3G3FTnsvAGqglq9LxgqzOiBc/Nt8zis8S+850N2DUM= +cloud.google.com/go/video v1.20.1/go.mod h1:3gJS+iDprnj8SY6pe0SwLeC5BUW80NjhwX7INWEuWGU= +cloud.google.com/go/video v1.20.2/go.mod h1:lrixr5JeKNThsgfM9gqtwb6Okuqzfo4VrY2xynaViTA= +cloud.google.com/go/video v1.20.3/go.mod h1:TnH/mNZKVHeNtpamsSPygSR0iHtvrR/cW1/GDjN5+GU= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= +cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= +cloud.google.com/go/videointelligence v1.11.1/go.mod h1:76xn/8InyQHarjTWsBR058SmlPCwQjgcvoW0aZykOvo= +cloud.google.com/go/videointelligence v1.11.2/go.mod h1:ocfIGYtIVmIcWk1DsSGOoDiXca4vaZQII1C85qtoplc= +cloud.google.com/go/videointelligence v1.11.3/go.mod h1:tf0NUaGTjU1iS2KEkGWvO5hRHeCkFK3nPo0/cOZhZAo= +cloud.google.com/go/videointelligence v1.11.4/go.mod h1:kPBMAYsTPFiQxMLmmjpcZUMklJp3nC9+ipJJtprccD8= cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= +cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY= +cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= +cloud.google.com/go/vision/v2 v2.7.2/go.mod h1:jKa8oSYBWhYiXarHPvP4USxYANYUEdEsQrloLjrSwJU= +cloud.google.com/go/vision/v2 v2.7.3/go.mod h1:V0IcLCY7W+hpMKXK1JYE0LV5llEqVmj+UJChjvA1WsM= +cloud.google.com/go/vision/v2 v2.7.4/go.mod h1:ynDKnsDN/0RtqkKxQZ2iatv3Dm9O+HfRb5djl7l4Vvw= +cloud.google.com/go/vision/v2 v2.7.5/go.mod h1:GcviprJLFfK9OLf0z8Gm6lQb6ZFUulvpZws+mm6yPLM= cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= +cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc= +cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY= +cloud.google.com/go/vmmigration v1.7.1/go.mod h1:WD+5z7a/IpZ5bKK//YmT9E047AD+rjycCAvyMxGJbro= +cloud.google.com/go/vmmigration v1.7.2/go.mod h1:iA2hVj22sm2LLYXGPT1pB63mXHhrH1m/ruux9TwWLd8= +cloud.google.com/go/vmmigration v1.7.3/go.mod h1:ZCQC7cENwmSWlwyTrZcWivchn78YnFniEQYRWQ65tBo= +cloud.google.com/go/vmmigration v1.7.4/go.mod h1:yBXCmiLaB99hEl/G9ZooNx2GyzgsjKnw5fWcINRgD70= +cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= +cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8= +cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY= +cloud.google.com/go/vmwareengine v0.4.1/go.mod h1:Px64x+BvjPZwWuc4HdmVhoygcXqEkGHXoa7uyfTgSI0= +cloud.google.com/go/vmwareengine v1.0.0/go.mod h1:Px64x+BvjPZwWuc4HdmVhoygcXqEkGHXoa7uyfTgSI0= +cloud.google.com/go/vmwareengine v1.0.1/go.mod h1:aT3Xsm5sNx0QShk1Jc1B8OddrxAScYLwzVoaiXfdzzk= +cloud.google.com/go/vmwareengine v1.0.2/go.mod h1:xMSNjIk8/itYrz1JA8nV3Ajg4L4n3N+ugP8JKzk3OaA= +cloud.google.com/go/vmwareengine v1.0.3/go.mod h1:QSpdZ1stlbfKtyt6Iu19M6XRxjmXO+vb5a/R6Fvy2y4= cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= +cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= +cloud.google.com/go/vpcaccess v1.7.1/go.mod h1:FogoD46/ZU+JUBX9D606X21EnxiszYi2tArQwLY4SXs= +cloud.google.com/go/vpcaccess v1.7.2/go.mod h1:mmg/MnRHv+3e8FJUjeSibVFvQF1cCy2MsFaFqxeY1HU= +cloud.google.com/go/vpcaccess v1.7.3/go.mod h1:YX4skyfW3NC8vI3Fk+EegJnlYFatA+dXK4o236EUCUc= +cloud.google.com/go/vpcaccess v1.7.4/go.mod h1:lA0KTvhtEOb/VOdnH/gwPuOzGgM+CWsmGu6bb4IoMKk= cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= +cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= +cloud.google.com/go/webrisk v1.9.1/go.mod h1:4GCmXKcOa2BZcZPn6DCEvE7HypmEJcJkr4mtM+sqYPc= +cloud.google.com/go/webrisk v1.9.2/go.mod h1:pY9kfDgAqxUpDBOrG4w8deLfhvJmejKB0qd/5uQIPBc= +cloud.google.com/go/webrisk v1.9.3/go.mod h1:RUYXe9X/wBDXhVilss7EDLW9ZNa06aowPuinUOPCXH8= +cloud.google.com/go/webrisk v1.9.4/go.mod h1:w7m4Ib4C+OseSr2GL66m0zMBywdrVNTDKsdEsfMl7X0= cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= +cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= +cloud.google.com/go/websecurityscanner v1.6.1/go.mod h1:Njgaw3rttgRHXzwCB8kgCYqv5/rGpFCsBOvPbYgszpg= +cloud.google.com/go/websecurityscanner v1.6.2/go.mod h1:7YgjuU5tun7Eg2kpKgGnDuEOXWIrh8x8lWrJT4zfmas= +cloud.google.com/go/websecurityscanner v1.6.3/go.mod h1:x9XANObUFR+83Cya3g/B9M/yoHVqzxPnFtgF8yYGAXw= +cloud.google.com/go/websecurityscanner v1.6.4/go.mod h1:mUiyMQ+dGpPPRkHgknIZeCzSHJ45+fY4F52nZFDHm2o= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= +cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= +cloud.google.com/go/workflows v1.11.1/go.mod h1:Z+t10G1wF7h8LgdY/EmRcQY8ptBD/nvofaL6FqlET6g= +cloud.google.com/go/workflows v1.12.0/go.mod h1:PYhSk2b6DhZ508tj8HXKaBh+OFe+xdl0dHF/tJdzPQM= +cloud.google.com/go/workflows v1.12.1/go.mod h1:5A95OhD/edtOhQd/O741NSfIMezNTbCwLM1P1tBRGHM= +cloud.google.com/go/workflows v1.12.2/go.mod h1:+OmBIgNqYJPVggnMo9nqmizW0qEXHhmnAzK/CnBqsHc= +cloud.google.com/go/workflows v1.12.3/go.mod h1:fmOUeeqEwPzIU81foMjTRQIdwQHADi/vEr1cx9R1m5g= code.cloudfoundry.org/gofileutils v0.0.0-20170111115228-4d0c80011a0f/go.mod h1:sk5LnIjB/nIEU7yP5sDQExVm62wu0pBh3yrElngUisI= +code.gitea.io/sdk/gitea v0.14.0/go.mod h1:89WiyOX1KEcvjP66sRHdu0RafojGo60bT9UqW17VbWs= +code.gitea.io/sdk/gitea v0.16.0/go.mod h1:ndkDk99BnfiUCCYEUhpNzi0lpmApXlwRFqClBlOlEBg= contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= -contrib.go.opencensus.io/exporter/ocagent v0.4.12/go.mod h1:450APlNTSR6FrvC3CTRqYosuDstRB9un7SOx2k/9ckA= contrib.go.opencensus.io/exporter/ocagent v0.6.0/go.mod h1:zmKjrJcdo0aYcVS7bmEeSEBLPA9YJp5bjrofdU3pIXs= contrib.go.opencensus.io/exporter/ocagent v0.7.1-0.20200907061046-05415f1de66d h1:LblfooH1lKOpp1hIhukktmSAxFkqMPFk9KR6iZ0MJNI= contrib.go.opencensus.io/exporter/ocagent v0.7.1-0.20200907061046-05415f1de66d/go.mod h1:IshRmMJBhDfFj5Y67nVhMYTTIze91RUeT73ipWKs/GY= @@ -428,17 +1218,27 @@ contrib.go.opencensus.io/exporter/prometheus v0.4.0/go.mod h1:o7cosnyfuPVK0tB8q0 contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e5CWqyUk/cLzKnWsOKPVW3no6OTw= contrib.go.opencensus.io/exporter/stackdriver v0.12.8/go.mod h1:XyyafDnFOsqoxHJgTFycKZMrRUrPThLh2iYTJF6uoO0= contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= +contrib.go.opencensus.io/exporter/stackdriver v0.13.14/go.mod h1:5pSSGY0Bhuk7waTHuDf4aQ8D2DrhgETRo9fy6k3Xlzc= +contrib.go.opencensus.io/exporter/zipkin v0.1.2/go.mod h1:mP5xM3rrgOjpn79MM8fZbj3gsxcuytSqtH0dxSWW1RE= contrib.go.opencensus.io/integrations/ocsql v0.1.4/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= +dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= dmitri.shuralyov.com/gpu/mtl v0.0.0-20201218220906-28db891af037/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= emperror.dev/errors v0.8.0/go.mod h1:YcRvLPh626Ubn2xqtoprejnA5nFha+TJ+2vew48kWuE= +gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= git.apache.org/thrift.git v0.12.0/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= +git.sr.ht/~nelsam/hel v0.4.2/go.mod h1:6M8gpa/CGGNtFNlLN9odbQ0MzUQ2ZA8bWemVS8kTf5o= +git.sr.ht/~nelsam/hel v0.4.3/go.mod h1:SP6fXSPxdmd7aOGMTSf8/EMLLCT438LHnZHN66nZqo0= +git.sr.ht/~nelsam/hel/v4 v4.1.0/go.mod h1:OrTLOFJGT6G/t9q8WZy+NPOvmYUobdFZP59lpf+TrOg= +git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= github.com/Abirdcfly/dupword v0.0.7/go.mod h1:K/4M1kj+Zh39d2aotRwypvasonOyAMH1c/IZJzE0dmk= github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20221206110420-d395f97c4830/go.mod h1:VzwV+t+dZ9j/H867F1M2ziD+yLHtB46oM35FxxMJ4d0= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= +github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20230306123547-8075edf89bb0/go.mod h1:OahwfttHWG6eJ0clwcfBAHoDI6X/LV/15hx/wlMZSrU= github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU= github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= github.com/Azure/azure-amqp-common-go/v3 v3.0.0/go.mod h1:SY08giD/XbhTz07tJdpw1SoxQXHPN30+DI3Z04SYqyg= @@ -450,14 +1250,21 @@ github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl github.com/Azure/azure-sdk-for-go v43.0.0+incompatible h1:/wSNCu0e6EsHFR4Qa3vBEBbicaprEHMyyga9g8RTULI= github.com/Azure/azure-sdk-for-go v43.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.1/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.8.0/go.mod h1:3Ug6Qzto9anB6mGlEdgYMDF5zHQ+wwhEaYR4s17PHMw= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1 h1:lGlwhPtrX6EVml1hO0ivjkUxsSyl4dsiw9qcA1k/3IQ= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1/go.mod h1:RKUqNu35KJYcVG/fqTRqmuXJZYNhYkBrnC/hX7yGbTA= github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.1/go.mod h1:uE9zaUfEQT/nbQjVi2IblCG9iaLtZsuYZ8ne+PuQ02M= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 h1:BMAjVKJM0U/CYF27gA0ZMmXGkOcvfFtD0oHVZ1TIPRI= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0/go.mod h1:1fXstnBMas5kzG+S3q8UoJcmyU6nUeunJcMDHcRYHhs= github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM= github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1 h1:6oNBlSdi1QqM1PNW7FPA6xOGA5UNsXnkaYZz9vdPGhA= github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1/go.mod h1:s4kgfzA0covAXNicZHDMN58jExvcng2mC/DepXiF1EI= +github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.0.1/go.mod h1:GpPjLhVR9dnUoJMyHWSPy71xY9/lcmpzIPZXmF0FCVY= +github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.0/go.mod h1:bTSOgj05NGRuHHhQwAdPnYr9TOdNmKlZTgGLL6nyAdI= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.0.0 h1:u/LLAOFgsMv7HmNL4Qufg58y+qElGOt5qv0z1mURkRY= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.0.0/go.mod h1:2e8rMJtl2+2j+HXbTBwnyGpm5Nou7KhvSfxOq8JpTag= github.com/Azure/azure-service-bus-go v0.10.1/go.mod h1:E/FOceuKAFUfpbIJDKWz/May6guE+eGibfGT6q+n1to= @@ -479,9 +1286,12 @@ github.com/Azure/go-autorest/autorest v0.11.0/go.mod h1:JFgpikqFJ/MleTTxwepExTKn github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= github.com/Azure/go-autorest/autorest v0.11.13/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw= github.com/Azure/go-autorest/autorest v0.11.17/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw= +github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= github.com/Azure/go-autorest/autorest v0.11.21/go.mod h1:Do/yuMSW/13ayUkcVREpsMHGG+MvV81uzSCFgYPj4tM= github.com/Azure/go-autorest/autorest v0.11.24/go.mod h1:G6kyRlFnTuSbEYkQGawPfsCswgme4iYf6rfSKUDzbCc= +github.com/Azure/go-autorest/autorest v0.11.25/go.mod h1:7l8ybrIdUmGqZMTD0sRtAr8NvbHjfofbf8RSP2q7w7U= github.com/Azure/go-autorest/autorest v0.11.27/go.mod h1:7l8ybrIdUmGqZMTD0sRtAr8NvbHjfofbf8RSP2q7w7U= +github.com/Azure/go-autorest/autorest v0.11.28/go.mod h1:MrkzG3Y3AH668QyF9KRk5neJnGgmhQ6krbhR8Q5eMvA= github.com/Azure/go-autorest/autorest v0.11.29 h1:I4+HL/JDvErx2LjyzaVxllw2lRDB5/BT2Bm4g20iqYw= github.com/Azure/go-autorest/autorest v0.11.29/go.mod h1:ZtEzC4Jy2JDrZLxvWs8LrBWEBycl1hbT1eknI8MtfAs= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= @@ -495,9 +1305,11 @@ github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQW github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= github.com/Azure/go-autorest/autorest/adal v0.9.8/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= github.com/Azure/go-autorest/autorest/adal v0.9.11/go.mod h1:nBKAnTomx8gDtl+3ZCJv2v0KACFHWTB2drffI1B68Pk= +github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= github.com/Azure/go-autorest/autorest/adal v0.9.14/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= github.com/Azure/go-autorest/autorest/adal v0.9.20/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= +github.com/Azure/go-autorest/autorest/adal v0.9.21/go.mod h1:zua7mBUaCc5YnSLKYgGJR/w5ePdMDA6H56upLsHzA9U= github.com/Azure/go-autorest/autorest/adal v0.9.22/go.mod h1:XuAbAEUv2Tta//+voMI038TrJBqjKam0me7qR+L8Cmk= github.com/Azure/go-autorest/autorest/adal v0.9.23 h1:Yepx8CvFxwNKpH6ja7RZ+sKX+DWYNldbLiALMC3BTz8= github.com/Azure/go-autorest/autorest/adal v0.9.23/go.mod h1:5pcMqFkdPhviJdlEy3kC/v1ZLnQl0MH6XA5YCcMhy4c= @@ -559,6 +1371,7 @@ github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.4.4/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= +github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmcxJL+UEG2f8cQploZm1mR/v6BW0mU0= github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= @@ -566,6 +1379,8 @@ github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190612171043-2e19bb35 github.com/GoogleCloudPlatform/k8s-cloud-provider v1.18.1-0.20220218231025-f11817397a1b h1:Heo1J/ttaQFgGJSVnCZquy3e5eH5j1nqxBuomztB3P0= github.com/GoogleCloudPlatform/k8s-cloud-provider v1.18.1-0.20220218231025-f11817397a1b/go.mod h1:FNj4KYEAAHfYu68kRYolGoxkaJn+6mdEsaM12VTwuI0= github.com/GoogleCloudPlatform/testgrid v0.0.1-alpha.3/go.mod h1:f96W2HYy3tiBNV5zbbRc+NczwYHgG1PHXMQfoEWv680= +github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/IBM-Cloud/bluemix-go v0.0.0-20220329045155-d2a8118ac5c7/go.mod h1:UOhxo7T8CdX6sdTY9Dn7rJSgyoTlz1KM9641XcPraH0= github.com/IBM-Cloud/bluemix-go v0.0.0-20230120122421-afb48116b8f1/go.mod h1:cO5KCpiop9eP/pM/5W07TprYUkv/kHtajW1FiZgE59k= github.com/IBM-Cloud/bluemix-go v0.0.0-20240226130409-ce92adb39a22 h1:bmLx8w2wQB97Dm5pNeQKIjOGjASvRa+cPP8QZCrL+Xo= @@ -580,6 +1395,7 @@ github.com/IBM/vpc-go-sdk v0.48.0 h1:4yeSxVX9mizsIW2F0rsVI47rZoNKBrZ1QK9RwwRas9Q github.com/IBM/vpc-go-sdk v0.48.0/go.mod h1:FDJpiokOmaYG2hNYDfqKVxUPe8mm/dPi3mdz8Zt4o/Q= github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA= github.com/Jeffail/gabs v1.1.1/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc= +github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/LINBIT/golinstor v0.27.0 h1:f5Uf9gQgI6EEVA8eaKgRe8hDrYHN9e18CUZ5Eybuimw= github.com/LINBIT/golinstor v0.27.0/go.mod h1:p2V1Y5ppce3isjO7IBiZGOwY8R8oIm+nYZqOa77bpXM= @@ -613,6 +1429,7 @@ github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOp github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= @@ -631,6 +1448,10 @@ github.com/Microsoft/hcsshim v0.8.24/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01 github.com/Microsoft/hcsshim v0.9.0/go.mod h1:VBJWdC71NSWPlEo7lwde1aL21748J8B6Sdgno7NqEGE= github.com/Microsoft/hcsshim v0.9.2/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= github.com/Microsoft/hcsshim v0.9.3/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= +github.com/Microsoft/hcsshim v0.9.4/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= +github.com/Microsoft/hcsshim v0.9.6/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= +github.com/Microsoft/hcsshim v0.9.7/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= +github.com/Microsoft/hcsshim v0.9.10/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8= github.com/Microsoft/hcsshim v0.11.4/go.mod h1:smjE4dvqPX9Zldna+t5FG3rnoHhaB7QYxPRqGcpAD9w= github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= @@ -639,37 +1460,49 @@ github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb0 github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= github.com/OneOfOne/xxhash v1.2.6/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= +github.com/OneOfOne/xxhash v1.2.8/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= github.com/OpenPeeDeeP/depguard v1.1.1/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= -github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= +github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/SAP/go-hdb v0.14.1/go.mod h1:7fdQLVC2lER3urZLjZCm0AuMQfApof92n3aylBPEkMo= github.com/Sectorbob/mlab-ns2 v0.0.0-20171030222938-d3aa0c295a8a/go.mod h1:D73UAuEPckrDorYZdtlCu2ySOLuPB5W4rhIkmmc/XbI= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/sarama v1.30.0/go.mod h1:zujlQQx1kzHsh4jfV1USnptCQrHAEZ2Hk8fTKCulPVs= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/Shopify/toxiproxy/v2 v2.1.6-0.20210914104332-15ea381dcdae/go.mod h1:/cvHQkZ1fst0EmZnA5dFtiQdWCNCFYzb+uE2vqVgvx0= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/StackExchange/wmi v0.0.0-20180725035823-b12b22c5341f/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmxzcbUokwA= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/a8m/mark v0.1.1-0.20170507133748-44f2db618845/go.mod h1:c8Mh99Cw82nrsAnPgxQSZHkswVOJF7/MqZb1ZdvriLM= +github.com/a8m/expect v1.0.0/go.mod h1:4IwSCMumY49ScypDnjNbYEjgVeqy1/U2cEs3Lat96eA= github.com/abdullin/seq v0.0.0-20160510034733-d5467c17e7af/go.mod h1:5Jv4cbFiHJMsVxt52+i0Ha45fjshj6wxYr1r19tB9bw= +github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/aerospike/aerospike-client-go/v5 v5.6.0/go.mod h1:rJ/KpmClE7kiBPfvAPrGw9WuNOiz8v2uKbQaUyYPXtI= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= +github.com/ahmetb/gen-crd-api-reference-docs v0.3.1-0.20220720053627-e327d0730470/go.mod h1:TdjdkYhlOifCQWPs1UdTma97kQQMozf5h26hTuG70u8= +github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= +github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= +github.com/akavel/rsrc v0.10.2/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/alecthomas/jsonschema v0.0.0-20180308105923-f2c93856175a/go.mod h1:qpebaTNSsyUn5rPSJMsfqEtDw71TTggXM6stUDI16HA= +github.com/alecthomas/kingpin/v2 v2.3.1/go.mod h1:oYL5vtsvEHZGHxU7DMp32Dvx+qL+ptGn6lWaot2vCNE= +github.com/alecthomas/kingpin/v2 v2.3.2/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= github.com/alexflint/go-filemutex v1.1.0/go.mod h1:7P4iRhttt/nUvUOrYIhcpMzv2G6CY9UnI16Z+UJqRyk= +github.com/alexflint/go-filemutex v1.2.0/go.mod h1:mYyQSWvw9Tx2/H2n9qXPb52tTYfE0pZAWcBq5mK025c= github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20190412020505-60e2075261b6/go.mod h1:T9M45xf79ahXVelWoOBmH0y4aC1t5kXO5BxwyakgIGA= @@ -685,7 +1518,8 @@ github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHG github.com/andygrunwald/go-gerrit v0.0.0-20190120104749-174420ebee6c/go.mod h1:0iuRQp6WJ44ts+iihy5E/WlPqfg5RNeQxOmzRkxCdtk= github.com/andygrunwald/go-jira v1.15.0 h1:krX3Ad4i44mOG0u+vIxQLhLkyyQKPbTsOISsDRgBNjU= github.com/andygrunwald/go-jira v1.15.0/go.mod h1:GIYN1sHOIsENWUZ7B4pDeT/nxEtrZpE8l0987O67ZR8= -github.com/ant31/crd-validation v0.0.0-20180702145049-30f8a35d0ac2/go.mod h1:X0noFIik9YqfhGYBLEHg8LJKEwy7QIitLQuFMpKLcPk= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= @@ -693,9 +1527,17 @@ github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220418222510-f25a4f6275ed/go.m github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df h1:7RFfzj4SSt6nnvCPbCqijJi1nWCd+TqAT3bYCStRC18= github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= +github.com/apache/arrow/go/arrow v0.0.0-20200730104253-651201b0f516/go.mod h1:QNYViu/X0HXDHw7m3KXzWSVXIbfUvJqBFe6Gj8/pYA0= github.com/apache/arrow/go/arrow v0.0.0-20210818145353-234c94e4ce64/go.mod h1:2qMFB56yOP3KzkB3PbYZ4AlUFg3a88F67TIx5lB/WwY= +github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0= +github.com/apache/arrow/go/v11 v11.0.0/go.mod h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4xei5aX110hRiI= +github.com/apache/arrow/go/v12 v12.0.0/go.mod h1:d+tV/eHZZ7Dz7RPrFKtPK02tpr+c9/PEd/zm8mDS9Vg= +github.com/apache/beam/sdks/v2 v2.47.0-RC3/go.mod h1:n8ybxT4OltLeoykTV8CGg/xQ1yrUJw13aJRkQY36lE8= +github.com/apache/thrift v0.0.0-20181112125854-24918abba929/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.14.2/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= github.com/apple/foundationdb/bindings/go v0.0.0-20190411004307-cd5c9d91fad2/go.mod h1:OMVSB21p9+xQUIqlGizHPZfjK+SHws1ht+ZytVDoz9U= github.com/aquilax/truncate v1.0.0 h1:UgIGS8U/aZ4JyOJ2h3xcF5cSQ06+gGBnjxH2RUHJe0U= github.com/aquilax/truncate v1.0.0/go.mod h1:BeMESIDMlvlS3bmg4BVvBbbZUNwWtS8uzYPAKXwwhLw= @@ -709,6 +1551,7 @@ github.com/armon/go-metrics v0.3.3/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4 github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= +github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-proxyproto v0.0.0-20190211145416-68259f75880e/go.mod h1:QmP9hvJ91BbJmGVGSbutW19IC0Q9phDCLGaomwTJbgU= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= @@ -728,7 +1571,6 @@ github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvx github.com/auth0/go-jwt-middleware v1.0.1/go.mod h1:YSeUX3z6+TF2H+7padiEqNJ73Zy9vXW72U//IgN0BIM= github.com/aws/aws-k8s-tester v0.0.0-20190114231546-b411acf57dfe/go.mod h1:1ADF5tAtU1/mVtfMcHAYSm2fPw71DA7fFk0yed64/0I= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v0.0.0-20180507225419-00862f899353/go.mod h1:ZRmQr0FajVIyZ4ZzBYKG5P3ZqPz9IHG41ZoMu1ADI3k= github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.15.90/go.mod h1:es1KtYUFs7le0xQ3rOihkuoVD90z7D0fR2Qm4S00/gU= @@ -742,81 +1584,185 @@ github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpi github.com/aws/aws-sdk-go v1.25.41/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.30.19/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/aws/aws-sdk-go v1.30.27/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/aws/aws-sdk-go v1.31.13/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aws/aws-sdk-go v1.34.0/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= github.com/aws/aws-sdk-go v1.35.24/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k= github.com/aws/aws-sdk-go v1.35.37/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.36.29/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= +github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.38.49/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.40.39/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= +github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go v1.43.8/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.43.11/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go v1.43.16/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.43.31/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go v1.44.45/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go v1.44.95/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.156/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go v1.44.164/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go v1.44.217/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go v1.44.257/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go v1.49.21 h1:Rl8KW6HqkwzhATwvXhyr7vD4JFUMi7oXGAw9SrxxIFY= github.com/aws/aws-sdk-go v1.49.21/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/aws/aws-sdk-go-v2 v1.7.1/go.mod h1:L5LuPC1ZgDr2xQS7AmIec/Jlc7O/Y1u2KxJyNVab250= github.com/aws/aws-sdk-go-v2 v1.8.0/go.mod h1:xEFuWz+3TYdlPRuo+CqATbeDWIWyaT5uAPwPaWtgse0= +github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= +github.com/aws/aws-sdk-go-v2 v1.16.7/go.mod h1:6CpKuLXg2w7If3ABZCl/qZ6rEgwtjZTn4eAf4RcEyuw= +github.com/aws/aws-sdk-go-v2 v1.16.11/go.mod h1:WTACcleLz6VZTp7fak4EO5b9Q4foxbn+8PIz3PmyKlo= +github.com/aws/aws-sdk-go-v2 v1.17.7/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= +github.com/aws/aws-sdk-go-v2 v1.18.0/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= +github.com/aws/aws-sdk-go-v2 v1.20.1/go.mod h1:NU06lETsFm8fUC6ZjhgDpVBcGZTFQ6XM+LZWZxMI4ac= +github.com/aws/aws-sdk-go-v2 v1.24.1/go.mod h1:LNh45Br1YAkEKaAqvmE1m8FUx6a5b/V0oAKV7of29b4= github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA= github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.3/go.mod h1:gNsR5CaXKmQSSzrmGxmwmct/r+ZBfbxorAuXYsj/M5Y= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.10/go.mod h1:VeTZetY5KRJLuD/7fkQXMU6Mw7H5m/KP2J5Iy9osMno= +github.com/aws/aws-sdk-go-v2/config v1.5.0/go.mod h1:RWlPOAW3E3tbtNAqTwvSW54Of/yP3oiZXMI0xfUdjyA= github.com/aws/aws-sdk-go-v2/config v1.6.0/go.mod h1:TNtBVmka80lRPk5+S9ZqVfFszOQAGJJ9KbT3EM3CHNU= +github.com/aws/aws-sdk-go-v2/config v1.17.1/go.mod h1:uOxDHjBemNTF2Zos+fgG0NNfE86wn1OAHDTGxjMEYi0= +github.com/aws/aws-sdk-go-v2/config v1.18.19/go.mod h1:XvTmGMY8d52ougvakOv1RpiTLPz9dlG/OQHsKU/cMmY= +github.com/aws/aws-sdk-go-v2/config v1.18.23/go.mod h1:rx0ruaQ+gk3OrLFHRRx56lA//XxP8K8uPzeNiKNuWVY= +github.com/aws/aws-sdk-go-v2/config v1.18.25/go.mod h1:dZnYpD5wTW/dQF0rRNLVypB396zWCcPiBIvdvSWHEg4= +github.com/aws/aws-sdk-go-v2/config v1.26.3/go.mod h1:Bxgi+DeeswYofcYO0XyGClwlrq3DZEXli0kLf4hkGA0= github.com/aws/aws-sdk-go-v2/config v1.27.2 h1:XnMKB9JRjfnxg9ZkUic4MiapnWJISWRo8HVM+7nx9qQ= github.com/aws/aws-sdk-go-v2/config v1.27.2/go.mod h1:z/XIktFoVIKNEqX/811vx4eHetrC3tAkgJKL1ZY/KM4= +github.com/aws/aws-sdk-go-v2/credentials v1.3.1/go.mod h1:r0n73xwsIVagq8RsxmZbGSRQFj9As3je72C2WzUIToc= github.com/aws/aws-sdk-go-v2/credentials v1.3.2/go.mod h1:PACKuTJdt6AlXvEq8rFI4eDmoqDFC5DpVKQbWysaDgM= +github.com/aws/aws-sdk-go-v2/credentials v1.12.14/go.mod h1:opAndTyq+YN7IpVG57z2CeNuXSQMqTYxGGlYH0m0RMY= +github.com/aws/aws-sdk-go-v2/credentials v1.13.18/go.mod h1:vnwlwjIe+3XJPBYKu1et30ZPABG3VaXJYr8ryohpIyM= +github.com/aws/aws-sdk-go-v2/credentials v1.13.22/go.mod h1:BfNcm6A9nSd+bzejDcMJ5RE+k6WbkCwWkQil7q4heRk= +github.com/aws/aws-sdk-go-v2/credentials v1.13.24/go.mod h1:jYPYi99wUOPIFi0rhiOvXeSEReVOzBqFNOX5bXYoG2o= +github.com/aws/aws-sdk-go-v2/credentials v1.16.14/go.mod h1:cniAUh3ErQPHtCQGPT5ouvSAQ0od8caTO9OOuufZOAE= github.com/aws/aws-sdk-go-v2/credentials v1.17.2 h1:tCZXWtH0HiIEZ50NJ7/QEaXmuzEd36L+2JUiZkp2nsc= github.com/aws/aws-sdk-go-v2/credentials v1.17.2/go.mod h1:7Zo+D6q4auSIo3p4EItuTKTk7J+RqjASISZqLvmUgpc= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.3.0/go.mod h1:2LAuqPx1I6jNfaGDucWfA2zqQCYCOMCDHiCOciALyNw= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.4.0/go.mod h1:Mj/U8OpDbcVcoctrYwA2bak8k/HFPdcLzI/vaiXMwuM= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.12/go.mod h1:aZ4vZnyUuxedC7eD4JyEHpGnCz+O2sHQEx3VvAwklSE= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.1/go.mod h1:lfUx8puBRdM5lVVMQlwt2v+ofiG/X6Ms+dy0UkG/kXw= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.3/go.mod h1:4Q0UFP0YJf0NrsEuEYHpM9fTSEVnD16Z3uyEF7J9JGM= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11/go.mod h1:cRrYDYAMUohBJUtUnOhydaMHtiK/1NZ0Otc9lIb6O0Y= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.1 h1:lk1ZZFbdb24qpOwVC1AwYNrswUjAxeyey6kFBVANudQ= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.1/go.mod h1:/xJ6x1NehNGCX4tvGzzj2bq5TBOT/Yxq+qbL9Jpx2Vk= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.3.2/go.mod h1:qaqQiHSrOUVOfKe6fhgQ6UzhxjwqVW8aHNegd6Ws4w4= github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.4.0/go.mod h1:eHwXu2+uE/T6gpnYWwBwqoeqRf9IXyCcolyOWDRAErQ= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.60/go.mod h1:HLWzCoNyzaPkOOs9yZ3muJ91lSk8O9DJbJw5aKAWWHY= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.14/go.mod h1:kdjrMwHwrC3+FsKhNcCMJ7tUVj/8uSD5CZXeQ4wV6fM= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.18/go.mod h1:348MLhzV1GSlZSMusdwQpXKbhD7X2gbI/TxwAPKkYZQ= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.31/go.mod h1:QT0BqUvX1Bh2ABdTGnjqEjvjzrCfIniM9Sc8zn9Yndo= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.33/go.mod h1:7i0PF1ME/2eUPFcjkVIwq+DOygHEoK92t5cDqNgYbIw= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10/go.mod h1:6BkRjejp/GR4411UGqkX8+wFMbFbqsUIimfK4XjOKR4= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 h1:aw39xVGeRWlWx9EzGVnhOR4yOjQDHPQ6o6NmBlscyQg= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5/go.mod h1:FSaRudD0dXiMPK2UjknVwwTYyZMRsHv3TtkabsZih5I= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.8/go.mod h1:ZIV8GYoC6WLBW5KGs+o4rsc65/ozd+eQ0L31XF5VDwk= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.12/go.mod h1:ckaCVTEdGAxO6KwTGzgskxR1xM+iJW4lxMyDFVda2Fc= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.25/go.mod h1:zBHOPwhBc3FlQjQJE/D3IfPWiWaQmT06Vq9aNukDo0k= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.27/go.mod h1:UrHnn3QV/d0pBZ6QBAEQcqFLf8FAzLmoUfPVIueOvoM= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10/go.mod h1:6UV4SZkVvmODfXKql4LCbaZUpF7HO2BX38FgBf9ZOLw= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 h1:PG1F3OD1szkuQPzDw3CIQsRIrtTlUC3lP84taWzHlq0= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5/go.mod h1:jU1li6RFryMz+so64PpKtudI+QzbKoIEivqdf6LNpOc= +github.com/aws/aws-sdk-go-v2/internal/ini v1.1.1/go.mod h1:Zy8smImhTdOETZqfyn01iNOe0CNggVbPjCajyaz6Gvg= github.com/aws/aws-sdk-go-v2/internal/ini v1.2.0/go.mod h1:Q5jATQc+f1MfZp3PDMhn6ry18hGvE0i8yvbXoKbnZaE= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.19/go.mod h1:cVHo8KTuHjShb9V8/VjH3S/8+xPu16qx8fdGwmotJhE= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.32/go.mod h1:XGhIBZDEgfqmFIugclZ6FU7v75nHhBDtzuB4xB/tEi4= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.34/go.mod h1:Etz2dj6UHYuw+Xw830KfzCfWGMzqvUTCjUj5b76GVDc= +github.com/aws/aws-sdk-go-v2/internal/ini v1.7.2/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.5/go.mod h1:aIwFF3dUk95ocCcA3zfk3nhz0oLkpzHFWuMp8l/4nNs= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.23/go.mod h1:uIiFgURZbACBEQJfqTZPb/jxO7R+9LeoHUFudtIdeQI= github.com/aws/aws-sdk-go-v2/service/autoscaling v1.40.5 h1:vhdJymxlWS2qftzLiuCjSswjXBRLGfzo/BEE9LDveBA= github.com/aws/aws-sdk-go-v2/service/autoscaling v1.40.5/go.mod h1:ZErgk/bPaaZIpj+lUWGlwI1A0UFhSIscgnCPzTLnb2s= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= github.com/aws/aws-sdk-go-v2/service/ec2 v1.148.2 h1:1oOlVyfM5Lzn/XKjqoVyy2i4OQhqOPaqYg3Jk+cZ4FE= github.com/aws/aws-sdk-go-v2/service/ec2 v1.148.2/go.mod h1:7MUTgVVnC1GAxx4SNQqzQalrm1n4v1HYa/R/LEB3CKo= +github.com/aws/aws-sdk-go-v2/service/ecr v1.18.11/go.mod h1:Ce1q2jlNm8BVpjLaOnwnm5v2RClAbK6txwPljFzyW6c= +github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.16.2/go.mod h1:uHtRE7aqXNmpeYL+7Ec7LacH5zC9+w2T5MBOeEKDdu0= github.com/aws/aws-sdk-go-v2/service/eks v1.39.2 h1:KLVRI2J2tH/0M/mGeL8IQIFfMH7YY2sxzzMWjSGol0M= github.com/aws/aws-sdk-go-v2/service/eks v1.39.2/go.mod h1:gzXWmY937TLpT2GJbYBfgb664o/GlwkNNWQ6RGPFyeQ= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.2.1/go.mod h1:v33JQ57i2nekYTA70Mb+O18KeH4KqhdqxTJZNK1zdRE= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.2.2/go.mod h1:EASdTcM1lGhUe1/p4gkojHwlGJkeoRjjr1sRCzup3Is= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.3/go.mod h1:gkb2qADY+OHaGLKNTYxMaQNacfeyQpZ4csDTQMeFmcw= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.11/go.mod h1:iV4q2hsqtNECrfmlXyord9u4zyuFEJX9eLgLpSPzWA8= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4/go.mod h1:2aGXHFmbInwgP9ZfpmdIfOELL79zhdNYNmReK8qDfdQ= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1 h1:EyBZibRTVAs6ECHZOw5/wlylS9OcTzwyjeQMudmREjE= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1/go.mod h1:JKpmtYhhPs7D97NL/ltqz7yCkERFW5dOlHyVl66ZYF8= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.9/go.mod h1:EF5RLnD9l0xvEWwMRcktIS/dI6lF8lU5eV3B13k6sWo= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.26/go.mod h1:2UqAAwMUXKeRkAHIlDJqvMVgOWkUi/AUXPk/YIe+Dg4= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.2.1/go.mod h1:zceowr5Z1Nh2WVP8bf/3ikB41IZW59E4yIYbg+pC6mw= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.2.2/go.mod h1:NXmNI41bdEsJMrD0v9rUvbGCB5GwdBEpKvUvIY3vTFg= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.8/go.mod h1:rDVhIMAX9N2r8nWxDUlbubvvaFMnfsm+3jAV7q+rpM4= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.12/go.mod h1:1TODGhheLWjpQWSuhYuAUWYTCKwEjx2iblIFKDHjeTc= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.25/go.mod h1:/95IA+0lMnzW6XzqYJRpjjsAbKEORVeO0anQqjd2CNU= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.27/go.mod h1:EOwBD4J4S5qYszS5/3DpkejfuK+Z5/1uzICfPaZLtqw= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10/go.mod h1:wohMUQiFdzo0NtxbBg0mSRGZ4vL3n0dKjLTINdcIino= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.1 h1:cVP8mng1RjDyI3JN/AXFCn5FHNlsBaBH0/MBtG1bg0o= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.1/go.mod h1:C8sQjoyAsdfjC7hpy4+S6B92hnFzx0d0UAyHicaOTIE= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.5.1/go.mod h1:6EQZIwNNvHpq/2/QSJnp4+ECvqIy55w95Ofs0ze+nGQ= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.5.2/go.mod h1:QuL2Ym8BkrLmN4lUofXYq6000/i5jPjosCNK//t6gak= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.8/go.mod h1:JlVwmWtT/1c5W+6oUsjXjAJ0iJZ+hlghdrDy/8JxGCU= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.14.0/go.mod h1:bh2E0CXKZsQN+faiKVqC40vfNMAWheoULBCnEgO9K+8= +github.com/aws/aws-sdk-go-v2/service/kms v1.21.1/go.mod h1:EEfb4gfSphdVpRo5sGf2W3KvJbelYUno5VaXR5MJ3z4= +github.com/aws/aws-sdk-go-v2/service/kms v1.27.9/go.mod h1:2tFmR7fQnOdQlM2ZCEPpFnBIQD1U8wmXmduBgZbOag0= +github.com/aws/aws-sdk-go-v2/service/s3 v1.11.1/go.mod h1:XLAGFrEjbvMCLvAtWLLP32yTv8GpBquCApZEycDLunI= github.com/aws/aws-sdk-go-v2/service/s3 v1.12.0/go.mod h1:6J++A5xpo7QDsIeSqPK4UHqMSyPOCopa+zKtqAMhqVQ= +github.com/aws/aws-sdk-go-v2/service/s3 v1.27.1/go.mod h1:NffjpNsMUFXp6Ok/PahrktAncoekWrywvmIK83Q2raE= +github.com/aws/aws-sdk-go-v2/service/s3 v1.31.0/go.mod h1:ncltU6n4Nof5uJttDtcNQ537uNuwYqsZZQcpkd2/GUQ= +github.com/aws/aws-sdk-go-v2/service/s3 v1.31.1/go.mod h1:ncltU6n4Nof5uJttDtcNQ537uNuwYqsZZQcpkd2/GUQ= +github.com/aws/aws-sdk-go-v2/service/sso v1.3.1/go.mod h1:J3A3RGUvuCZjvSuZEcOpHDnzZP/sKbhDWV2T1EOzFIM= github.com/aws/aws-sdk-go-v2/service/sso v1.3.2/go.mod h1:J21I6kF+d/6XHVk7kp/cx9YVD2TMD2TbLwtRGVcinXo= +github.com/aws/aws-sdk-go-v2/service/sso v1.11.17/go.mod h1:mS5xqLZc/6kc06IpXn5vRxdLaED+jEuaSRv5BxtnsiY= +github.com/aws/aws-sdk-go-v2/service/sso v1.12.6/go.mod h1:Y1VOmit/Fn6Tz1uFAeCO6Q7M2fmfXSCLeL5INVYsLuY= +github.com/aws/aws-sdk-go-v2/service/sso v1.12.10/go.mod h1:ouy2P4z6sJN70fR3ka3wD3Ro3KezSxU6eKGQI2+2fjI= +github.com/aws/aws-sdk-go-v2/service/sso v1.18.6/go.mod h1:+mJNDdF+qiUlNKNC3fxn74WWNN+sOiGOEImje+3ScPM= github.com/aws/aws-sdk-go-v2/service/sso v1.19.2 h1:pnj8llQoBAHD4UmbM8UM5GdfycFJKMhgPSeaOyRaZ34= github.com/aws/aws-sdk-go-v2/service/sso v1.19.2/go.mod h1:x6/tCd1o/AOKQR+iYnjrzhJxD+w0xRN34asGPaSV7ew= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.6/go.mod h1:Lh/bc9XUf8CfOY6Jp5aIkQtN+j1mc+nExc+KXj9jx2s= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.10/go.mod h1:AFvkxc8xfBe8XA+5St5XIHHrQQtkxqrRincx4hmMHOk= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.6/go.mod h1:ykf3COxYI0UJmxcfcxcVuz7b6uADi1FkiUz6Eb7AgM8= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.22.2 h1:L4yhKxW6HbTSQ08OsvPJuaspaLE40qMgprgXUNFUiMg= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.22.2/go.mod h1:lZB123q0SVQ3dfIbEOcGzhQHrwVBcHVReNS9tm20oU4= +github.com/aws/aws-sdk-go-v2/service/sts v1.6.0/go.mod h1:q7o0j7d7HrJk/vr9uUt3BVRASvcU7gYZB9PUgPiByXg= github.com/aws/aws-sdk-go-v2/service/sts v1.6.1/go.mod h1:hLZ/AnkIKHLuPGjEiyghNEdvJ2PP0MgOxcmv9EBJ4xs= +github.com/aws/aws-sdk-go-v2/service/sts v1.16.13/go.mod h1:Ru3QVMLygVs/07UQ3YDur1AQZZp2tUNje8wfloFttC0= +github.com/aws/aws-sdk-go-v2/service/sts v1.18.7/go.mod h1:JuTnSoeePXmMVe9G8NcjjwgOKEfZ4cOjMuT2IBT/2eI= +github.com/aws/aws-sdk-go-v2/service/sts v1.18.11/go.mod h1:BgQOMsg8av8jset59jelyPW7NoZcZXLVpDsXunGDrk8= +github.com/aws/aws-sdk-go-v2/service/sts v1.19.0/go.mod h1:BgQOMsg8av8jset59jelyPW7NoZcZXLVpDsXunGDrk8= +github.com/aws/aws-sdk-go-v2/service/sts v1.26.7/go.mod h1:6h2YuIoxaMSCFf5fi1EgZAwdfkGMgDY+DVfa61uLe4U= github.com/aws/aws-sdk-go-v2/service/sts v1.27.2 h1:Dr+7r/p20XpN+1U5tVNZfA2bLq0kQ9IjVBM0iAyMMLg= github.com/aws/aws-sdk-go-v2/service/sts v1.27.2/go.mod h1:ozhhG9/NB5c9jcmhGq6tX9dpp21LYdmRWRQVppASim4= +github.com/aws/smithy-go v1.6.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= github.com/aws/smithy-go v1.7.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= +github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= +github.com/aws/smithy-go v1.12.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aws/smithy-go v1.12.1/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aws/smithy-go v1.13.1/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aws/smithy-go v1.14.1/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aws/smithy-go v1.19.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE= github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q= github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= +github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20230510185313-f5e39e5f34c7/go.mod h1:VVALgT1UESBh91dY0GprHnT1Z7mKd96VDk8qVy+bmu0= github.com/axiomhq/hyperloglog v0.0.0-20220105174342-98591331716a/go.mod h1:2stgcRjl6QmW+gU2h5E7BQXg4HU0gzxKWDuT5HviN9s= +github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc= github.com/banzaicloud/k8s-objectmatcher v1.5.1/go.mod h1:9MWY5HsM/OaTmoTirczhlO8UALbH722WgdpaaR7Y8OE= github.com/bazelbuild/buildtools v0.0.0-20190917191645-69366ca98f89/go.mod h1:5JP0TXzWDHXv8qvxRC4InIazwdyDseBDbzESUMKk1yU= +github.com/beeker1121/goque v1.0.3-0.20191103205551-d618510128af/go.mod h1:84CWnaDz4g1tEVnFLnuBigmGK15oPohy0RfvSN8d4eg= github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/biogo/store v0.0.0-20160505134755-913427a1d5e8/go.mod h1:Iev9Q3MErcn+w3UOJD/DkEzllvugfdx7bGcMOFhvr/4= github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= @@ -830,10 +1776,14 @@ github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2y github.com/blendle/zapdriver v1.3.1 h1:C3dydBOWYRiOk+B8X9IVZ5IOe+7cl+tGOexN4QqHfpE= github.com/blendle/zapdriver v1.3.1/go.mod h1:mdXfREi6u5MArG4j9fewC+FGnXaBR+T4Ox4J2u4eHCc= github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= +github.com/bluekeyes/go-gitdiff v0.7.1/go.mod h1:QpfYYO1E0fTVHVZAZKiRjtSGY9823iCdvGXBcEzHGbM= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= +github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b/go.mod h1:ac9efd0D1fsDb3EJvhqgXRbFx7bs2wqZ10HQPeU8U/Q= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= github.com/brancz/gojsontoyaml v0.0.0-20190425155809-e8bd32d46b3d/go.mod h1:IyUJYN1gvWjtLF5ZuygmxbnsAyP3aJS6cHzIuZY50B0= github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= @@ -843,6 +1793,8 @@ github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= github.com/bshuster-repo/logrus-logstash-hook v1.0.2 h1:JYRWo+QGnQdedgshosug9hxpPYTB9oJ1ZZD3fY31alU= github.com/bshuster-repo/logrus-logstash-hook v1.0.2/go.mod h1:HgYntJprnHSPaF9VPPPLP1L5S1vMWxRfa1J+vzDrDTw= +github.com/bsm/ginkgo/v2 v2.9.5/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= +github.com/bsm/gomega v1.26.0/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= @@ -853,13 +1805,17 @@ github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3k github.com/bugsnag/panicwrap v1.3.4 h1:A6sXFtDGsgU/4BLf5JT0o5uYg3EeKgGx3Sfs+/uk3pU= github.com/bugsnag/panicwrap v1.3.4/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= +github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/bwmarrin/snowflake v0.0.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE= +github.com/bytecodealliance/wasmtime-go v0.36.0/go.mod h1:q320gUxqyI8yB+ZqRuaJOEnGkAnHh6WtJjMaT2CW4wI= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= +github.com/c2h5oh/datasize v0.0.0-20171227191756-4eba002a5eae/go.mod h1:S/7n9copUssQ56c7aAgHqftWO4LTf4xY6CGWt8Bc+3M= github.com/campoy/embedmd v1.0.0/go.mod h1:oxyr9RCiSXg0M3VJ3ks0UGfp98BpSSGr0kpiX3MzVl8= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/cenk/backoff v2.0.0+incompatible/go.mod h1:7FtoeaSnHoZnmZzz47cM35Y9nSW7tNyaidugnHTaFDE= +github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -870,6 +1826,8 @@ github.com/cenkalti/backoff/v4 v4.1.0/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInq github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -877,7 +1835,6 @@ github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMr github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= github.com/centrify/cloud-golang-sdk v0.0.0-20190214225812-119110094d0f/go.mod h1:C0rtzmGXgN78pYR0tGJFhtHgkbAs0lIbHwkB81VxDQE= github.com/centrify/cloud-golang-sdk v0.0.0-20210923165758-a8c48d049166/go.mod h1:c/gmvyN8lq6lYtHvrqqoXrg2xyN65N0mBmbikxFWXNE= -github.com/certifi/gocertifi v0.0.0-20180905225744-ee1a9a0726d2/go.mod h1:GJKEexRPVJrBSOjoqN5VNOIKJ5Q3RViH6eu3puDRwx4= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/cespare/xxhash v0.0.0-20181017004759-096ff4a8a059/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -899,22 +1856,33 @@ github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhD github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= github.com/cheynewallace/tabby v1.1.1/go.mod h1:Pba/6cUL8uYqvOc9RkyvFbHGrQ9wShyrn6/S/1OYVys= github.com/chrismalek/oktasdk-go v0.0.0-20181212195951-3430665dfaa0/go.mod h1:5d8DqS60xkj9k3aXfL3+mXBH0DPYO0FQjcKosxl+b/Q= +github.com/chrismellard/docker-credential-acr-env v0.0.0-20230304212654-82a0ddb27589/go.mod h1:OuDyvmLnMCwa2ep4Jkm6nyA0ocJuZlGyk2gGseVzERM= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= +github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/readline v1.5.0/go.mod h1:x22KAscuvRqlLoK9CsoYsmxoXZMMFVyOl86cAH8qUic= +github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/chzyer/test v0.0.0-20210722231415-061457976a23/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= +github.com/cilium/ebpf v0.9.1/go.mod h1:+OhNOIXx/Fnu1IE8bJz2dzOA+VSfyTfdNUVdlQnxUFY= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/clarketm/json v1.13.4/go.mod h1:ynr2LRfb0fQU34l07csRNBTcivjySLLiY1YzQqKVfdo= +github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudevents/sdk-go/v2 v2.14.0 h1:Nrob4FwVgi5L4tV9lhjzZcjYqFVyJzsA56CwPaPfv6s= github.com/cloudevents/sdk-go/v2 v2.14.0/go.mod h1:xDmKfzNjM8gBvjaF8ijFjM1VYOVUEeUfapHMUX1T5To= +github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= +github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cloudfoundry-community/go-cfclient v0.0.0-20190201205600-f136f9222381/go.mod h1:e5+USP2j8Le2M0Jo3qKPFnNhuo1wueU4nWHCXBOfQ14= github.com/cloudfoundry-community/go-cfclient v0.0.0-20210823134051-721f0e559306/go.mod h1:0FdHblxw7g3M2PPICOw9i8YZOHP9dZTHbJUtoxL7Z/E= github.com/cloudfoundry/gosigar v0.0.0-20150402170747-3ed7c74352da/go.mod h1:3qLfc2GlfmwOx2+ZDaRGH3Y9fwQ0sQeaAleo2GV5pH0= @@ -923,28 +1891,38 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230112175826-46e39c7b9b43/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230428030218-4003588d1b74/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ= github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM= github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= -github.com/cockroachdb/cmux v0.0.0-20170110192607-30d10be49292/go.mod h1:qRiX68mZX1lGBkTWyp3CLcenw9I94W2dLeRvMzcn9N4= -github.com/cockroachdb/cockroach v0.0.0-20170608034007-84bc9597164f/go.mod h1:xeT/CQ0qZHangbYbWShlCGAx31aV4AjGswDUjhKS6HQ= github.com/cockroachdb/cockroach-go v0.0.0-20181001143604-e0a95dfd547c/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk= +github.com/cockroachdb/cockroach-go/v2 v2.3.3/go.mod h1:1wNJ45eSXW9AnOc3skntW9ZUZz6gxrQK3cOj3rK+BC8= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= +github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb/go.mod h1:ZjrT6AXHbDs86ZSdt/osfBi5qfexBrKUdONk989Wnk4= github.com/codegangsta/cli v1.13.1-0.20160326223947-bc465becccd1/go.mod h1:/qJNoX69yVSKu5o4jLyXAENLRyk1uhi7zkbQ3slBdOA= github.com/codegangsta/inject v0.0.0-20140425184007-37d7f8432a3e/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= github.com/codeskyblue/go-sh v0.0.0-20170112005953-b097669b1569/go.mod h1:2hUMLQDY+46DXIf/i7n2rUCHUwF3gZrb4slZV8C4RYI= +github.com/colinmarc/hdfs/v2 v2.1.1/go.mod h1:M3x+k8UKKmxtFu++uAZ0OtDU8jR3jnaZIAc6yK4Ue0c= +github.com/container-orchestrated-devices/container-device-interface v0.5.4/go.mod h1:DjE95rfPiiSmG7uVXtg0z6MnPm/Lx4wxKCIts0ZE0vg= github.com/container-storage-interface/spec v1.1.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4= github.com/container-storage-interface/spec v1.2.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4= github.com/container-storage-interface/spec v1.5.0/go.mod h1:8K96oQNkJ7pFcC2R9Z1ynGGBB1I93kcS6PGg3SsOk8s= @@ -958,6 +1936,7 @@ github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E= github.com/containerd/btrfs v0.0.0-20210316141732-918d888fb676/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= +github.com/containerd/btrfs/v2 v2.0.0/go.mod h1:swkD/7j9HApWpzl8OHfrHNxppPd9l44DFZdF94BUj9k= github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI= github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= @@ -966,8 +1945,10 @@ github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4S github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU= github.com/containerd/cgroups v1.0.3/go.mod h1:/ofk34relqNjSGyqPrmEULrO4Sc8LJhvJmWbUCUKqj8= +github.com/containerd/cgroups v1.0.4/go.mod h1:nLNQtsF7Sl2HxNebu77i1R0oDlhiTG+kO4JTrUzo6IA= github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= +github.com/containerd/cgroups/v3 v3.0.2/go.mod h1:JUgITrzdFqp42uI2ryGA+ge0ap/nxzYgkGmIcetmErE= github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= @@ -991,11 +1972,17 @@ github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI= github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s= github.com/containerd/containerd v1.5.1/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g= +github.com/containerd/containerd v1.5.2/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g= github.com/containerd/containerd v1.5.7/go.mod h1:gyvv6+ugqY25TiXxcZC3L5yOeYgEw0QMhscqVp1AR9c= github.com/containerd/containerd v1.5.8/go.mod h1:YdFSv5bTFLpG2HIYmfqDpSYYTDX+mc5qtSuYx1YUb/s= github.com/containerd/containerd v1.5.13/go.mod h1:3AlCrzKROjIuP3JALsY14n8YtntaUDBu7vek+rPN5Vc= github.com/containerd/containerd v1.6.1/go.mod h1:1nJz5xCZPusx6jJU8Frfct988y0NpumIq9ODB0kLtoE= github.com/containerd/containerd v1.6.6/go.mod h1:ZoP1geJldzCVY3Tonoz7b1IXk8rIX0Nltt5QE4OMNk0= +github.com/containerd/containerd v1.6.8/go.mod h1:By6p5KqPK0/7/CgO/A6t/Gz+CUYUu2zf1hUaaymVXB0= +github.com/containerd/containerd v1.6.9/go.mod h1:XVicUvkxOrftE2Q1YWUXgZwkkAxwQYNOFzYWvfVfEfQ= +github.com/containerd/containerd v1.6.18/go.mod h1:1RdCUu95+gc2v9t3IL+zIlpClSmew7/0YS8O5eQZrOw= +github.com/containerd/containerd v1.6.19/go.mod h1:HZCDMn4v/Xl2579/MvtOC2M206i+JJ6VxFWU/NetrGY= +github.com/containerd/containerd v1.6.23/go.mod h1:UrQOiyzrLi3n4aezYJbQH6Il+YzTvnHFbEuO3yfDrM4= github.com/containerd/containerd v1.7.11 h1:lfGKw3eU35sjV0aG2eYZTiwFEY1pCzxdzicHP3SZILw= github.com/containerd/containerd v1.7.11/go.mod h1:5UluHxHTX2rdvYuZ5OJTC5m/KJNs0Zs9wVoJm9zf5ZE= github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= @@ -1019,11 +2006,13 @@ github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZ github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= +github.com/containerd/fifo v1.1.0/go.mod h1:bmC4NWMbXlt2EZ0Hc7Fx7QzTFxgPID13eH0Qu+MAb2o= github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk= github.com/containerd/go-cni v1.1.0/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= github.com/containerd/go-cni v1.1.3/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= github.com/containerd/go-cni v1.1.6/go.mod h1:BWtoWl5ghVymxu6MBjg79W9NZrCRyHIdUtk4cauMe34= +github.com/containerd/go-cni v1.1.9/go.mod h1:XYrZJ1d5W6E2VOvjffL3IZq0Dz6bsVlERHbekNK90PM= github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g= @@ -1035,47 +2024,58 @@ github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5A github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms= github.com/containerd/imgcrypt v1.1.3/go.mod h1:/TPA1GIDXMzbj01yd8pIbQiLdQxed5ue1wb8bP7PQu4= github.com/containerd/imgcrypt v1.1.4/go.mod h1:LorQnPtzL/T0IyCeftcsMEO7AqxUDbdO8j/tSUpgxvo= +github.com/containerd/imgcrypt v1.1.7/go.mod h1:FD8gqIcX5aTotCtOmjeCsi3A1dHmTZpnMISGKSczt4k= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c= github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= +github.com/containerd/nri v0.4.0/go.mod h1:Zw9q2lP16sdg0zYybemZ9yTDy8g7fPCIB3KXOGlggXI= github.com/containerd/stargz-snapshotter/estargz v0.4.1/go.mod h1:x7Q9dg9QYb4+ELgxmo4gBUeJB0tl5dqH1Sdz0nJU1QM= +github.com/containerd/stargz-snapshotter/estargz v0.7.0/go.mod h1:83VWDqHnurTKliEB0YvWMiCfLDwv4Cjj1X9Vk98GJZw= +github.com/containerd/stargz-snapshotter/estargz v0.14.3/go.mod h1:KY//uOCIkSuNAHhJogcZtrNHdKrA99/FCCRjE3HD36o= github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8= github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ= +github.com/containerd/ttrpc v1.1.1-0.20220420014843-944ef4a40df3/go.mod h1:YYyNVhZrTMiaf51Vj6WhAJqJw+vl/nzABhj8pWrzle4= +github.com/containerd/ttrpc v1.1.2/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ= +github.com/containerd/ttrpc v1.2.2/go.mod h1:sIT6l32Ph/H9cvnJsfXM5drIVzTr5A2flTf1G5tYZak= github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk= github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= +github.com/containerd/typeurl/v2 v2.1.1/go.mod h1:IDp2JFvbwZ31H8dQbEIY7sDl2L3o3HZj1hsSQlywkQ0= github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw= github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y= github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= github.com/containerd/zfs v0.0.0-20210324211415-d5c4544f0433/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= +github.com/containerd/zfs v1.1.0/go.mod h1:oZF9wBnrnQjpWLaPKEinrx3TQ9a+W/RJO7Zb41d8YLE= github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= github.com/containernetworking/cni v1.0.1/go.mod h1:AKuhXbN5EzmD4yTNtfSsX3tPcmtrBI6QcRV0NiNt15Y= github.com/containernetworking/cni v1.1.1/go.mod h1:sDpYKmGVENF3s6uvMvGgldDWeG8dMxakj/u+i9ht9vw= +github.com/containernetworking/cni v1.1.2/go.mod h1:sDpYKmGVENF3s6uvMvGgldDWeG8dMxakj/u+i9ht9vw= github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM= github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8= github.com/containernetworking/plugins v1.0.1/go.mod h1:QHCfGpaTwYTbbH+nZXKVTxNBDZcxSOplJT5ico8/FLE= github.com/containernetworking/plugins v1.1.1/go.mod h1:Sr5TH/eBsGLXK/h71HeLfX19sZPp3ry5uHSkI4LPxV8= +github.com/containernetworking/plugins v1.2.0/go.mod h1:/VjX4uHecW5vVimFa1wkG4s+r/s9qIfPdqlLF4TW8c4= github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4= github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= github.com/containers/ocicrypt v1.1.2/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= github.com/containers/ocicrypt v1.1.3/go.mod h1:xpdkbVAuaH3WzbEabUd5yDsl9SwJA5pABH85425Es2g= +github.com/containers/ocicrypt v1.1.6/go.mod h1:WgjxPWdTJMqYMjf3M6cuIFFA1/MpyyhIM99YInA+Rvc= github.com/coredns/caddy v1.1.0/go.mod h1:A6ntJQlAWuQfFlsd9hvigKbo2WS0VUs2l1e2F+BawD4= github.com/coredns/corefile-migration v1.0.17/go.mod h1:XnhgULOEouimnzgn0t4WPuFDN2/PJQcTxdWKC5eXNGE= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/bbolt v1.3.3/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.12+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= @@ -1086,6 +2086,8 @@ github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHo github.com/coreos/go-oidc v2.2.1+incompatible h1:mh48q/BqXqgjVHpy2ZY7WnWAbenxRjsz9N1i1YxjHAk= github.com/coreos/go-oidc v2.2.1+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-oidc/v3 v3.1.0/go.mod h1:rEJ/idjfUyfkBit1eI1fvyr+64/g9dcKpAm8MJMesvo= +github.com/coreos/go-oidc/v3 v3.5.0/go.mod h1:ecXRtV4romGPeO6ieExAsUK9cb/3fp9hXNz1tlv8PIM= +github.com/coreos/go-oidc/v3 v3.9.0/go.mod h1:rTKz2PYwftcrtoCzV5g5kvfJoWcm0Mk8AF8y1iAQro4= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= @@ -1098,13 +2100,15 @@ github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf/go.mod h1:F5haX7 github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/go-systemd/v22 v22.4.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/prometheus-operator v0.31.1/go.mod h1:vHwtP2e+VmEeS6m6lgp87aH+npGVRQsCi5jhcuQA1sA= github.com/coreos/prometheus-operator v0.38.0 h1:gF2xYIfO09XLFdyEecND46uihQ2KTaDwTozRZpXLtN4= github.com/coreos/prometheus-operator v0.38.0/go.mod h1:xZC7/TgeC0/mBaJk+1H9dbHaiEvLYHgX6Mi1h40UPh8= github.com/couchbase/gocb/v2 v2.3.3/go.mod h1:h4b3UYDnGI89hMW9VypVjAr+EE0Ki4jjlXJrVdmSZhQ= github.com/couchbase/gocbcore/v10 v10.0.4/go.mod h1:s6dwBFs4c3+cAzZbo1q0VW+QasudhHJuehE8b8U2YNg= +github.com/cpuguy83/dockercfg v0.3.1/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= @@ -1113,6 +2117,7 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/cristalhq/acmd v0.8.1/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= @@ -1128,8 +2133,13 @@ github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/ github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= github.com/daixiang0/gci v0.8.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= github.com/danieljoos/wincred v1.1.0/go.mod h1:XYlo+eRTsVA9aHGp7NGjFkPla4m+DCL7hqDjlFjiygg= +github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= +github.com/dave/dst v0.26.2/go.mod h1:UMDJuIRPfyUCC78eFuB+SV/WI8oDeyFDvM/JR6NI3IU= +github.com/dave/gopackages v0.0.0-20170318123100-46e7023ec56e/go.mod h1:i00+b/gKdIDIxuLDFob7ustLAVqhsZRk2qVZrArELGQ= +github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= github.com/dave/jennifer v1.4.1/go.mod h1:7jEdnm+qBcxl8PC0zyp7vxcpSRnzXSt9r39tpTVGlwA= -github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dave/kerr v0.0.0-20170318121727-bc25dd6abe8e/go.mod h1:qZqlPyPvfsDJt+3wHJ1EvSXDuVjFTK0j2p/ca+gtsb8= +github.com/dave/rebecca v0.9.1/go.mod h1:N6XYdMD/OKw3lkF3ywh8Z6wPGuwNFDNtWYEMFWEmXBA= github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -1137,6 +2147,9 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-xdr v0.0.0-20161123171359-e6a2ba005892/go.mod h1:CTDl0pzVzE5DEzZhPfvhY/9sPFMQIxaJ9VAMs9AagrE= github.com/daviddengcn/go-colortext v1.0.0/go.mod h1:zDqEI5NVUop5QPpVJUxE9UO10hRnmkD5G4Pmri9+m4c= +github.com/davidmz/go-pageant v1.0.2/go.mod h1:P2EDDnMqIwG5Rrp05dTRITj9z2zpGcD9efWSkTNKLIE= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.0-20210816181553-5444fa50b93d/go.mod h1:tmAIfUFEirG/Y8jhZ9M+h36obRZAk/1fcSpXwAVlfqE= github.com/deepmap/oapi-codegen v1.3.6/go.mod h1:aBozjEveG+33xPiP55Iw/XbVkhtZHEGLq3nxlX0+hfU= github.com/deepmap/oapi-codegen v1.8.2 h1:SegyeYGcdi0jLLrpbCMoJxnUUn8GBXHsvr4rbzjuhfU= github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= @@ -1145,19 +2158,30 @@ github.com/denisenkom/go-mssqldb v0.0.0-20190111225525-2fea367d496d/go.mod h1:xN github.com/denisenkom/go-mssqldb v0.0.0-20190412130859-3b1d194e553a/go.mod h1:zAg7JM8CkOJ43xKXIj7eRO9kmWm/TW578qo+oDO6tuM= github.com/denisenkom/go-mssqldb v0.9.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= github.com/denisenkom/go-mssqldb v0.12.2/go.mod h1:lnIw1mZukFRZDJYQ0Pb833QS2IaC3l5HkEfra2LJ+sk= +github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA= github.com/denverdino/aliyungo v0.0.0-20170926055100-d3308649c661/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= github.com/devans10/pugo/flasharray v0.0.0-20230602184138-1a5d930c950e h1:16wEsIhNjPDqdsTr2mu2zn7Saf1gvGAVtjxnavQZIZs= github.com/devans10/pugo/flasharray v0.0.0-20230602184138-1a5d930c950e/go.mod h1:7dF4rgfqItyj4bkbwZkwp/Ul+bM4lku/CQvS9OIYF4o= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= -github.com/dgrijalva/jwt-go v0.0.0-20161101193935-9ed569b5d1ac/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgraph-io/badger/v3 v3.2103.2/go.mod h1:RHo4/GmYcKKh5Lxu63wLEMHJ70Pac2JqZRYGhlyAo2M= +github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.1-0.20180719211823-0b96aaa70776+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-gk v0.0.0-20140819190930-201884a44051/go.mod h1:qm+vckxRlDt0aOla0RYJJVeqHZlWfOm2UIxHaqPB46E= +github.com/dgryski/go-gk v0.0.0-20200319235926-a69029f61654/go.mod h1:qm+vckxRlDt0aOla0RYJJVeqHZlWfOm2UIxHaqPB46E= +github.com/dgryski/go-lttb v0.0.0-20180810165845-318fcdf10a77/go.mod h1:Va5MyIzkU0rAM92tn3hb3Anb7oz7KcnixF49+2wOMe4= github.com/dgryski/go-metro v0.0.0-20180109044635-280f6062b5bc/go.mod h1:c9O8+fpSOX1DM8cPNSkX/qsBWdkD4yd2dpciOWQjpBw= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dgryski/go-sip13 v0.0.0-20190329191031-25c5027a8c7b/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dgryski/go-sip13 v0.0.0-20200911182023-62edffca9245/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/digitalocean/godo v1.7.5/go.mod h1:h6faOIcZ8lWIwNQ+DN7b3CgX4Kwby5T+nbpNqkUIozU= +github.com/digitalocean/godo v1.78.0/go.mod h1:GBmu8MkjZmNARE7IXRPmkbbnocNN8+uBm0xbEVw2LCs= +github.com/digitalocean/godo v1.97.0/go.mod h1:NRpFznZFvhHjBoqZAaOD3khVzsJ3EibzKqFL4R60dmA= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U= github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= @@ -1165,15 +2189,21 @@ github.com/distribution/distribution/v3 v3.0.0-20220526142353-ffbd94cbe269 h1:hb github.com/distribution/distribution/v3 v3.0.0-20220526142353-ffbd94cbe269/go.mod h1:28YO/VJk9/64+sTGNuYaBjWxrXTPrj0C0XmgTIOjxX4= github.com/djherbis/atime v1.0.0/go.mod h1:5W+KBIuTwVGcqjIfaTwt+KSYX1o6uep8dtevevQP/f8= github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= +github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= +github.com/dnephin/pflag v1.0.7/go.mod h1:uxE91IoWURlOiTUIA8Mq5ZZkAv3dPUfZNaT80Zm7OQE= github.com/docker/cli v0.0.0-20190925022749-754388324470/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v20.10.7+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/cli v20.10.8+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/cli v20.10.9+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/cli v20.10.14+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/cli v20.10.18+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v23.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v23.0.3+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v23.0.5+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/cli v24.0.0+incompatible h1:0+1VshNwBQzQAx9lOl+OYCTCEAD8fKs/qeXMx3O0wqM= github.com/docker/cli v24.0.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v0.0.0-20191216044856-a8371794149d h1:jC8tT/S0OGx2cswpeUTn4gOIea8P08lD3VFQT0cOZ50= @@ -1210,34 +2240,40 @@ github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdf github.com/duosecurity/duo_api_golang v0.0.0-20190308151101-6c680f768e74/go.mod h1:UqXY1lYT/ERa4OEAywUqdok1T4RCRdArkhic1Opuavo= 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/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-resiliency v1.2.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= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/edsrzf/mmap-go v1.1.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q= github.com/educlos/testrail v0.0.0-20210915115134-adb5e6f62a6d h1:Pg0HK2hfiHcqLKEp2Oryq+XsDBN31qYUT2IdWeJl9x8= github.com/educlos/testrail v0.0.0-20210915115134-adb5e6f62a6d/go.mod h1:aK0PgWGMpraVr1jZPLabKymsSLzNy6GVZ7nLuhjts1s= +github.com/eggsampler/acme/v3 v3.3.0/go.mod h1:/qh0rKC/Dh7Jj+p4So7DbWmFNzC4dpcpK53r226Fhuo= +github.com/eggsampler/acme/v3 v3.4.0/go.mod h1:/qh0rKC/Dh7Jj+p4So7DbWmFNzC4dpcpK53r226Fhuo= github.com/elastic/go-sysinfo v1.0.1/go.mod h1:O/D5m1VpYLwGjCYzEt63g3Z1uO3jXfwyzzjiW90t8cY= github.com/elastic/go-sysinfo v1.1.1/go.mod h1:i1ZYdU10oLNfRzq4vq62BEwD2fH8KaWh6eh0ikPT9F0= github.com/elastic/go-windows v1.0.0/go.mod h1:TsU0Nrp7/y3+VwE82FoZF8gC/XFg/Elz6CcloAxnPgU= github.com/elastic/go-windows v1.0.1/go.mod h1:FoVvqWSun28vaDQPbj2Elfc0JahhPB7WQEGa3c814Ss= -github.com/elastic/gosigar v0.9.0/go.mod h1:cdorVVzy1fhmEqmtgqkoE3bYtCfSCkVyjTyCIo22xvs= github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/elazarl/goproxy v0.0.0-20181111060418-2ce16c963a8a/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/elazarl/goproxy v0.0.0-20191011121108-aa519ddbe484 h1:pEtiCjIXx3RvGjlUJuCNxNOw0MNblyR9Wi+vJGBFh+8= -github.com/elazarl/goproxy v0.0.0-20191011121108-aa519ddbe484/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= +github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= +github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8= -github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful v2.6.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.10.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.11.1+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.15.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful v2.16.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful/v3 v3.5.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/emicklei/go-restful/v3 v3.10.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emicklei/go-restful/v3 v3.10.2 h1:hIovbnmBTLjHXkqEBUz3HGpXZdM7ZrE9fJIZIqlJLqE= github.com/emicklei/go-restful/v3 v3.10.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -1249,13 +2285,25 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= +github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI= +github.com/envoyproxy/go-control-plane v0.11.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q= +github.com/envoyproxy/go-control-plane v0.11.1/go.mod h1:uhMcXKCQMEJHiAb0w+YGefQLaTEw+YhGluxZkrTmD0g= github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.3.0-java/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= +github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= +github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= +github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= +github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= +github.com/envoyproxy/protoc-gen-validate v1.0.1/go.mod h1:0vj8bNkYbSTNS2PIyH87KZaeN4x9zpL9Qt8fQC7d+vs= +github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE= github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= +github.com/etcd-io/gofail v0.0.0-20190801230047-ad7f989257ca/go.mod h1:49H/RkXP8pKaZy4h0d+NW16rSLhyVBt4o6VLJbmOqDE= github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= github.com/euank/go-kmsg-parser v2.0.0+incompatible/go.mod h1:MhmAMZ8V4CYH4ybgdRwPr2TU5ThnS43puaKEMpja1uw= github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= @@ -1266,43 +2314,58 @@ github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQL github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.5.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= -github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0nW9SYGc= +github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwCFad8crR9dcMQWvV9Hvulu6hwUh4tWPJnM= github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a/go.mod h1:7Ga40egUymuWXxAe151lTNnCv97MddSOVsjpPPkityA= +github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= +github.com/facebookgo/limitgroup v0.0.0-20150612190941-6abd8d71ec01/go.mod h1:ypD5nozFk9vcGw1ATYefw6jHe/jZP++Z15/+VTMcWhc= +github.com/facebookgo/muster v0.0.0-20150708232844-fd3d7953fd52/go.mod h1:yIquW87NGRw1FU5p5lEkpnt/QxoH5uPAOUlOVkAUuMg= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= +github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/facette/natsort v0.0.0-20181210072756-2cd4dd1e2dcb/go.mod h1:bH6Xx7IW64qjjJq8M2u4dxNaBiDfKK+z/3eGDpXEQhc= github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg= github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/fatih/structtag v1.0.0/go.mod h1:IKitwq45uXL/yqi5mYghiD3w9H6eTOvI9vnk8tXMphA= github.com/fatih/structtag v1.1.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/favadi/protoc-go-inject-tag v1.3.0/go.mod h1:SSkUBgfqw2IJ2p7NPNKWk0Idwxt/qIt2LQgFPUgRGtc= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= +github.com/flynn/go-docopt v0.0.0-20140912013429-f6dd2ebbb31e/go.mod h1:HyVoz1Mz5Co8TFO8EupIdlcpwShBmY98dkT2xeHkvEI= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.5+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/foxcpp/go-mockdns v0.0.0-20210729171921-fb145fc6f897/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= +github.com/frankban/quicktest v1.2.2/go.mod h1:Qh/WofXFeiAFII1aEBu529AtJo6Zg2VHscnEsbBnJ20= github.com/frankban/quicktest v1.4.0/go.mod h1:36zfPVQyHxymz4cH7wlDmVwDrJuljRB60qkgn7rorfQ= github.com/frankban/quicktest v1.4.1/go.mod h1:36zfPVQyHxymz4cH7wlDmVwDrJuljRB60qkgn7rorfQ= github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/frankban/quicktest v1.13.0/go.mod h1:qLE0fzW0VuyUAJgPU19zByoIr0HtCHN/r/VLSOOIySU= +github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og= github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= @@ -1315,7 +2378,9 @@ github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbS github.com/fsouza/fake-gcs-server v0.0.0-20180612165233-e85be23bdaa8/go.mod h1:1/HufuJ+eaDf4KTnYdS6HJMGvMRU8d4cYTuu/1QaBbI= github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= +github.com/fullstorydev/grpcurl v1.8.7/go.mod h1:pVtM4qe3CMoLaIzYS8uvTuDj2jVYmXqMUkZeijnXp/E= github.com/fvbommel/sortorder v1.0.1/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= +github.com/fxamacker/cbor/v2 v2.4.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/gabriel-vasile/mimetype v1.3.1/go.mod h1:fA8fi6KUiG7MgQQ+mEWotXoEOvmxRtOJlERCzSmRvr8= github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= @@ -1326,21 +2391,21 @@ github.com/gammazero/deque v0.0.0-20190130191400-2afb3858e9c7/go.mod h1:GeIq9qoE github.com/gammazero/workerpool v0.0.0-20190406235159-88d534f22b56/go.mod h1:w9RqFVO2BM3xwWEcAB8Fwp0OviTBBEiRmSBDfbXnd3w= github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/garyburd/redigo v1.6.3/go.mod h1:rTb6epsqigu3kYKBnaF028A7Tf/Aw5s0cqA47doKKqw= -github.com/gernest/wow v0.1.0/go.mod h1:dEPabJRi5BneI1Nev1VWo0ZlcTWibHWp43qxKms4elY= github.com/getkin/kin-openapi v0.2.0/go.mod h1:V1z9xl9oF5Wt7v32ne4FmiF1alpS4dM6mNzoywPOXlk= github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= -github.com/getsentry/raven-go v0.1.2/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= -github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 h1:Mn26/9ZMNWSw9C9ERFA1PUxfmGpolnw2v0bKOREu5ew= github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= github.com/gizak/termui/v3 v3.1.0/go.mod h1:bXQEBkJpzxUAKf0+xq9MSWAvWZlE7c+aidmyFlkYTrY= +github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= @@ -1354,14 +2419,27 @@ github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.4.1 h1:IvVlgbzSsaUNudsw5dcXSzF3EWyXTi5XrAdngnuhRyg= github.com/go-errors/errors v1.4.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-fed/httpsig v1.1.0/go.mod h1:RCMrTZvN1bJYtofsG4rd5NaO5obxQ5xBkdiS7xsT7bM= +github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= +github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= +github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= +github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= +github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= +github.com/go-git/go-git/v5 v5.10.0/go.mod h1:1FOZ/pQnqw24ghP2n7cunVl0ON55BsjPYvhWHvZGhoo= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gorp/gorp v2.0.0+incompatible/go.mod h1:7IfkAQnO7jfT/9IQ3R9wL1dFhukN6aQxzKTHnkxzA/E= github.com/go-gorp/gorp/v3 v3.0.2/go.mod h1:BJ3q1ejpV8cVALtcXvXaXyTOlMmJhWDxTmncaR6rwBY= github.com/go-gorp/gorp/v3 v3.1.0 h1:ItKF/Vbuj31dmV4jxA1qblpSwkl9g1typ24xoe70IGs= github.com/go-gorp/gorp/v3 v3.1.0/go.mod h1:dLEjIyyRNiXvNZ8PSmzpt1GsWAUK8kjVhEpjH8TixEw= -github.com/go-ini/ini v1.21.1/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/go-ini/ini v1.66.6/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/go-jose/go-jose/v3 v3.0.0/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= github.com/go-jose/go-jose/v3 v3.0.1 h1:pWmKFVtt+Jl0vBZTIpz/eAKwsm6LkIxDVVbFHKkchhA= github.com/go-jose/go-jose/v3 v3.0.1/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= @@ -1373,6 +2451,8 @@ github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vb github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= +github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc= github.com/go-ldap/ldap/v3 v3.1.3/go.mod h1:3rbOH3jRS2u6jg2rJnKAMLE/xQyCKIveG2Sa/Cohzb8= github.com/go-ldap/ldap/v3 v3.1.7/go.mod h1:5Zun81jBTabRaI8lzN7E1JjyEl1g6zI6u9pd8luAK4Q= @@ -1395,7 +2475,6 @@ github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= -github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -1407,6 +2486,8 @@ github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2 github.com/go-openapi/analysis v0.19.10/go.mod h1:qmhS3VNFxBlquFJ0RGoDtylO9y4pgTAUNE9AEEMdlJQ= github.com/go-openapi/analysis v0.19.16/go.mod h1:GLInF007N83Ad3m8a/CbQ5TPzdnGT7workfHwuVjNVk= github.com/go-openapi/analysis v0.20.0/go.mod h1:BMchjvaHDykmRMsK40iPtvyOfFdMMxlOmQr9FBZk+Og= +github.com/go-openapi/analysis v0.21.2/go.mod h1:HZwRk4RRisyG8vx2Oe6aqeSQcoxRp47Xkp3+K6q+LdY= +github.com/go-openapi/analysis v0.21.4/go.mod h1:4zQ35W4neeZTqh3ol0rv/O8JBbka9QyAgQRPp9y3pfo= github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= github.com/go-openapi/errors v0.17.2/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= @@ -1422,26 +2503,23 @@ github.com/go-openapi/errors v0.22.0 h1:c4xY/OLxUBSTiepAg3j/MHuAv5mJhnf53LLMWFB+ github.com/go-openapi/errors v0.22.0/go.mod h1:J3DmZScxCDufmIMsdOuDHxJbdOGC0xtUynjIx092vXE= github.com/go-openapi/inflect v0.19.0 h1:9jCH9scKIbHeV9m12SmPilScz6krDxKRasNNSNPXu/4= github.com/go-openapi/inflect v0.19.0/go.mod h1:lHpZVlpIQqLyKwJ4N+YSc9hchQy/i12fJykb83CRBH4= -github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.17.2/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.19.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= -github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= github.com/go-openapi/jsonreference v0.17.2/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.19.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= +github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= @@ -1455,6 +2533,8 @@ github.com/go-openapi/loads v0.19.6/go.mod h1:brCsvE6j8mnbmGBh103PT/QLHfbyDxA4hs github.com/go-openapi/loads v0.19.7/go.mod h1:brCsvE6j8mnbmGBh103PT/QLHfbyDxA4hsKvYBNEGVc= github.com/go-openapi/loads v0.20.0/go.mod h1:2LhKquiE513rN5xC6Aan6lYOSddlL8Mp20AW9kpviM4= github.com/go-openapi/loads v0.20.2/go.mod h1:hTVUotJ+UonAMMZsvakEgmWKgtulweO9vYP2bQYKA/o= +github.com/go-openapi/loads v0.21.1/go.mod h1:/DtAMXXneXFjbQMGEtbamCZb+4x7eGwkvZCvBmwUG+g= +github.com/go-openapi/loads v0.21.2/go.mod h1:Jq58Os6SSGz0rzh62ptiu8Z31I+OTHqmULx5e/gJbNw= github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= github.com/go-openapi/runtime v0.18.0/go.mod h1:uI6pHuxWYTy94zZxgcwJkUWa9wbIlhteGfloI10GD4U= github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= @@ -1462,7 +2542,8 @@ github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29g github.com/go-openapi/runtime v0.19.15/go.mod h1:dhGWCTKRXlAfGnQG0ONViOZpjfg0m2gUt9nTQPQZuoo= github.com/go-openapi/runtime v0.19.16/go.mod h1:5P9104EJgYcizotuXhEuUrzVc+j1RiSjahULvYmlv98= github.com/go-openapi/runtime v0.19.24/go.mod h1:Lm9YGCeecBnUUkFTxPC4s1+lwrkJ0pthx8YvyjCfkgk= -github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/runtime v0.23.1/go.mod h1:AKurw9fNre+h3ELZfk6ILsfvPN+bvvlaU/M9q/r9hpk= +github.com/go-openapi/runtime v0.25.0/go.mod h1:Ux6fikcHXyyob6LNWxtE96hWwjBPYF0DXgVFuMTneOs= github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= github.com/go-openapi/spec v0.17.2/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= @@ -1475,8 +2556,12 @@ github.com/go-openapi/spec v0.19.8/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHK github.com/go-openapi/spec v0.19.15/go.mod h1:+81FIL1JwC5P3/Iuuozq3pPE9dXdIEGxFutcFKaVbmU= github.com/go-openapi/spec v0.20.0/go.mod h1:+81FIL1JwC5P3/Iuuozq3pPE9dXdIEGxFutcFKaVbmU= github.com/go-openapi/spec v0.20.1/go.mod h1:93x7oh+d+FQsmsieroS4cmR3u0p/ywH649a3qwC9OsQ= -github.com/go-openapi/spec v0.20.3 h1:uH9RQ6vdyPSs2pSy9fL8QPspDF2AMIMPtmK5coSSjtQ= github.com/go-openapi/spec v0.20.3/go.mod h1:gG4F8wdEDN+YPBMVnzE85Rbhf+Th2DTvA9nFPQ5AYEg= +github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= +github.com/go-openapi/spec v0.20.6/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= +github.com/go-openapi/spec v0.20.7/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= +github.com/go-openapi/spec v0.20.8 h1:ubHmXNY3FCIOinT8RNrrPfGc9t7I1qhPtdOGoG2AxRU= +github.com/go-openapi/spec v0.20.8/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= github.com/go-openapi/strfmt v0.17.2/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= @@ -1488,11 +2573,13 @@ github.com/go-openapi/strfmt v0.19.5/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk github.com/go-openapi/strfmt v0.19.11/go.mod h1:UukAYgTaQfqJuAFlNxxMWNvMYiwiXtLsF2VwmoFtbtc= github.com/go-openapi/strfmt v0.20.0/go.mod h1:UukAYgTaQfqJuAFlNxxMWNvMYiwiXtLsF2VwmoFtbtc= github.com/go-openapi/strfmt v0.20.1/go.mod h1:43urheQI9dNtE5lTZQfuFJvjYJKPrxicATpEfZwHUNk= +github.com/go-openapi/strfmt v0.21.0/go.mod h1:ZRQ409bWMj+SOgXofQAGTIo2Ebu72Gs+WaRADcS5iNg= +github.com/go-openapi/strfmt v0.21.1/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k= +github.com/go-openapi/strfmt v0.21.2/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k= github.com/go-openapi/strfmt v0.21.3/go.mod h1:k+RzNO0Da+k3FrrynSNN8F7n/peCmQQqbbXjtDfvmGg= github.com/go-openapi/strfmt v0.21.7/go.mod h1:adeGTkxE44sPyLk0JV235VQAO/ZXUr8KAzYjclFs3ew= github.com/go-openapi/strfmt v0.23.0 h1:nlUS6BCqcnAk0pyhi9Y+kdDVZdZMHfEKQiS4HaMgO/c= github.com/go-openapi/strfmt v0.23.0/go.mod h1:NrtIpfKtWIygRkKVsxh7XQMDQW5HKQl6S5ik2elW+K4= -github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/swag v0.17.2/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= @@ -1503,6 +2590,7 @@ github.com/go-openapi/swag v0.19.9/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfT github.com/go-openapi/swag v0.19.12/go.mod h1:eFdyEBkTdoAf/9RXBvj4cr1nH7GD8Kzo5HTt47gr72M= github.com/go-openapi/swag v0.19.13/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= @@ -1515,26 +2603,45 @@ github.com/go-openapi/validate v0.19.12/go.mod h1:Rzou8hA/CBw8donlS6WNEUQupNvUZ0 github.com/go-openapi/validate v0.19.15/go.mod h1:tbn/fdOwYHgrhPBzidZfJC2MIVvs9GA7monOmWBbeCI= github.com/go-openapi/validate v0.20.1/go.mod h1:b60iJT+xNNLfaQJUqLI7946tYiFEOuE9E4k54HpKcJ0= github.com/go-openapi/validate v0.20.2/go.mod h1:e7OJoKNgd0twXZwIn0A43tHbvIcr/rZIVCbJBpTUoY0= +github.com/go-openapi/validate v0.21.0/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= +github.com/go-openapi/validate v0.22.0/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= +github.com/go-openapi/validate v0.22.1/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= github.com/go-ozzo/ozzo-validation v3.6.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= +github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= +github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= github.com/go-playground/validator/v10 v10.19.0 h1:ol+5Fu+cSq9JD7SoSqe04GMI92cbn0+wvQ3bZ8b/AU4= github.com/go-playground/validator/v10 v10.19.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= +github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= +github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= +github.com/go-resty/resty/v2 v2.1.1-0.20191201195748-d7b97669fe48/go.mod h1:dZGr0i9PLlaaTD4H/hoZIDjQ+r6xq8mgbRzHZf7f2J8= +github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I= +github.com/go-rod/rod v0.112.9/go.mod h1:l0or0gEnZ7E5C0L/W7iD+yXBnm/OM3avP1ji74k8N9s= +github.com/go-rod/rod v0.114.5/go.mod h1:aiedSEFg5DwG/fnNbUOTPMTTWX3MRj6vIs/a684Mthw= github.com/go-sql-driver/mysql v0.0.0-20160411075031-7ebe0a500653/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= +github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI= +github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= @@ -1543,8 +2650,9 @@ github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr6 github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/go-test/deep v1.0.4/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= -github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM= github.com/go-test/deep v1.0.8/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= +github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg= +github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= github.com/go-toolsmith/astcopy v1.0.2/go.mod h1:4TcEdbElGc9twQEYpVo/aieIXfHhiuLh4aLAck6dO7Y= github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= @@ -1557,30 +2665,42 @@ github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslW github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0= +github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= +github.com/go-zookeeper/zk v1.0.3/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= +github.com/gobuffalo/attrs v1.0.2/go.mod h1:tJ7wJj6XbMNhYwJ8fl2PFDpDcUfsG1spWdUJISvPAZQ= github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= github.com/gobuffalo/envy v1.7.1/go.mod h1:FurDp9+EDPE4aIUS3ZLyD+7/9fpx7YRt/ukY6jIHf0w= +github.com/gobuffalo/envy v1.10.1/go.mod h1:AWx4++KnNOW3JOeEvhSaq+mvgAvnMYOY1XSIin4Mago= +github.com/gobuffalo/fizz v1.14.2/go.mod h1:pZp2NZYEiPRoylV3lKIz0XZOOupizz+SnKq9wb1idxE= github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= github.com/gobuffalo/flect v0.1.5/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= +github.com/gobuffalo/flect v0.2.4/go.mod h1:1ZyCLIbg0YD7sDkzvFdPoOydPtD8y9JQnrOROolUcM8= +github.com/gobuffalo/flect v0.2.5/go.mod h1:1ZyCLIbg0YD7sDkzvFdPoOydPtD8y9JQnrOROolUcM8= +github.com/gobuffalo/flect v0.3.0/go.mod h1:5pf3aGnsvqvCj50AVni7mJJF8ICxGZ8HomberC3pXLE= github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= +github.com/gobuffalo/genny/v2 v2.0.12/go.mod h1:KtMtTcR/U2kHbQxhjCVA16ph6rjBnhw39f6aaxl4hMk= github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= +github.com/gobuffalo/github_flavored_markdown v1.1.1/go.mod h1:yU32Pen+eorS58oxh/bNZx76zUOCJwmvyV5FBrvzOKQ= github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= +github.com/gobuffalo/helpers v0.6.5/go.mod h1:LA4zcc89tkZsfKpJIWsXLibiqTgZQ4EvDszfxdqr9ZA= github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= github.com/gobuffalo/logger v1.0.0/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs= github.com/gobuffalo/logger v1.0.6 h1:nnZNpxYo0zx+Aj9RfMPBm+x9zAU2OayFh/xrAWi34HU= github.com/gobuffalo/logger v1.0.6/go.mod h1:J31TBEHR1QLV2683OXTAItYIg8pv2JMHnF/quuAbMjs= github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/nulls v0.4.1/go.mod h1:pp8e1hWTRJZFpMl4fj/CVbSMlaxjeGKkFq4RuBZi3w8= github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= github.com/gobuffalo/packd v0.3.0/go.mod h1:zC7QkmNkYVGKPw4tHpBQ+ml7W/3tIebgeo1b36chA3Q= @@ -1594,11 +2714,19 @@ github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/V github.com/gobuffalo/packr/v2 v2.5.1/go.mod h1:8f9c96ITobJlPzI44jj+4tHnEKNt0xXWSVlXRN9X1Iw= github.com/gobuffalo/packr/v2 v2.8.3 h1:xE1yzvnO56cUC0sTpKR3DIbxZgB54AftTFMhB2XEWlY= github.com/gobuffalo/packr/v2 v2.8.3/go.mod h1:0SahksCVcx4IMnigTjiFuyldmTrdTctXsOdiU5KwbKc= +github.com/gobuffalo/plush/v4 v4.1.13/go.mod h1:s3hUyj/JlwEiJ039OBJevojq9xT40D1pgekw0o88CVU= +github.com/gobuffalo/pop/v6 v6.0.6/go.mod h1:toTxNJnsSuSlyK6w0yGb4YXSNIHsi2chQYC2CjBF9Ac= github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= +github.com/gobuffalo/tags/v3 v3.1.3/go.mod h1:WAAjKdskZUmdi6EkNjP2SXBwBwRovHsjJsPJbBiPlKc= +github.com/gobuffalo/validate/v3 v3.3.2/go.mod h1:jiEEw+N7KbAP2aInFxGnfitI0g7HjXqcp5hDD6TaQDU= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-yaml v1.9.5/go.mod h1:U/jl18uSupI5rdI2jmuCswEA2htH9eXfferR3KfscvA= +github.com/goccy/kpoward v0.1.0/go.mod h1:m13lkcWSvNXtYC9yrXzguwrt/YTDAGioPusndMdQ+eA= github.com/gocql/gocql v0.0.0-20190402132108-0e1d5de854df/go.mod h1:4Fw1eo5iaEhDUs8XyuhSVCVy52Jq3L+/3GJgYkwc+/0= github.com/gocql/gocql v1.0.0/go.mod h1:3gM2c4D3AnkISwBxGnMMsS8Oy4y2lhbPRsH4xnJrHG8= github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= @@ -1607,12 +2735,15 @@ github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6 github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godror/godror v0.24.2/go.mod h1:wZv/9vPiUib6tkoDl+AZ/QLf5YZgMravZ7jxH2eQWAE= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0= +github.com/gofrs/uuid v4.1.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v4.3.1+incompatible h1:0/KbAdpx3UXAx1kEOWHJeOkpbgRFGHVgv+CFIY7dBJI= +github.com/gofrs/uuid v4.3.1+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= @@ -1629,10 +2760,12 @@ github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A= -github.com/golang-jwt/jwt v3.2.1+incompatible h1:73Z+4BJcrTC+KczS6WvTPvRGOp1WmfEP4Q1lOd9Z/+c= +github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= +github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE= @@ -1642,10 +2775,11 @@ github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EO github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20180924190550-6f2cf27854a4/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -1665,7 +2799,6 @@ github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71 github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -1712,6 +2845,15 @@ github.com/golangplus/testing v1.0.0/go.mod h1:ZDreixUV3YzhoVraIDyOzHrr76p6NUh6k github.com/gomodule/redigo v1.7.0/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k= github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= +github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= +github.com/gonum/diff v0.0.0-20181124234638-500114f11e71/go.mod h1:22dM4PLscQl+Nzf64qNBurVJvfyvZELT0iRW2l/NN70= +github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= +github.com/gonum/integrate v0.0.0-20181209220457-a422b5c0fdf2/go.mod h1:pDgmNM6seYpwvPos3q+zxlXMsbve6mOIPucUnUOrI7Y= +github.com/gonum/internal v0.0.0-20181124074243-f884aa714029/go.mod h1:Pu4dmpkhSyOzRwuXkOgAvijx4o+4YMUJJo9OvPYMkks= +github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9/go.mod h1:XA3DeT6rxh2EAE789SSiSJNqxPaC0aE9J8NTOI0Jo/A= +github.com/gonum/mathext v0.0.0-20181121095525-8a4bf007ea55/go.mod h1:fmo8aiSEWkJeiGXUJf+sPvuDgEFgqIoZSs843ePKrGg= +github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw= +github.com/gonum/stat v0.0.0-20181125101827-41a0da705a5b/go.mod h1:Z4GIJBJO3Wa4gD4vbwQxXXZ+WHmW6E9ixmNrwvs0iZs= github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -1725,12 +2867,18 @@ github.com/google/cel-go v0.18.1 h1:V/lAXKq4C3BYLDy/ARzMtpkEEYfHQpZzVyzy69nEUjs= github.com/google/cel-go v0.18.1/go.mod h1:PVAybmSnWkNMUZR/tEWFUiJ1Np4Hz0MHsZJcgC4zln4= github.com/google/cel-spec v0.6.0/go.mod h1:Nwjgxy5CbjlPrtCWjeDjUyKMl8w41YBYGjsyDdqk0xA= github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= +github.com/google/certificate-transparency-go v1.0.22-0.20181127102053-c25855a82c75/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= +github.com/google/certificate-transparency-go v1.1.6/go.mod h1:0OJjOsOk+wj6aYQgP7FU0ioQ0AJUmnWPFMqTjQeazPQ= +github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/flatbuffers v2.0.0+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.2.1-0.20190312032427-6f77996f0c42/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -1749,25 +2897,38 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-containerregistry v0.0.0-20191010200024-a3d713f9b7f8/go.mod h1:KyKXa9ciM8+lgMXwOVsXi7UxGrsf9mM61Mzs+xKUrKE= github.com/google/go-containerregistry v0.5.1/go.mod h1:Ct15B4yir3PLOP5jsy0GNeYVaIZs/MK/Jz5any1wFW0= +github.com/google/go-containerregistry v0.6.0/go.mod h1:euCCtNbZ6tKqi1E72vwDj2xZcN5ttKpZLfa/wSo5iLw= +github.com/google/go-containerregistry v0.14.0/go.mod h1:aiJ2fp/SXvkWgmYHioXnbMdlgB8eXiiYOY55gfN91Wk= +github.com/google/go-containerregistry v0.15.2/go.mod h1:wWK+LnOv4jXMM23IT/F1wdYftGWGr47Is8CG+pmHK1Q= github.com/google/go-containerregistry v0.17.0 h1:5p+zYs/R4VGHkhyvgWurWrpJ2hW4Vv9fQI+GzdcwXLk= github.com/google/go-containerregistry v0.17.0/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ= +github.com/google/go-containerregistry/pkg/authn/k8schain v0.0.0-20230625233257-b8504803389b/go.mod h1:Ek+8PQrShkA7aHEj3/zSW33wU0V/Bx3zW/gFh7l21xY= +github.com/google/go-containerregistry/pkg/authn/kubernetes v0.0.0-20230516205744-dbecb1de8cfa/go.mod h1:KdL98/Va8Dy1irB6lTxIRIQ7bQj4lbrlvqUzKEQ+ZBU= github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= +github.com/google/go-github/v27 v27.0.6/go.mod h1:/0Gr8pJ55COkmv+S/yPKCczSkUPIM/LnFyubufRNIS0= +github.com/google/go-github/v50 v50.2.0/go.mod h1:VBY8FB6yPIjrtKhozXv4FQupxKLS6H4m6xFZlT43q8Q= +github.com/google/go-licenses v0.0.0-20200602185517-f29a4c695c3d/go.mod h1:g1VOUGKZYIqe8lDq2mL7plhAWXqrEaGUs7eIjthN1sk= +github.com/google/go-licenses v1.6.0/go.mod h1:Z8jgz2isEhdenOqd/00pq7I4y4k1xVVQJv415otjclo= github.com/google/go-metrics-stackdriver v0.2.0/go.mod h1:KLcPyp3dWJAFD+yHisGlJSZktIsTjb50eB72U2YZ9K0= +github.com/google/go-pkcs11 v0.2.0/go.mod h1:6eQoGcuNJpa7jnd5pMGdkSaQpNDYvPlXWMcjXXThLlY= +github.com/google/go-pkcs11 v0.2.1-0.20230907215043-c6f79328ddf9/go.mod h1:6eQoGcuNJpa7jnd5pMGdkSaQpNDYvPlXWMcjXXThLlY= github.com/google/go-querystring v0.0.0-20170111101155-53e6ce116135/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/go-replayers/grpcreplay v0.1.0 h1:eNb1y9rZFmY4ax45uEEECSa8fsxGRU+8Bil52ASAwic= github.com/google/go-replayers/grpcreplay v0.1.0/go.mod h1:8Ig2Idjpr6gifRd6pNVggX6TC1Zw6Jx74AKp7QNH2QE= -github.com/google/go-replayers/httpreplay v0.1.0 h1:AX7FUb4BjrrzNvblr/OlgwrmFiep6soj5K2QSDW7BGk= github.com/google/go-replayers/httpreplay v0.1.0/go.mod h1:YKZViNhiGgqdBlUbI2MwGpq4pXxNmhJLPHQ7cv2b5no= -github.com/google/gofuzz v0.0.0-20150304233714-bbcb9da2d746/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= -github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/go-replayers/httpreplay v1.1.1 h1:H91sIMlt1NZzN7R+/ASswyouLJfW0WLW7fhyUFvDEkY= +github.com/google/go-replayers/httpreplay v1.1.1/go.mod h1:gN9GeLIs7l6NUoVaSSnv2RiqK1NiwAmD0MrKeC9IIks= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/licenseclassifier v0.0.0-20190926221455-842c0d70d702/go.mod h1:qsqn2hxC+vURpyBRygGUuinTO42MFRLcsmQ/P8v94+M= +github.com/google/licenseclassifier v0.0.0-20210722185704-3043a050f148/go.mod h1:rq9F0RSpNKlrefnf6ZYMHKUnEJBCNzf6AcCXMYBeYvE= +github.com/google/mako v0.0.0-20190821191249-122f8dcef9e3/go.mod h1:YzLcVlL+NqWnmUEPuhS1LxDDwGO9WNbVlEXaF4IH35g= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible h1:xmapqc1AyLoB+ddYT6r04bD9lIjlOqGaREovi0SzFaE= github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= @@ -1776,7 +2937,7 @@ github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIG github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/pprof v0.0.0-20180605153948-8b03ce837f34/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20181127221834-b4f47329b966/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190723021845-34ac40c74b70/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -1792,20 +2953,26 @@ github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210506205249-923b5ab0fc1a/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20220318212150-b2ab0324ddda/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= +github.com/google/pprof v0.0.0-20221103000818-d260c55eee4c/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= github.com/google/pprof v0.0.0-20230228050547-1710fef4ab10 h1:CqYfpuYIjnlNxM3msdyPRKabhXZWbKjf3Q8BWROFBso= github.com/google/pprof v0.0.0-20230228050547-1710fef4ab10/go.mod h1:79YE0hCXdHag9sBkw2o+N/YnZtTkXi0UT9Nnixa5eYk= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.0/go.mod h1:OJpEgntRZo8ugHpF9hkoLJbS5dSI20XZeXJ9JVywLlM= +github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= -github.com/google/shlex v0.0.0-20181106134648-c34317bd91bf/go.mod h1:RpwtwJQFrIEPstU94h88MWPXP2ektJZ8cZ0YntAmXiE= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/tink/go v1.6.1/go.mod h1:IGW53kTgag+st5yPhKKwJ6u2l+SSp5/v9XF7spovjlY= github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= +github.com/google/trillian v1.5.2/go.mod h1:H8vOoa2dxd3xCdMzOOwt9kIz/3MSoJhcqLJGG8iRwbg= github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v0.0.0-20170306145142-6a5e28554805/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -1814,13 +2981,21 @@ github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/wire v0.4.0 h1:kXcsA/rIGzJImVqPdhfnr6q0xsS9gU0515q1EPpJ9fE= github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= +github.com/googleapis/cloud-bigtable-clients-test v0.0.0-20221104150409-300c96f7b1f5/go.mod h1:Udm7et5Lt9Xtzd4n07/kKP80IdlR4zVDjtlUZEO2Dd8= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.4/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.5/go.mod h1:RxW0N9901Cko1VOCW3SXCpWP+mlIEkk2tP7jnHy9a3w= github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= @@ -1836,27 +3011,29 @@ github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.9.1/go.mod h1:4FG3gMrVZlyMp5itSYKMU9z/lBE7+SbnUOvzH2HqbEY= +github.com/googleapis/gax-go/v2 v2.10.0/go.mod h1:4UOEnMCrxsSqQ940WnTiD6qJ63le2ev3xfyagutxiPw= +github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= +github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= github.com/googleapis/gax-go/v2 v2.12.1 h1:9F8GV9r9ztXyAi00gsMQHNoF51xPZm8uj1dpYt2ZETM= github.com/googleapis/gax-go/v2 v2.12.1/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc= -github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.0.0-20180520015035-48a0ecefe2e4/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.2.2/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= -github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gookit/color v1.5.1/go.mod h1:wZFzea4X8qN6vHOSP2apMb4/+w/orMznEzYsIHPaqKM= -github.com/gophercloud/gophercloud v0.0.0-20190301152420-fca40860790e/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gophercloud/gophercloud v0.3.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gophercloud/gophercloud v0.6.0/go.mod h1:GICNByuaEBibcjmjvI7QvYJSZEbGkcYwAR7EZK2WMqM= +github.com/gophercloud/gophercloud v0.24.0/go.mod h1:Q8fZtyi5zZxPS/j9aj3sSxtvj41AdQMDwyo1myduD5c= +github.com/gophercloud/gophercloud v1.2.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= github.com/gopherjs/gopherjs v0.0.0-20180628210949-0892b62f0d9f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20191106031601-ce3c9ade29de/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0= github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -1865,6 +3042,7 @@ github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1: github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/csrf v1.6.2/go.mod h1:7tSf8kmjNYr7IWDCYhd3U8Ck34iQ/Yw5CJu7bAkHEGI= +github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= @@ -1899,6 +3077,8 @@ github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Rep github.com/gosuri/uitable v0.0.4 h1:IG2xLKRvErL3uhY6e1BylFzG+aJiwQviDDTfOKeKTpY= github.com/gosuri/uitable v0.0.4/go.mod h1:tKR86bXuXPZazfOTG1FIzvjIdXzd0mo4Vtn16vt0PJo= github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= +github.com/grafana/regexp v0.0.0-20220304095617-2e8d9baf4ac2/go.mod h1:M5qHK+eWfAv8VR/265dIuEpL3fNfeC21tXXp9itM24A= +github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd/go.mod h1:M5qHK+eWfAv8VR/265dIuEpL3fNfeC21tXXp9itM24A= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/gregjones/httpcache v0.0.0-20181110185634-c63ab54fda8f/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= @@ -1912,42 +3092,42 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaD github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= -github.com/grpc-ecosystem/go-grpc-prometheus v0.0.0-20181025070259-68e3a13e4117/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.4.1/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.6.2/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= -github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.4/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.11.3/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.2/go.mod h1:7pdNwVWBBHGiCxa9lAszqCJMbfTISJ7oMftp8+UGV08= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is= github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM= -github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI= github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= github.com/hashicorp/cap v0.0.0-20220502204956-9a9f4a9d6e61/go.mod h1:zb3VvIFA0lM2lbmO69NjowV9dJzJnZS89TaM9blXPJA= github.com/hashicorp/cap v0.2.1-0.20220727210936-60cd1534e220/go.mod h1:zb3VvIFA0lM2lbmO69NjowV9dJzJnZS89TaM9blXPJA= -github.com/hashicorp/consul v1.4.4/go.mod h1:mFrjN1mfidgJfYP1xrJCF+AfRhr6Eaqhb2+sfyn/OOI= github.com/hashicorp/consul-template v0.25.0/go.mod h1:/vUsrJvDuuQHcxEw0zik+YXTS7ZKWZjQeaQhshBmfH0= github.com/hashicorp/consul-template v0.29.5/go.mod h1:SZGBPz/t0JaBwMOqM6q/mG66cBRA8IeDUjOwjO0Pa5M= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/api v1.4.0/go.mod h1:xc8u05kyMa3Wjr9eEAsIAo3dg8+LywT5E/Cl7cNS5nU= -github.com/hashicorp/consul/api v1.8.1/go.mod h1:sDjTOq0yUyv5G4h+BqSea7Fn6BU+XbolEz1952UB+mk= +github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= github.com/hashicorp/consul/api v1.15.2/go.mod h1:v6nvB10borjOuIwNRZYPZiHKrTM/AyrGtd0WVVodKM8= +github.com/hashicorp/consul/api v1.20.0/go.mod h1:nR64eD44KQ59Of/ECwt2vUmIK2DKsDzAwTmwmLl8Wpo= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.4.0/go.mod h1:fY08Y9z5SvJqevyZNy6WWPXiG3KwBPAvlcdx16zZ0fM= -github.com/hashicorp/consul/sdk v0.7.0/go.mod h1:fY08Y9z5SvJqevyZNy6WWPXiG3KwBPAvlcdx16zZ0fM= github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/consul/sdk v0.11.0/go.mod h1:yPkX5Q6CsxTFMjQQDJwzeNmUUF5NUGGbrDsv9wTb8cw= +github.com/hashicorp/consul/sdk v0.13.1/go.mod h1:SW/mM4LbKfqmMvcFu8v+eiQQ7oitXEFeiBe9StxERb0= github.com/hashicorp/cronexpr v1.1.1/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1Efb3g1PWA4= github.com/hashicorp/cronexpr v1.1.2 h1:wG/ZYIKT+RT3QkOdgYc+xsKWVRgnxJ1OJtjjy84fJ9A= github.com/hashicorp/cronexpr v1.1.2/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1Efb3g1PWA4= @@ -2025,9 +3205,9 @@ github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER github.com/hashicorp/go-retryablehttp v0.6.7/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-retryablehttp v0.7.1/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-retryablehttp v0.7.2/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M= github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= -github.com/hashicorp/go-rootcerts v0.0.0-20160503143440-6bb64b370b90/go.mod h1:o4zcYY1e0GEZI6eSEr+43QDYmuGglw1qSO6qdHUHCgg= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= @@ -2058,6 +3238,7 @@ github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0S github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-tfe v0.20.0/go.mod h1:gyXLXbpBVxA2F/6opah8XBsOkZJxHYQmghl0OWi8keI= +github.com/hashicorp/go-uuid v0.0.0-20180228145832-27454136f036/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.2-0.20191001231223-f32f5fe8d6a8/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= @@ -2068,6 +3249,7 @@ github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09 github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.3.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.4.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.5.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= @@ -2075,6 +3257,7 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru v0.6.0/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= @@ -2092,8 +3275,10 @@ github.com/hashicorp/memberlist v0.1.5/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2p github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/memberlist v0.3.1/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= github.com/hashicorp/nomad/api v0.0.0-20191220223628-edc62acd919d/go.mod h1:WKCL+tLVhN1D+APwH3JiTRZoxcdwRk86bWu1LVCUPaE= github.com/hashicorp/nomad/api v0.0.0-20220707195938-75f4c2237b28/go.mod h1:FslB+3eLbZgkuPWffqO1GeNzBFw1SuVqN2PXsMNe0Fg= +github.com/hashicorp/nomad/api v0.0.0-20230308192510-48e7d70fcd4b/go.mod h1:bKUb1ytds5KwUioHdvdq9jmrDqCThv95si0Ub7iNeBg= github.com/hashicorp/nomad/api v0.0.0-20240209231933-e2bfdf0c1034 h1:fjLDHVq+R77B8DPhw4mNQc9loPjgBPwODqp06SHZWfA= github.com/hashicorp/nomad/api v0.0.0-20240209231933-e2bfdf0c1034/go.mod h1:ijDwa6o1uG1jFSq6kERiX2PamKGpZzTmo0XOFNeFZgw= github.com/hashicorp/raft v1.0.1/go.mod h1:DVSAWItjLjTOkVbSpWQ0j0kUADIvDaCtBxIcbNAQLkI= @@ -2112,6 +3297,7 @@ github.com/hashicorp/serf v0.8.5/go.mod h1:UpNcs7fFbpKIyZaUuSW6EPiH+eZC7OuyFD+wc github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= github.com/hashicorp/vault v1.4.2/go.mod h1:500fLOj7p92Ys4X265LizqF78MzmHJUf1jV1zNJt060= github.com/hashicorp/vault v1.12.2/go.mod h1:8vvin/hC1qj3wIiW2TDS5nwgmkXYMf6H1Qje69OI/mw= github.com/hashicorp/vault-plugin-auth-alicloud v0.5.5/go.mod h1:sQ+VNwPQlemgXHXikYH6onfH9gPwDZ1GUVRLz0ZvHx8= @@ -2177,6 +3363,7 @@ github.com/hashicorp/vault/api v1.3.1/go.mod h1:QeJoWxMFt+MsuWcYhmwRLwKEXrjwAFFy github.com/hashicorp/vault/api v1.5.0/go.mod h1:LkMdrZnWNrFaQyYYazWVn7KshilfDidgVBq6YiTq/bM= github.com/hashicorp/vault/api v1.7.2/go.mod h1:xbfA+1AvxFseDzxxdWaL0uO99n1+tndus4GCrtouy0M= github.com/hashicorp/vault/api v1.8.0/go.mod h1:uJrw6D3y9Rv7hhmS17JQC50jbPDAZdjZoTtrCCxxs7E= +github.com/hashicorp/vault/api v1.9.1/go.mod h1:78kktNcQYbBGSrOjQfHjXN32OhhxXnbYl3zxpd2uPUs= github.com/hashicorp/vault/api v1.10.0 h1:/US7sIjWN6Imp4o/Rj1Ce2Nr5bki/AXi9vAW3p2tOJQ= github.com/hashicorp/vault/api v1.10.0/go.mod h1:jo5Y/ET+hNyz+JnKDt8XLAdKs+AM0G5W0Vp1IrFI8N8= github.com/hashicorp/vault/api/auth/approle v0.1.0/go.mod h1:mHOLgh//xDx4dpqXoq6tS8Ob0FoCFWLU2ibJ26Lfmag= @@ -2214,7 +3401,11 @@ github.com/heptio/ark v1.0.0 h1:5nXmMxT4gIYBpX5SR0t5jtGpafFKUoumwbfaLd/f6A0= github.com/heptio/ark v1.0.0/go.mod h1:rAijmSLOn6qs7oJI4Ck6M7/GSBqQ9RDYou4CgykNyQc= github.com/heptio/velero v1.0.0 h1:5xFd2mieexakJiaxo5SgIAGXfgj+o+9QTIDm0vWpWVs= github.com/heptio/velero v1.0.0/go.mod h1:Q8aj4N9pmvDNp2hWmqWJ1Z1ybUjEI+iQOP3C9hx2njQ= +github.com/hetznercloud/hcloud-go v1.33.1/go.mod h1:XX/TQub3ge0yWR2yHWmnDVIrB+MQbda1pHxkUmDlUME= +github.com/hetznercloud/hcloud-go v1.41.0/go.mod h1:NaHg47L6C77mngZhwBG652dTAztYrsZ2/iITJKhQkHA= github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= +github.com/honeycombio/beeline-go v1.10.0/go.mod h1:Zz5WMeQCJzFt2Mvf8t6HC1X8RLskLVR/e8rvcmXB1G8= +github.com/honeycombio/libhoney-go v1.16.0/go.mod h1:izP4fbREuZ3vqC4HlCAmPrcPT9gxyxejRjGtCYpmBn0= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= @@ -2222,10 +3413,14 @@ github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw= github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= github.com/iancoleman/strcase v0.1.3/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= +github.com/ianlancetaylor/demangle v0.0.0-20220319035150-800ac71e25c2/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= +github.com/ianlancetaylor/demangle v0.0.0-20220517205856-0058ec4f073c/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= github.com/imdario/mergo v0.0.0-20171009183408-7fe0c75c13ab/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= @@ -2237,13 +3432,11 @@ github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= -github.com/improbable-eng/thanos v0.5.0/go.mod h1:RXlsWB7YlTbhIod//QDyd5cBZsnEN0jROXZJY/ol4nk= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/influxdata/influxdb v0.0.0-20161215172503-049f9b42e9a5/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= -github.com/influxdata/influxdb v0.0.0-20170331210902-15e594fc09f1/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= github.com/influxdata/influxdb v0.0.0-20190411212539-d24b7ba8c4c4/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= github.com/influxdata/influxdb v1.7.6/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= github.com/influxdata/influxdb v1.7.7/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= @@ -2253,7 +3446,10 @@ github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 h1:W9WBk7wlPfJLvMCdtV4zPulc4uCPrlywQOmbFOhgQNU= github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/influxdata/tdigest v0.0.0-20180711151920-a7d76c6f093a/go.mod h1:9GkyshztGufsdPQWjH+ifgnIr3xNUL5syI70g2dzU1o= github.com/intel/goresctrl v0.2.0/go.mod h1:+CZdzouYFn5EsxgqAQTEzMfwKwuc0fVdMrT9FCCAVRQ= +github.com/intel/goresctrl v0.3.0/go.mod h1:fdz3mD85cmP9sHD8JUlrNWAxvwM86CrbmVXltEKd7zk= +github.com/ionos-cloud/sdk-go/v6 v6.1.4/go.mod h1:Ox3W0iiEz0GHnfY9e5LmAxwklsxguuNFEUSu0gVRTME= github.com/ishidawataru/sctp v0.0.0-20190723014705-7c296d48a2b5/go.mod h1:DM4VvS+hD/kDi1U1QsX2fnZowwBhqD0Dk3bRPKF/Oc8= github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= github.com/j-keck/arping v1.0.2/go.mod h1:aJbELhR92bSk7tp79AWM/ftfc90EfEi2bQJrbBFOsPw= @@ -2268,8 +3464,10 @@ github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsU github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o= github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY= github.com/jackc/pgconn v1.9.1-0.20210724152538-d89c8390a530/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= -github.com/jackc/pgconn v1.11.0 h1:HiHArx4yFbwl91X3qqIHtUFoiIfLNJXCQRsnzkiwwaQ= github.com/jackc/pgconn v1.11.0/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= +github.com/jackc/pgconn v1.12.0/go.mod h1:ZkhRC59Llhrq3oSfrikvwQ5NaxYExr6twkdkMLaKono= +github.com/jackc/pgconn v1.12.1 h1:rsDFzIpRk7xT4B8FufgpCCeyjdNpKyghZeSefViE5W8= +github.com/jackc/pgconn v1.12.1/go.mod h1:ZkhRC59Llhrq3oSfrikvwQ5NaxYExr6twkdkMLaKono= github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= @@ -2285,34 +3483,41 @@ github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvW github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgproto3/v2 v2.2.0 h1:r7JypeP2D3onoQTCxWdTpCtJ4D+qpKr0TxvoyMhZ5ns= github.com/jackc/pgproto3/v2 v2.2.0/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgproto3/v2 v2.3.0 h1:brH0pCGBDkBW07HWlN/oSBXrmo3WB0UvZd1pIuDcL8Y= +github.com/jackc/pgproto3/v2 v2.3.0/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg= github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= github.com/jackc/pgtype v1.8.1-0.20210724151600-32e20a603178/go.mod h1:C516IlIV9NKqfsMCXTdChteoXmwgUceqaLfjg2e3NlM= -github.com/jackc/pgtype v1.10.0 h1:ILnBWrRMSXGczYvmkYD6PsYyVFUNLTnIUJHHDLmqk38= github.com/jackc/pgtype v1.10.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= -github.com/jackc/pgx v3.2.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= +github.com/jackc/pgtype v1.11.0 h1:u4uiGPz/1hryuXzyaBhSk6dnIyyG2683olG2OV+UUgs= +github.com/jackc/pgtype v1.11.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= github.com/jackc/pgx v3.3.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs= -github.com/jackc/pgx/v4 v4.15.0 h1:B7dTkXsdILD3MF987WGGCcg+tvLW6bZJdEcqVFeU//w= github.com/jackc/pgx/v4 v4.15.0/go.mod h1:D/zyOyXiaM1TmVWnOM18p0xdDtdakRBa0RsVGI3U3bw= +github.com/jackc/pgx/v4 v4.16.0/go.mod h1:N0A9sFdWzkw/Jy1lwoiB64F2+ugFZi987zRxcPez/wI= +github.com/jackc/pgx/v4 v4.16.1 h1:JzTglcal01DrghUqt+PmzWsZx/Yh7SC/CTQmSBMTd0Y= +github.com/jackc/pgx/v4 v4.16.1/go.mod h1:SIhx0D5hoADaiXZVyv+3gSm3LCIIINTVO0PficsvWGQ= +github.com/jackc/pgx/v5 v5.2.0/go.mod h1:Ptn7zmohNsWEsdxRawMzk3gaKma2obW+NWTnKa0S4nk= github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.2.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle/v2 v2.1.2/go.mod h1:2lpufsF5mRHO6SuZkm0fNYxM6SWHfvyFj62KwNzgels= github.com/jarcoal/httpmock v0.0.0-20180424175123-9c70cfe4a1da/go.mod h1:ks+b9deReOc7jgqp+e7LuFiCBH6Rm5hL32cLcEAArb4= github.com/jarcoal/httpmock v1.0.7/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jcmturner/aescts v1.0.1/go.mod h1:k9gJoDUf1GH5r2IBtBjwjDCoLELYxOcEhitdP8RL7qQ= github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= github.com/jcmturner/dnsutils v1.0.1/go.mod h1:tqMo38L01jO8AKxT0S9OQVlGZu3dkEt+z5CA+LOhwB0= github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM= +github.com/jcmturner/gofork v0.0.0-20180107083740-2aebee971930/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg= github.com/jcmturner/gokrb5/v8 v8.0.0/go.mod h1:4/sqKY8Yzo/TIQ8MoCyk/EPcjb+czI9czxHcdXuZbFA= @@ -2322,19 +3527,30 @@ github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJk github.com/jeffchao/backoff v0.0.0-20140404060208-9d7fd7aa17f2/go.mod h1:xkfESuHriIekR+4RoV+fu91j/CfnYM29Zi2tMFw5iD4= github.com/jefferai/isbadcipher v0.0.0-20190226160619-51d2077c035f/go.mod h1:3J2qVK16Lq8V+wfiL2lPeDZ7UWMxk5LemerHa1p6N00= github.com/jefferai/jsonx v1.0.0/go.mod h1:OGmqmi2tTeI/PS+qQfBDToLHHJIy/RMp24fPo8vFvoQ= +github.com/jellydator/ttlcache/v3 v3.0.1/go.mod h1:WwTaEmcXQ3MTjOm4bsZoDFiCu/hMvNWLO1w67RXz6h4= +github.com/jellydator/ttlcache/v3 v3.1.1/go.mod h1:hi7MGFdMAwZna5n2tuvh63DvFLzVKySzCVW6+0gA2n4= +github.com/jenkins-x/go-scm v1.14.24/go.mod h1:lKqSATMN9YB1Dbl8s8tzaUf5AFlAd+JRFipu2M6Ut2Y= github.com/jessevdk/go-flags v0.0.0-20180331124232-1c38ed7ad0cc/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/jetstack/cert-manager v1.7.3 h1:GMbRmyEqKf/ve0TQIXIOjbokdm805rj3uWRlifJnd6U= github.com/jetstack/cert-manager v1.7.3/go.mod h1:xj0TPp31HE0Jub5mNOnF3Fp3XvhIsiP+tsPZVOmU/Qs= github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= +github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= +github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= +github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= +github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= +github.com/jhump/protoreflect v1.12.0/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8= github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= github.com/jinzhu/gorm v0.0.0-20170316141641-572d0a0ab1eb/go.mod h1:Vla75njaFJ8clLU1W44h34PjIkijhjHIYnZxMqCdxqo= github.com/jinzhu/inflection v0.0.0-20190603042836-f5c5f50e6090/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= +github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= @@ -2344,16 +3560,23 @@ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9Y github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jmhodges/clock v0.0.0-20160418191101-880ee4c33548/go.mod h1:hGT6jSUVzF6no3QaDSMLGLEHtHSBSefs+MgcDWnmhmo= +github.com/jmhodges/clock v1.2.0/go.mod h1:qKjhA7x7u/lQpPB1XAqX1b1lCI/w3/fNuYpI/ZjLynI= github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= +github.com/jmoiron/sqlx v1.3.4/go.mod h1:2BljVx/86SuTyjE+aPYlHCTNvZrnJXghYGpNiXLBMCQ= github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g= github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ= github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901/go.mod h1:Z86h9688Y0wesXCyonoVr47MasHilkuLMqGhRZ4Hpak= github.com/johannesboyne/gofakes3 v0.0.0-20210819161434-5c8dfcfe5310/go.mod h1:LIAXxPvcUXwOcTIj9LSNSUpE9/eMHalTWxsP/kmWxQI= +github.com/johannesboyne/gofakes3 v0.0.0-20221110173912-32fb85c5aed6/go.mod h1:LIAXxPvcUXwOcTIj9LSNSUpE9/eMHalTWxsP/kmWxQI= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= +github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= +github.com/jonboulle/clockwork v0.3.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= +github.com/josephspurrier/goversioninfo v1.4.0/go.mod h1:JWzv5rKQr+MmW+LvM412ToT/IkYDZjaclF2pKDss8IY= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/josharian/txtarfs v0.0.0-20210218200122-0702f000015a/go.mod h1:izVPOvVRsHiKkeGCT6tYBNWyDVuzj9wAaBb5R9qamfw= @@ -2372,7 +3595,6 @@ github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/ github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jsonnet-bundler/jsonnet-bundler v0.1.0/go.mod h1:YKsSFc9VFhhLITkJS3X2PrRqWG9u2Jq99udTdDjQLfM= github.com/jsonnet-bundler/jsonnet-bundler v0.2.0/go.mod h1:/by7P/OoohkI3q4CgSFqcoFsVY+IaNbzOVDknEsKDeU= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= @@ -2383,6 +3605,7 @@ github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSg github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= +github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/k8snetworkplumbingwg/network-attachment-definition-client v0.0.0-20191119172530-79f836b90111 h1:Lq6HJa0JqSg5ko/mkizFWlpIrY7845g9Dzz9qeD5aXI= @@ -2394,9 +3617,12 @@ github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0Lh github.com/karrick/godirwalk v1.10.12/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= github.com/karrick/godirwalk v1.16.1 h1:DynhcF+bztK8gooS0+NDJFrdNZjJ3gzVzC545UNA9iw= github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kelseyhightower/envconfig v1.3.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8= github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/keybase/go-crypto v0.0.0-20190403132359-d65b6b94177f/go.mod h1:ghbZscTyKdM07+Fw3KSi0hcJm+AlEUWj8QLlPtijN/M= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= @@ -2404,26 +3630,36 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkHAIKE/contextcheck v1.1.3/go.mod h1:PG/cwd6c0705/LM0KTr1acO2gORUxkSVWyLJOFW5qoo= +github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.13.0/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.1/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.7/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.16.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.2.2/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/klauspost/pgzip v1.2.1/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/knative/build v0.1.2/go.mod h1:/sU74ZQkwlYA5FwYDJhYTy61i/Kn+5eWfln2jDbw3Qo= -github.com/knz/strtime v0.0.0-20181018220328-af2256ee352c/go.mod h1:4ZxfWkxwtc7dBeifERVVWRy9F9rTU9p0yCDgeCtlius= +github.com/kolo/xmlrpc v0.0.0-20201022064351-38db28db192b/go.mod h1:pcaDhQK0/NJZEvtCO0qQPPropqV0sJOJ6YW7X+9kRwM= +github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b/go.mod h1:pcaDhQK0/NJZEvtCO0qQPPropqV0sJOJ6YW7X+9kRwM= github.com/konsorten/go-windows-terminal-sequences v0.0.0-20180402223658-b729f2633dfe/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -2455,7 +3691,6 @@ github.com/kubernetes-csi/external-snapshotter/client/v4 v4.2.0/go.mod h1:YBCo4D github.com/kubernetes-csi/external-snapshotter/client/v6 v6.2.0 h1:cMM5AB37e9aRGjErygVT6EuBPB6s5a+l95OPERmSlVM= github.com/kubernetes-csi/external-snapshotter/client/v6 v6.2.0/go.mod h1:VQVLCPGDX5l6V5PezjlDXLa+SpCbWSVU7B16cFWVVeE= github.com/kubernetes-csi/external-snapshotter/v2 v2.0.1/go.mod h1:vUEcwbrEpsQ/rDgaO8WTe1gVIY/4CCj0S4Q+UuOq5wA= -github.com/kubernetes-csi/external-snapshotter/v2 v2.1.1/go.mod h1:dV5oB3U62KBdlf9ADWkMmjGd3USauqQtwIm2OZb5mqI= github.com/kubernetes-sigs/aws-ebs-csi-driver v0.9.0 h1:qkHSINGfFS5O8Qplw/WAdYUkmdQ5OPsC/2LpAuesfGY= github.com/kubernetes-sigs/aws-ebs-csi-driver v0.9.0/go.mod h1:9rv0ManDzr35FnHmuDQv+Vms73LGf6qyXlJhbOjqtZc= github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= @@ -2467,7 +3702,9 @@ github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+ github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g= github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= +github.com/labstack/echo/v4 v4.7.2/go.mod h1:xkCDAdFCIf8jsFQ5NnbK7oqaF/yU1A1X20Ltm0OvSks= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= +github.com/labstack/gommon v0.3.1/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq6+3iTQz8KNCLtVX6idSoTLdUw= github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o= github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhRWSsG5rVo6hYhAB/ADZrk= @@ -2476,10 +3713,22 @@ github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdB github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= github.com/leanovate/gopter v0.2.4/go.mod h1:gNcbPWNEWRe4lm+bycKqxUYoH5uoVje5SkOJ3uoLer8= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= +github.com/lestrrat-go/backoff/v2 v2.0.8/go.mod h1:rHP/q/r9aT27n24JQLa7JhSQZCKBBOiM/uP402WwN8Y= +github.com/lestrrat-go/blackmagic v1.0.0/go.mod h1:TNgH//0vYSs8VXDCfkZLgIrVTTXQELZffUV0tz3MtdQ= +github.com/lestrrat-go/httpcc v1.0.1/go.mod h1:qiltp3Mt56+55GPVCbTdM9MlqhvzyuL6W/NMDA8vA5E= +github.com/lestrrat-go/iter v1.0.1/go.mod h1:zIdgO1mRKhn8l9vrZJZz9TUMMFbQbLeTsbqPDrJ/OJc= +github.com/lestrrat-go/jwx v1.2.25/go.mod h1:zoNuZymNl5lgdcu6P7K6ie2QRll5HVfF4xwxBBK1NxY= +github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= +github.com/letsencrypt/borp v0.0.0-20230707160741-6cc6ce580243/go.mod h1:podMDq5wDu2ZO6JMKYQcjD3QdqOfNLWtP2RDSy8CHUU= +github.com/letsencrypt/boulder v0.0.0-20221109233200-85aa52084eaf/go.mod h1:aGkAgvWY/IUcVFfuly53REpfv5edu25oij+qHRFaraA= +github.com/letsencrypt/boulder v0.0.0-20230907030200-6d76a0f91e1e/go.mod h1:EAuqr9VFWxBi9nD5jc/EA2MT1RFty9288TF6zdtYoCU= +github.com/letsencrypt/challtestsrv v1.2.1/go.mod h1:Ur4e4FvELUXLGhkMztHOsPIsvGxD/kzSJninOrkM+zc= github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= +github.com/letsencrypt/validator/v10 v10.0.0-20230215210743-a0c7dfc17158/go.mod h1:ZFNBS3H6OEsprCRjscty6GCBe5ZiX44x6qY4s7+bDX0= github.com/lib/pq v0.0.0-20180327071824-d34b9ff171c2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= @@ -2490,11 +3739,11 @@ github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libopenstorage/autopilot-api v0.6.1-0.20210301232050-ca2633c6e114 h1:R40Co9ha2lE25x+/hycaf6dlhZLe+qxu1JprnR+5mdA= github.com/libopenstorage/autopilot-api v0.6.1-0.20210301232050-ca2633c6e114/go.mod h1:2RSNxzYtg9O7fCMZSuc9imAE4R8zhCi7azNbFkYLAuk= -github.com/libopenstorage/cloudops v0.0.0-20190815012442-6e0d676b6c3e/go.mod h1:quSDXGC3Fhc+pBwMRIi1Gk+kaSfBDZo5rRsftapTzGE= github.com/libopenstorage/cloudops v0.0.0-20200604165016-9cc0977d745e/go.mod h1:5Qie78eVLLXqLkLCq1+0HyJzjpdRCHyeg9LWlU0WPfU= github.com/libopenstorage/cloudops v0.0.0-20221107233229-3fa4664e96b1/go.mod h1:FkADW9gyVQyD6igV0keQ3nW9k+V3W88yhJ4faZP97wI= github.com/libopenstorage/cloudops v0.0.0-20230220114907-3e63dce1b413 h1:OOK0nxRDxGG4CkeiC0MCiFuKMsxiIGLS1WsLB4bZcLs= @@ -2505,26 +3754,21 @@ github.com/libopenstorage/gossip v0.0.0-20190507031959-c26073a01952/go.mod h1:Tj github.com/libopenstorage/gossip v0.0.0-20200808224301-d5287c7c8b24/go.mod h1:TjXt2Iz2bTkpfc4Q6xN0ttiNipTVwEEYoZSMZHlfPek= github.com/libopenstorage/gossip v0.0.0-20220309192431-44c895e0923e h1:4l9N2Sw8VGGUqe50yC2BnTFMRJuHJGpIGZcCUZ2S6gg= github.com/libopenstorage/gossip v0.0.0-20220309192431-44c895e0923e/go.mod h1:TjXt2Iz2bTkpfc4Q6xN0ttiNipTVwEEYoZSMZHlfPek= -github.com/libopenstorage/openstorage v1.0.1-0.20240221210452-7757fdc2b8ff h1:9uognDSvafpcrNICT8I5OJRt9TlLeV61cF6nIl9KwBQ= -github.com/libopenstorage/openstorage v1.0.1-0.20240221210452-7757fdc2b8ff/go.mod h1:8E8ueY3NJV+tcOr1BQBvyNU9FRtDfcRGB7+trr07+rA= +github.com/libopenstorage/openstorage v1.0.1-0.20240416193513-1e07b4359307 h1:baUZtqU5XFF26Weeb06vdZYrGlDpcqH1A7VmDqZHHTc= +github.com/libopenstorage/openstorage v1.0.1-0.20240416193513-1e07b4359307/go.mod h1:8E8ueY3NJV+tcOr1BQBvyNU9FRtDfcRGB7+trr07+rA= github.com/libopenstorage/openstorage-sdk-clients v0.109.0/go.mod h1:vo0c/nLG2HIyQva4Avwx61U1kWcw4HGQh3sjzV2DEEs= -github.com/libopenstorage/operator v0.0.0-20191009190641-8642de5d0812/go.mod h1:Qh+VXOB6hj60VmlgsmY+R1w+dFuHK246UueM4SAqZG0= -github.com/libopenstorage/operator v0.0.0-20200725001727-48d03e197117/go.mod h1:Qh+VXOB6hj60VmlgsmY+R1w+dFuHK246UueM4SAqZG0= -github.com/libopenstorage/operator v0.0.0-20210303221358-0bb211a9908c/go.mod h1:+83bY859mKGwHmWW8TPNYGrXAgt/hXOX2Ia7EytK17I= -github.com/libopenstorage/operator v0.0.0-20221128182303-7bedcffb60e6/go.mod h1:j+xZSt4DMXB8MDDd72MwpwGlWURIUaKOtoldq+DPHMk= -github.com/libopenstorage/operator v0.0.0-20230112002659-7e73437e61d4/go.mod h1:/sGycOMcavuKLWm3Vd907luRXZA/mcqFs1AdEbbT5k4= github.com/libopenstorage/operator v0.0.0-20230202214252-140e2e1fd86a/go.mod h1:Q66wsNUAekPawgGg9yh0Bs7eXWPa4/+c2JTefdiDciM= -github.com/libopenstorage/operator v0.0.0-20240417190906-af0509c9db88 h1:18WXQ6DEZp11xHNOG+ouxCvQpssbwrJR2BFfoTbBuWM= -github.com/libopenstorage/operator v0.0.0-20240417190906-af0509c9db88/go.mod h1:KsLOFm0UNYBSWB4YMy96763QKTM56t8WKQw3A4Xm7Nw= +github.com/libopenstorage/operator v0.0.0-20230323034810-8853b151f594/go.mod h1:0S4k1ouTScuVS3rxPukfEFvc5bMasmI1wpAAM0NejWQ= +github.com/libopenstorage/operator v0.0.0-20230801044606-e27dec4914d4/go.mod h1:Lc0sagIlgkrXHn+vwR9JfZkAkSsdedtbrRx42qF0vMc= +github.com/libopenstorage/operator v0.0.0-20240523172951-e085c3099bd7 h1:Qr7ifMS5HYAHP9KnWy3KaeRYrDBBnTXlTg16vkBse2E= +github.com/libopenstorage/operator v0.0.0-20240523172951-e085c3099bd7/go.mod h1:xrP2i+9TzxEl5tWRMsxfA5uEVe8AI4BjSisXhhSPLOQ= github.com/libopenstorage/secrets v0.0.0-20190403224602-c282e8dc17bf/go.mod h1:4QOUUeRMHtTniKPj+biL3wlusahU/7OnMsGKc4FN/EY= github.com/libopenstorage/secrets v0.0.0-20200207034622-cdb443738c67/go.mod h1:4QOUUeRMHtTniKPj+biL3wlusahU/7OnMsGKc4FN/EY= github.com/libopenstorage/secrets v0.0.0-20210908194121-a1d19aa9713a/go.mod h1:gE8rSd6lwLNXNbiW3DrRZjFMs+y4fDHy/6uiOO9cdzY= github.com/libopenstorage/secrets v0.0.0-20220413195519-57d1c446c5e9/go.mod h1:gE8rSd6lwLNXNbiW3DrRZjFMs+y4fDHy/6uiOO9cdzY= github.com/libopenstorage/secrets v0.0.0-20230207140542-56a42ef89592 h1:QSuOGFg29wTJPYew6QVDCJ/QeoskbkPGeWYwh9BYL3c= github.com/libopenstorage/secrets v0.0.0-20230207140542-56a42ef89592/go.mod h1:2+ZLEld0q0MqgpZwYyhl95YsNCmfKOBzvFyD26bxsdU= -github.com/libopenstorage/stork v0.0.0-20191009210244-6a3497c42b2a/go.mod h1:qBSzYTJVHlOMg5RINNiHD1kBzlasnrc2uKLPZLgu1Qs= github.com/libopenstorage/stork v1.3.0-beta1.0.20200630005842-9255e7a98775/go.mod h1:qBSzYTJVHlOMg5RINNiHD1kBzlasnrc2uKLPZLgu1Qs= -github.com/libopenstorage/stork v1.3.0-beta1.0.20210503014041-fb328e234db7/go.mod h1:Z38BxJx7Al1BVEX0RLa9BtqEzU3QQjwDu9FEspIuXck= github.com/libopenstorage/stork v1.4.1-0.20210903185636-5a1f8a4142bf/go.mod h1:Q2Rvi8M1Zpyd5BPE3HbmHkaKblzm0HxvWPJFW8Y4T7Y= github.com/libopenstorage/stork v1.4.1-0.20210923201245-97089f8df635/go.mod h1:MbN4lDn47O/Ryr81dWS1wb83K9FqeKMga+waSIc4J5I= github.com/libopenstorage/stork v1.4.1-0.20210925152742-aaa75e7c457f/go.mod h1:V9fTbUFPOO/Ap3rfwz4bQJTB8L8rya1YiIbAfFhSPLA= @@ -2535,22 +3779,27 @@ github.com/libopenstorage/stork v1.4.1-0.20211103064004-088d8fdeaa37/go.mod h1:I github.com/libopenstorage/stork v1.4.1-0.20211113171730-e02f28e240e9/go.mod h1:NTt7xK9DqWpXLEBJI4WEz/XTUG3EkW0zcqyOMO5Xp2w= github.com/libopenstorage/stork v1.4.1-0.20220323180113-0ea773109d05/go.mod h1:h+tscSChqPpry+lUHJYFqC+Gk0JY/qi6eCkUJYBo0wQ= github.com/libopenstorage/stork v1.4.1-0.20220414104250-3c18fd21ed95/go.mod h1:yE94X0xBFSBQ9LvvJ/zppc4+XeiCAXtsHfYHm15dlcA= -github.com/libopenstorage/stork v1.4.1-0.20220902043617-635e642468d0/go.mod h1:oQ0lteROzRCxHMvESCSyOiY/9oqgO3Qrvfs5LI/jVCA= -github.com/libopenstorage/stork v1.4.1-0.20220902111346-9dbf76d2db2c/go.mod h1:KNG/pkhMCdKXXFr0nKtYybWCx2ggLCoi+I7Onylwl64= github.com/libopenstorage/stork v1.4.1-0.20221103082056-65abc8cc4e80/go.mod h1:yX+IlCrUsZekC6zxL6zHE7sBPKIudubHB3EcImzeRbI= -github.com/libopenstorage/stork v1.4.1-0.20230206103328-883ffb861be8/go.mod h1:J6q5Z1db0jCMRVXCC/ptFF8HOcjicxTxpz45O2iPuIE= -github.com/libopenstorage/stork v1.4.1-0.20230207013129-a31284f0e973/go.mod h1:/EFTTQyBxNzul96urrYPdjNEYeDzVgZzK88gRQjoVmk= -github.com/libopenstorage/stork v1.4.1-0.20230207125320-e6ce79c590f6/go.mod h1:aSWCXcTPhmCDj9XxNL0+J6JQ7TmxXp4QTUVY9Wq8ejs= -github.com/libopenstorage/stork v1.4.1-0.20240417024347-acff28bbdb16 h1:XMPYSevauGNa3pnsZlrWR2wYbCPFS8DiQkU84bhN6Cg= -github.com/libopenstorage/stork v1.4.1-0.20240417024347-acff28bbdb16/go.mod h1:l4qH7zGZe0NXWSeIFIL1Y+6dQg2OIAfbQQq98TwlPZ0= +github.com/libopenstorage/stork v1.4.1-0.20230208122050-965b4be91e93/go.mod h1:T19yWS9FaiyM38aagBJ6rwHDB5EJB8TS8NdcP99CRwQ= +github.com/libopenstorage/stork v1.4.1-0.20230220135555-e7677b4945dd/go.mod h1:Yk122oBhH8yC5Pm7vmda5a3GI3wCxQpuonScZG4Ewew= +github.com/libopenstorage/stork v1.4.1-0.20230310131740-6799188e7fac/go.mod h1:sE83yimgTrJAJCKKF1Y9k+6T2d6uflx4FXdi6mVVUJg= +github.com/libopenstorage/stork v1.4.1-0.20230406052032-4da60c7d3a83/go.mod h1:7Cn5ZeJ82WoJSNDMnX1t//Amzd5M/8h7Icx7Pf3IhW0= +github.com/libopenstorage/stork v1.4.1-0.20230502135851-9cacb19e1df5/go.mod h1:RK6MPw0080h2ADDXDnJzQ+cKn1SEClTyoAW7sUAhi98= +github.com/libopenstorage/stork v1.4.1-0.20230519043154-cbc10dffaf19/go.mod h1:Xm4DHoViynFXMQKBXGj3IkA77LY2RBFkNtv6vbo3wNw= +github.com/libopenstorage/stork v1.4.1-0.20230601053837-5dd68f026569/go.mod h1:+mKPMCPNhS/XOF2RPcNFijkr67CCCWp0o8OXVG6xxAk= +github.com/libopenstorage/stork v1.4.1-0.20230610103146-72cf75320066/go.mod h1:Yst+fnOYjWk6SA5pXZBKm19wtiinjxQ/vgYTXI3k80Q= +github.com/libopenstorage/stork v1.4.1-0.20240424105137-8c6fa2a3f934 h1:MT5GvIDKwjrWmvwX29KjpHWpcX4eYFwrJNrGFS81wwU= +github.com/libopenstorage/stork v1.4.1-0.20240424105137-8c6fa2a3f934/go.mod h1:l4qH7zGZe0NXWSeIFIL1Y+6dQg2OIAfbQQq98TwlPZ0= github.com/libopenstorage/systemutils v0.0.0-20160208220149-44ac83be3ce1/go.mod h1:xwNGC7xiz/BQ/wbMkvHujL8Gjgseg+x41xMek7sKRRQ= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.15.6/go.mod h1:6AMpwZpsyCFwSovxzM78e+AsYxE8sGwiM6C3TytaWeI= github.com/lightstep/lightstep-tracer-go v0.18.0/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/linkedin/goavro v2.1.0+incompatible/go.mod h1:bBCwI2eGYpUI/4820s67MElg9tdeLbINjLjiM2xZFYM= github.com/linode/linodego v0.7.1/go.mod h1:ga11n3ivecUrPCHN0rANxKmfWBJVkOXfLMZinAbj2sY= +github.com/linode/linodego v1.4.0/go.mod h1:PVsRxSlOiJyvG4/scTszpmZDTdgS+to3X6eS8pRrWI8= +github.com/linode/linodego v1.14.1/go.mod h1:NJlzvlNtdMRRkXb0oN6UWzUkj6t+IBsyveHgZ5Ppjyk= github.com/linuxkit/virtsock v0.0.0-20201010232012-f8cee7dfc7a3/go.mod h1:3r6x7q95whyfWQpmGZTu3gk3v2YkMi05HEzl7Tf7YEo= github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= github.com/lithammer/shortuuid v3.0.0+incompatible/go.mod h1:FR74pbAuElzOUuenUHTK2Tciko1/vKuIKS9dSkDrA4w= @@ -2558,14 +3807,19 @@ github.com/lovoo/gcloud-opentracing v0.3.0/go.mod h1:ZFqk2y38kMDDikZPAK7ynTTGuyt github.com/lpabon/godbc v0.1.1/go.mod h1:Jo9QV0cf3U6jZABgiJ2skINAXb9j8m51r07g4KI92ZA= github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= +github.com/luna-duclos/instrumentedsql v1.1.3/go.mod h1:9J1njvFds+zN7y85EDhN9XNQLANWwZt2ULeIC8yMNYs= github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= +github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star/v2 v2.0.1/go.mod h1:RcCdONR2ScXaYnQC5tUzxzlpA3WVYF7/opLeUgcQs/o= +github.com/lyft/protoc-gen-star/v2 v2.0.3/go.mod h1:amey7yeodaJhXSbf/TlLvWiqQfLOSpEk//mLlc+axEk= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magefile/mage v1.14.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -2589,6 +3843,7 @@ github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11/go.mod h1:A github.com/maruel/panicparse v0.0.0-20171209025017-c0182c169410/go.mod h1:nty42YY5QByNC5MM7q/nj938VbgPU7avs45z6NClpxI= github.com/maruel/ut v1.0.0/go.mod h1:I68ffiAt5qre9obEVTy7S2/fj2dJku2NYLvzPuY0gqE= github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/matryer/moq v0.0.0-20200607124540-4638a53893e6/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= @@ -2601,6 +3856,7 @@ github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= @@ -2621,6 +3877,7 @@ github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOA github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-oci8 v0.1.1/go.mod h1:wjDx6Xm9q7dFtHJvIlrI99JytznLw5wQ4R+9mNXJwGI= @@ -2640,8 +3897,12 @@ github.com/mattn/go-sqlite3 v0.0.0-20160514122348-38ee283dabf1/go.mod h1:FPy6Kqz github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/mattn/go-sqlite3 v1.14.15 h1:vfoHhTN1af61xCRSWzFIWzx2YskyMTwHLrExkBOjvxI= +github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM= +github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/mattn/go-zglob v0.0.1/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= github.com/matttproud/golang_protobuf_extensions v1.0.0/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= @@ -2658,14 +3919,20 @@ github.com/mholt/archiver v3.1.1+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1 github.com/mholt/archiver/v3 v3.5.1/go.mod h1:e3dqJ7H78uzsRSEACH1joayhuSyhnonssnDhppzS1L4= github.com/michaelklishin/rabbit-hole v0.0.0-20191008194146-93d9988f0cd5/go.mod h1:+pmbihVqjC3GPdfWv1V2TnRSuVvwrWLKfEP/MZVB/Wc= github.com/michaelklishin/rabbit-hole/v2 v2.12.0/go.mod h1:AN/3zyz7d++OHf+4WUo/LR0+Q5nlPHMaXasIsG/mPY0= +github.com/microcosm-cc/bluemonday v1.0.16/go.mod h1:Z0r70sCuXHig8YpBzCc5eGHAap2K7e/u082ZUpDRRqM= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.8/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.15/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.17/go.mod h1:WgzbA6oji13JREwiNsRDNfl7jYdPnmz+VEuLrA+/48M= github.com/miekg/dns v1.1.22/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.25/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.29/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= +github.com/miekg/dns v1.1.48/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= +github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= +github.com/miekg/dns v1.1.51/go.mod h1:2Z9d3CP1LQWihRZUf29mQ19yDThaI4DAYzte2CaQW5c= github.com/miekg/dns v1.1.55 h1:GoQ4hpsj0nFLYe+bWiCToyrBEJXkQfOOIvFGFy0lEgo= github.com/miekg/dns v1.1.55/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY= github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= @@ -2673,11 +3940,15 @@ github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WT github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/mikesmitty/edkey v0.0.0-20170222072505-3356ea4e686a/go.mod h1:v8eSC2SMp9/7FTKUncp7fH9IwPfw+ysMObcEz5FWheQ= github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989/go.mod h1:2eu9pRWp8mo84xCg6KswZ+USQHjwgRhNp06sozOdsTY= -github.com/minio/cli v1.20.0/go.mod h1:bYxnK0uS629N3Bq+AOZZ+6lwF77Sodk4+UL9vNuXhOY= -github.com/minio/minio-go/v6 v6.0.27-0.20190529152532-de69c0e465ed/go.mod h1:vaNT59cWULS37E+E9zkuN/BVnKHyXtVGS+b04Boc66Y= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= +github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/minio/minio-go/v6 v6.0.49/go.mod h1:qD0lajrGW49lKZLtXKtCB4X/qkMf0a5tBvN2PaZg7Gg= github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= +github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= +github.com/mistifyio/go-zfs/v3 v3.0.1/go.mod h1:CzVgeB0RvF2EGzQnytKVvVSDwmKJXxkOTUGbNrTja/k= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/cli v1.1.2/go.mod h1:6iaV0fGdElS6dPBx0EApTxHrcWvmJphyh2n8YBLPPZ4= @@ -2685,7 +3956,6 @@ github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0 github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= -github.com/mitchellh/go-homedir v0.0.0-20180523094522-3864e76763d9/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= @@ -2722,9 +3992,12 @@ github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mmcloughlin/avo v0.5.0/go.mod h1:ChHFdoV7ql95Wi7vuq2YT1bwCJqiWdZrQ1im3VujLYM= +github.com/mndrix/tap-go v0.0.0-20171203230836-629fa407e90b/go.mod h1:pzzDgJWZ34fGzaAZGFW22KVZDfyrYW+QABMrWnJBnSs= github.com/moby/ipvs v1.0.1/go.mod h1:2pngiyseZbIKXNv7hsKj3O9UEz30c53MT9005gt2hxQ= github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= +github.com/moby/patternmatcher v0.5.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/moby/sys/mount v0.2.0/go.mod h1:aAivFE2LB3W4bACsUXChRHQ0qKWsetY4Y9V7sxOougM= @@ -2735,19 +4008,21 @@ github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdx github.com/moby/sys/mountinfo v0.6.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78= github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI= +github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo= github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg= +github.com/moby/sys/signal v0.7.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg= github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs= github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A= github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= +github.com/moby/term v0.0.0-20221128092401-c43b287e0e0f/go.mod h1:15ce4BGCFxt7I5NQKT+HV0yEDxmf6fSysfEDiVo3zFM= github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= @@ -2761,8 +4036,8 @@ github.com/mongodb/go-client-mongodb-atlas v0.1.2/go.mod h1:LS8O0YLkA+sbtOb3fZLF github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= -github.com/montanaflynn/stats v0.0.0-20180911141734-db72e6cae808 h1:pmpDGKLw4n82EtrNiLqB+xSz/JQwFOaZuMALYUHwX5s= -github.com/montanaflynn/stats v0.0.0-20180911141734-db72e6cae808/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/montanaflynn/stats v0.7.0 h1:r3y12KyNxj/Sb/iOE46ws+3mS1+MZca1wlHQFPsY/JU= +github.com/montanaflynn/stats v0.7.0/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= @@ -2770,10 +4045,11 @@ github.com/moul/http2curl v1.0.0 h1:dRMWoAtb+ePxMlLkrCbAqh4TlPHXvoGUSQ323/9Zahs= github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= -github.com/mozillazg/go-cos v0.12.0/go.mod h1:Zp6DvvXn0RUOXGJ2chmWt2bLEqRAnJnS3DnAZsJsoaE= github.com/mozillazg/go-cos v0.13.0/go.mod h1:Zp6DvvXn0RUOXGJ2chmWt2bLEqRAnJnS3DnAZsJsoaE= github.com/mozillazg/go-httpheader v0.2.1/go.mod h1:jJ8xECTlalr6ValeXYdOF8fFUISeBAdw6E61aqQma60= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474/go.mod h1:OQA4XLvDbMgS8P0CevmM4m9Q3Jq4phKUzcocxuGJ5m8= +github.com/mreiferson/go-httpclient v0.0.0-20201222173833-5e475fde3a4d/go.mod h1:OQA4XLvDbMgS8P0CevmM4m9Q3Jq4phKUzcocxuGJ5m8= github.com/mrunalp/fileutils v0.0.0-20200520151820-abd8a0e76976/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= @@ -2790,14 +4066,23 @@ github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4N github.com/natefinch/atomic v0.0.0-20150920032501-a62ce929ffcc/go.mod h1:1rLVY/DWf3U6vSZgH16S7pymfrhK2lcUlXjgGglw/lY= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/jwt v1.2.2/go.mod h1:/xX356yQA6LuXI9xWW7mZNpxgF2mBmGecH+Fj34sP5Q= +github.com/nats-io/jwt/v2 v2.0.3/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SEcNiGlY= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats-server/v2 v2.5.0/go.mod h1:Kj86UtrXAL6LwYRA6H4RqzkHhK0Vcv2ZnKD5WbQ1t3g= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nats.go v1.12.1/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= +github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms= github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= +github.com/ncw/swift v1.0.52/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= +github.com/nelsam/hel/v2 v2.3.2/go.mod h1:1ZTGfU2PFTOd5mx22i5O0Lc2GY933lQ2wb/ggy+rL3w= +github.com/nelsam/hel/v2 v2.3.3/go.mod h1:1ZTGfU2PFTOd5mx22i5O0Lc2GY933lQ2wb/ggy+rL3w= github.com/networkplumbing/go-nft v0.2.0/go.mod h1:HnnM+tYvlGAsMU7yoYwXEVLLiDW9gdMmb5HoGcwpuQs= github.com/nicolai86/scaleway-sdk v1.10.2-0.20180628010248-798f60e20bb2/go.mod h1:TLb2Sg7HQcgGdloNxkrmtgDNR9uVYF3lfdFIN4Ro6Sk= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= @@ -2811,7 +4096,6 @@ github.com/nwaples/rardecode v1.1.2/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWk github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oklog/oklog v0.0.0-20170918173356-f857583a70c3/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= @@ -2827,7 +4111,6 @@ github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2f github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.2.1-0.20160409220416-2c2e9bb47b4e/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -2838,7 +4121,6 @@ github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+ github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= -github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg= github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= @@ -2853,6 +4135,7 @@ github.com/onsi/ginkgo/v2 v2.3.0/go.mod h1:Eew0uilEqZmIEZr8JrvYlvOM7Rr6xzTmMV8Ay github.com/onsi/ginkgo/v2 v2.4.0/go.mod h1:iHkDK1fKGcBoEHT5W7YBq4RFWaQulw+caOMkAt4OrFo= github.com/onsi/ginkgo/v2 v2.5.0/go.mod h1:Luc4sArBICYCS8THh8v3i3i5CuSZO+RaQRaJoeNwomw= github.com/onsi/ginkgo/v2 v2.6.0/go.mod h1:63DOGlLAH8+REH8jUGdL3YpCpu7JODesutUjdENfUAc= +github.com/onsi/ginkgo/v2 v2.6.1/go.mod h1:yjiuMwPokqY1XauOgju45q3sJt6VzQ/Fict1LFVcsAo= github.com/onsi/ginkgo/v2 v2.7.0/go.mod h1:yjiuMwPokqY1XauOgju45q3sJt6VzQ/Fict1LFVcsAo= github.com/onsi/ginkgo/v2 v2.8.1/go.mod h1:N1/NbDngAFcSLdyZ+/aYTYGSlq9qMCS/cNKGJjy+csc= github.com/onsi/ginkgo/v2 v2.9.0/go.mod h1:4xkjoL/tZv4SMWeww56BU5kAt19mVB47gTWxmrTcxyk= @@ -2865,7 +4148,6 @@ github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xl github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY= github.com/onsi/ginkgo/v2 v2.15.0/go.mod h1:HlxMHtYF57y6Dpf+mc5529KKmSq9h2FpCF+/ZkwUxKM= github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.2.0/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= @@ -2874,7 +4156,6 @@ github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48= github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= @@ -2889,6 +4170,7 @@ github.com/onsi/gomega v1.21.1/go.mod h1:iYAIXgPSaDHak0LCMA+AWBpIKBr8WZicMxnE8lu github.com/onsi/gomega v1.22.1/go.mod h1:x6n7VNe4hw0vkyYUM4mjIXx3JbLiPaBPNgB7PRQ1tuM= github.com/onsi/gomega v1.24.0/go.mod h1:Z/NWtiqwBrwUt4/2loMmHL63EDLnYHmVbuBpDr2vQAg= github.com/onsi/gomega v1.24.1/go.mod h1:3AOiACssS3/MajrniINInwbfOOtfZvplPzuRSmvt1jM= +github.com/onsi/gomega v1.24.2/go.mod h1:gs3J10IS7Z7r7eXRoNJIrNqU4ToQukCJhFtKrWgHWnk= github.com/onsi/gomega v1.26.0/go.mod h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdMPGhM= github.com/onsi/gomega v1.27.1/go.mod h1:aHX5xOykVYzWOV4WqQy0sy8BQptgukenXpCXfadcIAw= github.com/onsi/gomega v1.27.3/go.mod h1:5vG284IBtfDAmDyrK+eGyZmUgUlmi+Wngqo557cZ6Gw= @@ -2901,6 +4183,7 @@ github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8P github.com/onsi/gomega v1.31.1 h1:KYppCUK+bUgAZwHOu7EXVBKyQA6ILvOESHkn/tgoqvo= github.com/onsi/gomega v1.31.1/go.mod h1:y40C95dwAD1Nz36SsEnxvfFe8FFfNxzI5eJ0EYGyAy0= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/open-policy-agent/opa v0.42.2/go.mod h1:MrmoTi/BsKWT58kXlVayBb+rYVeaMwuBm3nYAN3923s= github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= @@ -2912,6 +4195,9 @@ github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zM github.com/opencontainers/image-spec v1.0.2-0.20211117181255-693428a734f5/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= +github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= +github.com/opencontainers/image-spec v1.1.0-rc3/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI= github.com/opencontainers/image-spec v1.1.0-rc5/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= @@ -2925,6 +4211,7 @@ github.com/opencontainers/runc v1.1.0/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6i github.com/opencontainers/runc v1.1.2/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opencontainers/runc v1.1.4/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= +github.com/opencontainers/runc v1.1.5/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opencontainers/runc v1.1.6 h1:XbhB8IfG/EsnhNvZtNdLB0GBw92GYEFvKlhaJk9jUgA= github.com/opencontainers/runc v1.1.6/go.mod h1:CbUumNnWCuTGFukNXahoo/RFBZvDAgRh/smNYNOhA50= github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= @@ -2934,38 +4221,46 @@ github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/ github.com/opencontainers/runtime-spec v1.0.3-0.20200728170252-4d89ac9fbff6/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20220825212826-86290f6a00fb/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.1.0-rc.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= +github.com/opencontainers/runtime-tools v0.9.0/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= +github.com/opencontainers/runtime-tools v0.9.1-0.20221107090550-2e043c6bd626/go.mod h1:BRHJJd0E+cx42OybVYSgUvZmU0B8P9gZuRXlZUP7TKI= github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= +github.com/opencontainers/selinux v1.9.1/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/opencontainers/selinux v1.10.1/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= +github.com/opencontainers/selinux v1.11.0/go.mod h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec= github.com/openlyinc/pointy v1.1.2/go.mod h1:w2Sytx+0FVuMKn37xpXIAyBNhFNBIJGR/v2m7ik1WtM= -github.com/openshift/api v0.0.0-20190322043348-8741ff068a47/go.mod h1:dh9o4Fs58gpFXGSYfnVxGR9PnV53I8TW84pQaJDdGiY= github.com/openshift/api v0.0.0-20210105115604-44119421ec6b/go.mod h1:aqU5Cq+kqKKPbDMqxo9FojgDeSpNJI7iuskjXjtojDg= +github.com/openshift/api v0.0.0-20211217221424-8779abfbd571/go.mod h1:F/eU6jgr6Q2VhMu1mSpMmygxAELd7+BUxs3NHZ25jV4= +github.com/openshift/api v0.0.0-20230426193520-54a14470e5dc/go.mod h1:ctXNyWanKEjGj8sss1KjjHQ3ENKFm33FFnS5BKaIPh4= github.com/openshift/api v0.0.0-20230503133300-8bbcb7ca7183 h1:t/CahSnpqY46sQR01SoS+Jt0jtjgmhgE6lFmRnO4q70= github.com/openshift/api v0.0.0-20230503133300-8bbcb7ca7183/go.mod h1:4VWG+W22wrB4HfBL88P40DxLEpSOaiBVxUnfalfJo9k= github.com/openshift/build-machinery-go v0.0.0-20200917070002-f171684f77ab/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE= -github.com/openshift/client-go v0.0.0-20180830153425-431ec9a26e50/go.mod h1:6rzn+JTr7+WYS2E1TExP4gByoABxMznR6y2SnUIkmxk= +github.com/openshift/build-machinery-go v0.0.0-20211213093930-7e33a7eb4ce3/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE= github.com/openshift/client-go v0.0.0-20210112165513-ebc401615f47 h1:+TEY29DK0XhqB7HFC9OfV8qf3wffSyi7MWv3AP28DGQ= github.com/openshift/client-go v0.0.0-20210112165513-ebc401615f47/go.mod h1:u7NRAjtYVAKokiI9LouzTv4mhds8P4S1TwdVAfbjKSk= github.com/openshift/custom-resource-status v1.1.2 h1:C3DL44LEbvlbItfd8mT5jWrqPfHnSOQoQf/sypqA6A4= github.com/openshift/custom-resource-status v1.1.2/go.mod h1:DB/Mf2oTeiAmVVX1gN+NEqweonAPY0TKUwADizj8+ZA= github.com/openshift/prom-label-proxy v0.1.1-0.20191016113035-b8153a7f39f1/go.mod h1:p5MuxzsYP1JPsNGwtjtcgRHHlGziCJJfztff91nNixw= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing-contrib/go-stdlib v0.0.0-20170113013457-1de4cc2120e7/go.mod h1:PLldrQSroqzH70Xl+1DQcGnefIbqsKR7UDaiux3zV+w= github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9/go.mod h1:PLldrQSroqzH70Xl+1DQcGnefIbqsKR7UDaiux3zV+w= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= github.com/openzipkin/zipkin-go v0.1.3/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= +github.com/openzipkin/zipkin-go v0.3.0/go.mod h1:4c3sLeE8xjNqehmF5RpAFLPLJxXscc0R4l6Zg0P1tTQ= github.com/operator-framework/api v0.17.1/go.mod h1:kk8xJahHJR3bKqrA+A+1VIrhOTmyV76k+ARv+iV+u1Q= -github.com/operator-framework/operator-sdk v0.0.7/go.mod h1:iVyukRkam5JZa8AnjYf+/G3rk7JI1+M6GsU0sq0B9NA= github.com/oracle/oci-go-sdk v7.0.0+incompatible/go.mod h1:VQb79nF8Z2cwLkLS35ukwStZIg5F66tcBccjip/j888= github.com/oracle/oci-go-sdk v12.5.0+incompatible/go.mod h1:VQb79nF8Z2cwLkLS35ukwStZIg5F66tcBccjip/j888= github.com/oracle/oci-go-sdk v13.1.0+incompatible/go.mod h1:VQb79nF8Z2cwLkLS35ukwStZIg5F66tcBccjip/j888= @@ -2977,10 +4272,13 @@ github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnh github.com/ory/dockertest/v3 v3.8.0/go.mod h1:9zPATATlWQru+ynXP+DytBQrsXV7Tmlx7K86H6fQaDo= github.com/ory/dockertest/v3 v3.9.1/go.mod h1:42Ir9hmvaAPm0Mgibk6mBPi7SFvTXxEcnztDYOJ//uM= github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= +github.com/otiai10/copy v1.6.0/go.mod h1:XWfuS3CrI0R6IE0FbgHsEazaXO8G0LpMp9o8tos0x4E= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= +github.com/otiai10/mint v1.3.2/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= +github.com/ovh/go-ovh v1.3.0/go.mod h1:AxitLZ5HBRPyUd+Zl60Ajaag+rNTdVXWIkzfrVuTXWA= github.com/oxtoacart/bpool v0.0.0-20150712133111-4e1c5567d7c2/go.mod h1:L3UMQOThbttwfYRNFOWLLVXMhk5Lkio4GGOtw5UrxS0= github.com/packethost/packngo v0.1.1-0.20180711074735-b9cb5096f54c/go.mod h1:otzZQXgoO96RTzDB/Hycg0qZcXZsWJGJRSXbmEIJ+4M= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= @@ -2988,10 +4286,12 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/patrickmn/go-cache v0.0.0-20180815053127-5633e0862627/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= +github.com/pborman/getopt v0.0.0-20180729010549-6fdd0a2c7117/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= github.com/pborman/uuid v0.0.0-20180906182336-adf5a7427709/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pborman/uuid v1.2.1 h1:+ZZIw58t/ozdjRaXh/3awHfmWRbzYxJoAdNJxe/3pvw= github.com/pborman/uuid v1.2.1/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.3.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= @@ -3006,15 +4306,17 @@ github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaF github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/peterbourgon/diskv v0.0.0-20180312054125-0646ccaebea1/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/peterbourgon/g2s v0.0.0-20170223122336-d4e7ad98afea/go.mod h1:1VcHEd3ro4QMoHfiNl/j7Jkln9+KQuorp0PItHMJYNg= -github.com/petermattis/goid v0.0.0-20170504144140-0ded85884ba5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= +github.com/peterh/liner v0.0.0-20170211195444-bf27d3ba8e1d/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= +github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= +github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.2.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= @@ -3023,7 +4325,9 @@ github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4/v4 v4.1.2/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pierrec/lz4/v4 v4.1.8/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pires/go-proxyproto v0.6.1/go.mod h1:Odh9VFOZJCf9G8cLW5o435Xf1J95Jw9Gw5rnCjcwzAY= +github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= github.com/pkg/browser v0.0.0-20210706143420-7d21f8c997e2/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= @@ -3043,11 +4347,8 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/polyfloyd/go-errorlint v1.0.5/go.mod h1:APVvOesVSAnne5SClsPxPdfvZTVDojXh1/G3qb5wjGI= github.com/portworx/dcos-secrets v0.0.0-20180616013705-8e8ec3f66611/go.mod h1:4hklRW/4DQpLqkcXcjtNprbH2tz/sJaNtqinfPWl/LA= -github.com/portworx/kdmp v0.4.1-0.20210907103225-5bf7fe9467ec/go.mod h1:y3gC3scahxunrBOWT/FyVjPTworM8JLBeeGHTlA48KQ= -github.com/portworx/kdmp v0.4.1-0.20210912113917-9ab5ca03f9ea/go.mod h1:y3gC3scahxunrBOWT/FyVjPTworM8JLBeeGHTlA48KQ= github.com/portworx/kdmp v0.4.1-0.20210916140650-6d5c5ebbea75/go.mod h1:y3gC3scahxunrBOWT/FyVjPTworM8JLBeeGHTlA48KQ= github.com/portworx/kdmp v0.4.1-0.20210925150700-f53aaa2c7696/go.mod h1:2iVeU1OpDV959uu2EinEHyI+qto/2DBvXzNrkrq/kp8= -github.com/portworx/kdmp v0.4.1-0.20210929095959-dbee7f98b06f/go.mod h1:k9yJD2Kvv9dyEkSv4J82t4nAsHJkPaV6jN0wq28MSmI= github.com/portworx/kdmp v0.4.1-0.20211004132125-118c8be62b32/go.mod h1:XuR8mr500GAXdW/lW2ASeyney3f/SlfP4140YjAIeec= github.com/portworx/kdmp v0.4.1-0.20211007020540-ca77d6d2ade1/go.mod h1:bTzLxUEmYhrft5MWnDRekNeU3KDngbzosbnY88p5jwA= github.com/portworx/kdmp v0.4.1-0.20211020042040-649a87216a48/go.mod h1:ethpTE5btKfTpuuC0T3bQHTBCLymlUaBAa2pRoCJixM= @@ -3056,14 +4357,17 @@ github.com/portworx/kdmp v0.4.1-0.20211108115338-ba2bebf06ffb/go.mod h1:cbaFBCLF github.com/portworx/kdmp v0.4.1-0.20220309093511-f7b925b9e53e/go.mod h1:RAXbeaO/JmwQPRJCDdOoY/UsmGPY/awWsL4FbDOqAVk= github.com/portworx/kdmp v0.4.1-0.20220414053457-962507678379/go.mod h1:EAVroITfYd50a0vi/ScAILl6h5RYJteuO/pg1y3vNNw= github.com/portworx/kdmp v0.4.1-0.20220710173715-5d42efc7d149/go.mod h1:nb5AupP/63ByyqAYfZ+E32LDEnP0PjgH6w+yKXxWIgE= -github.com/portworx/kdmp v0.4.1-0.20220902105026-dc14791e1508/go.mod h1:sTO9LkPkExEVE6BqowIzkrQsyBtGdaC4Vh1AcKQ4xZA= -github.com/portworx/kdmp v0.4.1-0.20220905153748-e0bb69e59f38/go.mod h1:NI2UgLITtggRvvaRA7lE4+Np4htDp+06Jf1LWksKyGA= -github.com/portworx/kdmp v0.4.1-0.20221123171404-53a7660f5795/go.mod h1:v8uQbjGe6UFNyrZ+vFKgEu30wsaTc1qg0OYOKmVmUOE= github.com/portworx/kdmp v0.4.1-0.20230127055521-e23d6b003478/go.mod h1:v8uQbjGe6UFNyrZ+vFKgEu30wsaTc1qg0OYOKmVmUOE= -github.com/portworx/kdmp v0.4.1-0.20230206120825-078c75a441b6/go.mod h1:EXN0bAM+c4iK7Xxui/ZVVIGWepmsbGxrOgcoUDYwGLs= +github.com/portworx/kdmp v0.4.1-0.20230209151708-9d8c326aab11/go.mod h1:XObxg8AY79IAOLNIcGIBQWlg863XNjwFPGUJlSBrPOY= +github.com/portworx/kdmp v0.4.1-0.20230308031442-d6603d7d4dca/go.mod h1:RaHG55jtHPOBU/tP51/iAT0u6+u7zSA7K6f5sluKWZQ= +github.com/portworx/kdmp v0.4.1-0.20230320064430-aad8b8b5f8ea/go.mod h1:3PNTzDtuJawHpdFQPE5+YFgoNgvTNU9L3K8rPgq1FDE= +github.com/portworx/kdmp v0.4.1-0.20230426121717-92715d963a77/go.mod h1:c203QBWxpd5A5k+/QWXPvy0/XcVMhD4qvd7sZALZous= +github.com/portworx/kdmp v0.4.1-0.20230512150336-6cfeaacef991/go.mod h1:qwi3mjMZHRLCNCH4U08fCBsI9UCDJ1U/rH+v/rZmGR4= +github.com/portworx/kdmp v0.4.1-0.20230529155955-fcad20beaf76/go.mod h1:BlJ+7XNBMoQhmwdNZ6WBeTF1FcD5lH/UNYUL4kFU29E= +github.com/portworx/kdmp v0.4.1-0.20230608130529-7990f9150bed/go.mod h1:M9QuYoZL07Jdj8hy4XsDU1OYwu39zzTdX/axFpALVS0= +github.com/portworx/kdmp v0.4.1-0.20230830195819-704706dda5c7/go.mod h1:KFeJuczRm1Jw6AdejFLcXHB6yrjfKY/X1brfWDmXgr8= github.com/portworx/kvdb v0.0.0-20190105022415-cccaa09abfc9/go.mod h1:Q8YyrNDvPp3DVF96BDcQuaC7fAYUCuUX+l58S7OnD2M= github.com/portworx/kvdb v0.0.0-20191223203141-f42097b1fcd8/go.mod h1:Q8YyrNDvPp3DVF96BDcQuaC7fAYUCuUX+l58S7OnD2M= -github.com/portworx/kvdb v0.0.0-20200311180812-b2c72382d652/go.mod h1:Q8YyrNDvPp3DVF96BDcQuaC7fAYUCuUX+l58S7OnD2M= github.com/portworx/kvdb v0.0.0-20200723230726-2734b7f40194/go.mod h1:Q8YyrNDvPp3DVF96BDcQuaC7fAYUCuUX+l58S7OnD2M= github.com/portworx/kvdb v0.0.0-20200929023115-b312c7519467/go.mod h1:Q8YyrNDvPp3DVF96BDcQuaC7fAYUCuUX+l58S7OnD2M= github.com/portworx/kvdb v0.0.0-20230326003017-21a38cf82d4b h1:nP+m9tYQv2cWbN9wAwjlhJU9FZRs7GaYszhLJBLAg/I= @@ -3071,36 +4375,12 @@ github.com/portworx/kvdb v0.0.0-20230326003017-21a38cf82d4b/go.mod h1:Q8YyrNDvPp github.com/portworx/pds-api-go-client v0.0.0-20231102112445-993d38984eae h1:/aJSqtgpIPa9os7yOoXQzvqYdRdMoS8X+TaKC/KRPY8= github.com/portworx/pds-api-go-client v0.0.0-20231102112445-993d38984eae/go.mod h1:yn0abd9g4Q3fBpY720Eb+hwRV1OnTjROUaSb9mOlzBk= github.com/portworx/px-backup-api v1.0.1-0.20200915150042-274508e876ef/go.mod h1:puy7YVXeb6glot1vVCIePIiRLSwB//+rFtN2ZjvXeEw= -github.com/portworx/px-backup-api v1.2.2-0.20240229114136-e58baeb9fbe1 h1:bbvoT2bRppI3ZjFDGb6zSumAxWiNxo0lpd5FzTiFD2U= -github.com/portworx/px-backup-api v1.2.2-0.20240229114136-e58baeb9fbe1/go.mod h1:G1pn/FceOq8W6DKaYuV8LJuKowzp4/Hdgliojl9akIU= +github.com/portworx/px-backup-api v1.2.2-0.20240513165102-9eda9e2fc169 h1:j+6fsZnHf50b0ZaGzYptcpnUl4lL8vGJcZWBVvSZqBM= +github.com/portworx/px-backup-api v1.2.2-0.20240513165102-9eda9e2fc169/go.mod h1:G1pn/FceOq8W6DKaYuV8LJuKowzp4/Hdgliojl9akIU= github.com/portworx/px-object-controller v0.0.0-20220804234424-40d3b8a84987/go.mod h1:g3pw2lI2AjqAixUCRhaBdKTY98znsCPR7NGRrlpimVU= github.com/portworx/pxc v0.33.0/go.mod h1:Tl7hf4K2CDr0XtxzM08sr9H/KsMhscjf9ydb+MnT0U4= -github.com/portworx/sched-ops v0.0.0-20200123020607-b0799c4686f5/go.mod h1:yb1ypNIiZQAmM7xAWGzO6dydwl/+vNC0WjUm5IvHUEY= -github.com/portworx/sched-ops v0.0.0-20200831185134-3e8010dc7056/go.mod h1:zb7WCZn/QEed/9tO3qA5+e28gMXPs07N9Sb5B1DSeAk= -github.com/portworx/sched-ops v0.0.0-20210301232128-6cd5f08740bf/go.mod h1:nl2AP/W8sWmhmW7ScwNQrm5OCHiHjLYQ2NmO3TUjIhE= -github.com/portworx/sched-ops v0.20.4-openstorage-rc3.0.20210325150944-0b2c202335f7/go.mod h1:DpRDDqXWQrReFJ5SHWWrURuZdzVKjrh2OxbAfwnrAyk= -github.com/portworx/sched-ops v1.20.0-rc1/go.mod h1:nl2AP/W8sWmhmW7ScwNQrm5OCHiHjLYQ2NmO3TUjIhE= -github.com/portworx/sched-ops v1.20.4-rc1/go.mod h1:orn0fDAHDqbKypAsSgbmJ8QmGMd3v1jTxdIRT9YIoEU= -github.com/portworx/sched-ops v1.20.4-rc1.0.20210805192436-d51186f75dc4/go.mod h1:+R+28pHhZ2Go7LquCo1+9ctpxwFGWak7zNcTFyXVh4k= -github.com/portworx/sched-ops v1.20.4-rc1.0.20210908045330-9060cf5304f1/go.mod h1:HvhqkdNhqynl9HyIfadsegoSjGpVpAwTMLync/sIXvA= -github.com/portworx/sched-ops v1.20.4-rc1.0.20210921050234-561b707a5d96/go.mod h1:y0JUD76QnRTNWv4tE2z9jpRxIWNB4RcP3S2g7UpAEOk= -github.com/portworx/sched-ops v1.20.4-rc1.0.20210929114621-9001768f8eb7/go.mod h1:5xy8TTt9m/8UGG8Hw5NHxwc/mctjCsmj7mpcR7jIFjI= -github.com/portworx/sched-ops v1.20.4-rc1.0.20211006132704-8a90df7acb50/go.mod h1:5xy8TTt9m/8UGG8Hw5NHxwc/mctjCsmj7mpcR7jIFjI= -github.com/portworx/sched-ops v1.20.4-rc1.0.20211026113317-db80e47fe929/go.mod h1:5xy8TTt9m/8UGG8Hw5NHxwc/mctjCsmj7mpcR7jIFjI= -github.com/portworx/sched-ops v1.20.4-rc1.0.20211116074603-2b6905763b23/go.mod h1:5xy8TTt9m/8UGG8Hw5NHxwc/mctjCsmj7mpcR7jIFjI= -github.com/portworx/sched-ops v1.20.4-rc1.0.20211217234328-ead591c0f22d/go.mod h1:5xy8TTt9m/8UGG8Hw5NHxwc/mctjCsmj7mpcR7jIFjI= -github.com/portworx/sched-ops v1.20.4-rc1.0.20220321032155-bcc98224224c/go.mod h1:5E/BwC3d4ysXce1fzNFjR2OU8rz7Kx6mt8T10HEiA0E= -github.com/portworx/sched-ops v1.20.4-rc1.0.20220327212454-cc1a88ecb579/go.mod h1:0IQvado0rnmbRMORaCqCDrrzjBrX5sU+Sz2+vQwEsjM= -github.com/portworx/sched-ops v1.20.4-rc1.0.20220401024625-dbc61a336f65/go.mod h1:0IQvado0rnmbRMORaCqCDrrzjBrX5sU+Sz2+vQwEsjM= -github.com/portworx/sched-ops v1.20.4-rc1.0.20220927173018-c9d3edcaef50/go.mod h1:LnhSWHaCvwWrmgqgNPFTrm4YModpyDcl9k8RqSC/8Co= -github.com/portworx/sched-ops v1.20.4-rc1.0.20221102055014-b3a55a3df5c8/go.mod h1:8XBwmcbDuhW0TWFKCaHH4oS5xsfGFU5miSyqb0fvl3U= -github.com/portworx/sched-ops v1.20.4-rc1.0.20221208153443-c95ed6d757fa/go.mod h1:wQK24M7cbrhAk378J2WwR0nMx86W/iJwRc1JilEmP40= -github.com/portworx/sched-ops v1.20.4-rc1.0.20230103234348-243afb3bb8aa/go.mod h1:wQK24M7cbrhAk378J2WwR0nMx86W/iJwRc1JilEmP40= -github.com/portworx/sched-ops v1.20.4-rc1.0.20230207070155-2e0ef25efadd/go.mod h1:JbHASXqA/GXwFD4blS1DZkrxtS5llb98ViZgUerOtQA= -github.com/portworx/sched-ops v1.20.4-rc1.0.20230207140221-24ec094deec4/go.mod h1:drIYh+6f/vh11dVmbpwFv3GIusQCSMThPX774U8ix7w= -github.com/portworx/sched-ops v1.20.4-rc1.0.20240411193047-d17313c6c11b h1:i9MQ68H2YvpNzlU625qQFuGqQBBqFUVqVoV1ggOqK8M= -github.com/portworx/sched-ops v1.20.4-rc1.0.20240411193047-d17313c6c11b/go.mod h1:LZkYF7Ke6gh3urQXFie1yBntpq1bINLVz05F8x314go= -github.com/portworx/talisman v0.0.0-20191007232806-837747f38224/go.mod h1:OjpMH9Uh5o9ntVGktm4FbjLNwubJ3ITih2OfYrAeWtA= +github.com/portworx/sched-ops v1.20.4-rc1.0.20240514213912-ff0ae32b859a h1:a1W4ako6JYsvrnnUIdQrCgcvOB8TjnNNIPlITYUMwXE= +github.com/portworx/sched-ops v1.20.4-rc1.0.20240514213912-ff0ae32b859a/go.mod h1:KOe618gr1FAzVmLNe9LFHss19df3MBZ0qom6Ct7RpyM= github.com/portworx/talisman v0.0.0-20210302012732-8af4564777f7/go.mod h1:e8a6uFpSbOlRpZQlW9aXYogC+GWAo065G0RL9hDkD4Q= github.com/portworx/talisman v1.1.3 h1:XrDE0fs4UACgDGi5bvt04uePC+QbhbA5YXozGYg5tr8= github.com/portworx/talisman v1.1.3/go.mod h1:e8a6uFpSbOlRpZQlW9aXYogC+GWAo065G0RL9hDkD4Q= @@ -3110,12 +4390,17 @@ github.com/posener/complete v1.2.1/go.mod h1:6gapUrK/U1TAN7ciCoNRIdVC5sbdBTUh1DK github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/poy/onpar v0.0.0-20190519213022-ee068f8ea4d1/go.mod h1:nSbFQvMj97ZyhFRSJYtut+msi4sOY6zJDGCdSc+/rZU= +github.com/poy/onpar v0.0.0-20200406201722-06f95a1c68e8/go.mod h1:nSbFQvMj97ZyhFRSJYtut+msi4sOY6zJDGCdSc+/rZU= +github.com/poy/onpar v0.3.1/go.mod h1:WJueGwprgKVeX1mfOJfCxEJNbyhYiY0lWw2i18UaEi0= +github.com/poy/onpar v0.3.2/go.mod h1:6XDWG8DJ1HsFX6/Btn0pHl3Jz5d1SEEGNZ5N1gtYo+I= github.com/poy/onpar v1.1.2 h1:QaNrNiZx0+Nar5dLgTVp5mXkyoVFIbepjyEoGSnhbAY= github.com/poy/onpar v1.1.2/go.mod h1:6X8FLNoxyr9kkmnlqpK6LSoiOtrO6MICtWwEuWkLjzg= +github.com/poy/onpar/v3 v3.0.0-20230319125606-a35e84953e8f/go.mod h1:nJ2Lyw+ezwTJHxo7CRPqV2o/3aA3fX6fQHsDNLT934g= github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/pquerna/cachecontrol v0.1.0 h1:yJMy84ti9h/+OEWa752kBTKv4XC30OtVVHYv/8cTqKc= github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI= github.com/pquerna/otp v1.2.1-0.20191009055518-468c2dd2b58d/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg= +github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.44.1/go.mod h1:3WYi4xqXxGGXWDdQIITnLNmuDzO5n6wYva9spVhR4fg= github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.46.0/go.mod h1:3WYi4xqXxGGXWDdQIITnLNmuDzO5n6wYva9spVhR4fg= github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.63.0 h1:efsW3CfymG5bZUpeIsYfdihB33YItCn7uHBOEbnHQG8= @@ -3124,6 +4409,8 @@ github.com/prometheus-operator/prometheus-operator/pkg/client v0.46.0 h1:J5gQysJ github.com/prometheus-operator/prometheus-operator/pkg/client v0.46.0/go.mod h1:k4BrWlVQQsvBiTcDnKEMgyh/euRxyxgrHdur/ZX/sdA= github.com/prometheus/alertmanager v0.18.0/go.mod h1:WcxHBl40VSPuOaqWae6l6HpnEOVRIycEJ7i9iYkadEE= github.com/prometheus/alertmanager v0.20.0/go.mod h1:9g2i48FAyZW6BtbsnvHtMHQXl2aVtrORKwKVCQ+nbrg= +github.com/prometheus/alertmanager v0.24.0/go.mod h1:r6fy/D7FRuZh5YbnX6J3MBY0eI4Pb5yPYS7/bPSXXqI= +github.com/prometheus/alertmanager v0.25.0/go.mod h1:MEZ3rFVHqKZsw7IcNS/m4AWZeXThmJhumpiWR4eHU/w= github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= @@ -3144,9 +4431,11 @@ github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqr github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= -github.com/prometheus/client_golang v1.15.1 h1:8tXpTmJbyH5lydzFPoxSIJ0J46jdh3tylbvM1xCv0LI= github.com/prometheus/client_golang v1.15.1/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk= +github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= +github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= github.com/prometheus/client_model v0.0.0-20170216185247-6f3806018612/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -3156,8 +4445,9 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= -github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= +github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 h1:v7DLqVdK4VrYkVD5diGdl4sxJurKJEMnODWRJlxV9oM= +github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20180518154759-7600349dcfe1/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= @@ -3165,7 +4455,6 @@ github.com/prometheus/common v0.0.0-20181020173914-7e9e6cabbd39/go.mod h1:daVV7q github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.3.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= @@ -3175,11 +4464,22 @@ github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB8 github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.34.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= -github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= +github.com/prometheus/common v0.38.0/go.mod h1:MBXfmBQZrK5XpbCkjofnXs96LD2QQ7fEq4C0xjC/yec= +github.com/prometheus/common v0.41.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= +github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= +github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= +github.com/prometheus/common/assets v0.1.0/go.mod h1:D17UVUE12bHbim7HzwUvtqm6gwBEaDQ0F+hIGbFbccI= +github.com/prometheus/common/assets v0.2.0/go.mod h1:D17UVUE12bHbim7HzwUvtqm6gwBEaDQ0F+hIGbFbccI= +github.com/prometheus/common/sigv4 v0.1.0/go.mod h1:2Jkxxk9yYvCkE5G1sQT7GuEXm57JrvHu9k5YwTjsNtI= +github.com/prometheus/exporter-toolkit v0.7.1/go.mod h1:ZUBIj498ePooX9t/2xtDjeQYwvRpiPP2lh5u4iblj2g= +github.com/prometheus/exporter-toolkit v0.8.2/go.mod h1:00shzmJL7KxcsabLWcONwpyNEuWhREOnFqZW7vadFS0= +github.com/prometheus/exporter-toolkit v0.9.1/go.mod h1:iFlTmFISCix0vyuyBmm0UqOUCTao9+RsAsKJP3YM9ec= github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20180612222113-7d6f385de8be/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -3199,22 +4499,25 @@ github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= -github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= +github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI= +github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY= github.com/prometheus/prometheus v0.0.0-20180315085919-58e2a31db8de/go.mod h1:oAIUtOny2rjMX0OWN5vPR5/q/twIROJvdqnQKDdil/s= +github.com/prometheus/prometheus v0.35.0/go.mod h1:7HaLx5kEPKJ0GDgbODG0fZgXbQ8K/XjZNJXQmbmgQlY= +github.com/prometheus/prometheus v0.43.1/go.mod h1:2BA14LgBeqlPuzObSEbh+Y+JwLH2GcqDlJKbF2sA6FM= github.com/prometheus/prometheus v1.8.2-0.20200110114423-1e64d757f711/go.mod h1:7U90zPoLkWjEIQcy/rweQla82OCTUzxVHE51G3OhJbI= github.com/prometheus/prometheus v2.3.2+incompatible/go.mod h1:oAIUtOny2rjMX0OWN5vPR5/q/twIROJvdqnQKDdil/s= -github.com/prometheus/prometheus v2.9.2+incompatible/go.mod h1:vdLuLLM0uqhLSofrQ7Nev2b/rQUyZ+pkT3zF7LB/i1g= github.com/prometheus/statsd_exporter v0.21.0 h1:hA05Q5RFeIjgwKIYEdFd59xu5Wwaznf33yKI+pyX6T8= github.com/prometheus/statsd_exporter v0.21.0/go.mod h1:rbT83sZq2V+p73lHhPZfMc3MLCHmSHelCh9hSGYNLTQ= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/prometheus/tsdb v0.8.0/go.mod h1:fSI0j+IUQrDd7+ZtR9WKIGtoYAYAJUKcKhYLG25tN4g= +github.com/proullon/ramsql v0.0.0-20211120092837-c8d0a408b939/go.mod h1:jG8oAQG0ZPHPyxg5QlMERS31airDC+ZuqiAe8DUvFVo= github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= +github.com/pseudomuto/protoc-gen-doc v1.5.1/go.mod h1:XpMKYg6zkcpgfpCfQ8GcWBDRtRxOmMR5w7pz4Xo+dYM= github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= -github.com/pure-px/apis v0.0.0-20240326194748-e9f7f27de779 h1:4v0l3HWdp/odrm4yYFpN9FBeaXnJwjYTmvdDA2FAhaQ= -github.com/pure-px/apis v0.0.0-20240326194748-e9f7f27de779/go.mod h1:vuPbG0guw0Nl8/a4Dpb9LSHKMPtf5dGR7SQqnpMjU4o= -github.com/pure-px/platform-api-go-client v0.0.0-20240422094205-23129136cfd2 h1:DEwD9GEXIS2ygsj+pBYv8CiZldWOsu0jJfN1z1797cg= -github.com/pure-px/platform-api-go-client v0.0.0-20240422094205-23129136cfd2/go.mod h1:1JYlDoZQvC6Q2T9LdXVWHCzBGgR9frA9JKTEz3aSQcQ= +github.com/pure-px/apis v0.0.3 h1:maDtswen6wrwe+D87n8KN5ATLxIdbkSd83KeE+OcM+g= +github.com/pure-px/apis v0.0.3/go.mod h1:vuPbG0guw0Nl8/a4Dpb9LSHKMPtf5dGR7SQqnpMjU4o= +github.com/pure-px/platform-api-go-client v0.0.0-20240529124619-a3e5f98d62f0 h1:Bv8FpQXTd5O4eYLO62lElCUcdRFchQK0xhIHs55LWpQ= +github.com/pure-px/platform-api-go-client v0.0.0-20240529124619-a3e5f98d62f0/go.mod h1:1JYlDoZQvC6Q2T9LdXVWHCzBGgR9frA9JKTEz3aSQcQ= github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= github.com/quasilyte/go-ruleguard v0.3.18/go.mod h1:lOIzcYlgxrQ2sGJ735EHXmf/e9MJ516j16K/Ifcttvs= github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= @@ -3224,8 +4527,11 @@ github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mo github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= +github.com/rabbitmq/amqp091-go v1.1.0/go.mod h1:ogQDLSOACsLPsIq0NpbtiifNZi2YOz0VTJ0kHRghqbM= +github.com/rakyll/embedmd v0.0.0-20171029212350-c8060a0752a2/go.mod h1:7jOTMgqac46PZcF54q6l2hkLEG8op93fZu61KmxWDV4= github.com/rancher/apiserver v0.0.0-20221205175736-7c507bd5c076/go.mod h1:xwQhXv3XFxWfA6tLa4ZeaERu8ldNbyKv2sF+mT+c5WA= github.com/rancher/lasso v0.0.0-20221202205459-e7138f16489c/go.mod h1:Qewwr/xGzhtG7WCxhubrKZrdAobv5yqAIuHbDoxThZQ= +github.com/rancher/lasso v0.0.0-20221227210133-6ea88ca2fbcc/go.mod h1:dEfC9eFQigj95lv/JQ8K5e7+qQCacWs1aIA6nLxKzT8= github.com/rancher/norman v0.0.0-20221205184727-32ef2e185b99/go.mod h1:zpv7z4ySYL5LlEBKEPf/xf3cjx837/J2i/wHpT43viE= github.com/rancher/norman v0.0.0-20230110004459-34230bb2787c/go.mod h1:zpv7z4ySYL5LlEBKEPf/xf3cjx837/J2i/wHpT43viE= github.com/rancher/norman v0.0.0-20230222213531-275a3e921940 h1:fwAzRl0oF0kdHS1YWqCl/Xk59rjbXNpZcWMfknqeeH8= @@ -3237,15 +4543,20 @@ github.com/rancher/wrangler v1.1.0 h1:1VWistON261oKmCPF5fOPMWb/YwjgEciO9pCw5Z0mz github.com/rancher/wrangler v1.1.0/go.mod h1:lQorqAAIMkNWteece1GiuwZTmMqkaVTXL5qjiiPVDxQ= github.com/rboyer/safeio v0.2.1/go.mod h1:Cq/cEPK+YXFn622lsQ0K4KsPZSPtaptHHEldsy7Fmig= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/redis/go-redis/v9 v9.1.0/go.mod h1:urWj3He21Dj5k4TK1y59xH8Uj6ATueP8AH1cY3lZl4c= github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/remyoudompheng/go-dbus v0.0.0-20121104212943-b7232d34b1d5/go.mod h1:+u151txRmLpwxBmpYn9z3d1sdJdjRPQpsXuYeY9jNls= github.com/remyoudompheng/go-liblzma v0.0.0-20190506200333-81bf2d431b96/go.mod h1:90HvCY7+oHHUKkbeMCiHt1WuFR2/hPJ9QrljDG+v6ls= github.com/remyoudompheng/go-misc v0.0.0-20190427085024-2d6ac652a50e/go.mod h1:80FQABjoFzZ2M5uEa6FUaJYEmqU2UOKojlFVak1UAwI= github.com/renier/xmlrpc v0.0.0-20170708154548-ce4a1a486c03/go.mod h1:gRAiPF5C5Nd0eyyRdqIu9qTiFSoZzpTq727b5B8fkkU= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rlmcpherson/s3gof3r v0.5.0/go.mod h1:s7vv7SMDPInkitQMuZzH615G7yWHdrU2r/Go7Bo71Rs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= +github.com/rogpeppe/clock v0.0.0-20190514195947-2896927a307a/go.mod h1:4r5QyqhjIWCcK8DO4KMclc5Iknq5qVBAlbYYzAbUScQ= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-charset v0.0.0-20180617210344-2471d30d28b4/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc= @@ -3258,11 +4569,14 @@ github.com/rogpeppe/go-internal v1.6.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTE github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.6.1-0.20190116175910-76f58f330d76/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/cors v1.9.0/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.4.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= @@ -3270,12 +4584,13 @@ github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThC github.com/rubenv/sql-migrate v1.1.2 h1:9M6oj4e//owVVHYrFISmY9LBRw6gzkCNmD9MV36tZeQ= github.com/rubenv/sql-migrate v1.1.2/go.mod h1:/7TZymwxN8VWumcIxw1jjHEcR1djpdkMHQPT4FWdnbQ= github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= -github.com/rubyist/circuitbreaker v2.2.1+incompatible/go.mod h1:Ycs3JgJADPuzJDwffe12k6BZT8hxVi6lFK+gWYJLN4A= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= +github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= github.com/ryancurrah/gomodguard v1.2.4/go.mod h1:+Kem4VjWwvFpUJRJSwa16s1tBJe+vbv02+naTow2f6M= github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= @@ -3285,15 +4600,14 @@ github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIH github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8= github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= github.com/safchain/ethtool v0.0.0-20210803160452-9aa261dae9b1/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= +github.com/safchain/ethtool v0.2.0/go.mod h1:WkKB1DnNtvsMlDmQ50sgwowDJV/hGbJSOvJoEXs1AJQ= github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= github.com/sagikazarmark/crypt v0.6.0/go.mod h1:U8+INwJo3nBv1m6A/8OBXAq7Jnpspk5AxSgDyEQcea8= -github.com/samuel/go-zookeeper v0.0.0-20161028232340-1d7be4effb13/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/samuel/go-zookeeper v0.0.0-20180130194729-c4fab1ac1bec/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/samuel/go-zookeeper v0.0.0-20190810000440-0ceca61e4d75/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= github.com/santhosh-tekuri/jsonschema v1.2.4/go.mod h1:TEAUOeZSmIxTTuHatJzrvARHiuO9LYd+cIxzgEHCQI4= -github.com/sasha-s/go-deadlock v0.0.0-20161201235124-341000892f3d/go.mod h1:StQn567HiB1fF2yJ44N9au7wOhrPS3iZqiDbRupzT10= github.com/sasha-s/go-deadlock v0.2.0/go.mod h1:StQn567HiB1fF2yJ44N9au7wOhrPS3iZqiDbRupzT10= github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= github.com/sashamelentyev/usestdlibvars v1.20.0/go.mod h1:0GaP+ecfZMXShS0A94CJn6aEuPRILv8h/VuWI9n1ygg= @@ -3301,6 +4615,8 @@ github.com/satori/go.uuid v0.0.0-20160603004225-b111a074d5ef/go.mod h1:dA0hQrYB0 github.com/satori/go.uuid v0.0.0-20160713180306-0aa62d5ddceb/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.9/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.14/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= github.com/sean-/conswriter v0.0.0-20180208195008-f5ae3917a627/go.mod h1:7zjs06qF79/FKAJpBvFx3P8Ww4UTIMAe+lpNXDHziac= @@ -3309,13 +4625,19 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= +github.com/secure-systems-lab/go-securesystemslib v0.4.0/go.mod h1:FGBZgq2tXWICsxWQW1msNf49F0Pf2Op5Htayx335Qbs= +github.com/secure-systems-lab/go-securesystemslib v0.6.0/go.mod h1:8Mtpo9JKks/qhPG4HGZ2LGMvrPbzuxwfz/f/zLfEWkk= +github.com/secure-systems-lab/go-securesystemslib v0.7.0/go.mod h1:/2gYnlnHVQ6xeGtfIqFy7Do03K4cdCY0A/GlJLDKLHI= +github.com/secure-systems-lab/go-securesystemslib v0.8.0/go.mod h1:UH2VZVuJfCYR8WgMlCU1uFsOUU+KeyrTWcSS73NBOzU= github.com/securego/gosec/v2 v2.13.1/go.mod h1:EO1sImBMBWFjOTFzMWfTRrZW6M15gm60ljzrmy/wtHo= +github.com/segmentio/ksuid v1.0.4/go.mod h1:/XUiZBD3kVx5SmUOl55voK5yeAbBNNIed+2O73XgrPE= github.com/sendgrid/rest v2.6.0+incompatible/go.mod h1:kXX7q3jZtJXK5c5qK83bSGMdV6tsOE70KbHoqJls4lE= github.com/sendgrid/sendgrid-go v3.6.0+incompatible/go.mod h1:QRQt+LX/NmgVEvmdRw0VT/QgUn499+iza2FnDca9fg8= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= +github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/sethvargo/go-limiter v0.7.1/go.mod h1:C0kbSFbiriE5k2FFOe18M1YZbAR2Fiwf72uGu0CXCcU= github.com/shabbyrobe/gocovmerge v0.0.0-20180507124511-f6ea450bfb63/go.mod h1:n+VKSARF5y/tS9XFSP7vWDfS+GUC5vs/YT7M5XDTUEM= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= @@ -3323,21 +4645,30 @@ github.com/shirou/gopsutil v2.19.9+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu github.com/shirou/gopsutil/v3 v3.22.6/go.mod h1:EdIubSnZhbAvBS1yJ7Xi+AShB/hxwLHOMz4MCYz7yMs= github.com/shirou/gopsutil/v3 v3.22.9/go.mod h1:bBYl1kjgEJpWpxeHmLI+dVHWtyAwfcmSBLDsp2TNT8A= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= +github.com/shoenig/test v0.6.2/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= github.com/shoenig/test v1.7.0 h1:eWcHtTXa6QLnBvm0jgEabMRN/uJ4DMV3M8xUGgRkZmk= github.com/shoenig/test v1.7.0/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shurcooL/githubv4 v0.0.0-20180925043049-51d7b505e2e9/go.mod h1:hAF0iLZy4td2EX+/8Tw+4nodhlMrwN3HupfaXj3zkGo= +github.com/shurcooL/githubv4 v0.0.0-20190718010115-4ba037080260/go.mod h1:hAF0iLZy4td2EX+/8Tw+4nodhlMrwN3HupfaXj3zkGo= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/shurcooL/graphql v0.0.0-20180924043259-e4a3a37e6d42/go.mod h1:AuYgA5Kyo4c7HfUmvRGs/6rGlMMV/6B1bVnB9JxJEEg= +github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f/go.mod h1:AuYgA5Kyo4c7HfUmvRGs/6rGlMMV/6B1bVnB9JxJEEg= github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/vfsgen v0.0.0-20180711163814-62bca832be04/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/shurcooL/vfsgen v0.0.0-20180825020608-02ddb050ef6b/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= +github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= +github.com/sigstore/sigstore v1.6.4/go.mod h1:pjR64lBxnjoSrAr+Ydye/FV73IfrgtoYlAI11a8xMfA= +github.com/sigstore/sigstore v1.8.1/go.mod h1:02SL1158BSj15bZyOFz7m+/nJzLZfFd9A8ab3Kz7w/E= +github.com/sigstore/sigstore/pkg/signature/kms/aws v1.8.1/go.mod h1:RCdYCc1IxCYWzh2IdzdA6Yf7JIY0cMRqH08fpQYechw= +github.com/sigstore/sigstore/pkg/signature/kms/azure v1.8.1/go.mod h1:s13mo3a0UCQS3+PAUUZfvKe48sMDMsHk2GE1b2YfPcU= +github.com/sigstore/sigstore/pkg/signature/kms/gcp v1.8.1/go.mod h1:2OaSQ80EcdyVRSQ3T4d1lsc6Scopblsiq8U2AEk5K1A= +github.com/sigstore/sigstore/pkg/signature/kms/hashivault v1.8.1/go.mod h1:nhIgyu4YwwNgalIwTGsoAzam16jjAn3ADRSWKbWPwGI= github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= @@ -3351,11 +4682,13 @@ github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrf github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sirupsen/logrus v1.9.1/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= github.com/sivchari/tenv v1.7.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= +github.com/skeema/knownhosts v1.2.0/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog= github.com/skyrings/skyring-common v0.0.0-20160929130248-d1c0bb1cbd5e h1:jrZSSgPUDtBeJbGXqgGUeupQH8I+ZvGXfhpIahye2Bc= github.com/skyrings/skyring-common v0.0.0-20160929130248-d1c0bb1cbd5e/go.mod h1:d8hQseuYt4rJoOo21lFzYJdhMjmDqLY++ayArbgYjWI= @@ -3377,7 +4710,9 @@ github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJ github.com/sony/gobreaker v0.4.2-0.20210216022020-dd874f9dd33b/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/sony/gobreaker v0.5.0 h1:dRCvqm0P490vZPmy7ppEk2qCnCieBooFJ+YoXGYB+yg= github.com/sony/gobreaker v0.5.0/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= +github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= @@ -3385,8 +4720,9 @@ github.com/spf13/afero v1.2.1/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTd github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= +github.com/spf13/afero v1.9.2 h1:j49Hj62F0n+DaZ1dDCvhABaPNSGNkt32oRFxI33IEMw= +github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= @@ -3395,9 +4731,11 @@ github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155 github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= +github.com/spf13/cobra v1.2.0/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= @@ -3408,7 +4746,6 @@ github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= @@ -3420,7 +4757,11 @@ github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5q github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= +github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw= +github.com/spiffe/go-spiffe/v2 v2.1.5/go.mod h1:eVDqm9xFvyqao6C+eQensb9ZPkyNEeaUbqbBpOhBnNk= +github.com/spiffe/spire-api-sdk v1.8.7/go.mod h1:4uuhFlN6KBWjACRP3xXwrOTNnvaLp1zJs8Lribtr4fI= github.com/spyzhov/ajson v0.4.2/go.mod h1:63V+CGM6f1Bu/p4nLIN8885ojBdt88TbLoSFzyqMuVA= +github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= @@ -3430,6 +4771,8 @@ github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3 github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +github.com/streadway/quantile v0.0.0-20150917103942-b0c588724d25/go.mod h1:lbP8tGiBjZ5YWIc2fzuRpTaz0b/53vT6PEs3QuAWzuU= github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -3438,10 +4781,10 @@ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSS github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= -github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -3456,6 +4799,7 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= @@ -3465,20 +4809,29 @@ github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNG github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= +github.com/tchap/go-patricia/v2 v2.3.1/go.mod h1:VZRHKAb53DLaG+nA9EaYYiaEx6YztwDlLElMsnSHD4k= github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= github.com/tektoncd/pipeline v0.8.0/go.mod h1:IZzJdiX9EqEMuUcgdnElozdYYRh0/ZRC+NKMLj1K3Yw= github.com/tektoncd/pipeline v0.56.0 h1:Gyti3F5u1ADjI08hG3mGtWgpaaiOfeaxnznL/U/N7tM= github.com/tektoncd/pipeline v0.56.0/go.mod h1:npl5qTu+yU74zqKIkTVnFfu/1pMhJFZjvnCrH6DlfLM= +github.com/tektoncd/plumbing v0.0.0-20220817140952-3da8ce01aeeb/go.mod h1:uJBaI0AL/kjPThiMYZcWRujEz7D401v643d6s/21GAg= github.com/tencentcloud/tencentcloud-sdk-go v1.0.162/go.mod h1:asUz5BPXxgoPGaRgZaVm1iGcUAuHyYUo1nXqKa83cvI= github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= +github.com/testcontainers/testcontainers-go v0.19.0/go.mod h1:3YsSoxK0rGEUzbGD4gUVt1Nm3GJpCIq94GX+2LSf3d4= github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= +github.com/tetratelabs/wazero v1.0.1/go.mod h1:wYx2gNRg8/WihJfSDxA1TIL8H+GkfLYm+bIfbblu9VQ= github.com/thanos-io/thanos v0.11.0/go.mod h1:N/Yes7J68KqvmY+xM6J5CJqEvWIvKSR5sqGtmuD6wDc= +github.com/theupdateframework/go-tuf v0.5.2/go.mod h1:SyMV5kg5n4uEclsyxXJZI2UxPFJNDc4Y+r7wv+MlvTA= +github.com/theupdateframework/go-tuf v0.7.0/go.mod h1:uEB7WSY+7ZIugK6R1hiBMBjQftaFzn7ZCDJcp1tCUug= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tilinna/clock v1.0.2/go.mod h1:ZsP7BcY7sEEz7ktc0IVy8Us6boDrK8VradlKRUGfOao= github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= github.com/timonwong/loggercheck v0.9.3/go.mod h1:wUqnk9yAOIKtGA39l1KLE9Iz0QiTocu/YZoOf+OzFdw= +github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399/go.mod h1:LdwHTNJT99C5fTAzDz0ud328OgXz+gierycbcIx2fRs= github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= @@ -3489,8 +4842,11 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1 github.com/tomarrell/wrapcheck/v2 v2.7.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= +github.com/transparency-dev/merkle v0.0.2/go.mod h1:pqSy+OXefQ1EDUVmAJ8MUhHB9TXGuzVAT58PqBoHz1A= github.com/trivago/tgo v1.0.7 h1:uaWH/XIy9aWYWpjm2CU3RpcqZXmX2ysQ9/Go+d9gyrM= github.com/trivago/tgo v1.0.7/go.mod h1:w4dpD+3tzNIIiIfkWWa85w5/B77tlvdZckQ+6PkFnhc= +github.com/tsenart/go-tsz v0.0.0-20180814232043-cdeb9e1e981e/go.mod h1:SWZznP1z5Ki7hDT2ioqiFKEse8K9tU2OUvaRI0NeGQo= +github.com/tsenart/vegeta/v12 v12.8.4/go.mod h1:ZiJtwLn/9M4fTPdMY7bdbIeyNeFVE8/AHbWFqCsUuho= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= @@ -3499,7 +4855,9 @@ github.com/uber/jaeger-client-go v2.20.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMW github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/ugorji/go v1.1.1/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= @@ -3510,9 +4868,14 @@ github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lP github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.18.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.19.1/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.7/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/urfave/negroni v1.0.1-0.20181201104632-7183f09c600e/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= @@ -3524,24 +4887,42 @@ github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+ github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8= github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= github.com/vbatts/tar-split v0.9.14-0.20160330203851-226f7c74905f/go.mod h1:LEuURwDEiWjRjwu46yU3KVGuUdVv/dcnpcEPSzR8z6g= +github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= +github.com/vbatts/tar-split v0.11.3/go.mod h1:9QlHN18E+fEH7RdG+QAJJcuya3rqT7eXSTY7wGrAokY= github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= +github.com/vektah/gqlparser/v2 v2.4.5/go.mod h1:flJWIR04IMQPGz+BXLrORkrARBxv/rtyIAFvd/MceW0= +github.com/veraison/go-cose v1.0.0-rc.1/go.mod h1:7ziE85vSq4ScFTg6wyoMXjucIGOf4JkFEZi/an96Ct4= github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= +github.com/vishvananda/netlink v1.2.1-beta.2/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= +github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/vmware/govmomi v0.18.0/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= github.com/vmware/govmomi v0.22.2/go.mod h1:Y+Wq4lst78L85Ge/F8+ORXIWiKYqaro1vhAulACy9Lc= github.com/vmware/govmomi v0.30.4 h1:BCKLoTmiBYRuplv3GxKEMBLtBaJm8PA56vo9bddIpYQ= github.com/vmware/govmomi v0.30.4/go.mod h1:F7adsVewLNHsW/IIm7ziFURaXDaHEwcc+ym4r3INMdY= github.com/vmware/vmw-guestinfo v0.0.0-20170707015358-25eff159a728/go.mod h1:x9oS4Wk2s2u4tS29nEaDLdzvuHdB19CvSGJjPgkZJNk= +github.com/vultr/govultr/v2 v2.17.2/go.mod h1:ZFOKGWmgjytfyjeyAdhQlSWwTjh2ig+X49cAp50dzXI= +github.com/weppos/publicsuffix-go v0.12.0/go.mod h1:z3LCPQ38eedDQSwmsSRW4Y7t2L8Ln16JPQ02lHAdn5k= +github.com/weppos/publicsuffix-go v0.13.0/go.mod h1:z3LCPQ38eedDQSwmsSRW4Y7t2L8Ln16JPQ02lHAdn5k= +github.com/weppos/publicsuffix-go v0.15.1-0.20220329081811-9a40b608a236/go.mod h1:HYux0V0Zi04bHNwOHy4cXJVz/TQjYonnF6aoYhj+3QE= +github.com/weppos/publicsuffix-go v0.20.1-0.20221031080346-e4081aa8a6de/go.mod h1:g9GsAxnaxsUuTLZcQdYbi43vT2k9ubZGHsdCy819VLk= +github.com/weppos/publicsuffix-go v0.30.0/go.mod h1:kBi8zwYnR0zrbm8RcuN1o9Fzgpnnn+btVN8uWPMyXAY= +github.com/weppos/publicsuffix-go v0.30.1-0.20230620154423-38c92ad2d5c6/go.mod h1:wdMq89hDN07Zqr0yqYAXIBTJXl4MEELx+HYHOZdf5gM= +github.com/weppos/publicsuffix-go/publicsuffix/generator v0.0.0-20220927085643-dc0d00c92642/go.mod h1:GHfoeIdZLdZmLjMlzBftbTDntahTttUMWjxZwQJhULE= github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= +github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= +github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= @@ -3563,9 +4944,16 @@ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1: github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/xhit/go-str2duration v1.2.0/go.mod h1:3cPSlfZlUHVlneIVfePFWcJZsuwf+P1v2SRTV4cUmp4= +github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= github.com/xiang90/probing v0.0.0-20160813154853-07dd2e8dfe18/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xitongsys/parquet-go v1.5.1/go.mod h1:xUxwM8ELydxh4edHGegYq1pA8NnMKDx0K/GyB0o2bww= +github.com/xitongsys/parquet-go v1.6.2/go.mod h1:IulAQyalCm0rPiZVNnCgm/PCL64X2tdSVGMQ/UeKqWA= +github.com/xitongsys/parquet-go-source v0.0.0-20190524061010-2b72cbee77d5/go.mod h1:xxCx7Wpym/3QCo6JhujJX51dzSXrwmb0oH6FQb39SEA= +github.com/xitongsys/parquet-go-source v0.0.0-20200817004010-026bad9b25d0/go.mod h1:HYhIKsdns7xz80OgkbgJYrtQY7FjHWHKH6cvN7+czGE= +github.com/xitongsys/parquet-go-source v0.0.0-20220315005136-aec0fe3e777c/go.mod h1:qLb2Itmdcp7KPa5KZKvhE9U1q5bYSOmgeOckF/H2rQA= github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1/go.mod h1:QcJo0QPSfTONNIgpN5RA8prR7fF8nkF6cTWTcNerRO8= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= @@ -3574,10 +4962,19 @@ github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= +github.com/yashtewari/glob-intersection v0.1.0/go.mod h1:LK7pIC3piUjovexikBbJ26Yml7g8xa5bsjfx2v1fwok= github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= github.com/yhat/scrape v0.0.0-20161128144610-24b7890b0945/go.mod h1:4vRFPPNYllgCacoj+0FoKOjTW68rUhEfqPLiEJaK2w8= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= +github.com/ysmood/fetchup v0.2.2/go.mod h1:xhibcRKziSvol0H1/pj33dnKrYyI2ebIvz5cOOkYGns= +github.com/ysmood/fetchup v0.2.3/go.mod h1:xhibcRKziSvol0H1/pj33dnKrYyI2ebIvz5cOOkYGns= +github.com/ysmood/goob v0.4.0/go.mod h1:u6yx7ZhS4Exf2MwciFr6nIM8knHQIE22lFpWHnfql18= +github.com/ysmood/gop v0.0.2/go.mod h1:rr5z2z27oGEbyB787hpEcx4ab8cCiPnKxn0SUHt6xzk= +github.com/ysmood/got v0.34.1/go.mod h1:yddyjq/PmAf08RMLSwDjPyCvHvYed+WjHnQxpH851LM= +github.com/ysmood/gotrace v0.6.0/go.mod h1:TzhIG7nHDry5//eYZDYcTzuJLYQIkykJzCRIo4/dzQM= +github.com/ysmood/gson v0.7.3/go.mod h1:3Kzs5zDl21g5F/BlLTNcuAGAYLKt2lV5G8D1zF3RNmg= +github.com/ysmood/leakless v0.8.0/go.mod h1:R8iAXPRaG97QJwqxs74RdwzcRHT1SWCGTNqY8q0JvMQ= github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= @@ -3601,8 +4998,22 @@ github.com/yvasiyarov/gorelic v0.0.7/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96Tg github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20160601141957-9c099fbc30e9 h1:AsFN8kXcCVkUFHyuzp1FtYbzp1nCO/H6+1uPSGEyPzM= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20160601141957-9c099fbc30e9/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= +github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= +github.com/zeebo/errs v1.3.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= +github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= +github.com/zmap/rc2 v0.0.0-20131011165748-24b9757f5521/go.mod h1:3YZ9o3WnatTIZhuOtot4IcUfzoKVjUHqu6WALIyI0nE= +github.com/zmap/rc2 v0.0.0-20190804163417-abaa70531248/go.mod h1:3YZ9o3WnatTIZhuOtot4IcUfzoKVjUHqu6WALIyI0nE= +github.com/zmap/zcertificate v0.0.0-20180516150559-0e3d58b1bac4/go.mod h1:5iU54tB79AMBcySS0R2XIyZBAVmeHranShAFELYx7is= +github.com/zmap/zcertificate v0.0.1/go.mod h1:q0dlN54Jm4NVSSuzisusQY0hqDWvu92C+TWveAxiVWk= +github.com/zmap/zcrypto v0.0.0-20201128221613-3719af1573cf/go.mod h1:aPM7r+JOkfL+9qSB4KbYjtoEzJqUK50EXkkJabeNJDQ= +github.com/zmap/zcrypto v0.0.0-20201211161100-e54a5822fb7e/go.mod h1:aPM7r+JOkfL+9qSB4KbYjtoEzJqUK50EXkkJabeNJDQ= +github.com/zmap/zcrypto v0.0.0-20220402174210-599ec18ecbac/go.mod h1:egdRkzUylATvPkWMpebZbXhv0FMEMJGX/ur0D3Csk2s= +github.com/zmap/zcrypto v0.0.0-20230310154051-c8b263fd8300/go.mod h1:mOd4yUMgn2fe2nV9KXsa9AyQBFZGzygVPovsZR+Rl5w= +github.com/zmap/zlint/v3 v3.0.0/go.mod h1:paGwFySdHIBEMJ61YjoqT4h7Ge+fdYG4sUQhnTb1lJ8= +github.com/zmap/zlint/v3 v3.4.0/go.mod h1:WgepL2QqxyMHnrOWJ54NqrgfMtOyuXr52wEE0tcfo9k= +github.com/zmap/zlint/v3 v3.5.0/go.mod h1:JkNSrsDJ8F4VRtBZcYUQSvnWFL7utcjDIn+FE64mlBI= github.com/zoido/yag-config v0.4.0/go.mod h1:HcK2GbfzhDVmgwP4miBIfD2qKz6Y5LAJayebVhie/nE= gitlab.com/bosi/decorder v0.2.3/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= go.elastic.co/apm v1.5.0/go.mod h1:OdB9sPtM6Vt7oz3VXt7+KR96i9li74qrxBGHTQygFvk= @@ -3615,6 +5026,7 @@ go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= +go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.0.0-20181031231232-83304cfc808c/go.mod h1:weASp41xM3dk0YHg1s/W8ecdGP5G4teSTMBPpYAaUgA= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= @@ -3627,14 +5039,25 @@ go.etcd.io/etcd/api/v3 v3.5.8/go.mod h1:uyAal843mC8uUVSLWz6eHa/d971iDGnCRpmKd2Z+ go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.8/go.mod h1:y+CzeSmkMpWN2Jyu1npecjB9BBnABxGM4pN8cGuJeL4= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= go.etcd.io/etcd/client/v2 v2.305.4/go.mod h1:Ud+VUwIi9/uQHOMA+4ekToJ12lTxlv0zB/+DHwTGEbU= +go.etcd.io/etcd/client/v2 v2.305.8/go.mod h1:ZlAsxDK5/10I6xVHhFo9zinCMr/DDLKFetDDXlzKwqE= go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= +go.etcd.io/etcd/client/v3 v3.5.8/go.mod h1:idZYIPVkttBJBiRigkB5EM0MmEyx8jcl18zCV3F5noc= +go.etcd.io/etcd/etcdctl/v3 v3.5.8/go.mod h1:ur5LRmFUo1Rcnwe8i71YVtH5y4RjsW/6YNmTQlz1N8E= +go.etcd.io/etcd/etcdutl/v3 v3.5.8/go.mod h1:ttDqxIhpW9PqQdw+jJhUpLF+f37TnnSRJpkJSkCikts= go.etcd.io/etcd/pkg/v3 v3.5.4/go.mod h1:OI+TtO+Aa3nhQSppMbwE4ld3uF1/fqqwbpfndbbrEe0= +go.etcd.io/etcd/pkg/v3 v3.5.8/go.mod h1:C17MJkZHJIyJV+wWWx6Jz6YS6BfdkOnUkSwT9uuEO7s= go.etcd.io/etcd/raft/v3 v3.5.4/go.mod h1:SCuunjYvZFC0fBX0vxMSPjuZmpcSk+XaAcMrD6Do03w= +go.etcd.io/etcd/raft/v3 v3.5.8/go.mod h1:W6P5WxtOMfYNdLSEJX3vc8Pg6LOt+ewI9UCFKcnIexA= go.etcd.io/etcd/server/v3 v3.5.4/go.mod h1:S5/YTU15KxymM5l3T6b09sNOHPXqGYIZStpuuGbb65c= +go.etcd.io/etcd/server/v3 v3.5.8/go.mod h1:1y2ahPOrlE4pzVV5+rBCDur7QQcEP0MNUPO2dyzwjso= +go.etcd.io/etcd/tests/v3 v3.5.8/go.mod h1:KFgEgZWwXZILKsOX3f3VyGmUHQgbG/yM9edQNTkXsdE= +go.etcd.io/etcd/v3 v3.5.8/go.mod h1:vptUbt0q/yZF9X3xyZ0Q7XHoYJ8okR64FCRpZjz4Zyg= +go.etcd.io/gofail v0.1.0/go.mod h1:VZBCXYGZhHAinaBiiqYvuDynvahNsAyLFwB3kEHKz1M= go.mongodb.org/atlas v0.13.0/go.mod h1:wVCnHcm/7/IfTjEB6K8K35PLG70yGz8BdkRwX0oK9/M= go.mongodb.org/atlas v0.15.0/go.mod h1:lQhRHIxc6jQHEK3/q9WLu/SdBkPj2fQYhjLGUF6Z3U8= go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= @@ -3647,7 +5070,11 @@ go.mongodb.org/mongo-driver v1.4.4/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4S go.mongodb.org/mongo-driver v1.4.6/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc= go.mongodb.org/mongo-driver v1.5.1/go.mod h1:gRXCHX4Jo7J0IJ1oDQyUxF7jfy19UfxniMS4xxMmUqw= go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg= +go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng= +go.mongodb.org/mongo-driver v1.8.3/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY= go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8= +go.mongodb.org/mongo-driver v1.11.0/go.mod h1:s7p5vEtfbeR1gYi6pnj3c3/urpbLv2T5Sfd6Rp2HBB8= +go.mongodb.org/mongo-driver v1.11.2/go.mod h1:s7p5vEtfbeR1gYi6pnj3c3/urpbLv2T5Sfd6Rp2HBB8= go.mongodb.org/mongo-driver v1.11.3/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g= go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80= go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= @@ -3672,38 +5099,110 @@ go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= go.opentelemetry.io/contrib/instrumentation/github.com/emicklei/go-restful/otelrestful v0.20.0/go.mod h1:oQkZOyq61qZBItEFqhfpobK6X/oDPR7/Qr+MXjVSTks= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.25.0/go.mod h1:E5NNboN0UqSAki0Atn9kVwaN7I+l25gGxDqBueo/74E= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.28.0/go.mod h1:vEhqr0m4eTc+DWxfsXoXue2GBgV2uUwVznkGIHW/e5w= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.41.0/go.mod h1:YjmsSWM1VTcWXFSgyrmLADPMZZohioz9onjgkikk59w= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.45.0/go.mod h1:vsh3ySueQCiKPxFLvjWC4Z135gIa34TQ/NSqkDTZYUM= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1/go.mod h1:4UoMYEZOC0yN/sPGH76KPkkU7zgiEWYWL9vwmbnTJPE= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.48.0 h1:P+/g8GpuJGYbOp2tAdKrIPUX9JO02q8Q0YNlHolpibA= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.48.0/go.mod h1:tIKj3DbO8N9Y2xo52og3irLsPI4GW02DSMtrVgNMgxg= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.31.0/go.mod h1:PFmBsWbldL1kiWZk9+0LBZz2brhByaGsvp6pRICMlPE= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.32.0/go.mod h1:5eCOqeGphOyz6TsY3ZDNjE33SM/TFAK3RGuCL2naTgY= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.40.0/go.mod h1:pcQ3MM3SWvrA71U4GDqv9UFDJ3HQsW7y5ZO3tDTlUdI= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.41.0/go.mod h1:xmv4aGDeCpkNeyGH0iKgaj/E6XPeRqG20QF2IC7UXr0= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0/go.mod h1:62CPTSry9QZtOaSsE3tOzhx6LzDhHnXJ6xHeMNNiM6Q= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1/go.mod h1:sEGXWArGqc3tVa+ekntsN65DmVbVeW+7lTKTjZF3/Fo= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0 h1:doUP+ExOpH3spVTLS0FcWGLnQrPct/hD/bCPbDRUEAU= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0/go.mod h1:rdENBZMT2OE6Ne/KLwpiXudnAsbdrdBaqBvTN8M8BgA= go.opentelemetry.io/contrib/propagators v0.20.0/go.mod h1:yLmt93MeSiARUwrK57bOZ4FBruRN4taLiW1lcGfnOes= go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= +go.opentelemetry.io/otel v1.0.1/go.mod h1:OPEOD4jIT2SlZPMmwT6FqZz2C0ZNdQqiWcoK6M0SNFU= go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs= +go.opentelemetry.io/otel v1.6.0/go.mod h1:bfJD2DZVw0LBxghOTlgnlI0CV3hLDu9XF/QKOUXMTQQ= +go.opentelemetry.io/otel v1.6.1/go.mod h1:blzUabWHkX6LJewxvadmzafgh/wnvBSDBdOuwkAtrWQ= +go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk= +go.opentelemetry.io/otel v1.11.1/go.mod h1:1nNhXBbWSD0nsL38H6btgnFN2k4i0sNLHNNMZMSbUGE= +go.opentelemetry.io/otel v1.14.0/go.mod h1:o4buv+dJzx8rohcUeRmWUZhqupFvzWis188WlggnNeU= +go.opentelemetry.io/otel v1.15.0/go.mod h1:qfwLEbWhLPk5gyWrne4XnF0lC8wtywbuJbgfAE3zbek= +go.opentelemetry.io/otel v1.17.0/go.mod h1:I2vmBGtFaODIVMBSTPVDlJSzBDNf93k60E6Ft0nyjo0= +go.opentelemetry.io/otel v1.19.0/go.mod h1:i0QyjOq3UPoTzff0PJB2N66fb4S0+rSbSB15/oyH9fY= +go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= go.opentelemetry.io/otel v1.23.0 h1:Df0pqjqExIywbMCMTxkAwzjLZtRf+bBKLbUcpxO2C9E= go.opentelemetry.io/otel v1.23.0/go.mod h1:YCycw9ZeKhcJFrb34iVSkyT0iczq/zYDtZYFufObyB0= +go.opentelemetry.io/otel/exporters/jaeger v1.17.0/go.mod h1:nPCqOnEH9rNLKqH/+rrUjiMzHJdV1BlpKcTwRTyKkKI= go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.6.1/go.mod h1:NEu79Xo32iVb+0gVNV8PMd7GoWqnyDXRlj04yFjqz40= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.7.0/go.mod h1:M1hVZHNxcbkAlcvrOMlpQ4YOO3Awf+4N2dxkZL3xm04= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.14.0/go.mod h1:UFG7EBMRdXyFstOwH028U0sVf+AvukSGhF0g8+dmNG8= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.15.0/go.mod h1:uOTV75+LOzV+ODmL8ahRLWkFA3eQcSC2aAsbxIu4duk= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.0.1/go.mod h1:Kv8liBeVNFkkkbilbgWRpV+wWuu+H5xdOT6HAgd30iw= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0/go.mod h1:hO1KLR7jcKaDDKDkvI9dP/FIhpmna5lkqPUQdEjFAM8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.6.1/go.mod h1:YJ/JbY5ag/tSQFXzH3mtDmHqzF3aFn3DI/aB1n7pt4w= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.7.0/go.mod h1:ceUgdyfNv4h4gLxHR0WNfDiiVmZFodZhZSbOLhpxqXE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.14.0/go.mod h1:HrbCVv40OOLTABmOn1ZWty6CHXkU8DK/Urc43tHug70= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.15.0/go.mod h1:pvkFJxNUXyJ5i8u6m8NIcqkoOf/65VM2mSyBbBJfeVQ= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0/go.mod h1:IPtUMKL4O3tH5y+iXVyAXqpAwMuzC1IrxVS81rummfE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.0.1/go.mod h1:xOvWoTOrQjxjW61xtOmD/WKGRYb/P4NzRo3bs65U6Rk= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.3.0/go.mod h1:keUU7UfnwWTWpJ+FWnyqmogPa82nuU5VUANFq49hlMY= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.6.1/go.mod h1:UJJXJj0rltNIemDMwkOJyggsvyMG9QHfJeFH0HS5JjM= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.7.0/go.mod h1:E+/KKhwOSw8yoPxSSuUHG6vKppkvhN+S1Jc7Nib3k3o= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.14.0/go.mod h1:5w41DY6S9gZrbjuq6Y+753e96WfPha5IcsOSZTtullM= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.15.0/go.mod h1:RPagkaZrpwD+rSwQjzos6rBLsHOvenOqufCj4/7I46E= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0/go.mod h1:0+KuTDyKL4gjKCF75pHOX4wuzYDUZYfAQdSu43o+Z2I= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0/go.mod h1:QNX1aly8ehqqX1LEa6YniTU7VY9I6R3X/oPxhGdTceE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.6.1/go.mod h1:DAKwdo06hFLc0U88O10x4xnb5sc7dDRDqRuiN+io8JE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.14.0/go.mod h1:+N7zNjIJv4K+DeX67XXET0P+eIciESgaFDBqh+ZJFS4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0/go.mod h1:oVdCUtjq9MK9BlS7TtucsQwUcXcymNiEDjgDD2jMtZU= go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= +go.opentelemetry.io/otel/metric v0.28.0/go.mod h1:TrzsfQAmQaB1PDcdhBauLMk7nyyg9hm+GoQq/ekE9Iw= +go.opentelemetry.io/otel/metric v0.30.0/go.mod h1:/ShZ7+TS4dHzDFmfi1kSXMhMVubNoP0oIaBp70J6UXU= +go.opentelemetry.io/otel/metric v0.37.0/go.mod h1:DmdaHfGt54iV6UKxsV9slj2bBRJcKC1B1uvDLIioc1s= +go.opentelemetry.io/otel/metric v0.38.0/go.mod h1:uAtxN5hl8aXh5irD8afBtSwQU5Zjg64WWSz6KheZxBg= +go.opentelemetry.io/otel/metric v1.17.0/go.mod h1:h4skoxdZI17AxwITdmdZjjYJQH5nzijUUjm+wtPph5o= +go.opentelemetry.io/otel/metric v1.19.0/go.mod h1:L5rUsV9kM1IxCj1MmSdS+JQAcVm319EUrDVLrt7jqt8= +go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= go.opentelemetry.io/otel/metric v1.23.0 h1:pazkx7ss4LFVVYSxYew7L5I6qvLXHA0Ap2pwV+9Cnpo= go.opentelemetry.io/otel/metric v1.23.0/go.mod h1:MqUW2X2a6Q8RN96E2/nqNoT+z9BSms20Jb7Bbp+HiTo= go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= +go.opentelemetry.io/otel/sdk v1.0.1/go.mod h1:HrdXne+BiwsOHYYkBE5ysIcv2bvdZstxzmCQhxTcZkI= go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs= +go.opentelemetry.io/otel/sdk v1.6.1/go.mod h1:IVYrddmFZ+eJqu2k38qD3WezFR2pymCzm8tdxyh3R4E= +go.opentelemetry.io/otel/sdk v1.7.0/go.mod h1:uTEOTwaqIVuTGiJN7ii13Ibp75wJmYUDe374q6cZwUU= +go.opentelemetry.io/otel/sdk v1.11.1/go.mod h1:/l3FE4SupHJ12TduVjUkZtlfFqDCQJlOlithYrdktys= +go.opentelemetry.io/otel/sdk v1.14.0/go.mod h1:bwIC5TjrNG6QDCHNWvW4HLHtUQ4I+VQDsnjhvyZCALM= +go.opentelemetry.io/otel/sdk v1.15.0/go.mod h1:XDEMrYWzJ4YlC17i6Luih2lwDw2j6G0PkUfr1ZqE+rQ= +go.opentelemetry.io/otel/sdk v1.17.0/go.mod h1:U87sE0f5vQB7hwUoW98pW5Rz4ZDuCFBZFNUBlSgmDFQ= +go.opentelemetry.io/otel/sdk v1.19.0/go.mod h1:NedEbbS4w3C6zElbLdPJKOpJQOrGUJ+GfzpjUvI0v1A= +go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= go.opentelemetry.io/otel/sdk v1.22.0 h1:6coWHw9xw7EfClIC/+O31R8IY3/+EiRFHevmHafB2Gw= go.opentelemetry.io/otel/sdk v1.22.0/go.mod h1:iu7luyVGYovrRpe2fmj3CVKouQNdTOkxtLzPvPz1DOc= go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= +go.opentelemetry.io/otel/trace v1.0.1/go.mod h1:5g4i4fKLaX2BQpSBsxw8YYcgKpMMSW3x7ZTuYBr3sUk= go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk= +go.opentelemetry.io/otel/trace v1.6.0/go.mod h1:qs7BrU5cZ8dXQHBGxHMOxwME/27YH2qEp4/+tZLLwJE= +go.opentelemetry.io/otel/trace v1.6.1/go.mod h1:RkFRM1m0puWIq10oxImnGEduNBzxiN7TXluRBtE+5j0= +go.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48yyE4TNvoHqU= +go.opentelemetry.io/otel/trace v1.11.1/go.mod h1:f/Q9G7vzk5u91PhbmKbg1Qn0rzH1LJ4vbPHFGkTPtOk= +go.opentelemetry.io/otel/trace v1.14.0/go.mod h1:8avnQLK+CG77yNLUae4ea2JDQ6iT+gozhnZjy/rw9G8= +go.opentelemetry.io/otel/trace v1.15.0/go.mod h1:CUsmE2Ht1CRkvE8OsMESvraoZrrcgD1J2W8GV1ev0Y4= +go.opentelemetry.io/otel/trace v1.17.0/go.mod h1:I/4vKTgFclIsXRVucpH25X0mpFSczM7aHeaz0ZBLWjY= +go.opentelemetry.io/otel/trace v1.19.0/go.mod h1:mfaSyvGyEJEI0nyV2I4qhNQnbBOUUmYZpYojqMnX2vo= +go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= go.opentelemetry.io/otel/trace v1.23.0 h1:37Ik5Ib7xfYVb4V1UtnT97T1jI+AoIYkJyPkuL4iJgI= go.opentelemetry.io/otel/trace v1.23.0/go.mod h1:GSGTbIClEsuZrGIzoEHqsVfxgn5UkggkflQwDScNUsk= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.9.0/go.mod h1:1vKfU9rv61e9EVGthD1zNvUbiwPcimSsOPU9brfSHJg= go.opentelemetry.io/proto/otlp v0.11.0/go.mod h1:QpEjXPrNQzrFDZgoTo49dgHR9RYRSrg3NAKnUGl9YpQ= +go.opentelemetry.io/proto/otlp v0.12.1/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v0.16.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= go.pedge.io/pb v0.0.0-20171203174523-dbc791b8a69c/go.mod h1:GkGa0JfsGuOWpsyfhrOgESFpERl3k6SFcjPCItfr+04= go.pedge.io/proto v0.0.0-20170422232847-c5da4db108f6/go.mod h1:PloHtlON9Mj1YdxURycTKxSn+p+4Ro9mK/5jMl/v//Y= go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 h1:+FNtrFTmVw0YZGpBGX56XDee331t6JAXeK2bcyhLOOc= @@ -3717,20 +5216,25 @@ go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/automaxprocs v1.2.0/go.mod h1:YfO3fm683kQpzETxlTGZhGIVmXAhaw3gxeBADbpZtnU= +go.uber.org/automaxprocs v1.4.0/go.mod h1:/mTEdr7LvHhs0v7mjdxDreTz1OG5zdZGqgOnhWiR/+Q= +go.uber.org/automaxprocs v1.5.1/go.mod h1:BF4eumQw0P9GtnuxxovUd06vwm1o18oMzFtK66vU6XU= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= +go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= +go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= @@ -3745,19 +5249,23 @@ go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= gocloud.dev v0.20.0 h1:mbEKMfnyPV7W1Rj35R1xXfjszs9dXkwSOq2KoFr25g8= gocloud.dev v0.20.0/go.mod h1:+Y/RpSXrJthIOM8uFNzWp6MRu9pFPNFEEZrQMxpkfIc= +goji.io/v3 v3.0.0/go.mod h1:c02FFnNiVNCDo+DpR2IhBQpM9r5G1BG/MkHNTPUJ13U= +golang.org/x/arch v0.0.0-20180920145803-b19384d3c130/go.mod h1:cYlCBUl1MsqxdiKgmc4uh7TxZfWSFLOGSRR090WDxt8= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.1.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180608092829-8ac0e0d97ce4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180723164146-c126467f60eb/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181015023909-0c41d7ab0a0e/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190103213133-ff983b9c42bc/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -3774,15 +5282,17 @@ golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20190927123631-a832865fa7ad/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191010185427-af544f31c8ac/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191112222119-e1110fd1c708/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20191117063200-497ca9f6d64f/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200117160349-530e935923ad/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -3791,17 +5301,24 @@ golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201124201722-c8d3bf9c5392/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210920023735-84f357641f63/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20211202192323-5770296d904e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220208050332-20e1d8d225ab/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= @@ -3814,13 +5331,24 @@ golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20221012134737-56aed061732a/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -3832,6 +5360,7 @@ golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxT golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= @@ -3841,8 +5370,12 @@ golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMk golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= golang.org/x/exp v0.0.0-20210220032938-85be41e4509f/go.mod h1:I6l2HNBLBZEcrOoCpyKLdY2lHoRZ8lI4x60KMCQDft4= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= -golang.org/x/exp v0.0.0-20230728194245-b0cb94b80691 h1:/yRP+0AN7mf5DkD3BAI6TOFnd51gEoDEb8o35jIFtgw= -golang.org/x/exp v0.0.0-20230728194245-b0cb94b80691/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= +golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20230108222341-4b8118a2686a/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230307190834-24139beb5833/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20220613132600-b0d781184e0d/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= @@ -3850,6 +5383,16 @@ golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91/go.mod h1:AbB0pIl golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181217174547-8f45f776aaf1/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -3887,10 +5430,10 @@ golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20171107184841-a337091b0525/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -3927,8 +5470,8 @@ golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190930134127-c5a3c61f89f3/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191009170851-d66e71096ffb/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191119073136-fc4aabc6c914/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -3968,12 +5511,15 @@ golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211020060615-d418f374d309/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -3986,24 +5532,36 @@ golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220805013720-a33c5aa5df48/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20220906165146-f3363e06e74c/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20220921155015-db77216a4ee9/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20220926192436-02166a98028e/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221004154528-8021a29435af/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.3.1-0.20221206200815-1e63c2f08a10/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/net v0.13.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/oauth2 v0.0.0-20180724155351-3d292e4d0cdc/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -4025,6 +5583,7 @@ golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= @@ -4037,10 +5596,22 @@ golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j golang.org/x/oauth2 v0.0.0-20220524215830-622c5d57e401/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.3.0/go.mod h1:rQrIauxkUhJ6CuwEXwymO2/eh4xz2ZWF1nBkcxS+tGk= +golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= +golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= +golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= +golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk= +golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= +golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= +golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= golang.org/x/oauth2 v0.17.0 h1:6m3ZPmLEFdVxKKWnKq4VqZ60gutO35zm+zrAHVmHyDQ= golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -4059,16 +5630,18 @@ golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220923202941-7f9b1623fab7/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180903190138-2b024373dcd9/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -4077,11 +5650,12 @@ golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181218192612-074acd46bca6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190116161447-11f53e031339/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190310054646-10058d7d4faa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -4128,6 +5702,7 @@ golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191113165036-4c7a9d0fe056/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191119060738-e882bf8e40c2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -4173,11 +5748,11 @@ golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201223074533-0d417f636930/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -4186,6 +5761,7 @@ golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210301091718-77cc2087c03b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -4196,6 +5772,7 @@ golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210503080704-8803ae5d1324/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -4208,11 +5785,13 @@ golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210818153620-00dd8d7831e7/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210921065528-437939a70204/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -4220,6 +5799,7 @@ golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211025112917-711f33c9992c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211031064116-611d5d643895/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -4233,7 +5813,9 @@ golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220207234003-57398862261d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220325203850-36772127a21f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220405210540-1e041c57c461/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -4254,22 +5836,28 @@ golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220906165534-d0df966e6959/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220913175220-63ea55921009/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221013171732-95e765b1cc43/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= @@ -4277,28 +5865,32 @@ golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9sn golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= -golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.1.1-0.20171102192421-88f656faf3f3/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180805044716-cb6730876b98/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.1/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -4312,16 +5904,15 @@ golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/time v0.0.0-20170424234030-8be79e1e0910/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190921001708-c4c64cad1fd0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -4330,10 +5921,12 @@ golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220224211638-0e9765cccd65/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220411224347-583f2d630306/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.2.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= @@ -4341,7 +5934,6 @@ golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181219222714-6e267b5cc78e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -4378,6 +5970,7 @@ golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190706070813-72ffa07ba3db/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190718200317-82a3ea8a504c/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= +golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190813034749-528a2984e271/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -4387,6 +5980,7 @@ golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190918214516-5a1a30219888/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190930201159-7c411dea38b0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -4397,6 +5991,7 @@ golang.org/x/tools v0.0.0-20191111182352-50fa39b762bc/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191118222007-07fc4c7f2b98/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -4416,6 +6011,7 @@ golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200313205530-4303120df7d8/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200317043434-63da46f3035e/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= @@ -4427,6 +6023,7 @@ golang.org/x/tools v0.0.0-20200416214402-fc959738d646/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200601175630-2caf76543d99/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -4455,6 +6052,7 @@ golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4X golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -4463,6 +6061,7 @@ golang.org/x/tools v0.0.0-20210101214203-2dba1e4ea05c/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210112230658-8b4aab62c064/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= @@ -4471,6 +6070,8 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff/go.mod h1:YD9qOF0M9xpSpdWTBbzEl5e/RnCefISl8E5Noe10jFM= golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= @@ -4482,12 +6083,15 @@ golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4 golang.org/x/tools v0.1.12-0.20220628192153-7743d1d949f1/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= +golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= +golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4= golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM= golang.org/x/tools v0.12.0/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= @@ -4510,9 +6114,14 @@ gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuB gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= +gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= +gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo= google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.0.0-20181021000519-a2651947f503/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= @@ -4549,6 +6158,7 @@ google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjR google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= +google.golang.org/api v0.46.0/go.mod h1:ceL4oozhkAiTID8XMmJBsIxID/9wMXJVVFXPg4ylg3I= google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= @@ -4557,6 +6167,7 @@ google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6 google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.58.0/go.mod h1:cAbP2FsxoGVNwtgNAmmn3y5G1TWAiVYRmg4yku3lv+E= google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= google.golang.org/api v0.60.0/go.mod h1:d7rl65NZAkEQ90JFzqBjcRq1TVeG5ZoGV3sSpEnnVb4= google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= @@ -4584,6 +6195,23 @@ google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91 google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= +google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= +google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= +google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= +google.golang.org/api v0.118.0/go.mod h1:76TtD3vkgmZ66zZzp72bUUklpmQmKlhh6sYtIjYK+5E= +google.golang.org/api v0.121.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= +google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= +google.golang.org/api v0.123.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= +google.golang.org/api v0.124.0/go.mod h1:xu2HQurE5gi/3t1aFCvhPD781p0a3p11sdunTJ2BlP4= +google.golang.org/api v0.125.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= +google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= +google.golang.org/api v0.128.0/go.mod h1:Y611qgqaE92On/7g65MQgxYul3c0rEB894kniWLY750= +google.golang.org/api v0.139.0/go.mod h1:CVagp6Eekz9CjGZ718Z+sloknzkDJE7Vc1Ckj9+viBk= +google.golang.org/api v0.149.0/go.mod h1:Mwn1B7JTXrzXtnvmzQE2BD6bYZQ8DShKZDZbeN9I7qI= +google.golang.org/api v0.156.0/go.mod h1:bUSmn4KFO0Q+69zo9CNIDp4Psi6BqM0np0CbzKRSiSY= google.golang.org/api v0.166.0 h1:6m4NUwrZYhAaVIHZWxaKjw1L1vNAjtMwORmKRyEEo24= google.golang.org/api v0.166.0/go.mod h1:4FcBc686KFi7QI/U51/2GKKevfZMpM17sCdibqe/bSA= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= @@ -4621,7 +6249,6 @@ google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191114150713-6bbd007550de/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= @@ -4674,7 +6301,9 @@ google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210429181445-86c259c2b4ab/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210517163617-5e0236093d7a/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= @@ -4690,9 +6319,11 @@ google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEc google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210921142501-181ce0d877f6/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211018162055-cf77aa76bad2/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211021150943-2b146023228c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= @@ -4712,6 +6343,7 @@ google.golang.org/genproto v0.0.0-20220301145929-1ac2ace0dbf7/go.mod h1:kGP+zUP2 google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= @@ -4749,14 +6381,104 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201204527-e3fa12d562f3/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= google.golang.org/genproto v0.0.0-20221205194025-8222ab48f5fc/go.mod h1:1dOng4TWOomJrDGhpXjfCD35wQC6jnC7HpRmOFRqEV0= +google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230112194545-e10362b5ecf9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230113154510-dbe35b8444a5/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230123190316-2c411cf9d197/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230127162408-596548ed4efa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= +google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230301171018-9ab4bdc49ad5/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= +google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= +google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/genproto v0.0.0-20230525234025-438c736192d0/go.mod h1:9ExIQyXL5hZrHzQceCwuSYwZZ5QZBazOcprJ5rgs3lY= +google.golang.org/genproto v0.0.0-20230526161137-0005af68ea54/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk= +google.golang.org/genproto v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto v0.0.0-20230629202037-9506855d4529/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= +google.golang.org/genproto v0.0.0-20230711160842-782d3b101e98/go.mod h1:S7mY02OqCJTD0E1OiQy1F72PWFB4bZJ87cAtLPYgDR0= +google.golang.org/genproto v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:0ggbjUrZYpy1q+ANUS30SEoGZ53cdfwtbuG7Ptgy108= +google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8= +google.golang.org/genproto v0.0.0-20230821184602-ccc8af3d0e93/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:CCviP9RmpZ1mxVr8MUjCnSiY09IbAXZxhLE6EhHIdPU= +google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97/go.mod h1:t1VqOqqvce95G3hIDCT5FeO3YUc6Q4Oe24L/+rNMxRk= +google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:EMfReVxb80Dq1hhioy0sOsY9jCE46YDgHlJ7fWVUWRE= +google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI= +google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405/go.mod h1:3WDQMjmJk36UQhjQ89emUzb1mdaHcPeeAh4SCBKznB4= +google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:J7XzRzVy1+IPwWHZUzoD0IccYZIrXILAQpc+Qy9CMhY= +google.golang.org/genproto v0.0.0-20231120223509-83a465c0220f/go.mod h1:nWSwAFPb+qfNJXsoeO3Io7zf4tMSfN8EA8RlDA04GhY= +google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic= +google.golang.org/genproto v0.0.0-20231212172506-995d672761c0/go.mod h1:l/k7rMz0vFTBPy+tFSGvXEd3z+BcoG1k7EHbqm+YBsY= google.golang.org/genproto v0.0.0-20240304212257-790db918fca8 h1:Fe8QycXyEd9mJgnwB9kmw00WgB43eQ/xYO5C6gceybQ= google.golang.org/genproto v0.0.0-20240304212257-790db918fca8/go.mod h1:yA7a1bW1kwl459Ol0m0lV4hLTfrL/7Bkk4Mj2Ir1mWI= +google.golang.org/genproto/googleapis/api v0.0.0-20230525234020-1aefcd67740a/go.mod h1:ts19tUU+Z0ZShN1y3aPyq2+O3d5FUNNgT6FtOzmrNn8= +google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:mPBs5jNgx2GuQGvFwUvVKqtn6HsUw9nP64BedgvqEsQ= +google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ= +google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ= +google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5/go.mod h1:5DZzOUPCLYL3mNkQ0ms0F3EuUNZ7py1Bqeq6sxzI7/Q= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:RdyHbowztCGQySiCvQPgWQWgWhGnouTdCflKoDBt32U= +google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go.mod h1:iargEX0SFPm3xcfMI0d1domjg0ZF4Aa0p2awqyxhvF0= +google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:SUBoKXbI1Efip18FClrQVGjWcyd0QZd8KkvdP34t7ww= +google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:IBQ646DjkDkvUIsVq/cc03FUFQ9wbZu7yE396YcL870= +google.golang.org/genproto/googleapis/api v0.0.0-20231030173426-d783a09b4405/go.mod h1:oT32Z4o8Zv2xPQTg0pbVaPr0MPOH6f14RgXt7zfIpwg= +google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4= +google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f/go.mod h1:Uy9bTZJqmfrw2rIBxgGLnamc78euZULUBrLZ9XTITKI= +google.golang.org/genproto/googleapis/api v0.0.0-20231211222908-989df2bf70f3/go.mod h1:k2dtGpRrbsSyKcNPKKI5sstZkrNCZwpU/ns96JoHbGg= +google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0/go.mod h1:CAny0tYF+0/9rmDB9fahA9YLzX3+AEVl1qXbv5hhj6c= google.golang.org/genproto/googleapis/api v0.0.0-20240304212257-790db918fca8 h1:8eadJkXbwDEMNwcB5O0s5Y5eCfyuCLdvaiOIaGTrWmQ= google.golang.org/genproto/googleapis/api v0.0.0-20240304212257-790db918fca8/go.mod h1:O1cOfN1Cy6QEYr7VxtjOyP5AdAuR0aJ/MYZaaof623Y= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:ylj+BE99M198VPbBh6A8d9n3w8fChvyLK3wwBOjXBFA= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20230807174057-1744710a1577/go.mod h1:NjCQG/D8JandXxM57PZbAJL1DCNL6EypA0vPPwfsc7c= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20231030173426-d783a09b4405/go.mod h1:GRUCuLdzVqZte8+Dl/D4N25yLzcGqqWaYkeVOwulFqw= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20240102182953-50ed04b92917/go.mod h1:O9TvT7A9NLgdqqF0JJXJ+axpaoYiEb8txGmkvy+AvLc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234015-3fc162c6f38a/go.mod h1:xURIpW9ES5+/GZhnV6beoEtxQrnkRGIfP5VQG2tCBLc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:8mL13HKkDa+IuJ8yruA3ci0q+0vsUz4m//+ottjwS5o= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230731190214-cbb8c96f2d6d/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230803162519-f966b187b2e5/go.mod h1:zBEcrKX2ZOcEkHWxBPAIvYUWOKKMIhYcmNiUIu2ji3I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230920183334-c177e329c48b/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:KSqppvjFjtoCI+KGd4PELB0qLNxdJHRGqRI09mB6pQA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97/go.mod h1:v7nGkzlmW8P3n/bKmWBn2WpBjpOEx8Q6gMueudAmKfY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:4cYg8o5yUbm77w8ZX00LhMVNl/YVBFJRYWDc0uYWMs0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:oQ5rr10WTTMvP4A36n8JpR1OrO1BEiV4f78CneXZxkA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f/go.mod h1:L9KNLi232K1/xB6f7AlSX692koaRnKaWSR0stBki0Yc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231211222908-989df2bf70f3/go.mod h1:eJVxU6o+4G1PSczBr85xmyvSNYAKvAYgkub40YGomFM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240102182953-50ed04b92917/go.mod h1:xtjpI3tXFPP051KaWnhvxkiubL/6dJ18vLVf7q2pTOU= google.golang.org/genproto/googleapis/rpc v0.0.0-20240304212257-790db918fca8 h1:IR+hp6ypxjH24bkMfEJ0yHR21+gwPWdV+/IBrPQyn3k= google.golang.org/genproto/googleapis/rpc v0.0.0-20240304212257-790db918fca8/go.mod h1:UCOku4NytXMJuLQE5VuqA5lX3PcHCBo8pxNyvkf4xBs= google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= @@ -4813,10 +6535,25 @@ google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCD google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= +google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= +google.golang.org/grpc v1.56.1/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo= +google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= +google.golang.org/grpc v1.60.0/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= +google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk= google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0/go.mod h1:Dk1tviKTvMCz5tvh7t+fh94dhmQVHuCt2OzJB3CTW9Y= google.golang.org/grpc/examples v0.0.0-20220715232852-f601dfac73c9/go.mod h1:gxndsbNG1n4TZcHGgsYEfVGnTxqfEdfiDv6/DADXX9o= +google.golang.org/grpc/examples v0.0.0-20230224211313-3775f633ce20/go.mod h1:Nr5H8+MlGWr5+xX/STzdoEqJrO+YteqFbMyCsrb6mH0= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -4832,12 +6569,18 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.29.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= +gopkg.in/alexcesaro/statsd.v2 v2.0.0/go.mod h1:i0ubccKGzBVNBpdGV5MocxyA/XlLUJzA7SLonnE4drU= gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -4851,34 +6594,42 @@ gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qS gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/freddierice/go-losetup.v1 v1.0.0-20170407175016-fc9adea44124/go.mod h1:6LXpUYtVsrx91XiupFRJ8jVKOqLZf5PrbEVSGHta/84= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/fsnotify/fsnotify.v1 v1.3.1/go.mod h1:Fyux9zXlo4rWoMSIzpn9fDAYjalPqJ/K1qJ27s+7ltE= gopkg.in/fsnotify/fsnotify.v1 v1.4.7/go.mod h1:Fyux9zXlo4rWoMSIzpn9fDAYjalPqJ/K1qJ27s+7ltE= gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= +gopkg.in/go-jose/go-jose.v2 v2.6.1/go.mod h1:zzZDPkNNw/c9IE7Z9jr11mBZQhKQTMzoEEIoEdZlFBI= gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= gopkg.in/go-playground/validator.v9 v9.31.0/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= gopkg.in/h2non/gock.v1 v1.0.15/go.mod h1:sX4zAkdYX1TRGJ2JY156cFspQn4yRWn6p9EMdODlynE= +gopkg.in/h2non/gock.v1 v1.1.2/go.mod h1:n7UGz/ckNChHiK05rDoiC4MYSunEC/lyaUm2WWaDva0= gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/jcmturner/aescts.v1 v1.0.1/go.mod h1:nsR8qBOg+OucoIW+WMhB3GspUQXq9XorLnQb9XtvcOo= +gopkg.in/jcmturner/dnsutils.v1 v1.0.1/go.mod h1:m3v+5svpVOhtFAP/wSz+yzh4Mc0Fg7eRhxkJMWSIz9Q= gopkg.in/jcmturner/goidentity.v3 v3.0.0/go.mod h1:oG2kH0IvSYNIu80dVAyu/yoefjq1mNfM5bm88whjWx4= +gopkg.in/jcmturner/gokrb5.v7 v7.3.0/go.mod h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuvyavf11/WM= +gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLvuNnlv8= gopkg.in/ldap.v3 v3.0.3/go.mod h1:oxD7NyBuxchC+SgJDE1Q5Od05eGt29SDQVBmV+HYbzw= +gopkg.in/linkedin/goavro.v1 v1.0.5/go.mod h1:Aw5GdAbizjOEl0kAMHV9iHmA8reZzW/OKuJAl4Hb9F0= gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/ory-am/dockertest.v3 v3.3.4/go.mod h1:s9mmoLkaGeAh97qygnNj4xWkiN7e1SKekYC6CovU+ek= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/retry.v1 v1.0.3/go.mod h1:FJkXmWiMaAo7xB+xhvDF59zhfjDWyzmyAxiT4dB688g= gopkg.in/robfig/cron.v2 v2.0.0-20150107220207-be2e0b0deed5/go.mod h1:hiOFpYm0ZJbusNj2ywpbrXowU3G8U6GIQzqn2mw1UIE= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/square/go-jose.v2 v2.3.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= @@ -4887,9 +6638,14 @@ gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76 gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI= gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/src-d/go-billy.v4 v4.3.0/go.mod h1:tm33zBoOwxjYHZIE+OV8bxTWFMJLrconzFMd38aARFk= +gopkg.in/src-d/go-billy.v4 v4.3.2/go.mod h1:nDjArDMp+XMs1aFAESLRjfGSgfvoYN0hDfzEk0GjC98= +gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= +gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8= +gopkg.in/telebot.v3 v3.0.0/go.mod h1:7rExV8/0mDDNu9epSrDm/8j22KLaActH1Tbee6YjzWg= +gopkg.in/telebot.v3 v3.1.2/go.mod h1:GJKwwWqp9nSkIVN51eRKU78aB5f5OnQuWdwiIZfPbko= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= @@ -4914,12 +6670,20 @@ gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gorm.io/driver/postgres v1.3.5/go.mod h1:EGCWefLFQSVFrHGy4J8EtiHCWX5Q8t0yz2Jt9aKkGzU= +gorm.io/gorm v1.23.4/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= +gorm.io/gorm v1.23.5/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools/gotestsum v1.9.0/go.mod h1:6JHCiN6TEjA7Kaz23q1bH0e2Dc3YJjDUZ0DmctFZf+w= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= -gotest.tools/v3 v3.2.0 h1:I0DwBVMGAx26dttAj1BtJLAkVGncrkkUXfJLC4Flt/I= +gotest.tools/v3 v3.1.0/go.mod h1:fHy7eyTmJFO5bQbUsEGQ1v4m2J3Jz9eWL54TP2/ZuYQ= gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= +gotest.tools/v3 v3.3.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= +gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= +gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= +gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= helm.sh/helm/v3 v3.10.3 h1:wL7IUZ7Zyukm5Kz0OUmIFZgKHuAgByCrUcJBtY0kDyw= helm.sh/helm/v3 v3.10.3/go.mod h1:CXOcs02AYvrlPMWARNYNRgf2rNP7gLJQsi/Ubd4EDrI= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -4932,6 +6696,7 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.1.2/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= +honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= honnef.co/go/tools v0.3.3/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw= howett.net/plist v0.0.0-20181124034731-591f970eefbb/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0= k8s.io/api v0.25.1 h1:yL7du50yc93k17nH/Xe9jujAYrcDkI/i5DL1jPz4E3M= @@ -4956,16 +6721,15 @@ k8s.io/component-helpers v0.25.1/go.mod h1:C0zYGZ5jvaPaXsQCIxkTEQ+HqsPvT3cvAtQY8 k8s.io/controller-manager v0.25.1/go.mod h1:lODg+SLM2nKExI9f8dalbvi+6dYqNkrSUyFZOtj9idg= k8s.io/cri-api v0.25.1/go.mod h1:LFvFRFKuO7cFzrcmLle/cwnuVMgoIZ6bMQ+jrzk24Yc= k8s.io/csi-translation-lib v0.25.1/go.mod h1:LZ/L2ow0Ywt2brUzz/DjB2/ODbr+jEdh7tAS9d73rcI= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20190306031000-7a1b7fb0289f/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20190327210449-e17681d19d3a/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20190907103519-ebc107f98eab/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/gengo v0.0.0-20201203183100-97869a43a9d9/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v0.1.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/gengo v0.0.0-20220913193501-391367153a38/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/gengo v0.0.0-20221011193443-fad74ee6edd9/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/klog v0.2.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.4.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= @@ -4974,22 +6738,8 @@ k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ= k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-aggregator v0.25.1/go.mod h1:sIw78EfLuJBA8c0csl+EXY7ni9asm9g18kEYePOW64w= k8s.io/kube-controller-manager v0.25.1/go.mod h1:fFRKgVt7eSlxPnaZBhg7VKU8h2hQGQ8UenfiM2sKum8= -k8s.io/kube-openapi v0.0.0-20180629012420-d83b052f768a/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= -k8s.io/kube-openapi v0.0.0-20180731170545-e3762e86a74c/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= -k8s.io/kube-openapi v0.0.0-20181114233023-0317810137be/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= -k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= -k8s.io/kube-openapi v0.0.0-20190918143330-0270cf2f1c1d/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= -k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= -k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= -k8s.io/kube-openapi v0.0.0-20210216185858-15cd8face8d6/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE= -k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= -k8s.io/kube-openapi v0.0.0-20220124234850-424119656bbf/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= -k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk= -k8s.io/kube-openapi v0.0.0-20220401212409-b28bf2818661/go.mod h1:daOouuuwd9JXpv1L7Y34iV3yf6nxzipkKMWWlqlvK9M= +k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA= k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU= -k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= -k8s.io/kube-openapi v0.0.0-20230515203736-54b630e78af5 h1:azYPdzztXxPSa8wb+hksEKayiz0o+PPisO/d+QhWnoo= -k8s.io/kube-openapi v0.0.0-20230515203736-54b630e78af5/go.mod h1:kzo02I3kQ4BTtEfVLaPbjvCkX97YqGve33wzlb3fofQ= k8s.io/kube-proxy v0.25.1/go.mod h1:upSm57czFM3mntL66s/9XMTnvkO8XADp/hulihMX4n0= k8s.io/kube-scheduler v0.25.1/go.mod h1:FjiqmfOxKruPH30Ul9fSXMuEJ7Nibap3fSDHvFdoLWc= k8s.io/kubectl v0.25.1 h1:M488FUhCMLugm5+kACkDMlldaOz0yLzYpQzUvUP+nDE= @@ -5002,16 +6752,13 @@ k8s.io/metrics v0.25.1/go.mod h1:/t3eughLPd1sQNc47py2vTOY8e1E8bIxecA8rq/qQjM= k8s.io/mount-utils v0.25.1/go.mod h1:WTYq8Ev/JrnkqK2h1jFUnC8qWGuqzMb9XDC+Lu3WNU0= k8s.io/pod-security-admission v0.25.1/go.mod h1:Wq5qUdvu9jVuoGK7qQu+rqO9kIKIT/tgFMHSu3aa5Ro= k8s.io/sample-apiserver v0.25.1/go.mod h1:bN23bmDMrbLP3vGTRhDfR40grAIZL0xx60gh9dIhvcA= -k8s.io/sample-controller v0.25.1/go.mod h1:rlt5cwQbGnD/2C+cqck3+GZUmtTkemP5XXbGaEs0+Xc= k8s.io/system-validators v1.7.0/go.mod h1:gP1Ky+R9wtrSiFbrpEPwWMeYz9yqyy1S/KOh0Vci7WI= k8s.io/test-infra v0.0.0-20181019233642-2e10a0bbe9b3/go.mod h1:2NzXB13Ji0nqpyublHeiPC4FZwU0TknfvyaaNfl/BTA= k8s.io/test-infra v0.0.0-20200115230622-70a5174aa78d/go.mod h1:d8SKryJBXAwfCFVL4wieRez47J2NOOAb9d029sWLseQ= k8s.io/utils v0.0.0-20181019225348-5e321f9a457c/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0= -k8s.io/utils v0.0.0-20190308190857-21c4ce38f2a7/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0= k8s.io/utils v0.0.0-20190506122338-8fab8cb257d5/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20190809000727-6c36bc71fc4a/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -k8s.io/utils v0.0.0-20190923111123-69764acb6e8e/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20191114200735-6ca3b61696b6/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20200124190032-861946025e34/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= @@ -5024,26 +6771,89 @@ k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/ k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20221107191617-1a15be271d1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= k8s.io/utils v0.0.0-20221128185143-99ec85e7a448/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20230202215443-34013725500c/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20230209194617-a36077c30491/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20230220204549-a5ecb0141aa5/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20230308161112-d77c459e9343/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20230313181309-38a27ef9d749/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20230505201702-9f6742963106/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= k8s.io/utils v0.0.0-20240102154912-e7106e64919e h1:eQ/4ljkx21sObifjzXwlPKpdGLrCfRziVtos3ofG/sQ= k8s.io/utils v0.0.0-20240102154912-e7106e64919e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +knative.dev/hack v0.0.0-20230712131415-ddae80293c43/go.mod h1:yk2OjGDsbEnQjfxdm0/HJKS2WqTLEFg/N6nUs6Rqx3Q= knative.dev/pkg v0.0.0-20191101194912-56c2594e4f11/go.mod h1:pgODObA1dTyhNoFxPZTTjNWfx6F0aKsKzn+vaT9XO/Q= knative.dev/pkg v0.0.0-20231023150739-56bfe0dd9626 h1:qFE+UDBRg6cpF5LbA0sv1XK4XZ36Z7aTRCa+HcuxnNQ= knative.dev/pkg v0.0.0-20231023150739-56bfe0dd9626/go.mod h1:g+UCgSKQ2f15kHYu/V3CPtoKo5F1x/2Y1ot0NSK7gA0= +kubevirt.io/api v0.0.0-20230620171819-99a8ec929e30/go.mod h1:zts/6mioR8vGgvYmQ17Cb9XsUR9e/WjJcdokmrE38wY= kubevirt.io/api v1.0.0 h1:RBdXP5CDhE0v5qL2OUQdrYyRrHe/F68Z91GWqBDF6nw= kubevirt.io/api v1.0.0/go.mod h1:CJ4vZsaWhVN3jNbyc9y3lIZhw8nUHbWjap0xHABQiqc= kubevirt.io/client-go v0.59.2 h1:FDUqGxLZEQ9PXMZaeVVKZxDIEUE+LV6kUS41Tuza1PU= kubevirt.io/client-go v0.59.2/go.mod h1:wjfT4pndy3YJwBRbYqguuojvd/ZAlkO7rTVD4DwI34M= +kubevirt.io/containerized-data-importer-api v1.55.0/go.mod h1:92HiQEyzPoeMiCbgfG5Qe10JQVbtWMZOXucy56dKdGg= kubevirt.io/containerized-data-importer-api v1.56.1 h1:Ag6LV/HyaO8u7Uix3iaULSeSFfL1lq2zX0MjNkTR6jE= kubevirt.io/containerized-data-importer-api v1.56.1/go.mod h1:92HiQEyzPoeMiCbgfG5Qe10JQVbtWMZOXucy56dKdGg= kubevirt.io/controller-lifecycle-operator-sdk/api v0.0.0-20220329064328-f3cc58c6ed90 h1:QMrd0nKP0BGbnxTqakhDZAUhGKxPiPiN5gSDqKUmGGc= kubevirt.io/controller-lifecycle-operator-sdk/api v0.0.0-20220329064328-f3cc58c6ed90/go.mod h1:018lASpFYBsYN6XwmA2TIrPCx6e0gviTd/ZNtSitKgc= layeh.com/radius v0.0.0-20190322222518-890bc1058917/go.mod h1:fywZKyu//X7iRzaxLgPWsvc0L26IUpVvE/aeIL2JtIQ= +lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= +modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.3/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.37.0/go.mod h1:vtL+3mdHx/wcj3iEGz84rQa8vEqR6XM84v5Lcvfph20= +modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= +modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= +modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= +modernc.org/ccgo/v3 v3.0.0-20220904174949-82d86e1b6d56/go.mod h1:YSXjPL62P2AMSxBphRHPn7IkzhVHqkvOnRKAKh+W6ZI= +modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws= +modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo= +modernc.org/ccgo/v3 v3.16.13-0.20221017192402-261537637ce8/go.mod h1:fUB3Vn0nVPReA+7IG7yZDfjv1TMWjhQP8gCxrFAtL5g= +modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= +modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= +modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= +modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= +modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= +modernc.org/libc v1.16.19/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0= +modernc.org/libc v1.17.1/go.mod h1:FZ23b+8LjxZs7XtFMbSzL/EhPxNbfZbErxEHc7cbD9s= +modernc.org/libc v1.17.4/go.mod h1:WNg2ZH56rDEwdropAJeZPQkXmDwh+JCA1s/htl6r2fA= +modernc.org/libc v1.18.0/go.mod h1:vj6zehR5bfc98ipowQOM2nIDUZnVew/wNC/2tOGS+q0= +modernc.org/libc v1.20.3/go.mod h1:ZRfIaEkgrYgZDl6pa4W39HgN5G/yDW+NRmNKZBDFrk0= +modernc.org/libc v1.21.4/go.mod h1:przBsL5RDOZajTVslkugzLBj1evTue36jEomFQOoYuI= +modernc.org/libc v1.22.2/go.mod h1:uvQavJ1pZ0hIoC/jfqNoMLURIMhKzINIWypNM17puug= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= +modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.1/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.3.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.4.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.18.1/go.mod h1:6ho+Gow7oX5V+OiOQ6Tr4xeqbx13UZ6t+Fw9IRUG4d4= +modernc.org/sqlite v1.18.2/go.mod h1:kvrTLEWgxUcHa2GfHBQtanR1H9ht3hTJNtKpzH9k1u0= modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= +modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= +modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= +modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= +modernc.org/tcl v1.13.2/go.mod h1:7CLiGIPo1M8Rv1Mitpv5akc2+8fxUd2y2UzC/MfMzy0= +modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= +modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= mvdan.cc/gofumpt v0.1.1/go.mod h1:yXG1r1WqZVKWbVRtBWKWX9+CxGYfA51nSomhM0woR48= mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= @@ -5052,6 +6862,7 @@ mvdan.cc/unparam v0.0.0-20220706161116-678bad134442/go.mod h1:F/Cxw/6mVrNKqrR2Yj mvdan.cc/xurls/v2 v2.0.0/go.mod h1:2/webFPYOXN9jp/lzuj0zuAVlF+9g4KPFJANH1oJhRU= oras.land/oras-go v1.2.0 h1:yoKosVIbsPoFMqAIFHTnrmOuafHal+J/r+I5bdbVWu4= oras.land/oras-go v1.2.0/go.mod h1:pFNs7oHp2dYsYMSS82HaX5l4mpnGO7hbpPN6EWH2ltc= +pgregory.net/rapid v0.3.3/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/letsencrypt v0.0.3/go.mod h1:buyQKZ6IXrRnB7TdkHP0RyEybLx18HHyOSoTyoOLqNY= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= @@ -5060,15 +6871,16 @@ rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30/go.mod h1:fEO7lRTdivWO2qYVCVG7dEADOMo/MLDCVr8So2g88Uw= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.32/go.mod h1:fEO7lRTdivWO2qYVCVG7dEADOMo/MLDCVr8So2g88Uw= sigs.k8s.io/cli-utils v0.27.0/go.mod h1:8ll2fyx+bzjbwmwUnKBQU+2LDbMDsxy44DiDZ+drALg= +sigs.k8s.io/cluster-api v0.2.11 h1:sUngHVvh/DyHhERR1fo7eH2N/xS5qfnK7pCtwrErs68= sigs.k8s.io/cluster-api v0.2.11/go.mod h1:BCw+Pqy1sc8mQ/3d2NZM/f5BApKFCMPsnGvKolvDcA0= -sigs.k8s.io/cluster-api v1.1.6 h1:fd0ap613+3YgKjZ28cN6GzPo5czyTcuyGPV4U60RtjA= -sigs.k8s.io/cluster-api v1.1.6/go.mod h1:WBPgw1yJdvybx/U3Ib49T9Q4JurairgnA/s0afxuE/w= sigs.k8s.io/container-object-storage-interface-spec v0.0.0-20220211001052-50e143052de8/go.mod h1:kafkL5l/lTUrZXhVi/9p1GzpEE/ts29BkWkL3Ao33WU= sigs.k8s.io/controller-runtime v0.13.0 h1:iqa5RNciy7ADWnIc8QxCbOX5FEKVR3uxVxKHRMc2WIQ= sigs.k8s.io/controller-runtime v0.13.0/go.mod h1:Zbz+el8Yg31jubvAEyglRZGdLAjplZl+PgtYNI6WNTI= sigs.k8s.io/controller-tools v0.2.4/go.mod h1:m/ztfQNocGYBgTTCmFdnK94uVvgxeZeE3LtJvd/jIzA= +sigs.k8s.io/controller-tools v0.11.3/go.mod h1:qcfX7jfcfYD/b7lAhvqAyTbt/px4GpvN88WKLFFv7p8= sigs.k8s.io/gcp-compute-persistent-disk-csi-driver v0.7.0 h1:mvSbjzrnOd+3AB/7jvz7UNdZs5fhYorhm2H0A2HcIVg= sigs.k8s.io/gcp-compute-persistent-disk-csi-driver v0.7.0/go.mod h1:aSyCjg9bNQQxY9hnnNo10vjhZsQTkLliruvRXp3N9B4= +sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= @@ -5082,7 +6894,6 @@ sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2 sigs.k8s.io/kustomize/kyaml v0.13.9/go.mod h1:QsRbD0/KcU+wdk0/L0fIp2KLnohkVzs6fQ85/nOXac4= sigs.k8s.io/sig-storage-lib-external-provisioner/v6 v6.3.0 h1:IKsKAnscMyIOqyl8s8V7guTcx0QBEa6OT57EPgAgpmM= sigs.k8s.io/sig-storage-lib-external-provisioner/v6 v6.3.0/go.mod h1:DhZ52sQMJHW21+JXyA2LRUPRIxKnrNrwh+QFV+2tVA4= -sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= diff --git a/pkg/pureutils/pure_types.go b/pkg/pureutils/pure_types.go index 520ffac8e..366766a11 100644 --- a/pkg/pureutils/pure_types.go +++ b/pkg/pureutils/pure_types.go @@ -18,9 +18,11 @@ import ( ) const ( - PureSecretName = "px-pure-secret" - PureS3SecretName = "px-pure-secret-fbs3" - PureJSONKey = "pure.json" + PureSecretName = "px-pure-secret" + PureS3SecretName = "px-pure-secret-fbs3" + PureJSONKey = "pure.json" + NonPxPureSecretName = "px-non-pure-secret" + nonPxPureJsonKey = "non-pure.json" PureSecretArrayZoneLabel = "topology.portworx.io/zone" @@ -76,6 +78,12 @@ func (p *PXPureSecret) GetArrayToZoneMap() map[string]string { return arrayEndpointToZoneMap } +func GetNonPxPureSecret(namespace string) (PXPureSecret, error) { + conf := PXPureSecret{} + err := GetFAPureSecret(&conf, NonPxPureSecretName, namespace) + return conf, err +} + func GetPXPureSecret(namespace string) (PXPureSecret, error) { conf := PXPureSecret{} err := GetPureSecret(&conf, PureSecretName, namespace) @@ -88,6 +96,27 @@ func GetS3Secret(namespace string) (PXPureS3Secret, error) { return conf, err } +func GetFAPureSecret(output interface{}, name, namespace string) error { + secret, err := core.Instance().GetSecret(name, namespace) + if err != nil { + return fmt.Errorf("failed to retrieve secret '%s' from namespace '%s': %v", name, namespace, err) + } + + var pureConnectionJSON []byte + var ok bool + + if pureConnectionJSON, ok = secret.Data[nonPxPureJsonKey]; !ok { + return fmt.Errorf("secret '%s' is missing field '%s'", name, nonPxPureJsonKey) + } + + err = json.Unmarshal(pureConnectionJSON, output) + if err != nil { + return fmt.Errorf("error unmarshaling pure config file from secret '%s': %v", name, err) + } + + return nil +} + func GetPureSecret(output interface{}, name, namespace string) error { secret, err := core.Instance().GetSecret(name, namespace) if err != nil { diff --git a/pkg/pureutils/purefa.go b/pkg/pureutils/purefa.go index aad9de8f8..8e8cb9d2a 100644 --- a/pkg/pureutils/purefa.go +++ b/pkg/pureutils/purefa.go @@ -94,6 +94,20 @@ func ListAllTheVolumesFromSpecificFA(faClient *flasharray.Client) ([]flasharray. return volumes, nil } +// Verifies if Volumes +func IsFAVolumeExists(faClient *flasharray.Client, volumeName string) (bool, error) { + allVolumes, err := ListAllTheVolumesFromSpecificFA(faClient) + if err != nil { + return false, err + } + for _, eachVol := range allVolumes { + if strings.Contains(eachVol.Name, volumeName) { + return true, nil + } + } + return false, nil +} + // GetAllHostGroups Get all Available Host Groups from array func GetAllHostGroups(faClient *flasharray.Client) ([]flasharray.Hostgroup, error) { hostGroup, err := faClient.Hostgroups.ListHostgroups(nil) @@ -134,6 +148,24 @@ func CreateNewHostOnFA(faClient *flasharray.Client, hostName string) (*flasharra return host, nil } +// ListVolumesFromHosts returns list of Volumes +func ListVolumesFromHosts(faClient *flasharray.Client) (map[string][]flasharray.ConnectedVolume, error) { + allHostVolumes := make(map[string][]flasharray.ConnectedVolume) + allHosts, err := ListAllHosts(faClient) + if err != nil { + return nil, err + } + + for _, eachHost := range allHosts { + hostVolumes, err := faClient.Hosts.ListHostConnections(eachHost.Name, nil) + if err != nil { + return nil, err + } + allHostVolumes[eachHost.Name] = hostVolumes + } + return allHostVolumes, nil +} + // ConnectVolumeToHost Connects Volume to Host func ConnectVolumeToHost(faClient *flasharray.Client, hostName string, volName string) (*flasharray.ConnectedVolume, error) { connectedVol, err := faClient.Hosts.ConnectHost(hostName, volName, nil) @@ -143,6 +175,39 @@ func ConnectVolumeToHost(faClient *flasharray.Client, hostName string, volName s return connectedVol, nil } +// DisConnectVolumeFromHost Disconnects Volume from Host +func DisConnectVolumeFromHost(faClient *flasharray.Client, hostName string, volName string) (*flasharray.ConnectedVolume, error) { + connectedVol, err := faClient.Hosts.DisconnectHost(hostName, volName) + if err != nil { + return nil, err + } + return connectedVol, nil +} + +// DeleteVolumeOnFABackend Deletes Volume on FA Backend +func DeleteVolumeOnFABackend(faClient *flasharray.Client, volName string) (*flasharray.Volume, error) { + volume, err := faClient.Volumes.DeleteVolume(volName) + if err != nil { + return nil, err + } + + // Delete from Recycle Bin + _, err = faClient.Volumes.EradicateVolume(volName) + if err != nil { + return nil, err + } + return volume, nil +} + +// DeleteHostOnFA Deletes Host on FA +func DeleteHostOnFA(faClient *flasharray.Client, hostName string) (*flasharray.Host, error) { + host, err := faClient.Hosts.DeleteHost(hostName) + if err != nil { + return nil, err + } + return host, nil +} + // UpdateIQNOnSpecificHosts Updates IQN on specific hosts func UpdateIQNOnSpecificHosts(faClient *flasharray.Client, hostName string, iqnValue string) (*flasharray.Host, error) { data1 := make(map[string][]string) @@ -234,11 +299,15 @@ func IsNetworkInterfaceEnabled(faClient *flasharray.Client, iface string) (bool, // EnableNetworkInterface enables network interface func EnableNetworkInterface(faClient *flasharray.Client, iface string) (bool, error) { - interfaces, err := faClient.Networks.EnableNetworkInterface(iface) + _, err := faClient.Networks.EnableNetworkInterface(iface) + if err != nil { + return false, err + } + isEnabled, err := IsNetworkInterfaceEnabled(faClient, iface) if err != nil { return false, err } - if interfaces.Enabled { + if isEnabled { return true, nil } return false, fmt.Errorf("Failed to enable network interface [%v]", iface) @@ -246,12 +315,32 @@ func EnableNetworkInterface(faClient *flasharray.Client, iface string) (bool, er // DisableNetworkInterface disabled network interface func DisableNetworkInterface(faClient *flasharray.Client, iface string) (bool, error) { - interfaces, err := faClient.Networks.DisableNetworkInterface(iface) + _, err := faClient.Networks.DisableNetworkInterface(iface) if err != nil { return false, err } - if !interfaces.Enabled { + isEnabled, err := IsNetworkInterfaceEnabled(faClient, iface) + if err != nil { + return false, err + } + if !isEnabled { return true, nil } return false, fmt.Errorf("Failed to disable network interface [%v]", iface) } + +// GetHostFromIqn returns host name from iqn +func GetHostFromIqn(faClient *flasharray.Client, iqn string) (*flasharray.Host, error) { + hosts, err := ListAllHosts(faClient) + if err != nil { + return &flasharray.Host{}, err + } + for _, eachHost := range hosts { + for _, eachIqn := range eachHost.Iqn { + if eachIqn == iqn { + return &eachHost, nil + } + } + } + return &flasharray.Host{}, fmt.Errorf("Failed to get host name from iqn [%v]", iqn) +} diff --git a/pkg/pureutils/purefa_rest2x.go b/pkg/pureutils/purefa_rest2x.go new file mode 100644 index 000000000..06a1eefa4 --- /dev/null +++ b/pkg/pureutils/purefa_rest2x.go @@ -0,0 +1,41 @@ +package pureutils + +import ( + "github.com/portworx/torpedo/drivers/pure/flasharray" +) + +const ( + RestAPI = "2.4" +) + +// PureCreateClientAndConnect Create FA Client and Connect +func PureCreateClientAndConnectRest226(faMgmtEndpoint string, apiToken string) (*flasharray.Client, error) { + faClient, err := flasharray.NewClient(faMgmtEndpoint, apiToken, "", "", + RestAPI, false, false, "", nil) + if err != nil { + return nil, err + } + return faClient, nil +} + +// ListAllVolumesFromFA returns list of all Available Volumes present in FA (Function should be used with RestAPI 2.x) +func ListAllVolumesFromFA(faClient *flasharray.Client) ([]flasharray.VolResponse, error) { + params := make(map[string]string) + params["destroyed"] = "false" + volumes, err := faClient.Volumes.ListAllAvailableVolumes(params, nil) + if err != nil { + return nil, err + } + return volumes, nil +} + +// ListAllDestroyedVolumesFromFA Returns list of all Destroyed FA Volumes (Function should be used with RestAPI 2.x) +func ListAllDestroyedVolumesFromFA(faClient *flasharray.Client) ([]flasharray.VolResponse, error) { + params := make(map[string]string) + params["destroyed"] = "true" + volumes, err := faClient.Volumes.ListAllAvailableVolumes(params, nil) + if err != nil { + return nil, err + } + return volumes, nil +} diff --git a/pkg/pureutils/purefb.go b/pkg/pureutils/purefb.go index 1bb931f2c..f3a4b0fa9 100644 --- a/pkg/pureutils/purefb.go +++ b/pkg/pureutils/purefb.go @@ -19,7 +19,7 @@ func PureCreateFbClientAndConnect(fbMgmtEndpoint string, apiToken string) (*flas // GetFAMgmtEndPoints , Get Lists of all management Endpoints from FB Secrets func GetFBMgmtEndPoints(secret PXPureSecret) []string { mgmtEndpoints := []string{} - for _, fbDetails := range secret.Arrays { + for _, fbDetails := range secret.Blades { mgmtEndpoints = append(mgmtEndpoints, fbDetails.MgmtEndPoint) } return mgmtEndpoints diff --git a/pkg/storkctlcli/storkctlcli.go b/pkg/storkctlcli/storkctlcli.go new file mode 100644 index 000000000..25e4d302d --- /dev/null +++ b/pkg/storkctlcli/storkctlcli.go @@ -0,0 +1,135 @@ +package storkctlcli + +import ( + "bytes" + "fmt" + "os" + "time" + + storkv1 "github.com/libopenstorage/stork/pkg/apis/stork/v1alpha1" + "github.com/libopenstorage/stork/pkg/storkctl" + storkops "github.com/portworx/sched-ops/k8s/stork" + "github.com/portworx/sched-ops/task" + "github.com/sirupsen/logrus" + + "github.com/portworx/torpedo/pkg/aetosutil" +) + +var dash *aetosutil.Dashboard + +const ( + drPrefix = "automation-" + actionRetryTimeout = 10 * time.Minute + actionRetryInterval = 10 * time.Second +) + +var ( + migSchedNs = "kube-system" +) + +func ScheduleStorkctlMigrationSched(schedName, clusterPair, namespace string, extraArgs map[string]string) error { + if namespace != "" { + migSchedNs = namespace + } + cmdArgs := map[string]string{ + "cluster-pair": clusterPair, + "namespace": migSchedNs, + } + err := createMigrationScheduleCli(schedName, cmdArgs, extraArgs) + return err +} + +func createMigrationScheduleCli(schedName string, cmdArgs map[string]string, extraArgs map[string]string) error { + factory := storkctl.NewFactory() + var outputBuffer bytes.Buffer + cmd := storkctl.NewCommand(factory, os.Stdin, &outputBuffer, os.Stderr) + migCmdArgs := []string{"create", "migrationschedule", schedName} + // add the custom args to the command + for key, value := range cmdArgs { + migCmdArgs = append(migCmdArgs, "--"+key) + if value != "" { + migCmdArgs = append(migCmdArgs, value) + } + } + if extraArgs != nil { + for key, value := range extraArgs { + migCmdArgs = append(migCmdArgs, "--"+key) + if value != "" { + migCmdArgs = append(migCmdArgs, value) + } + } + } + cmd.SetArgs(migCmdArgs) + // execute the command + logrus.Infof("The storkctl command being executed is %v", migCmdArgs) + if err := cmd.Execute(); err != nil { + if err != nil { + return fmt.Errorf("Error in executing create migration schedule command: %v", err) + } + } + return nil +} + +func PerformFailoverOrFailback(action, namespace, migSchdRef string, skipSourceOp bool, extraArgs map[string]string) (error, string) { + failoverFailbackCmdArgs := []string{"perform", action, "--migration-reference", migSchdRef, "--namespace", migSchedNs} + if namespace != "" { + migSchedNs = namespace + } + + factory := storkctl.NewFactory() + var outputBuffer bytes.Buffer + cmd := storkctl.NewCommand(factory, os.Stdin, &outputBuffer, os.Stderr) + if skipSourceOp && action == "failover" { + failoverFailbackCmdArgs = append(failoverFailbackCmdArgs, "--skip-source-operations") + } + if extraArgs != nil { + for key, value := range extraArgs { + failoverFailbackCmdArgs = append(failoverFailbackCmdArgs, "--"+key) + if value != "" { + failoverFailbackCmdArgs = append(failoverFailbackCmdArgs, value) + } + } + } + cmd.SetArgs(failoverFailbackCmdArgs) + // execute the command + logrus.Infof("The storkctl command being executed is %v", failoverFailbackCmdArgs) + if err := cmd.Execute(); err != nil { + if err != nil { + return fmt.Errorf("Error in executing perform %v command: %v", action, err), "" + } + } + // Get the captured output as a string + actualOutput := outputBuffer.String() + logrus.Infof("Actual output is: %s", actualOutput) + return nil, actualOutput +} + +func GetDRActionStatus(actionName, actionNamespace string) (string, string, error) { + var action *storkv1.Action + action, err := storkops.Instance().GetAction(actionName, actionNamespace) + if err != nil { + return "", "", err + } + return string(action.Status.Status), string(action.Status.Stage), nil +} + +// WaitForMigration - waits until all migrations in the given list are successful +func WaitForActionSuccessful(actionName string, actionNamespace string, timeoutScale int) error { + checkMigrations := func() (interface{}, bool, error) { + isComplete := true + status, stage, err := GetDRActionStatus(actionName, actionNamespace) + if err != nil { + return "", false, err + } + if status != "Successful" || stage != "Final" { + isComplete = false + } + if isComplete { + return "", false, nil + } + return "", true, fmt.Errorf("Action status is %v waiting for successful status", status) + } + actionTimeout := actionRetryTimeout * time.Duration(timeoutScale) + _, err := task.DoRetryWithTimeout(checkMigrations, actionTimeout, actionRetryInterval) + return err +} diff --git a/tests/backup/backup_basic_test.go b/tests/backup/backup_basic_test.go index e5c2ee8ef..8e5fe1deb 100644 --- a/tests/backup/backup_basic_test.go +++ b/tests/backup/backup_basic_test.go @@ -80,13 +80,23 @@ func BackupInitInstance() { var commitID string log.Infof("Inside BackupInitInstance") err = Inst().S.Init(scheduler.InitOptions{ - SpecDir: Inst().SpecDir, - VolDriverName: Inst().V.String(), - StorageProvisioner: Inst().Provisioner, - NodeDriverName: Inst().N.String(), - CustomAppConfig: Inst().CustomAppConfig, + SpecDir: Inst().SpecDir, + VolDriverName: Inst().V.String(), + StorageProvisioner: Inst().Provisioner, + NodeDriverName: Inst().N.String(), + CustomAppConfig: Inst().CustomAppConfig, + SecretConfigMapName: Inst().ConfigMap, + SecureApps: Inst().SecureAppList, }) log.FailOnError(err, "Error occurred while Scheduler Driver Initialization") + if Inst().ConfigMap != "" { + log.Infof("Using Config Map: %s ", Inst().ConfigMap) + token, err = Inst().S.GetTokenFromConfigMap(Inst().ConfigMap) + log.FailOnError(err, "Error occured while getting token from config map") + log.Infof("Token used for initializing: %s ", token) + } else { + token = "" + } err = Inst().N.Init(node.InitOptions{ SpecDir: Inst().SpecDir, }) @@ -235,6 +245,11 @@ var _ = BeforeSuite(func() { dash.VerifyFatal(err, nil, fmt.Sprintf("Verifying updation of ownership for Global Post-rule of application")) } } + pxBackupNamespace, err := backup.GetPxBackupNamespace() + log.FailOnError(err, "failed to get Px-Backup namespace") + PvcListBeforeRun, err = GetPVCListForNamespace(pxBackupNamespace) + log.FailOnError(err, "failed to list PVCs before run") + log.Infof("PVC list before the run is [%s]", PvcListBeforeRun) }) var _ = AfterSuite(func() { @@ -417,6 +432,20 @@ var _ = AfterSuite(func() { log.Infof("Group %s was not deleted", group.Name) } } + + // Fetch PVC list for Px-Backup namespace + pxBackupNamespace, err := backup.GetPxBackupNamespace() + log.FailOnError(err, "failed to get Px-Backup namespace") + PvcListAfterRun, err = GetPVCListForNamespace(pxBackupNamespace) + log.FailOnError(err, "failed to list PVCs after run") + log.Infof("PVC list after the run is [%s]", PvcListAfterRun) + + //TO DO: Uncomment the below part after fixing ValidatePVCCleanup + // Verify PVC Cleanup on PX-Backup namespace + //if err := ValidatePVCCleanup(PvcListBeforeRun, PvcListAfterRun); err != nil { + // log.FailOnError(err, "PVC cleanup validation failed") + //} + //fmt.Println("PVC cleanup validation passed.") } }) diff --git a/tests/backup/backup_kubevirt_test.go b/tests/backup/backup_kubevirt_test.go index 20c555051..e04567abf 100644 --- a/tests/backup/backup_kubevirt_test.go +++ b/tests/backup/backup_kubevirt_test.go @@ -3438,9 +3438,17 @@ var _ = Describe("{KubevirtVMMigrationTest}", Label(TestCaseLabelsMap[KubevirtVM dash.VerifyFatal(err, nil, fmt.Sprintf("Verfiying VM [%s] is up and running after rebooting the node [%s]", vm.Name, nodeName)) log.Infof("Validating all px-backup pods are ready after reboot") err = ValidateAllPodsInPxBackupNamespace() - dash.VerifyFatal(err, nil, "px-backup pods verification successful") - //Adding a sleep of 2 minute, Sometimes, it takes time for the pod to become ready. - time.Sleep(120 * time.Second) + dash.VerifyFatal(err, nil, "verifing px-backups pods are in running state after reboot") + t := func() (interface{}, bool, error) { + PxBackupVersion, err := GetPxBackupVersionString() + if err != nil { + return nil, true, fmt.Errorf("failed to get px-backup version string , error [%s]", err.Error()) + } + log.Infof(fmt.Sprintf("fetched px-backup version %s", PxBackupVersion)) + return nil, false, nil + } + _, err = task.DoRetryWithTimeout(t, 30*time.Minute, 30*time.Second) + dash.VerifyFatal(err, nil, "verifing px-backup version after reboot") log.Infof("Taking backup of VMs after node reboot") wg.Add(1) backupName := fmt.Sprintf("%s-%s-%v", "post-reboot-backup", scheduledNamespace, time.Now().Unix()) diff --git a/tests/backup/backup_portworx_test.go b/tests/backup/backup_portworx_test.go index 9d24d981c..e6f918779 100644 --- a/tests/backup/backup_portworx_test.go +++ b/tests/backup/backup_portworx_test.go @@ -630,6 +630,8 @@ var _ = Describe("{RestoreEncryptedAndNonEncryptedBackups}", Label(TestCaseLabel log.FailOnError(err, "Fetching px-central-admin ctx") err = ValidateBackupLocation(ctx, BackupOrgID, backupLocationNames[1], BackupLocation1UID) log.FailOnError(err, "backup location %s validation failed", backupLocationNames[1]) + err = WaitForBackupLocationAddition(ctx, backupLocationNames[1], BackupLocation1UID, BackupOrgID, BackupLocationValidationTimeout, BackupLocationValidationRetryTime) + dash.VerifyFatal(err, nil, fmt.Sprintf("Validation of backup location [%s]", backupLocationNames[1])) }) Step("Restore the encrypted backups after validating the encrypted backup location", func() { diff --git a/tests/backup/backup_resiliency_test.go b/tests/backup/backup_resiliency_test.go index 806dd378c..292ff83ed 100644 --- a/tests/backup/backup_resiliency_test.go +++ b/tests/backup/backup_resiliency_test.go @@ -949,21 +949,22 @@ var _ = Describe("{ScaleMongoDBWhileBackupAndRestore}", Label(TestCaseLabelsMap[ dash.VerifyFatal(err, nil, "Scaling backup MongoDB statefulset replica to original count") log.Infof("mongodb replica after scaling back to original replica is %v", *statefulSet.Spec.Replicas) dash.VerifyFatal(*statefulSet.Spec.Replicas == originalReplicaCount, true, "Verify mongodb statefulset replica after scaling back to original") - log.Infof("Verify that at least one mongodb pod is in Ready state") + log.Infof("Verify that at least two mongodb pod is in Ready state") mongoDBPodStatus := func() (interface{}, bool, error) { statefulSet, err = apps.Instance().GetStatefulSet(MongodbStatefulset, pxBackupNS) if err != nil { return "", true, err } if statefulSet.Status.ReadyReplicas < 2 { - return "", true, fmt.Errorf("no mongodb pods are ready yet") + log.Infof("Number of mongodb pods in Ready state: %v", statefulSet.Status.ReadyReplicas) + return "", true, fmt.Errorf("minimum 2 mongodb pods are not ready yet") } return "", false, nil } _, err = DoRetryWithTimeoutWithGinkgoRecover(mongoDBPodStatus, PodStatusTimeOut, PodStatusRetryTime) log.FailOnError(err, "Verify status of mongodb pod") log.Infof("Number of mongodb pods in Ready state are %v", statefulSet.Status.ReadyReplicas) - dash.VerifyFatal(statefulSet.Status.ReadyReplicas > 1, true, "Verifying that at least one mongodb pod is in Ready state") + dash.VerifyFatal(statefulSet.Status.ReadyReplicas >= 2, true, "Verifying that at least two mongodb pods are in Ready state") }) Step("Check if backup is successful after MongoDB statefulset is scaled back to original replica", func() { log.InfoD("Check if backup is successful after MongoDB statefulset is scaled back to original replica") @@ -1018,21 +1019,22 @@ var _ = Describe("{ScaleMongoDBWhileBackupAndRestore}", Label(TestCaseLabelsMap[ dash.VerifyFatal(err, nil, "Scaling back MongoDB statefulset replica to original count") log.Infof("mongodb replica after scaling back to original replica is %v", *statefulSet.Spec.Replicas) dash.VerifyFatal(*statefulSet.Spec.Replicas == originalReplicaCount, true, "Verify mongodb statefulset replica after scaling back to original") - log.Infof("Verify that at least one mongodb pod is in Ready state") + log.Infof("Verify that at least two mongodb pod is in Ready state") mongoDBPodStatus := func() (interface{}, bool, error) { statefulSet, err = apps.Instance().GetStatefulSet(MongodbStatefulset, pxBackupNS) if err != nil { return "", true, err } - if statefulSet.Status.ReadyReplicas < 1 { - return "", true, fmt.Errorf("no mongodb pods are ready yet") + if statefulSet.Status.ReadyReplicas < 2 { + log.Infof("Number of mongodb pods in Ready state: %v", statefulSet.Status.ReadyReplicas) + return "", true, fmt.Errorf("minimum 2 mongodb pods are not ready yet") } return "", false, nil } _, err = DoRetryWithTimeoutWithGinkgoRecover(mongoDBPodStatus, PodStatusTimeOut, PodStatusRetryTime) log.FailOnError(err, "Verify status of mongodb pod") log.Infof("Number of mongodb pods in Ready state are %v", statefulSet.Status.ReadyReplicas) - dash.VerifyFatal(statefulSet.Status.ReadyReplicas > 0, true, "Verifying that at least one mongodb pod is in Ready state") + dash.VerifyFatal(statefulSet.Status.ReadyReplicas >= 2, true, "Verifying that at least two mongodb pods are in Ready state") }) Step("Check if restore is successful after MongoDB statefulset is scaled back to original replica", func() { log.InfoD("Check if restore is successful after MongoDB statefulset is scaled back to original replica") diff --git a/tests/backup/backup_share_test.go b/tests/backup/backup_share_test.go index 627d574dc..a8bfa5d14 100644 --- a/tests/backup/backup_share_test.go +++ b/tests/backup/backup_share_test.go @@ -3872,7 +3872,7 @@ var _ = Describe("{IssueMultipleDeletesForSharedBackup}", Label(TestCaseLabelsMa backupMap[backupName] = backupUID // Start Restore - namespaceMapping[bkpNamespaces[0]] = bkpNamespaces[0] + "restored" + namespaceMapping[bkpNamespaces[0]] = bkpNamespaces[0] + "-" + user restoreName := fmt.Sprintf("%s-%s", RestoreNamePrefix, user) restoreNames = append(restoreNames, restoreName) log.Infof("Creating restore %s for user %s", restoreName, user) diff --git a/tests/backup/backup_upgrade_test.go b/tests/backup/backup_upgrade_test.go index 0d4ffc6d9..f185f7868 100644 --- a/tests/backup/backup_upgrade_test.go +++ b/tests/backup/backup_upgrade_test.go @@ -1118,14 +1118,14 @@ var _ = Describe("{PXBackupClusterUpgradeTest}", Label(TestCaseLabelsMap[PXBacku err = Inst().S.UpgradeScheduler(version) dash.VerifyFatal(err, nil, fmt.Sprintf("verify [%s] upgrade to [%s] is successful", Inst().S.String(), version)) - PrintK8sCluterInfo() + PrintK8sClusterInfo() err = SwitchBothKubeConfigANDContext("destination") dash.VerifyFatal(err, nil, "Switching context and Kubeconfig to destination cluster") err = Inst().S.UpgradeScheduler(version) dash.VerifyFatal(err, nil, fmt.Sprintf("verify [%s] upgrade to [%s] is successful", Inst().S.String(), version)) - PrintK8sCluterInfo() + PrintK8sClusterInfo() err = SwitchBothKubeConfigANDContext("source") dash.VerifyFatal(err, nil, "Switching context and kubeconfig to source cluster") @@ -1156,7 +1156,7 @@ var _ = Describe("{PXBackupClusterUpgradeTest}", Label(TestCaseLabelsMap[PXBacku dash.VerifyFatal(err, nil, fmt.Sprintf("verify volume driver after upgrade to %s", version)) // Printing cluster node info after the upgrade - PrintK8sCluterInfo() + PrintK8sClusterInfo() err = SwitchBothKubeConfigANDContext("destination") dash.VerifyFatal(err, nil, "Switching context and Kubeconfig to destination cluster") @@ -1176,7 +1176,7 @@ var _ = Describe("{PXBackupClusterUpgradeTest}", Label(TestCaseLabelsMap[PXBacku dash.VerifyFatal(err, nil, fmt.Sprintf("verify volume driver after upgrade to %s", version)) // Printing cluster node info after the upgrade - PrintK8sCluterInfo() + PrintK8sClusterInfo() err = SwitchBothKubeConfigANDContext("source") dash.VerifyFatal(err, nil, "Switching context and kubeconfig to source cluster") diff --git a/tests/backup_helper.go b/tests/backup_helper.go index ee0b91230..a1365c290 100644 --- a/tests/backup_helper.go +++ b/tests/backup_helper.go @@ -1,6 +1,7 @@ package tests import ( + "bytes" context1 "context" "fmt" "io/ioutil" @@ -15,6 +16,7 @@ import ( "strconv" "strings" "sync" + "text/template" "time" "k8s.io/apimachinery/pkg/api/resource" @@ -145,7 +147,7 @@ const ( fullMaintenancePod = "full-maintenance-repo" jobDeleteTimeout = 5 * time.Minute jobDeleteRetryTime = 10 * time.Second - PodStatusTimeOut = 20 * time.Minute + PodStatusTimeOut = 30 * time.Minute PodStatusRetryTime = 30 * time.Second licenseCountUpdateTimeout = 15 * time.Minute licenseCountUpdateRetryTime = 1 * time.Minute @@ -171,6 +173,8 @@ const ( storkControllerConfigMap = "stork-controller-config" storkControllerConfigMapUpdateTimeout = 15 * time.Minute storkControllerConfigMapRetry = 30 * time.Second + BackupLocationValidationTimeout = 10 * time.Minute + BackupLocationValidationRetryTime = 30 * time.Second ) var ( @@ -204,6 +208,8 @@ var ( NfsRestoreExecutorPodLabel = map[string]string{"kdmp.portworx.com/driver-name": "nfsrestore"} queryCountForValidation = 10 IsBackupLongevityRun = false + PvcListBeforeRun []string + PvcListAfterRun []string ) type UserRoleAccess struct { @@ -2074,10 +2080,10 @@ func CreateUsers(numberOfUsers int) []string { log.InfoD("Creating %d users", numberOfUsers) var wg sync.WaitGroup for i := 1; i <= numberOfUsers; i++ { - userName := fmt.Sprintf("testuser%v-%v", i, time.Now().Unix()) - firstName := fmt.Sprintf("FirstName%v", i) - lastName := fmt.Sprintf("LastName%v", i) - email := fmt.Sprintf("%v@cnbu.com", userName) + userName := fmt.Sprintf("tp-user%d-%s", i, RandomString(4)) + firstName := fmt.Sprintf("FirstName%d", i) + lastName := fmt.Sprintf("LastName%d", i) + email := fmt.Sprintf("%s@cnbu.com", userName) wg.Add(1) go func(userName, firstName, lastName, email string) { defer GinkgoRecover() @@ -2168,7 +2174,7 @@ func CleanupCloudSettingsAndClusters(backupLocationMap map[string]string, credNa log.Warnf("the cloud credential ref of the cluster [%s] is nil", clusterObj.GetName()) } } - err = DeleteClusterWithUID(clusterObj.GetName(), clusterObj.GetUid(), BackupOrgID, ctx, false) + err = DeleteClusterWithUID(clusterObj.GetName(), clusterObj.GetUid(), BackupOrgID, ctx, true) Inst().Dash.VerifySafely(err, nil, fmt.Sprintf("Deleting cluster %s", clusterObj.GetName())) if clusterCredName != "" { err = DeleteCloudCredential(clusterCredName, BackupOrgID, clusterCredUID) @@ -3929,8 +3935,74 @@ func PxBackupUpgrade(versionToUpgrade string) error { // Execute helm upgrade using cmd log.Infof("Upgrading Px-Backup version from %s to %s", currentBackupVersionString, versionToUpgrade) - cmd = fmt.Sprintf("helm upgrade px-central px-central-%s.tgz --namespace %s --version %s --set persistentStorage.enabled=true,persistentStorage.storageClassName=\"%s\",pxbackup.enabled=true", - versionToUpgrade, pxBackupNamespace, versionToUpgrade, *storageClassName) + customRegistry := os.Getenv("CUSTOM_REGISTRY") + customRepo := os.Getenv("CUSTOM_REPO") + if customRegistry == "" || customRepo == "" { + cmd = fmt.Sprintf("helm upgrade px-central px-central-%s.tgz --namespace %s --version %s --set persistentStorage.enabled=true,persistentStorage.storageClassName=\"%s\",pxbackup.enabled=true", + versionToUpgrade, pxBackupNamespace, versionToUpgrade, *storageClassName) + } else { + cmd = fmt.Sprintf("helm upgrade px-central px-central-%s.tgz --namespace %s --version %s --set persistentStorage.enabled=true,persistentStorage.storageClassName=\"%s\",pxbackup.enabled=true", + versionToUpgrade, pxBackupNamespace, versionToUpgrade, *storageClassName) + + // Additional settings to be appended using template + tmpl := `,{{range .Images}}images.{{.Name}}.repo="{{$.CustomRepo}}",images.{{.Name}}.registry="{{$.CustomRegistry}}",{{end}}` + + // Define the template + t, err := template.New("cmd").Parse(tmpl) + if err != nil { + return err + } + + // Data for the template + data := struct { + CustomRegistry string + CustomRepo string + Images []struct{ Name string } + }{ + CustomRegistry: customRegistry, + CustomRepo: customRepo, + Images: []struct{ Name string }{ + {Name: "pxcentralApiServerImage"}, + {Name: "pxcentralFrontendImage"}, + {Name: "pxcentralBackendImage"}, + {Name: "pxcentralMiddlewareImage"}, + {Name: "postInstallSetupImage"}, + {Name: "keycloakBackendImage"}, + {Name: "keycloakFrontendImage"}, + {Name: "keycloakLoginThemeImage"}, + {Name: "keycloakInitContainerImage"}, + {Name: "mysqlImage"}, + {Name: "pxBackupImage"}, + {Name: "mongodbImage"}, + {Name: "licenseServerImage"}, + {Name: "cortexImage"}, + {Name: "cassandraImage"}, + {Name: "proxyConfigImage"}, + {Name: "consulImage"}, + {Name: "dnsmasqImage"}, + {Name: "grafanaImage"}, + {Name: "prometheusImage"}, + {Name: "prometheusConfigReloadrImage"}, + {Name: "prometheusOperatorImage"}, + {Name: "memcachedMetricsImage"}, + {Name: "memcachedIndexImage"}, + {Name: "memcachedImage"}, + {Name: "pxBackupPrometheusImage"}, + {Name: "pxBackupAlertmanagerImage"}, + {Name: "pxBackupPrometheusOperatorImage"}, + {Name: "pxBackupPrometheusConfigReloaderImage"}, + }, + } + + // Execute the template and append the result to the existing command + var buf bytes.Buffer + if err := t.Execute(&buf, data); err != nil { + return err + } + + // Append the dynamically generated settings to the initial command + cmd += buf.String() + } log.Infof("helm command: %v ", cmd) pxBackupUpgradeStartTime := time.Now() @@ -8632,3 +8704,51 @@ func GetUpdatedKubeVirtVMSpecForBackup(scheduledAppContextsToBackup []*scheduler } return nil } + +// GetPVCListForNamespace retrieves the list of PVCs in the specified namespace. +func GetPVCListForNamespace(namespace string) ([]string, error) { + k8sCore := core.Instance() + pvcList, err := k8sCore.GetPersistentVolumeClaims(namespace, make(map[string]string)) + if err != nil { + return nil, fmt.Errorf("failed to get PVCs in namespace %s: %w", namespace, err) + } + // Extract PVC names from the list + var pvcNameList []string + for _, pvc := range pvcList.Items { + pvcNameList = append(pvcNameList, pvc.Name) + } + return pvcNameList, nil +} + +// ValidatePVCCleanup checks if there is a mismatch between the original PVC list and the current one. +func ValidatePVCCleanup(pvcBefore, pvcAfter []string) error { + pvcBeforeSet := make(map[string]bool) + pvcAfterSet := make(map[string]bool) + + // Populate sets for PVC names before and after the run + for _, pvc := range pvcBefore { + pvcBeforeSet[pvc] = true + } + + for _, pvc := range pvcAfter { + pvcAfterSet[pvc] = true + } + + // Check for missing PVCs after the run + for pvc := range pvcBeforeSet { + if !pvcAfterSet[pvc] { + fmt.Printf("PVC '%s' is present before the run but not after the run\n", pvc) + return fmt.Errorf("mismatch in PVC list before and after the run") + } + } + + // Check for extra PVCs after the run + for pvc := range pvcAfterSet { + if !pvcBeforeSet[pvc] { + fmt.Printf("PVC '%s' is present after the run but not before the run\n", pvc) + return fmt.Errorf("mismatch in PVC list before and after the run") + } + } + + return nil +} diff --git a/tests/basic/asg_test.go b/tests/basic/asg_test.go index 9dc70ce71..8027fdf39 100644 --- a/tests/basic/asg_test.go +++ b/tests/basic/asg_test.go @@ -3,10 +3,12 @@ package tests import ( "fmt" "github.com/libopenstorage/openstorage/api" + "github.com/portworx/sched-ops/k8s/operator" "github.com/portworx/torpedo/drivers/node/ibm" "github.com/portworx/torpedo/drivers/scheduler/aks" "github.com/portworx/torpedo/drivers/scheduler/eks" "github.com/portworx/torpedo/drivers/scheduler/oke" + "github.com/portworx/torpedo/drivers/scheduler/openshift" "github.com/portworx/torpedo/pkg/log" "math/rand" "time" @@ -120,6 +122,112 @@ var _ = Describe("{ClusterScaleUpDown}", func() { }) }) +// This test performs basic test of scaling up and down the asg cluster +var _ = Describe("{ClusterScaleUpIncreasesMaxStorageNodesPerZone}", func() { + + JustBeforeEach(func() { + StartTorpedoTest("ClusterScaleUpIncreasesMaxStorageNodesPerZone", "Validate cluster nodes and storage nodes scale up", nil, testrailID) + + }) + var contexts []*scheduler.Context + + It("has to validate that storage nodes are not lost during asg scaledown", func() { + log.InfoD("Has to validate that storage nodes are not lost during asg scaledown") + contexts = make([]*scheduler.Context, 0) + + for i := 0; i < Inst().GlobalScaleFactor; i++ { + contexts = append(contexts, ScheduleApplications(fmt.Sprintf("asgscaleupdown-%d", i))...) + } + + ValidateApplications(contexts) + + initialNodeCount, err := Inst().S.GetASGClusterSize() + log.FailOnError(err, "Failed to Get ASG cluster size") + + scaleupCount := initialNodeCount + initialNodeCount/2 + + scaleupCount = (scaleupCount / 3) * 3 + stepLog := fmt.Sprintf("scale up cluster from %d to %d nodes and validate", + initialNodeCount, scaleupCount) + + Step(stepLog, func() { + log.InfoD(stepLog) + Scale(scaleupCount) + stepLog = fmt.Sprintf("wait for %s minutes for auto recovery of storeage nodes", + Inst().AutoStorageNodeRecoveryTimeout.String()) + + Step(stepLog, func() { + log.InfoD(stepLog) + time.Sleep(Inst().AutoStorageNodeRecoveryTimeout) + }) + // After scale up, get fresh list of nodes + // by re-initializing scheduler and volume driver + err = Inst().S.RefreshNodeRegistry() + log.FailOnError(err, "Verify node registry refresh") + + err = Inst().V.RefreshDriverEndpoints() + log.FailOnError(err, "Verify driver end points refresh") + + stepLog = "validate number of storage nodes after scale up" + Step(fmt.Sprintf(stepLog), func() { + log.InfoD(stepLog) + ValidateClusterSize(scaleupCount) + }) + PrintPxctlStatus() + }) + + stc, err := Inst().V.GetDriver() + log.FailOnError(err, "error getting volume driver") + maxStorageNodesPerZone := *stc.Spec.CloudStorage.MaxStorageNodesPerZone + numOfStorageNodes := len(node.GetStorageNodes()) + log.Infof("maxStorageNodesPerZone %d", int(maxStorageNodesPerZone)) + log.Infof("numOfStorageNodes %d", numOfStorageNodes) + + actualStorageNodes := numOfStorageNodes + expectedStorageNodes := maxStorageNodesPerZone + + // In multi-zone ASG cluster, node count is per zone + if Inst().S.String() != openshift.SchedName { + zones, err := Inst().S.GetZones() + dash.VerifyFatal(err, nil, "Verify Get zones") + expectedStorageNodes = expectedStorageNodes * uint32(len(zones)) + } + + updatedMaxStorageNodesPerZone := uint32(0) + if int(expectedStorageNodes) <= actualStorageNodes { + //increase max per zone + updatedMaxStorageNodesPerZone = maxStorageNodesPerZone + 1 + } + + initialStorageNodes := node.GetStorageNodes() + + stepLog = "update maxStorageNodesPerZone in storage cluster spec" + Step(stepLog, func() { + log.InfoD(stepLog) + + stc.Spec.CloudStorage.MaxStorageNodesPerZone = &updatedMaxStorageNodesPerZone + log.InfoD("updating maxStorageNodesPerZone from %d to %d", maxStorageNodesPerZone, updatedMaxStorageNodesPerZone) + pxOperator := operator.Instance() + _, err = pxOperator.UpdateStorageCluster(stc) + log.FailOnError(err, "error updating storage cluster") + log.Infof("Sleeping for %v mins for new storage nodes to created", Inst().AutoStorageNodeRecoveryTimeout) + time.Sleep(Inst().AutoStorageNodeRecoveryTimeout) + err = Inst().V.RefreshDriverEndpoints() + log.FailOnError(err, "Verify driver end points refresh") + dash.VerifyFatal(len(node.GetStorageNodes()) > len(initialStorageNodes), true, "verify new storage node is added") + PrintPxctlStatus() + }) + + opts := make(map[string]bool) + opts[scheduler.OptionsWaitForResourceLeakCleanup] = true + ValidateAndDestroy(contexts, opts) + }) + JustAfterEach(func() { + defer EndTorpedoTest() + AfterEachTest(contexts) + }) +}) + // This test randomly kills one volume driver node and ensures cluster remains // intact by ASG var _ = Describe("{ASGKillRandomNodes}", func() { @@ -322,21 +430,435 @@ func waitForIBMNodeTODeploy() error { return err } -func waitForIBMNodeToDelete(nodeToKill node.Node) error { - t := func() (interface{}, bool, error) { +var _ = Describe("{AddStorageNode}", func() { - currState, err := Inst().N.GetNodeState(nodeToKill) - if err != nil { - return "", true, err - } - if currState == ibm.DELETED { - return "", false, nil - } + var contexts []*scheduler.Context + + BeforeEach(func() { + wantAllAfterSuiteActions = false + wantAfterSuiteSystemCheck = true + }) + JustBeforeEach(func() { + StartTorpedoTest("AddStorageNode", "Add a new storage node to the cloud platform", nil, 0) + }) + stepLog := "Validating the drives and pools after adding new storage node" - return "", true, fmt.Errorf("node [%s] not deleted yet, current state : %s", nodeToKill.Hostname, currState) + It(stepLog, func() { + log.InfoD(stepLog) + stepLog = fmt.Sprintf("Adding a storage node to the platform [%s]", Inst().S.String()) - } + Step(stepLog, func() { - _, err := task.DoRetryWithTimeout(t, 10*time.Minute, 1*time.Minute) - return err -} + log.InfoD(stepLog) + contexts = make([]*scheduler.Context, 0) + + for i := 0; i < Inst().GlobalScaleFactor; i++ { + contexts = append(contexts, ScheduleApplications(fmt.Sprintf("addstnode-%d", i))...) + } + + ValidateApplications(contexts) + + var numOfStorageNodes int + var maxStorageNodesPerZone uint32 + var updatedMaxStorageNodesPerZone uint32 = 0 + var zones []string + stepLog = "update maxStorageNodesPerZone in storage cluster spec" + Step(stepLog, func() { + log.InfoD(stepLog) + stc, err := Inst().V.GetDriver() + + log.FailOnError(err, "error getting volume driver") + maxStorageNodesPerZone = *stc.Spec.CloudStorage.MaxStorageNodesPerZone + numOfStorageNodes = len(node.GetStorageNodes()) + log.Infof("maxStorageNodesPerZone %d", int(maxStorageNodesPerZone)) + log.Infof("numOfStorageNodes %d", numOfStorageNodes) + + actualPerZoneCount := numOfStorageNodes + + // In multi-zone ASG cluster, node count is per zone + if Inst().S.String() != openshift.SchedName { + zones, err = Inst().S.GetZones() + dash.VerifyFatal(err, nil, "Verify Get zones") + + actualPerZoneCount = numOfStorageNodes / len(zones) + } + + if int(maxStorageNodesPerZone) <= actualPerZoneCount { + //increase max per zone + updatedMaxStorageNodesPerZone = uint32(actualPerZoneCount + 1) + } + + if updatedMaxStorageNodesPerZone != 0 { + + stc.Spec.CloudStorage.MaxStorageNodesPerZone = &updatedMaxStorageNodesPerZone + log.InfoD("updating maxStorageNodesPerZone from %d to %d", maxStorageNodesPerZone, updatedMaxStorageNodesPerZone) + pxOperator := operator.Instance() + _, err = pxOperator.UpdateStorageCluster(stc) + log.FailOnError(err, "error updating storage cluster") + + } + PrintPxctlStatus() + //Scaling the cluster by one node + expReplicas := len(node.GetStorageDriverNodes()) + 1 + log.InfoD("scaling up the cluster to replicas %d", expReplicas) + Scale(int64(expReplicas)) + stepLog = fmt.Sprintf("wait for %s minutes for auto recovery of storeage nodes", + Inst().AutoStorageNodeRecoveryTimeout.String()) + + Step(stepLog, func() { + log.InfoD(stepLog) + time.Sleep(Inst().AutoStorageNodeRecoveryTimeout) + }) + // After scale up, get fresh list of nodes + // by re-initializing scheduler and volume driver + err = Inst().S.RefreshNodeRegistry() + log.FailOnError(err, "Verify node registry refresh") + + err = Inst().V.RefreshDriverEndpoints() + log.FailOnError(err, "Verify driver end points refresh") + + }) + + stepLog = "validate PX on all nodes after adding a storage node" + + Step(stepLog, func() { + log.InfoD(stepLog) + nodes := node.GetStorageDriverNodes() + for _, n := range nodes { + log.InfoD("Check PX status on %v", n.Name) + err := Inst().V.WaitForPxPodsToBeUp(n) + dash.VerifyFatal(err, nil, fmt.Sprintf("verify px is up on node %s", n.Name)) + } + }) + + err := Inst().V.RefreshDriverEndpoints() + log.FailOnError(err, "error refreshing driver end points") + PrintPxctlStatus() + + expectedPerZone := maxStorageNodesPerZone + if updatedMaxStorageNodesPerZone != 0 { + expectedPerZone = updatedMaxStorageNodesPerZone + } + numOfZones := 1 + if len(zones) != 0 { + numOfZones = len(zones) + } + expectedStorageNodesCount := int(expectedPerZone) * numOfZones + + if expectedStorageNodesCount >= len(node.GetStorageNodes()) { + expectedStorageNodesCount = len(node.GetStorageNodes()) + } + + updatedStorageNodesCount := len(node.GetStorageNodes()) + dash.VerifyFatal(expectedStorageNodesCount, updatedStorageNodesCount, "verify new storage node is added") + ValidateAndDestroy(contexts, nil) + }) + }) + JustAfterEach(func() { + EndTorpedoTest() + }) +}) + +var _ = Describe("{AddStoragelessNode}", func() { + + var contexts []*scheduler.Context + + BeforeEach(func() { + wantAllAfterSuiteActions = false + wantAfterSuiteSystemCheck = true + }) + JustBeforeEach(func() { + StartTorpedoTest("AddStoragelessNode", "Add a new storageless node the cluster", nil, 0) + }) + stepLog := "Validating px after adding new storageless node" + + It(stepLog, func() { + log.InfoD(stepLog) + stepLog = fmt.Sprintf("Adding a storageless node to the platform [%s]", Inst().S.String()) + + Step(stepLog, func() { + + log.InfoD(stepLog) + contexts = make([]*scheduler.Context, 0) + + for i := 0; i < Inst().GlobalScaleFactor; i++ { + contexts = append(contexts, ScheduleApplications(fmt.Sprintf("addslnode-%d", i))...) + } + + ValidateApplications(contexts) + numOfStoragelessNodes := len(node.GetStorageLessNodes()) + + Step(stepLog, func() { + log.InfoD(stepLog) + stc, err := Inst().V.GetDriver() + + log.FailOnError(err, "error getting volume driver") + maxStorageNodesPerZone := *stc.Spec.CloudStorage.MaxStorageNodesPerZone + numOfStorageNodes := len(node.GetStorageNodes()) + log.Infof("maxStorageNodesPerZone %d", int(maxStorageNodesPerZone)) + log.Infof("numOfStoragelessNodes %d", numOfStoragelessNodes) + PrintPxctlStatus() + + var updatedMaxStorageNodesPerZone uint32 = 0 + + actualPerZoneCount := numOfStorageNodes + + // In multi-zone ASG cluster, node count is per zone + if Inst().S.String() != aks.SchedName && Inst().S.String() != openshift.SchedName { + zones, err := Inst().S.GetZones() + dash.VerifyFatal(err, nil, "Verify Get zones") + + actualPerZoneCount = numOfStorageNodes / len(zones) + } + + if int(maxStorageNodesPerZone) > actualPerZoneCount { + //updating max per zone + updatedMaxStorageNodesPerZone = uint32(actualPerZoneCount) + stc.Spec.CloudStorage.MaxStorageNodesPerZone = &updatedMaxStorageNodesPerZone + log.InfoD("updating maxStorageNodesPerZone from %d to %d", maxStorageNodesPerZone, updatedMaxStorageNodesPerZone) + pxOperator := operator.Instance() + _, err = pxOperator.UpdateStorageCluster(stc) + log.FailOnError(err, "error updating storage cluster") + } + //Scaling the cluster by one node + expReplicas := len(node.GetStorageDriverNodes()) + 1 + log.InfoD("scaling up the cluster to replicas %d", expReplicas) + Scale(int64(expReplicas)) + + }) + + stepLog = fmt.Sprintf("wait for %s minutes for auto recovery of storeage nodes", + Inst().AutoStorageNodeRecoveryTimeout.String()) + + Step(stepLog, func() { + log.InfoD(stepLog) + time.Sleep(Inst().AutoStorageNodeRecoveryTimeout) + }) + // After scale up, get fresh list of nodes + // by re-initializing scheduler and volume driver + err = Inst().S.RefreshNodeRegistry() + log.FailOnError(err, "Verify node registry refresh") + + err = Inst().V.RefreshDriverEndpoints() + log.FailOnError(err, "Verify driver end points refresh") + + stepLog = "validate PX on all nodes after adding storageless node" + + Step(stepLog, func() { + log.InfoD(stepLog) + nodes := node.GetStorageDriverNodes() + for _, n := range nodes { + log.InfoD("Check PX status on %v", n.Name) + err := Inst().V.WaitForPxPodsToBeUp(n) + dash.VerifyFatal(err, nil, fmt.Sprintf("verify px is up on node %s", n.Name)) + } + }) + + err := Inst().V.RefreshDriverEndpoints() + log.FailOnError(err, "error refreshing driver end points") + PrintPxctlStatus() + + updatedStoragelessNodesCount := len(node.GetStorageLessNodes()) + dash.VerifyFatal(numOfStoragelessNodes+1, updatedStoragelessNodesCount, "verify new storageless node is added") + + ValidateAndDestroy(contexts, nil) + }) + }) + JustAfterEach(func() { + EndTorpedoTest() + }) +}) + +var _ = Describe("{RecycleStorageDriverNode}", func() { + + var contexts []*scheduler.Context + + BeforeEach(func() { + wantAllAfterSuiteActions = false + wantAfterSuiteSystemCheck = true + }) + JustBeforeEach(func() { + StartTorpedoTest("RecycleStorageDriverNode", "Test drives and pools after recycling a storage driver node", nil, 0) + }) + + It("Validating the drives and pools after recycling a node", func() { + Step("Get the storage and storageless nodes and delete them", func() { + contexts = make([]*scheduler.Context, 0) + for i := 0; i < Inst().GlobalScaleFactor; i++ { + contexts = append(contexts, ScheduleApplications(fmt.Sprintf("recyclenode-%d", i))...) + } + ValidateApplications(contexts) + storagelessNodes, err := Inst().V.GetStoragelessNodes() + log.FailOnError(err, fmt.Sprintf("Failed to get storageless nodes. Error: [%v]", err)) + if storagelessNodes != nil { + delNode, err := node.GetNodeByName(storagelessNodes[0].Hostname) + log.FailOnError(err, fmt.Sprintf("Failed to get node object using Name. Error: [%v]", err)) + Step( + fmt.Sprintf("Listing all nodes before recycling a storageless node %s", delNode.Name), + func() { + workerNodes := node.GetWorkerNodes() + for x, wNode := range workerNodes { + log.Infof("WorkerNode[%d] is: [%s] and volDriverID is [%s]", x, wNode.Name, wNode.VolDriverNodeID) + } + }) + stepLog = fmt.Sprintf("Recycle a storageless node and validating the drives: %s", delNode.Name) + Step( + stepLog, + func() { + log.InfoD(stepLog) + err := Inst().S.DeleteNode(delNode) + log.FailOnError(err, fmt.Sprintf("Failed to recycle a node [%s]. Error: [%v]", delNode.Name, err)) + waitTime := 10 + if Inst().S.String() == oke.SchedName { + waitTime = 15 // OKE takes more time to replace the node + } + + stepLog = fmt.Sprintf("Wait for %d min. to node get replaced by autoscalling group", waitTime) + Step(stepLog, func() { + log.InfoD(stepLog) + time.Sleep(time.Duration(waitTime) * time.Minute) + }) + + err = Inst().S.RefreshNodeRegistry() + log.FailOnError(err, "Verify node registry refresh") + + err = Inst().V.RefreshDriverEndpoints() + log.FailOnError(err, "Verify driver end points refresh") + stepLog = fmt.Sprintf("Validate number of storage nodes after recycling node [%v]", delNode.Name) + Step(stepLog, func() { + log.InfoD(stepLog) + ValidateClusterSize(int64(len(node.GetStorageDriverNodes()))) + PrintPxctlStatus() + }) + }) + Step( + fmt.Sprintf("Listing all nodes after recycle a storageless node %s", delNode.Name), + func() { + workerNodes := node.GetWorkerNodes() + for x, wNode := range workerNodes { + log.Infof("WorkerNode[%d] is: [%s] and volDriverID is [%s]", x, wNode.Name, wNode.VolDriverNodeID) + } + }) + } + // Validating the apps after recycling the StorageLess node + ValidateApplications(contexts) + workerNodes := node.GetStorageNodes() + delNode := workerNodes[0] + stepLog := fmt.Sprintf("Recycle a storage node: [%s] and validating the drives", delNode.Name) + Step( + stepLog, + func() { + log.InfoD(stepLog) + err := Inst().S.DeleteNode(delNode) + log.FailOnError(err, fmt.Sprintf("Failed to recycle a node [%s]. Error: [%v]", delNode.Name, err)) + waitTime := 10 + if Inst().S.String() == oke.SchedName { + waitTime = 15 // OKE takes more time to replace the node + } + + stepLog = fmt.Sprintf("Wait for %d min. to node get replaced by autoscalling group", waitTime) + Step(stepLog, func() { + log.InfoD(stepLog) + time.Sleep(time.Duration(waitTime) * time.Minute) + }) + + err = Inst().S.RefreshNodeRegistry() + log.FailOnError(err, "Verify node registry refresh") + + err = Inst().V.RefreshDriverEndpoints() + log.FailOnError(err, "Verify driver end points refresh") + stepLog = fmt.Sprintf("Validate number of storage nodes after recycling node [%v]", delNode.Name) + Step(stepLog, func() { + log.InfoD(stepLog) + ValidateClusterSize(int64(len(node.GetStorageDriverNodes()))) + }) + }) + Step(fmt.Sprintf("Listing all nodes after recycling a storage node %s", delNode.Name), func() { + workerNodes := node.GetWorkerNodes() + for x, wNode := range workerNodes { + log.Infof("WorkerNode[%d] is: [%s] and volDriverID is [%s]", x, wNode.Name, wNode.VolDriverNodeID) + } + PrintPxctlStatus() + }) + // Validating the apps after recycling the Storage node + ValidateApplications(contexts) + }) + }) + JustAfterEach(func() { + EndTorpedoTest() + }) +}) + +var _ = Describe("{RecycleAllStorageDriverNodes}", func() { + + var contexts []*scheduler.Context + + BeforeEach(func() { + wantAllAfterSuiteActions = false + wantAfterSuiteSystemCheck = true + }) + JustBeforeEach(func() { + StartTorpedoTest("RecycleAllStorageDriverNodes", "Test drives and pools after recycling a all storage driver nodes one by one", nil, 0) + }) + + It("Validating the drives and pools after recycling a node", func() { + Step("Get the storage and storageless nodes and delete them", func() { + contexts = make([]*scheduler.Context, 0) + for i := 0; i < Inst().GlobalScaleFactor; i++ { + contexts = append(contexts, ScheduleApplications(fmt.Sprintf("recyclenode-%d", i))...) + } + ValidateApplications(contexts) + + existingStorageDriverNodes := node.GetStorageDriverNodes() + + for _, existingStorageDriverNode := range existingStorageDriverNodes { + stepLog := fmt.Sprintf("Recycling node: [%s]", existingStorageDriverNode.Name) + Step( + stepLog, + func() { + log.InfoD(stepLog) + err := Inst().S.DeleteNode(existingStorageDriverNode) + log.FailOnError(err, fmt.Sprintf("Failed to recycle a node [%s]. Error: [%v]", existingStorageDriverNode.Name, err)) + waitTime := 10 + if Inst().S.String() == oke.SchedName { + waitTime = 15 // OKE takes more time to replace the node + } + + stepLog = fmt.Sprintf("Wait for %d min. to node get replaced by autoscalling group", waitTime) + Step(stepLog, func() { + log.InfoD(stepLog) + time.Sleep(time.Duration(waitTime) * time.Minute) + }) + err = Inst().S.RefreshNodeRegistry() + log.FailOnError(err, "Verify node registry refresh") + + err = Inst().V.RefreshDriverEndpoints() + log.FailOnError(err, "Verify driver end points refresh") + stepLog = fmt.Sprintf("Validate number of storage nodes after recycling node [%v]", existingStorageDriverNode.Name) + Step(stepLog, func() { + log.InfoD(stepLog) + ValidateClusterSize(int64(len(node.GetStorageDriverNodes()))) + PrintPxctlStatus() + }) + nodeIdExists := false + if len(existingStorageDriverNode.StorageNode.Pools) > 0 { + newStorageDriverNodes := node.GetStorageDriverNodes() + for _, newStorageDriverNode := range newStorageDriverNodes { + if newStorageDriverNode.VolDriverNodeID == existingStorageDriverNode.VolDriverNodeID { + nodeIdExists = true + break + } + } + dash.VerifyFatal(nodeIdExists, true, fmt.Sprintf("Node ID [%s] exists after deleting storage node [%v]", existingStorageDriverNode.VolDriverNodeID, existingStorageDriverNode.Name)) + } + + }) + } + // Validating the apps after recycling the Storage driver node + ValidateApplications(contexts) + }) + }) + JustAfterEach(func() { + EndTorpedoTest() + }) +}) diff --git a/tests/basic/async_dr_test.go b/tests/basic/async_dr_test.go index b0fa3f2eb..67be4a3c0 100644 --- a/tests/basic/async_dr_test.go +++ b/tests/basic/async_dr_test.go @@ -10,13 +10,19 @@ import ( storkapi "github.com/libopenstorage/stork/pkg/apis/stork/v1alpha1" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" + "github.com/portworx/sched-ops/k8s/apps" + "github.com/portworx/sched-ops/k8s/core" + "github.com/portworx/sched-ops/k8s/stork" storkops "github.com/portworx/sched-ops/k8s/stork" "github.com/portworx/sched-ops/task" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" "github.com/portworx/torpedo/drivers/scheduler" "github.com/portworx/torpedo/pkg/asyncdr" "github.com/portworx/torpedo/pkg/log" + "github.com/portworx/torpedo/pkg/storkctlcli" //"github.com/portworx/torpedo/driver "github.com/portworx/torpedo/drivers/scheduler" //"github.com/portworx/torpedo/drivers/scheduler/spec" @@ -25,24 +31,37 @@ import ( ) const ( - migrationRetryTimeout = 10 * time.Minute - migrationRetryInterval = 10 * time.Second - domainCheckRetryTimeout = 1 * time.Minute - defaultClusterPairDir = "cluster-pair" - defaultClusterPairDirNew = "cluster-pair-new" - defaultClusterPairName = "remoteclusterpair" + migrationRetryTimeout = 10 * time.Minute + migrationRetryInterval = 10 * time.Second + domainCheckRetryTimeout = 1 * time.Minute + defaultClusterPairDir = "cluster-pair" + defaultClusterPairDirNew = "cluster-pair-new" + defaultClusterPairName = "remoteclusterpair" defaultClusterPairNameNew = "remoteclusterpairnew" - defaultBackupLocation = "s3" - defaultSecret = "s3secret" - - migrationKey = "async-dr-" - metromigrationKey = "metro-dr-" + defaultBackupLocation = "s3" + defaultSecret = "s3secret" + defaultMigSchedName = "automation-migration-schedule-" + migrationKey = "async-dr-" + migrationSchedKey = "mig-sched-" + metromigrationKey = "metro-dr-" ) var ( - kubeConfigWritten bool + kubeConfigWritten bool ) +type failoverFailbackParam struct { + action string + failoverOrFailbackNs string + migrationSchedName string + configPath string + single bool + skipSourceOp bool + includeNs bool + excludeNs bool + extraArgsFailoverFailback map[string]string + contexts []*scheduler.Context +} // This test performs basic test of starting an application, creating cluster pair, // and migrating application to the destination clsuter @@ -75,6 +94,7 @@ var _ = Describe("{MigrateDeployment}", func() { err := SetSourceKubeConfig() log.FailOnError(err, "Switching context to source cluster failed") + // Schedule applications for i := 0; i < Inst().GlobalScaleFactor; i++ { taskName := fmt.Sprintf("%s-%d", taskNamePrefix, i) log.Infof("Task name %s\n", taskName) @@ -168,29 +188,29 @@ var _ = Describe("{MigrateDeploymentMetroAsync}", func() { }) JustBeforeEach(func() { skipFlag := getClusterDomainsInfo() - if skipFlag { - Skip("Skip test because cluster domains are not set") - } + if skipFlag { + Skip("Skip test because cluster domains are not set") + } StartTorpedoTest("MigrateDeploymentMetroAsync", "Migration of application using metro+async combination", nil, testrailID) runID = testrailuttils.AddRunsToMilestone(testrailID) }) var ( - contexts []*scheduler.Context - migrationNamespaces []string - taskNamePrefix = "metro-async-dr-mig" - allMigrationsMetro []*storkapi.Migration - allMigrationsAsync []*storkapi.Migration - includeResourcesFlag = true + contexts []*scheduler.Context + migrationNamespaces []string + taskNamePrefix = "metro-async-dr-mig" + allMigrationsMetro []*storkapi.Migration + allMigrationsAsync []*storkapi.Migration + includeResourcesFlag = true includeVolumesFlagMetro = false includeVolumesFlagAsync = true - startApplicationsFlag = false + startApplicationsFlag = false ) It("has to deploy app, create cluster pair, migrate app", func() { Step("Deploy applications", func() { err = SetCustomKubeConfig(asyncdr.FirstCluster) - log.FailOnError(err, "Switching context to first cluster failed") + log.FailOnError(err, "Switching context to first cluster failed") for i := 0; i < Inst().GlobalScaleFactor; i++ { taskName := fmt.Sprintf("%s-%d", taskNamePrefix, i) log.Infof("Task name %s\n", taskName) @@ -220,7 +240,7 @@ var _ = Describe("{MigrateDeploymentMetroAsync}", func() { migrationKey, currMigNamespace, err)) allMigrationsMetro = append(allMigrationsMetro, currMig) } - + // Validate all migrations for _, mig := range allMigrationsMetro { err := storkops.Instance().ValidateMigration(mig.Name, mig.Namespace, migrationRetryTimeout, migrationRetryInterval) @@ -230,7 +250,7 @@ var _ = Describe("{MigrateDeploymentMetroAsync}", func() { } err = SetCustomKubeConfig(asyncdr.SecondCluster) - log.FailOnError(err, "Switching context to second cluster failed") + log.FailOnError(err, "Switching context to second cluster failed") log.Infof("Start Async migration from Second DR to Third DR") @@ -259,6 +279,301 @@ var _ = Describe("{MigrateDeploymentMetroAsync}", func() { }) }) +var _ = Describe("{StorkctlPerformFailoverFailbackDefaultAsyncSingle}", func() { + testrailID = 296255 + // testrailID corresponds to: https://portworx.testrail.net/index.php?/cases/view/296255 + BeforeEach(func() { + if !kubeConfigWritten { + // Write kubeconfig files after reading from the config maps created by torpedo deploy script + WriteKubeconfigToFiles() + kubeConfigWritten = true + } + wantAllAfterSuiteActions = false + }) + JustBeforeEach(func() { + StartTorpedoTest("StorkctlPerformFailoverFailbackDefaultAsyncSingle", "Failover and Failback using storkctl on async cluster for single NS", nil, testrailID) + runID = testrailuttils.AddRunsToMilestone(testrailID) + }) + + It("has to deploy app, create cluster pair, migrate app and do failover/failback", func() { + Step("Deploy app, Create cluster pair, Migrate app and Do failover/failback", func() { + validateFailoverFailback("asyncdr", "asyncdr-failover-failback", true, false, false, false) + }) + }) + JustAfterEach(func() { + defer EndTorpedoTest() + AfterEachTest(contexts, testrailID, runID) + }) +}) + +var _ = Describe("{StorkctlPerformFailoverFailbackDefaultAsyncSkipSourceOperations}", func() { + testrailID = 296256 + // testrailID corresponds to: https://portworx.testrail.net/index.php?/cases/view/296256 + BeforeEach(func() { + if !kubeConfigWritten { + // Write kubeconfig files after reading from the config maps created by torpedo deploy script + WriteKubeconfigToFiles() + kubeConfigWritten = true + } + wantAllAfterSuiteActions = false + }) + JustBeforeEach(func() { + StartTorpedoTest("StorkctlPerformFailoverFailbackDefaultAsyncSkipSourceOperations", "Failover and Failback using storkctl on async cluster with skip source operations", nil, testrailID) + runID = testrailuttils.AddRunsToMilestone(testrailID) + }) + + It("has to deploy app, create cluster pair, migrate app and do failover/failback", func() { + Step("Deploy app, Create cluster pair, Migrate app and Do failover/failback", func() { + validateFailoverFailback("asyncdr", "asyncdr-failover-failback", false, true, false, false) + }) + }) + JustAfterEach(func() { + defer EndTorpedoTest() + AfterEachTest(contexts, testrailID, runID) + }) +}) + +var _ = Describe("{StorkctlPerformFailoverFailbackDefaultAsyncIncludeNs}", func() { + testrailID = 296368 + // testrailID corresponds to: https://portworx.testrail.net/index.php?/cases/view/296368 + BeforeEach(func() { + if !kubeConfigWritten { + // Write kubeconfig files after reading from the config maps created by torpedo deploy script + WriteKubeconfigToFiles() + kubeConfigWritten = true + } + wantAllAfterSuiteActions = false + }) + JustBeforeEach(func() { + StartTorpedoTest("StorkctlPerformFailoverFailbackDefaultAsyncIncludeNs", "Failover and Failback using storkctl on async cluster with Include Ns", nil, testrailID) + runID = testrailuttils.AddRunsToMilestone(testrailID) + }) + + It("has to deploy app, create cluster pair, migrate app and do failover/failback", func() { + Step("Deploy app, Create cluster pair, Migrate app and Do failover/failback", func() { + validateFailoverFailback("asyncdr", "asyncdr-failover-failback", false, false, true, false) + }) + }) + JustAfterEach(func() { + defer EndTorpedoTest() + AfterEachTest(contexts, testrailID, runID) + }) +}) + +var _ = Describe("{StorkctlPerformFailoverFailbackDefaultAsyncExcludeNs}", func() { + testrailID = 296367 + // testrailID corresponds to: https://portworx.testrail.net/index.php?/cases/view/296367 + BeforeEach(func() { + if !kubeConfigWritten { + // Write kubeconfig files after reading from the config maps created by torpedo deploy script + WriteKubeconfigToFiles() + kubeConfigWritten = true + } + wantAllAfterSuiteActions = false + }) + JustBeforeEach(func() { + StartTorpedoTest("StorkctlPerformFailoverFailbackDefaultAsyncExcludeNs", "Failover and Failback using storkctl on async cluster with Exclude Ns", nil, testrailID) + runID = testrailuttils.AddRunsToMilestone(testrailID) + }) + + It("has to deploy app, create cluster pair, migrate app and do failover/failback", func() { + Step("Deploy app, Create cluster pair, Migrate app and Do failover/failback", func() { + validateFailoverFailback("asyncdr", "asyncdr-failover-failback", false, false, false, true) + }) + }) + JustAfterEach(func() { + defer EndTorpedoTest() + AfterEachTest(contexts, testrailID, runID) + }) +}) + +var _ = Describe("{StorkctlPerformFailoverFailbackDefaultAsyncMultiple}", func() { + testrailID = 296255 + // testrailID corresponds to: https://portworx.testrail.net/index.php?/cases/view/296255 + BeforeEach(func() { + if !kubeConfigWritten { + // Write kubeconfig files after reading from the config maps created by torpedo deploy script + WriteKubeconfigToFiles() + kubeConfigWritten = true + } + wantAllAfterSuiteActions = false + }) + JustBeforeEach(func() { + StartTorpedoTest("StorkctlPerformFailoverFailbackDefaultAsyncMultiple", "Failover and Failback using storkctl on async cluster for multiple NS", nil, testrailID) + runID = testrailuttils.AddRunsToMilestone(testrailID) + }) + + It("has to deploy app, create cluster pair, migrate app and do failover/failback", func() { + Step("Deploy app, Create cluster pair, Migrate app and Do failover/failback", func() { + validateFailoverFailback("asyncdr", "asyncdr-failover-failback", false, false, false, false) + }) + }) + JustAfterEach(func() { + defer EndTorpedoTest() + AfterEachTest(contexts, testrailID, runID) + }) +}) + +var _ = Describe("{StorkctlPerformFailoverFailbackDefaultMetroSingle}", func() { + testrailID = 296291 + // testrailID corresponds to: https://portworx.testrail.net/index.php?/cases/view/296291 + BeforeEach(func() { + if !kubeConfigWritten { + // Write kubeconfig files after reading from the config maps created by torpedo deploy script + WriteKubeconfigToFiles() + kubeConfigWritten = true + } + wantAllAfterSuiteActions = false + }) + JustBeforeEach(func() { + skipFlag := getClusterDomainsInfo() + if skipFlag { + Skip("Skip test because cluster domains are not set") + } + StartTorpedoTest("StorkctlPerformFailoverFailbackDefaultMetroSingle", "Failover and Failback using storkctl on metro cluster for single NS", nil, testrailID) + runID = testrailuttils.AddRunsToMilestone(testrailID) + }) + + It("has to deploy app, create cluster pair, migrate app and do failover/failback", func() { + Step("Deploy app, Create cluster pair, Migrate app and Do failover/failback", func() { + validateFailoverFailback("metrodr", "metrodr-failover-failback", true, false, false, false) + }) + }) + JustAfterEach(func() { + defer EndTorpedoTest() + AfterEachTest(contexts, testrailID, runID) + }) +}) + +var _ = Describe("{StorkctlPerformFailoverFailbackDefaultMetroMultiple}", func() { + testrailID = 296291 + // testrailID corresponds to: https://portworx.testrail.net/index.php?/cases/view/296291 + BeforeEach(func() { + if !kubeConfigWritten { + // Write kubeconfig files after reading from the config maps created by torpedo deploy script + WriteKubeconfigToFiles() + kubeConfigWritten = true + } + wantAllAfterSuiteActions = false + }) + JustBeforeEach(func() { + skipFlag := getClusterDomainsInfo() + if skipFlag { + Skip("Skip test because cluster domains are not set") + } + StartTorpedoTest("StorkctlPerformFailoverFailbackDefaultMetroMultiple", "Failover and Failback using storkctl on metro cluster for multiple NS", nil, testrailID) + runID = testrailuttils.AddRunsToMilestone(testrailID) + }) + + It("has to deploy app, create cluster pair, migrate app and do failover/failback", func() { + Step("Deploy app, Create cluster pair, Migrate app and Do failover/failback", func() { + validateFailoverFailback("metrodr", "metrodr-failover-failback", false, false, false, false) + }) + }) + JustAfterEach(func() { + defer EndTorpedoTest() + AfterEachTest(contexts, testrailID, runID) + }) +}) + +func validateFailoverFailback(clusterType, taskNamePrefix string, single, skipSourceOp, includeNs, excludeNs bool) { + defaultNs := "kube-system" + migrationNamespaces, contexts := initialSetupApps(taskNamePrefix, single) + migNamespaces := strings.Join(migrationNamespaces, ",") + kubeConfigPathSrc, err := GetCustomClusterConfigPath(asyncdr.FirstCluster) + log.FailOnError(err, "Failed to get source configPath: %v", err) + kubeConfigPathDest, err := GetCustomClusterConfigPath(asyncdr.SecondCluster) + log.FailOnError(err, "Failed to get destination configPath: %v", err) + if single { + defaultNs = migrationNamespaces[0] + migNamespaces = defaultNs + } + extraArgs := map[string]string{ + "namespaces": migNamespaces, + "kubeconfig": kubeConfigPathSrc, + } + log.Infof("Creating clusterpair between first and second cluster") + cpName := defaultClusterPairName + time.Now().Format("15h03m05s") + if clusterType == "asyncdr" { + err = ScheduleBidirectionalClusterPair(cpName, defaultNs, "", storkapi.BackupLocationType(defaultBackupLocation), defaultSecret, "async-dr", asyncdr.FirstCluster, asyncdr.SecondCluster) + } else { + err = ScheduleBidirectionalClusterPair(cpName, defaultNs, "", "", "", "sync-dr", asyncdr.FirstCluster, asyncdr.SecondCluster) + } + log.FailOnError(err, "Failed creating bidirectional cluster pair") + log.Infof("Start migration schedule and perform failover") + migrationSchedName := migrationSchedKey + time.Now().Format("15h03m05s") + createMigSchdAndValidateMigration(migrationSchedName, cpName, defaultNs, kubeConfigPathSrc, extraArgs) + err = SetCustomKubeConfig(asyncdr.SecondCluster) + log.FailOnError(err, "Switching context to second cluster failed") + extraArgsFailoverFailback := map[string]string{ + "kubeconfig": kubeConfigPathDest, + } + if includeNs { + extraArgsFailoverFailback["include-namespaces"] = migrationNamespaces[0] + } + if excludeNs { + extraArgsFailoverFailback["exclude-namespaces"] = migrationNamespaces[0] + } + failoverParam := failoverFailbackParam{ + action: "failover", + failoverOrFailbackNs: defaultNs, + migrationSchedName: migrationSchedName, + configPath: kubeConfigPathDest, + single: single, + skipSourceOp: skipSourceOp, + includeNs: includeNs, + excludeNs: excludeNs, + extraArgsFailoverFailback: extraArgsFailoverFailback, + contexts: contexts, + } + performFailoverFailback(failoverParam) + if skipSourceOp { + err = hardSetConfig(kubeConfigPathSrc) + log.FailOnError(err, "Error setting source config: %v", err) + for _, ctx := range contexts { + waitForPodsToBeRunning(ctx, false) + } + } else { + err = hardSetConfig(kubeConfigPathDest) + log.FailOnError(err, "Error setting destination config: %v", err) + extraArgs["kubeconfig"] = kubeConfigPathDest + newMigSched := migrationSchedName + "-rev" + if includeNs { + extraArgs["namespaces"] = migrationNamespaces[0] + } + if excludeNs { + extraArgs["namespaces"] = strings.Join(migrationNamespaces[1:], ",") + extraArgsFailoverFailback["exclude-namespaces"] = migrationNamespaces[1] + } + createMigSchdAndValidateMigration(newMigSched, cpName, defaultNs, kubeConfigPathDest, extraArgs) + failoverback := failoverFailbackParam{ + action: "failback", + failoverOrFailbackNs: defaultNs, + migrationSchedName: newMigSched, + configPath: kubeConfigPathDest, + single: single, + skipSourceOp: false, + includeNs: includeNs, + excludeNs: excludeNs, + extraArgsFailoverFailback: extraArgsFailoverFailback, + contexts: contexts, + } + performFailoverFailback(failoverback) + } + err = asyncdr.WaitForNamespaceDeletion(migrationNamespaces) + if err != nil { + log.Infof("Failed to delete namespaces: %v", err) + } + err = hardSetConfig(kubeConfigPathDest) + if err != nil { + log.Infof("Failed to se dest kubeconfig for NS deletion on dest: %v", err) + } + err = asyncdr.WaitForNamespaceDeletion(migrationNamespaces) + if err != nil { + log.Infof("Failed to delete namespaces: %v", err) + } +} + func getClusterDomainsInfo() bool { skipFlag := false listCdsTask := func() (interface{}, bool, error) { @@ -376,3 +691,136 @@ func DeleteAndWaitForMigrationDeletion(name, namespace string) error { _, err = task.DoRetryWithTimeout(getMigration, migrationRetryTimeout, migrationRetryInterval) return err } + +func initialSetupApps(taskNamePrefix string, single bool) ([]string, []*scheduler.Context) { + var contexts []*scheduler.Context + var migrationNamespaces []string + + err = SetCustomKubeConfig(asyncdr.FirstCluster) + log.FailOnError(err, "Switching context to first cluster failed") + if single { + taskName := fmt.Sprintf("%s", taskNamePrefix) + log.Infof("Task name %s\n", taskName) + contexts = append(contexts, ScheduleApplications(taskName)...) + } else { + for i := 0; i < Inst().GlobalScaleFactor; i++ { + taskName := fmt.Sprintf("%s-%d", taskNamePrefix, i) + log.Infof("Task name %s\n", taskName) + contexts = append(contexts, ScheduleApplications(taskName)...) + } + } + for _, ctx := range contexts { + // Override default App readiness time out of 5 mins with 10 mins + ctx.ReadinessTimeout = appReadinessTimeout + namespace := GetAppNamespace(ctx, "") + migrationNamespaces = append(migrationNamespaces, namespace) + } + log.Infof("Migration Namespaces are : [%v]", migrationNamespaces) + ValidateApplications(contexts) + return migrationNamespaces, contexts +} + +func createMigSchdAndValidateMigration(migSchedName, cpName, migNs, resetConfigPath string, extraArgs map[string]string) { + var migration *storkapi.Migration + err = storkctlcli.ScheduleStorkctlMigrationSched(migSchedName, cpName, migNs, extraArgs) + log.FailOnError(err, "Error creating migrationschedule: %v", err) + err = hardSetConfig(resetConfigPath) + log.FailOnError(err, "Error setting destination config: %v", err) + migSchedule, err := storkops.Instance().GetMigrationSchedule(migSchedName, migNs) + log.FailOnError(err, "failed to get migrationschedule %v, err: %v", migSchedName, err) + time.Sleep(time.Second * 30) + migrations := migSchedule.Status.Items["Interval"] + for _, mig := range migrations { + migration, err = storkops.Instance().GetMigration(mig.Name, migNs) + log.FailOnError(err, "failed to get migration for migrationschedule %v, err: %v", migSchedName, err) + err = WaitForMigration([]*storkapi.Migration{migration}) + log.FailOnError(err, "Migration failed with error: %v", err) + } +} + +func performFailoverFailback(foFbParams failoverFailbackParam) { + err, output := storkctlcli.PerformFailoverOrFailback(foFbParams.action, foFbParams.failoverOrFailbackNs, foFbParams.migrationSchedName, foFbParams.skipSourceOp, foFbParams.extraArgsFailoverFailback) + log.FailOnError(err, "Error running perform %v: %v", foFbParams.action, err) + splitOutput := strings.Split(output, "\n") + prefix := fmt.Sprintf("To check %s status use the command : `", foFbParams.action) + getStatusCommand := strings.TrimSpace(strings.TrimPrefix(splitOutput[1], prefix)) + getStatusCommand = strings.TrimSuffix(getStatusCommand, "`") + getStatusCmdArgs := strings.Split(getStatusCommand, " ") + // Extract the action Name from the command args + actionName := getStatusCmdArgs[3] + err = storkctlcli.WaitForActionSuccessful(actionName, foFbParams.failoverOrFailbackNs, Inst().GlobalScaleFactor) + log.FailOnError(err, "Error in performing %v: %v", foFbParams.action, err) + validatePodsRunning(foFbParams.action, foFbParams.single, foFbParams.includeNs, foFbParams.excludeNs, foFbParams.contexts) +} + +func validatePodsRunning(action string, single, includeNs, excludeNs bool, contexts []*scheduler.Context) { + switch action { + case "failover": + if includeNs { + waitForPodsToBeRunning(contexts[0], false) + for i := 1; i < len(contexts); i++ { + ctx := contexts[i] + waitForPodsToBeRunning(ctx, true) + } + } else if excludeNs { + waitForPodsToBeRunning(contexts[0], true) + for i := 1; i < len(contexts); i++ { + ctx := contexts[i] + waitForPodsToBeRunning(ctx, false) + } + } else if single { + waitForPodsToBeRunning(contexts[0], false) + } else { + for _, ctx := range contexts { + waitForPodsToBeRunning(ctx, false) + } + } + case "failback": + kubeConfigPathSrc, err := GetCustomClusterConfigPath(asyncdr.FirstCluster) + log.FailOnError(err, "Failed to get source configPath: %v", err) + err = hardSetConfig(kubeConfigPathSrc) + log.FailOnError(err, "Error setting source config") + if includeNs { + for _, ctx := range contexts { + waitForPodsToBeRunning(ctx, false) + } + } else if excludeNs { + for i := 1; i < len(contexts); i++ { + ctx := contexts[i] + if i == 1 { + waitForPodsToBeRunning(ctx, true) + } else { + waitForPodsToBeRunning(ctx, false) + } + } + } else if single { + waitForPodsToBeRunning(contexts[0], false) + } else { + for _, ctx := range contexts { + waitForPodsToBeRunning(ctx, false) + } + } + } +} + +func hardSetConfig(configPath string) error { + var config *rest.Config + config, err = clientcmd.BuildConfigFromFlags("", configPath) + if err != nil { + return err + } + core.Instance().SetConfig(config) + apps.Instance().SetConfig(config) + stork.Instance().SetConfig(config) + return nil +} + +func waitForPodsToBeRunning(context *scheduler.Context, expectedFail bool) { + log.Infof("Verifying Context [%v]", context.App.Key) + err := Inst().S.WaitForRunning(context, 5 * time.Minute, 10 * time.Second) + if expectedFail { + log.FailOnNoError(err, "Pods are up on destination, they shouldn't be up") + } else { + log.FailOnError(err, "Error waiting for pods to be up") + } +} \ No newline at end of file diff --git a/tests/basic/autopilot_test.go b/tests/basic/autopilot_test.go index 7e0ff5edf..0a63e24fc 100644 --- a/tests/basic/autopilot_test.go +++ b/tests/basic/autopilot_test.go @@ -999,7 +999,7 @@ var _ = Describe(fmt.Sprintf("{%sPvcAndPoolExpand}", testSuiteName), func() { var contexts []*scheduler.Context It("has to fill up the volume completely, resize the volumes and storage pool(s), validate and teardown apps", func() { testName := strings.ToLower(fmt.Sprintf("%sPvcAndPoolExpand", testSuiteName)) - poolLabel := map[string]string{"autopilot": "adddisk"} + poolLabel := map[string]string{"autopilot": "resizedisk"} pvcLabel := map[string]string{"autopilot": "pvc-expand"} storageNodes := node.GetStorageDriverNodes() pvcApRules := []apapi.AutopilotRule{ @@ -1007,7 +1007,7 @@ var _ = Describe(fmt.Sprintf("{%sPvcAndPoolExpand}", testSuiteName), func() { aututils.PVCRuleByTotalSize(10, 100, ""), } poolApRules := []apapi.AutopilotRule{ - aututils.PoolRuleByTotalSize((getTotalPoolSize(storageNodes[0])/units.GiB)+1, 10, aututils.RuleScaleTypeAddDisk, poolLabel), + aututils.PoolRuleByTotalSize((getTotalPoolSize(storageNodes[0])/units.GiB)+1, 10, aututils.RuleScaleTypeResizeDisk, poolLabel), } Step("schedule apps with autopilot rules for pool expand", func() { diff --git a/tests/basic/customer_issues_test.go b/tests/basic/customer_issues_test.go index f88cbb05e..43041a9ed 100644 --- a/tests/basic/customer_issues_test.go +++ b/tests/basic/customer_issues_test.go @@ -589,17 +589,10 @@ var _ = Describe("{CreateCloudSnapAndDelete}", func() { stepLog := "has to schedule cloud snap and delete cloudsnaps" It(stepLog, func() { log.InfoD(stepLog) - n := node.GetStorageDriverNodes()[0] - uuidCmd := "pxctl cred list -j | grep uuid" - output, err := runCmd(uuidCmd, n) - log.FailOnError(err, "error getting uuid for cloudsnap credential") - if output == "" { - log.FailOnError(fmt.Errorf("cloud cred is not created"), "Check for cloud cred exists?") - } - credUUID := strings.Split(strings.TrimSpace(output), " ")[1] - credUUID = strings.ReplaceAll(credUUID, "\"", "") - log.Infof("Got Cred UUID: %s", credUUID) + err := CreatePXCloudCredential() + log.FailOnError(err, "failed to create cloud credential") + contexts = make([]*scheduler.Context, 0) policyName := "intervalpolicy" appScale := 5 @@ -628,6 +621,11 @@ var _ = Describe("{CreateCloudSnapAndDelete}", func() { log.FailOnError(err, fmt.Sprintf("error creating a SchedulePolicy [%s]", policyName)) } + defer func() { + err := storkops.Instance().DeleteSchedulePolicy(policyName) + log.FailOnError(err, fmt.Sprintf("error deleting a SchedulePolicy [%s]", policyName)) + }() + for i := 0; i < appScale; i++ { contexts = append(contexts, ScheduleApplications(fmt.Sprintf("cloudsnap-%d", i))...) } @@ -762,15 +760,11 @@ var _ = Describe("{CreateCloudSnapAndDelete}", func() { } log.FailOnError(err, fmt.Sprintf("error deleting Cloudsnap %s", bk.Id)) } - } - } - - opts := make(map[string]bool) - opts[scheduler.OptionsWaitForResourceLeakCleanup] = true - ValidateAndDestroy(contexts, opts) - + for _, ctx := range contexts { + ValidateContext(ctx) + } }) }) @@ -778,6 +772,13 @@ var _ = Describe("{CreateCloudSnapAndDelete}", func() { }) JustAfterEach(func() { defer EndTorpedoTest() + bucketName, err := GetCloudsnapBucketName(contexts) + log.FailOnError(err, "error getting cloud snap bucket name") + opts := make(map[string]bool) + opts[scheduler.OptionsWaitForResourceLeakCleanup] = true + DestroyApps(contexts, opts) + err = DeleteCloudSnapBucket(bucketName) + log.FailOnError(err, "failed to delete cloud snap bucket") AfterEachTest(contexts) }) }) diff --git a/tests/basic/kubevirt_test.go b/tests/basic/kubevirt_test.go index 83bc274f2..f3bbfd266 100644 --- a/tests/basic/kubevirt_test.go +++ b/tests/basic/kubevirt_test.go @@ -3,8 +3,10 @@ package tests import ( context1 "context" "fmt" + "github.com/portworx/sched-ops/k8s/core" "net/url" "strings" + "sync" "time" apapi "github.com/libopenstorage/autopilot-api/pkg/apis/autopilot/v1alpha1" @@ -28,8 +30,10 @@ var _ = Describe("{AddNewDiskToKubevirtVM}", func() { var namespace string itLog := "Add a new disk to a kubevirtVM" It(itLog, func() { - defer ListEvents("portworx") - namespace = fmt.Sprintf("kubevirt-%v", time.Now().Unix()) + pxNs, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "Failed to get volume driver namespace") + defer ListEvents(pxNs) + appList := Inst().AppList defer func() { Inst().AppList = appList @@ -46,6 +50,7 @@ var _ = Describe("{AddNewDiskToKubevirtVM}", func() { stepLog = "schedule a kubevirtVM" Step(stepLog, func() { for i := 0; i < Inst().GlobalScaleFactor; i++ { + namespace = fmt.Sprintf("kubevirt-%v", time.Now().Unix()) appCtxs = append(appCtxs, ScheduleApplicationsOnNamespace(namespace, "test")...) } }) @@ -94,7 +99,10 @@ var _ = Describe("{KubeVirtLiveMigration}", func() { var namespace string itLog := "Live migrate a kubevirtVM" It(itLog, func() { - defer ListEvents("portworx") + pxNs, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "Failed to get volume driver namespace") + defer ListEvents(pxNs) + namespace = fmt.Sprintf("kubevirt-%v", time.Now().Unix()) log.InfoD(stepLog) appList := Inst().AppList @@ -144,7 +152,10 @@ var _ = Describe("{PxKillBeforeAddDiskToVM}", func() { var namespace string itLog := "Kill Px then Add disk to Kubevirt VM" It(itLog, func() { - defer ListEvents("portworx") + pxNs, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "Failed to get volume driver namespace") + defer ListEvents(pxNs) + namespace = fmt.Sprintf("kubevirt-%v", time.Now().Unix()) appList := Inst().AppList defer func() { @@ -247,7 +258,10 @@ var _ = Describe("{PxKillAfterAddDiskToVM}", func() { itLog := "Add disk to Kubevirt VM, Kill Px and then add another disk" It(itLog, func() { - defer ListEvents("portworx") + pxNs, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "Failed to get volume driver namespace") + defer ListEvents(pxNs) + namespace = fmt.Sprintf("kubevirt-%v", time.Now().Unix()) appList := Inst().AppList defer func() { @@ -358,7 +372,10 @@ var _ = Describe("{KubevirtVMVolHaIncrease}", func() { var namespace string itLog := "Increase the volume HA of a kubevirt VM" It(itLog, func() { - defer ListEvents("portworx") + pxNs, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "Failed to get volume driver namespace") + defer ListEvents(pxNs) + namespace = fmt.Sprintf("kubevirt-%v", time.Now().Unix()) appList := Inst().AppList defer func() { @@ -430,7 +447,10 @@ var _ = Describe("{KubevirtVMVolHaDecrease}", func() { var namespace string itLog := "Decrease the volume HA of a kubevirt VM" It(itLog, func() { - defer ListEvents("portworx") + pxNs, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "Failed to get volume driver namespace") + defer ListEvents(pxNs) + namespace = fmt.Sprintf("kubevirt-%v", time.Now().Unix()) log.InfoD(stepLog) appList := Inst().AppList @@ -506,7 +526,10 @@ var _ = Describe("{LiveMigrationBeforeAddDisk}", func() { var namespace string itLog := "Live Migrate a VM and then add a new disk to a kubevirtVM" It(itLog, func() { - defer ListEvents("portworx") + pxNs, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "Failed to get volume driver namespace") + defer ListEvents(pxNs) + namespace = fmt.Sprintf("kubevirt-%v", time.Now().Unix()) appList := Inst().AppList defer func() { @@ -572,7 +595,10 @@ var _ = Describe("{AddDiskAndLiveMigrate}", func() { var namespace string itLog := "Add a new disk to a kubevirtVM and then Live Migrate" It(itLog, func() { - defer ListEvents("portworx") + pxNs, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "Failed to get volume driver namespace") + defer ListEvents(pxNs) + namespace = fmt.Sprintf("kubevirt-%v", time.Now().Unix()) appList := Inst().AppList defer func() { @@ -659,7 +685,10 @@ var _ = Describe("{KubeVirtPvcAndPoolExpandWithAutopilot}", func() { }) It("has to fill up the volume completely, resize the volumes and storage pool(s), validate and teardown apps", func() { - defer ListEvents("portworx") + pxNs, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "Failed to get volume driver namespace") + defer ListEvents(pxNs) + log.InfoD("filling up the volume completely, resizing the volumes and storage pool(s), validating and tearing down apps") Step("Create autopilot rules for PVC and pool expand", func() { @@ -853,7 +882,10 @@ var _ = Describe("{UpgradeOCPAndValidateKubeVirtApps}", func() { itLog := "Upgrade OCP cluster and validate kubevirt apps" It(itLog, func() { - defer ListEvents("portworx") + pxNs, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "Failed to get volume driver namespace") + defer ListEvents(pxNs) + stepLog := "schedule kubevirt VMs" Step(stepLog, func() { for i := 0; i < Inst().GlobalScaleFactor; i++ { @@ -898,7 +930,7 @@ var _ = Describe("{UpgradeOCPAndValidateKubeVirtApps}", func() { dash.VerifyFatal(mError, nil, "validation of PDB of px-storage during cluster upgrade successful") dash.VerifyFatal(err, nil, fmt.Sprintf("verify [%s] upgrade to [%s] is successful", Inst().S.String(), version)) - PrintK8sCluterInfo() + PrintK8sClusterInfo() }) Step("validate storage components", func() { @@ -909,7 +941,7 @@ var _ = Describe("{UpgradeOCPAndValidateKubeVirtApps}", func() { dash.VerifyFatal(err, nil, fmt.Sprintf("verify volume driver after upgrade to %s", version)) // Printing cluster node info after the upgrade - PrintK8sCluterInfo() + PrintK8sClusterInfo() }) Step("update node drive endpoints", func() { @@ -948,7 +980,10 @@ var _ = Describe("{RebootRootDiskAttachedNode}", func() { itLog := "Reboot node where Kubevirt VMs root disk is attached" It(itLog, func() { - defer ListEvents("portworx") + pxNs, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "Failed to get volume driver namespace") + defer ListEvents(pxNs) + appList := Inst().AppList defer func() { Inst().AppList = appList @@ -1014,3 +1049,912 @@ var _ = Describe("{RebootRootDiskAttachedNode}", func() { AfterEachTest(appCtxs) }) }) + +var _ = Describe("{ParallelAddDiskToVM}", func() { + JustBeforeEach(func() { + StartTorpedoTest("ParallelAddDiskToVM", "Add a new disk to multiple kubevirtVM parallely", nil, 0) + }) + var appCtxs []*scheduler.Context + var namespace string + var wg sync.WaitGroup + + itLog := "Add a new disk to multiple kubevirtVM" + It(itLog, func() { + pxNs, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "Failed to get volume driver namespace") + defer ListEvents(pxNs) + + appList := Inst().AppList + defer func() { + Inst().AppList = appList + }() + numberOfVolumes := 1 + Inst().AppList = []string{"kubevirt-debian-template"} + stepLog := "Setting up Boot PVC Template" + Step(stepLog, func() { + template := ScheduleApplications("template") + ValidateApplications(template) + }) + + Inst().AppList = []string{"kubevirt-debian-fio-minimal"} + stepLog = "schedule a kubevirtVM" + Step(stepLog, func() { + for i := 0; i < Inst().GlobalScaleFactor; i++ { + namespace = fmt.Sprintf("kubevirt-%v", time.Now().Unix()) + appCtxs = append(appCtxs, ScheduleApplicationsOnNamespace(namespace, "test")...) + } + }) + ValidateApplications(appCtxs) + for _, appCtx := range appCtxs { + bindMount, err := IsVMBindMounted(appCtx, false) + log.FailOnError(err, "Failed to verify bind mount") + dash.VerifyFatal(bindMount, true, "Failed to verify bind mount") + } + + stepLog = "Add one disk to multiple kubevirt VM at the same time" + Step(stepLog, func() { + log.InfoD(stepLog) + for _, appCtx := range appCtxs { + wg.Add(1) + go func(appCtx *scheduler.Context) { + defer GinkgoRecover() + defer wg.Done() + _, err := AddDisksToKubevirtVM([]*scheduler.Context{appCtx}, numberOfVolumes, "10Gi") + log.FailOnError(err, "Failed to add disks to kubevirt VM") + dash.VerifyFatal(true, true, "Failed to add disks to kubevirt VM?") + }(appCtx) + } + }) + wg.Wait() + + stepLog = "Verify the new disk added is also bind mounted" + Step(stepLog, func() { + log.InfoD(stepLog) + for _, appCtx := range appCtxs { + isVmBindMounted, err := IsVMBindMounted(appCtx, true) + log.FailOnError(err, "Failed to verify disks in kubevirt VM") + if !isVmBindMounted { + log.Errorf("The newly added disk to vm %s is not bind mounted", appCtx.App.Key) + } + } + }) + stepLog = "Destroy Applications" + Step(stepLog, func() { + log.InfoD(stepLog) + DestroyApps(appCtxs, nil) + }) + }) + JustAfterEach(func() { + defer EndTorpedoTest() + AfterEachTest(appCtxs) + }) +}) + +var _ = Describe("{MultipleKubeVirtLiveMigration}", func() { + JustBeforeEach(func() { + StartTorpedoTest("MultipleKubeVirtLiveMigration", "Live migrate multiple kubevirtVM's parallely", nil, 0) + }) + var appCtxs []*scheduler.Context + var namespace string + var wg sync.WaitGroup + + itLog := "Live migrate multiple kubevirtVM's parallely" + It(itLog, func() { + pxNs, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "Failed to get volume driver namespace") + defer ListEvents(pxNs) + + log.InfoD(stepLog) + appList := Inst().AppList + defer func() { + Inst().AppList = appList + }() + Inst().AppList = []string{"kubevirt-debian-fio-minimal"} + stepLog := "schedule a kubevirt VM" + Step(stepLog, func() { + for i := 0; i < Inst().GlobalScaleFactor; i++ { + namespace = fmt.Sprintf("kubevirt-%v", time.Now().Unix()) + appCtxs = append(appCtxs, ScheduleApplicationsOnNamespace(namespace, "test")...) + } + }) + ValidateApplications(appCtxs) + for _, appCtx := range appCtxs { + bindMount, err := IsVMBindMounted(appCtx, false) + log.FailOnError(err, "Failed to verify bind mount") + dash.VerifyFatal(bindMount, true, "Failed to verify bind mount") + } + stepLog = "Live migrate the kubevirt VM" + Step(stepLog, func() { + log.InfoD(stepLog) + for _, appCtx := range appCtxs { + wg.Add(1) + go func(appCtx *scheduler.Context) { + defer GinkgoRecover() + defer wg.Done() + err := StartAndWaitForVMIMigration(appCtx, context1.TODO()) + log.FailOnError(err, "Failed to live migrate kubevirt VM") + }(appCtx) + } + }) + wg.Wait() + + stepLog = "Destroy Applications" + Step(stepLog, func() { + log.InfoD(stepLog) + DestroyApps(appCtxs, nil) + }) + }) + JustAfterEach(func() { + defer EndTorpedoTest() + AfterEachTest(appCtxs) + }) +}) + +var _ = Describe("{AddDiskAndLiveMigrateMultipleVm}", func() { + JustBeforeEach(func() { + StartTorpedoTest("AddDiskAndLiveMigrateMultipleVm", "Live Migrate multiple VM's After Adding a new disk to a kubevirtVM", nil, 0) + }) + var appCtxs []*scheduler.Context + var namespace string + var wg sync.WaitGroup + + itLog := "Add a new disk to multiple kubevirtVM and then Live Migrate them parallely" + It(itLog, func() { + pxNs, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "Failed to get volume driver namespace") + defer ListEvents(pxNs) + + appList := Inst().AppList + defer func() { + Inst().AppList = appList + }() + numberOfVolumes := 1 + Inst().AppList = []string{"kubevirt-debian-fio-minimal"} + stepLog := "schedule a kubevirtVM" + Step(stepLog, func() { + for i := 0; i < Inst().GlobalScaleFactor; i++ { + namespace = fmt.Sprintf("kubevirt-%v", time.Now().Unix()) + appCtxs = append(appCtxs, ScheduleApplicationsOnNamespace(namespace, "test")...) + } + }) + ValidateApplications(appCtxs) + for _, appCtx := range appCtxs { + bindMount, err := IsVMBindMounted(appCtx, false) + log.FailOnError(err, "Failed to verify bind mount") + dash.VerifyFatal(bindMount, true, "Failed to verify bind mount") + } + + stepLog = "Add one disk to the kubevirt VM's and check if new added disk is bind mounted and live migrate the vms parallely" + Step(stepLog, func() { + log.InfoD(stepLog) + for _, appCtx := range appCtxs { + wg.Add(1) + go func(appCtx *scheduler.Context) { + defer GinkgoRecover() + defer wg.Done() + + success, err := AddDisksToKubevirtVM([]*scheduler.Context{appCtx}, numberOfVolumes, "10Gi") + log.FailOnError(err, "Failed to add disks to kubevirt VM") + dash.VerifyFatal(success, true, "Failed to add disks to kubevirt VM?") + + isVmBindMounted, err := IsVMBindMounted(appCtx, true) + log.FailOnError(err, "Failed to verify disks in kubevirt VM") + if !isVmBindMounted { + log.Errorf("The newly added disk to vm %s is not bind mounted", appCtx.App.Key) + } + err = StartAndWaitForVMIMigration(appCtx, context1.TODO()) + log.FailOnError(err, "Failed to live migrate kubevirt VM") + }(appCtx) + } + }) + wg.Wait() + + stepLog = "Destroy Applications" + Step(stepLog, func() { + log.InfoD(stepLog) + DestroyApps(appCtxs, nil) + }) + }) + JustAfterEach(func() { + defer EndTorpedoTest() + AfterEachTest(appCtxs) + }) +}) + +var _ = Describe("{LiveMigrationBeforeAddDiskMultipleVm}", func() { + JustBeforeEach(func() { + StartTorpedoTest("LiveMigrationBeforeAddDiskMultipleVm", "Live Migrate multiple VM's Before Adding a new disk to a kubevirtVM parallely", nil, 0) + }) + var appCtxs []*scheduler.Context + var namespace string + var wg sync.WaitGroup + + itLog := "Live Migrate multiple VM's and then add a new disk to a kubevirtVM" + It(itLog, func() { + pxNs, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "Failed to get volume driver namespace") + defer ListEvents(pxNs) + + appList := Inst().AppList + defer func() { + Inst().AppList = appList + }() + numberOfVolumes := 1 + Inst().AppList = []string{"kubevirt-debian-fio-minimal"} + stepLog := "schedule a kubevirtVM" + Step(stepLog, func() { + for i := 0; i < Inst().GlobalScaleFactor; i++ { + namespace = fmt.Sprintf("kubevirt-%v", time.Now().Unix()) + appCtxs = append(appCtxs, ScheduleApplicationsOnNamespace(namespace, "test")...) + } + }) + ValidateApplications(appCtxs) + for _, appCtx := range appCtxs { + bindMount, err := IsVMBindMounted(appCtx, false) + log.FailOnError(err, "Failed to verify bind mount") + dash.VerifyFatal(bindMount, true, "Failed to verify bind mount") + } + stepLog = "Live migrate the kubevirt VM's,Add one disk to the kubevirt VM and verify the new disk added is also bind mounted" + Step(stepLog, func() { + log.InfoD(stepLog) + for _, appCtx := range appCtxs { + wg.Add(1) + go func(appCtx *scheduler.Context) { + defer GinkgoRecover() + defer wg.Done() + err := StartAndWaitForVMIMigration(appCtx, context1.TODO()) + log.FailOnError(err, "Failed to live migrate kubevirt VM") + + success, err := AddDisksToKubevirtVM([]*scheduler.Context{appCtx}, numberOfVolumes, "10Gi") + log.FailOnError(err, "Failed to add disks to kubevirt VM") + dash.VerifyFatal(success, true, "Failed to add disks to kubevirt VM?") + + isVmBindMounted, err := IsVMBindMounted(appCtx, true) + log.FailOnError(err, "Failed to verify disks in kubevirt VM") + if !isVmBindMounted { + log.Errorf("The newly added disk to vm %s is not bind mounted", appCtx.App.Key) + } + }(appCtx) + } + }) + stepLog = "Destroy Applications" + Step(stepLog, func() { + log.InfoD(stepLog) + DestroyApps(appCtxs, nil) + }) + }) + JustAfterEach(func() { + defer EndTorpedoTest() + AfterEachTest(appCtxs) + }) +}) + +var _ = Describe("{MultipleVMVolHaIncrease}", func() { + JustBeforeEach(func() { + StartTorpedoTest("MultipleVMVolHaIncrease", "Increase the volume HA of multiple kubevirt VM parallely", nil, 0) + }) + var appCtxs []*scheduler.Context + var namespace string + var wg sync.WaitGroup + + itLog := "Increase the volume HA of multiple kubevirt VM parallely" + It(itLog, func() { + pxNs, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "Failed to get volume driver namespace") + defer ListEvents(pxNs) + + appList := Inst().AppList + defer func() { + Inst().AppList = appList + }() + Inst().AppList = []string{"kubevirt-debian-fio-low-ha"} + stepLog := "schedule a kubevirt VM" + Step(stepLog, func() { + for i := 0; i < Inst().GlobalScaleFactor; i++ { + namespace = fmt.Sprintf("kubevirt-%v", time.Now().Unix()) + appCtxs = append(appCtxs, ScheduleApplicationsOnNamespace(namespace, "test")...) + } + }) + ValidateApplications(appCtxs) + for _, appCtx := range appCtxs { + bindMount, err := IsVMBindMounted(appCtx, false) + log.FailOnError(err, "Failed to verify bind mount") + dash.VerifyFatal(bindMount, true, "Failed to verify bind mount") + } + stepLog = "Increase the volume HA of the multiple kubevirt VM Volumes and check if they are bind mounted parallely" + Step(stepLog, func() { + log.InfoD(stepLog) + for _, appCtx := range appCtxs { + wg.Add(1) + go func(appCtx *scheduler.Context) { + defer GinkgoRecover() + defer wg.Done() + vols, err := Inst().S.GetVolumes(appCtx) + log.FailOnError(err, "Failed to get volumes of kubevirt VM") + for _, vol := range vols { + currRep, err := Inst().V.GetReplicationFactor(vol) + log.FailOnError(err, "Failed to get Repl factor for vil %s", vol.Name) + + if currRep < 3 { + opts := volume.Options{ + ValidateReplicationUpdateTimeout: validateReplicationUpdateTimeout, + } + err = Inst().V.SetReplicationFactor(vol, currRep+1, nil, nil, true, opts) + dash.VerifyFatal(err, nil, fmt.Sprintf("Validate set repl factor to %d", currRep+1)) + } else { + log.Warnf("Volume %s has reached maximum replication factor", vol.Name) + } + } + isVmBindMounted, err := IsVMBindMounted(appCtx, true) + log.FailOnError(err, "Failed to run vm bind mount check") + if !isVmBindMounted { + log.Errorf("The newly added replication to vm %s is not bind mounted", appCtx.App.Key) + } + }(appCtx) + } + }) + + wg.Wait() + stepLog = "Destroy Applications" + Step(stepLog, func() { + log.InfoD(stepLog) + DestroyApps(appCtxs, nil) + }) + }) + JustAfterEach(func() { + defer EndTorpedoTest() + AfterEachTest(appCtxs) + }) +}) + +var _ = Describe("{MultipleVMVolHaDecrease}", func() { + JustBeforeEach(func() { + StartTorpedoTest("MultipleVMVolHaDecrease", "Decrease the replication factor of multiple kubevirt Vms paralley", nil, 0) + }) + var appCtxs []*scheduler.Context + var namespace string + var wg sync.WaitGroup + + itLog := "Decrease the replication factor of multiple kubevirt Vms paralley" + It(itLog, func() { + pxNs, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "Failed to get volume driver namespace") + defer ListEvents(pxNs) + + namespace = fmt.Sprintf("kubevirt-%v", time.Now().Unix()) + log.InfoD(stepLog) + appList := Inst().AppList + defer func() { + Inst().AppList = appList + }() + + Inst().AppList = []string{"kubevirt-debian-fio-minimal"} + stepLog := "schedule a kubevirt VM" + Step(stepLog, func() { + log.InfoD(stepLog) + for i := 0; i < Inst().GlobalScaleFactor; i++ { + namespace = fmt.Sprintf("kubevirt-%v", time.Now().Unix()) + appCtxs = append(appCtxs, ScheduleApplicationsOnNamespace(namespace, "test")...) + } + }) + ValidateApplications(appCtxs) + for _, appCtx := range appCtxs { + bindMount, err := IsVMBindMounted(appCtx, false) + log.FailOnError(err, "Failed to verify bind mount") + dash.VerifyFatal(bindMount, true, "Failed to verify bind mount") + } + + stepLog = "Decrease the volume HA of the multiple kubevirt VM Volumes and check if they are bind mounted" + Step(stepLog, func() { + log.InfoD(stepLog) + for _, appCtx := range appCtxs { + go func(appCtx *scheduler.Context) { + defer GinkgoRecover() + defer wg.Done() + vols, err := Inst().S.GetVolumes(appCtx) + log.FailOnError(err, "Failed to get volumes of kubevirt VM") + for _, vol := range vols { + currRep, err := Inst().V.GetReplicationFactor(vol) + log.FailOnError(err, "Failed to get Repl factor for vil %s", vol.Name) + + if currRep > 1 { + opts := volume.Options{ + ValidateReplicationUpdateTimeout: validateReplicationUpdateTimeout, + } + err = Inst().V.SetReplicationFactor(vol, currRep-1, nil, nil, true, opts) + dash.VerifyFatal(err, nil, fmt.Sprintf("Validate set repl factor to %d", currRep-1)) + } else { + log.Warnf("Volume %s has reached maximum replication factor", vol.Name) + } + } + isVmBindMounted, err := IsVMBindMounted(appCtx, true) + log.FailOnError(err, "Failed to run vm bind mount check") + if !isVmBindMounted { + log.Errorf("The newly added disk to vm %s is not bind mounted", appCtx.App.Key) + } + }(appCtx) + } + wg.Wait() + }) + + stepLog = "Destroy Applications" + Step(stepLog, func() { + log.InfoD(stepLog) + DestroyApps(appCtxs, nil) + }) + }) + JustAfterEach(func() { + defer EndTorpedoTest() + AfterEachTest(appCtxs) + }) +}) + +var _ = Describe("{LiveMigrateWhileNodeInMaintenance}", func() { + /* + 1. Put replica nodes in maintenance mode + 2. Initiate Live Migration of VM + 3. Verify VM is migrated to different node + 4. Exit maintenance mode of the node + + */ + + JustBeforeEach(func() { + StartTorpedoTest("LiveMigrateWhileNodeInMaintenance", "Live Migrate VM while node is in maintenance mode", nil, 0) + + }) + + var appCtxs []*scheduler.Context + var wg sync.WaitGroup + + itLog := "Live Migrate VM while replica nodes are in maintenance mode" + It(itLog, func() { + log.InfoD(itLog) + pxNs, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "Failed to get volume driver namespace") + defer ListEvents(pxNs) + + namespace := fmt.Sprintf("kubevirt-%v", time.Now().Unix()) + log.InfoD(stepLog) + appList := Inst().AppList + defer func() { + Inst().AppList = appList + }() + Inst().AppList = []string{"kubevirt-debian-fio-minimal"} + stepLog := "schedule a kubevirt VM" + Step(stepLog, func() { + for i := 0; i < Inst().GlobalScaleFactor; i++ { + taskName := fmt.Sprintf("test-%v", i) + appCtxs = append(appCtxs, ScheduleApplicationsOnNamespace(namespace, taskName)...) + } + ValidateApplications(appCtxs) + for _, appCtx := range appCtxs { + bindMount, err := IsVMBindMounted(appCtx, false) + log.FailOnError(err, "Failed to verify bind mount") + dash.VerifyFatal(bindMount, true, "Failed to verify bind mount") + } + }) + + stepLog = "Put replica nodes in maintenance mode and Live migrate the kubevirt VM" + Step(stepLog, func() { + log.InfoD(stepLog) + for _, appCtx := range appCtxs { + ReplicaNodes, err := GetReplicaNodesOfVM(appCtx) + log.FailOnError(err, "Failed to get non replica nodes of VM") + + vms, err := GetAllVMsFromScheduledContexts([]*scheduler.Context{appCtx}) + + for _, vm := range vms { + nodeVMProvisionedOn, err := GetNodeOfVM(vm) + log.InfoD("Node VM provisioned on: %s", nodeVMProvisionedOn) + defer func() { + var wg sync.WaitGroup + for _, ReplicaNode := range ReplicaNodes { + if nodeVMProvisionedOn != ReplicaNode { + wg.Add(1) + go func(nonReplicaNode string) { + defer wg.Done() + n, err := node.GetNodeByName(nonReplicaNode) + err = Inst().V.ExitMaintenance(n) + log.FailOnError(err, "Failed to exit node: %s from maintenance mode", nonReplicaNode) + log.Infof("Succesfully exited node: %s from maintenance mode", nonReplicaNode) + }(ReplicaNode) + } + } + wg.Wait() + }() + + for _, ReplicaNode := range ReplicaNodes { + if nodeVMProvisionedOn != ReplicaNode { + wg.Add(1) + go func(nonReplicaNode string) { + defer wg.Done() + n, err := node.GetNodeByName(nonReplicaNode) + err = Inst().V.EnterMaintenance(n) + log.FailOnError(err, "Failed to put node: %s in maintenance mode", nonReplicaNode) + log.Infof("Succesfully put node: %s in maintenance mode", nonReplicaNode) + }(ReplicaNode) + } + } + wg.Wait() + err = StartAndWaitForVMIMigration(appCtx, context1.TODO()) + log.FailOnError(err, "Failed to live migrate kubevirt VM") + } + } + }) + + stepLog = "Destroy Applications" + Step(stepLog, func() { + log.InfoD(stepLog) + DestroyApps(appCtxs, nil) + }) + }) + + JustAfterEach(func() { + defer EndTorpedoTest() + AfterEachTest(appCtxs) + }) +}) + +var _ = Describe("{LiveMigrateCordonNonReplicaNode}", func() { + + /* + 1. Schedule a kubevirt VM + 2. Cordon the non replica nodes + 3. Put the replica nodes on maintenance mode + 4. initiate Live Migration of VM + 5. Verify VM is migrated to different node + 6. Exit maintenance mode + 7. Put the replica node on maintenance mode and again initiate live migration of VM + 8. Verify VM is migrated to different node + 9. Uncordon the nodes + + */ + + JustBeforeEach(func() { + StartTorpedoTest("LiveMigrateCordonNonReplicaNode", "Live Migrate VM while node is in maintenance mode", nil, 0) + }) + + var appCtxs []*scheduler.Context + var wg sync.WaitGroup + + itLog := "Live Migrate VM while node is in maintenance mode" + It(itLog, func() { + log.InfoD(itLog) + namespace := fmt.Sprintf("kubevirt-%v", time.Now().Unix()) + log.InfoD(stepLog) + appList := Inst().AppList + defer func() { + Inst().AppList = appList + }() + Inst().AppList = []string{"kubevirt-debian-fio-minimal"} + stepLog := "schedule a kubevirt VM" + Step(stepLog, func() { + for i := 0; i < Inst().GlobalScaleFactor; i++ { + taskName := fmt.Sprintf("test-%v", i) + appCtxs = append(appCtxs, ScheduleApplicationsOnNamespace(namespace, taskName)...) + } + }) + stepLog = "Check if vm is bind mount" + Step(stepLog, func() { + log.InfoD(stepLog) + for _, appCtx := range appCtxs { + bindMount, err := IsVMBindMounted(appCtx, false) + log.FailOnError(err, "Failed to verify bind mount") + dash.VerifyFatal(bindMount, true, "Failed to verify bind mount") + } + }) + + for _, appCtx := range appCtxs { + nonReplicaNodes, err := GetNonReplicaNodesOfVM(appCtx) + log.FailOnError(err, "Failed to get non replica nodes of VM") + + defer func() { + //Uncordon the nodes + for _, nonReplicaNode := range nonReplicaNodes { + err = core.Instance().UnCordonNode(nonReplicaNode, defaultCommandTimeout, defaultCommandRetry) + log.FailOnError(err, "Failed to uncordon the node") + } + }() + // cordon the non replica nodes + for _, nonReplicaNode := range nonReplicaNodes { + err = core.Instance().CordonNode(nonReplicaNode, defaultCommandTimeout, defaultCommandRetry) + log.FailOnError(err, "Failed to cordon the node") + } + + vms, err := GetAllVMsFromScheduledContexts([]*scheduler.Context{appCtx}) + log.FailOnError(err, "Failed to get VMs from scheduled contexts") + dash.VerifyFatal(len(vms) > 0, true, "Failed to get VMs from scheduled contexts") + + for _, vm := range vms { + //Put the node on maintenance mode where VM is provisioned + stepLog = "Put the replica nodes on maintenance mode and live migrate the VM" + Step(stepLog, func() { + log.InfoD(stepLog) + nodeVMProvisionedOn, err := GetNodeOfVM(vm) + log.InfoD("Node VM provisioned on: %s", nodeVMProvisionedOn) + defer func() { + var wg sync.WaitGroup + for _, nonReplicaNode := range nonReplicaNodes { + if nodeVMProvisionedOn != nonReplicaNode { + wg.Add(1) + go func(nonReplicaNode string) { + defer wg.Done() + n, err := node.GetNodeByName(nonReplicaNode) + err = Inst().V.ExitMaintenance(n) + log.FailOnError(err, "Failed to exit node: %s from maintenance mode", nonReplicaNode) + log.Infof("Succesfully exited node: %s from maintenance mode", nonReplicaNode) + }(nonReplicaNode) + } + } + wg.Wait() + }() + + for _, nonReplicaNode := range nonReplicaNodes { + if nodeVMProvisionedOn != nonReplicaNode { + wg.Add(1) + go func(nonReplicaNode string) { + defer wg.Done() + n, err := node.GetNodeByName(nonReplicaNode) + err = Inst().V.EnterMaintenance(n) + log.FailOnError(err, "Failed to put node: %s in maintenance mode", nonReplicaNode) + log.Infof("Succesfully put node: %s in maintenance mode", nonReplicaNode) + }(nonReplicaNode) + } + } + wg.Wait() + err = StartAndWaitForVMIMigration(appCtx, context1.TODO()) + log.FailOnError(err, "Failed to live migrate kubevirt VM") + }) + + //Put the node on maintenance mode and again initiate live migration of VM + stepLog = "Put the replica nodes on maintenance mode and again initiate live migration of VM" + Step(stepLog, func() { + log.InfoD(stepLog) + nodeVMProvisionedOn, err := GetNodeOfVM(vm) + log.InfoD("Node VM provisioned on: %s", nodeVMProvisionedOn) + defer func() { + var wg sync.WaitGroup + for _, nonReplicaNode := range nonReplicaNodes { + if nodeVMProvisionedOn != nonReplicaNode { + wg.Add(1) + go func(nonReplicaNode string) { + defer wg.Done() + n, err := node.GetNodeByName(nonReplicaNode) + err = Inst().V.ExitMaintenance(n) + log.FailOnError(err, "Failed to exit node: %s from maintenance mode", nonReplicaNode) + log.Infof("Succesfully exited node: %s from maintenance mode", nonReplicaNode) + }(nonReplicaNode) + } + } + wg.Wait() + }() + + for _, nonReplicaNode := range nonReplicaNodes { + if nodeVMProvisionedOn != nonReplicaNode { + wg.Add(1) + go func(nonReplicaNode string) { + defer wg.Done() + n, err := node.GetNodeByName(nonReplicaNode) + err = Inst().V.EnterMaintenance(n) + log.FailOnError(err, "Failed to put node: %s in maintenance mode", nonReplicaNode) + log.Infof("Succesfully put node: %s in maintenance mode", nonReplicaNode) + }(nonReplicaNode) + } + } + wg.Wait() + err = StartAndWaitForVMIMigration(appCtx, context1.TODO()) + log.FailOnError(err, "Failed to live migrate kubevirt VM") + }) + } + } + }) + + JustAfterEach(func() { + defer EndTorpedoTest() + AfterEachTest(appCtxs) + }) + +}) + +var _ = Describe("{StopPxOnNodeWhereVMIsProvisioned}", func() { + /* + 1. Schedule a kubevirt VM + ` 2. Stop PX on the node where VM is provisioned for 15mins + 3. Start PX on the node where VM is provisioned + 4. Verify VM is running fine + + https://portworx.testrail.net/index.php?/cases/view/296893 + + */ + + JustBeforeEach(func() { + StartTorpedoTest("StopPxOnNodeWhereVMIsProvisioned", "Stop PX on node where VM is provisioned", nil, 296893) + }) + + var appCtxs []*scheduler.Context + + itLog := "Stop PX on node where VM is provisioned" + It(itLog, func() { + log.InfoD(itLog) + pxNs, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "Failed to get volume driver namespace") + defer ListEvents(pxNs) + + appList := Inst().AppList + defer func() { + Inst().AppList = appList + }() + Inst().AppList = []string{"kubevirt-debian-fio-minimal"} + + stepLog := "schedule a kubevirt VM" + Step(stepLog, func() { + for i := 0; i < Inst().GlobalScaleFactor; i++ { + test := fmt.Sprintf("test-%v", time.Now().Unix()) + appCtxs = append(appCtxs, ScheduleApplications(test)...) + } + ValidateApplications(appCtxs) + for _, appCtx := range appCtxs { + bindMount, err := IsVMBindMounted(appCtx, false) + log.FailOnError(err, "Failed to verify bind mount") + dash.VerifyFatal(bindMount, true, "Failed to verify bind mount") + } + }) + + for _, appCtx := range appCtxs { + vms, err := GetAllVMsFromScheduledContexts([]*scheduler.Context{appCtx}) + log.FailOnError(err, "Failed to get VMs from scheduled contexts") + dash.VerifyFatal(len(vms) > 0, true, "Failed to get VMs from scheduled contexts") + for _, vm := range vms { + nodeName, err := GetNodeOfVM(vm) + log.FailOnError(err, "Failed to get node name for VM: %s", vm.Name) + nodeObj, err := node.GetNodeByName(nodeName) + log.FailOnError(err, "Failed to get node obj for node name: %s", nodeName) + stepLog = "Stop PX on the node where VM is provisioned for 15 mins" + Step(stepLog, func() { + log.InfoD(stepLog) + err := Inst().V.StopDriver([]node.Node{nodeObj}, false, nil) + log.FailOnError(err, "Failed to stop PX on the node: %s", nodeObj.Name) + log.Infof("Succesfully stopped PX on the node: %s", nodeObj.Name) + time.Sleep(15 * time.Minute) + }) + + stepLog = "Start PX on the node where VM is provisioned" + Step(stepLog, func() { + log.InfoD(stepLog) + err := Inst().V.StartDriver(nodeObj) + log.FailOnError(err, "Failed to start PX on the node: %s", nodeObj.Name) + log.Infof("Succesfully started PX on the node: %s", nodeObj.Name) + }) + } + } + + stepLog = "Validate vm after stopping and starting px" + Step(stepLog, func() { + log.InfoD(stepLog) + ValidateApplications(appCtxs) + for _, appCtx := range appCtxs { + bindMount, err := IsVMBindMounted(appCtx, false) + log.FailOnError(err, "Failed to verify bind mount") + dash.VerifyFatal(bindMount, true, "Failed to verify bind mount") + } + }) + + }) + + JustAfterEach(func() { + defer EndTorpedoTest() + AfterEachTest(appCtxs) + }) +}) + +var _ = Describe("{RestartPXAndCheckIfVmBindMount}", func() { + + /* + 1. Schedule a kubevirt VM + 2. Cordon the non replica nodes + 3. initiate Live Migration of VM + 4. Verify VM is migrated to different node + 5. Restart portworx on the node where VM was provisioned + 6. The volume now should be locally attached to the node where the vm has been migrated + 7. Uncordon the nodes + */ + + JustBeforeEach(func() { + StartTorpedoTest("RestartPXAndCheckIfVmBindMount", "Restart PX and check if VM is bind mounted", nil, 0) + + }) + + var appCtxs []*scheduler.Context + + itLog := "Live migrate,Restart PX and check if VM is bind mounted" + It(itLog, func() { + log.InfoD(itLog) + namespace := fmt.Sprintf("kubevirt-%v", time.Now().Unix()) + log.InfoD(stepLog) + appList := Inst().AppList + defer func() { + Inst().AppList = appList + }() + Inst().AppList = []string{"kubevirt-debian-fio-minimal"} + stepLog := "schedule a kubevirt VM" + Step(stepLog, func() { + for i := 0; i < Inst().GlobalScaleFactor; i++ { + taskName := fmt.Sprintf("test-%v", i) + appCtxs = append(appCtxs, ScheduleApplicationsOnNamespace(namespace, taskName)...) + } + }) + stepLog = "Check if vm is bind mount" + Step(stepLog, func() { + log.InfoD(stepLog) + for _, appCtx := range appCtxs { + bindMount, err := IsVMBindMounted(appCtx, false) + log.FailOnError(err, "Failed to verify bind mount") + dash.VerifyFatal(bindMount, true, "Failed to verify bind mount") + } + }) + + for _, appCtx := range appCtxs { + nonReplicaNodes, err := GetNonReplicaNodesOfVM(appCtx) + log.FailOnError(err, "Failed to get non replica nodes of VM") + + defer func() { + //Uncordon the nodes + for _, nonReplicaNode := range nonReplicaNodes { + err = core.Instance().UnCordonNode(nonReplicaNode, defaultCommandTimeout, defaultCommandRetry) + log.FailOnError(err, "Failed to uncordon the node") + } + }() + // cordon the non replica nodes + for _, nonReplicaNode := range nonReplicaNodes { + err = core.Instance().CordonNode(nonReplicaNode, defaultCommandTimeout, defaultCommandRetry) + log.FailOnError(err, "Failed to cordon the node") + } + + vms, err := GetAllVMsFromScheduledContexts([]*scheduler.Context{appCtx}) + log.FailOnError(err, "Failed to get VMs from scheduled contexts") + dash.VerifyFatal(len(vms) > 0, true, "Failed to get VMs from scheduled contexts") + + for _, vm := range vms { + nodeVMProvisionedOn, err := GetNodeOfVM(vm) + log.FailOnError(err, "Failed to get node name for VM: %s", vm.Name) + log.InfoD("Node VM provisioned on: %s", nodeVMProvisionedOn) + + nodeObj, err := node.GetNodeByName(nodeVMProvisionedOn) + log.FailOnError(err, "Failed to get node obj for node name: %s", nodeVMProvisionedOn) + + stepLog = "live migrate the VM" + Step(stepLog, func() { + log.InfoD(stepLog) + err = StartAndWaitForVMIMigration(appCtx, context1.TODO()) + log.FailOnError(err, "Failed to live migrate kubevirt VM") + }) + + stepLog = "Restart the PX on the node where VM was provisioned" + Step(stepLog, func() { + log.InfoD(stepLog) + StopVolDriverAndWait([]node.Node{nodeObj}) + StartVolDriverAndWait([]node.Node{nodeObj}) + log.InfoD("Succesfully restarted PX on the node: %s", nodeObj.Name) + }) + + stepLog = "After restart of the px on previously provisioned node the volume should be locally attached to the node where the vm has been migrated" + Step(stepLog, func() { + log.InfoD(stepLog) + isVmBindMounted, err := IsVMBindMounted(appCtx, true) + log.FailOnError(err, "Failed to run vm bind mount check") + dash.VerifyFatal(isVmBindMounted, true, "Failed to verify bind mount?") + }) + } + stepLog = "Destroy the applications" + Step(stepLog, func() { + log.InfoD(stepLog) + DestroyApps([]*scheduler.Context{appCtx}, nil) + }) + } + }) + + JustAfterEach(func() { + defer EndTorpedoTest() + AfterEachTest(appCtxs) + }) +}) diff --git a/tests/basic/legacy_shared_sharedv4_service_migration_test.go b/tests/basic/legacy_shared_sharedv4_service_migration_test.go index c4ec59226..a934c0534 100644 --- a/tests/basic/legacy_shared_sharedv4_service_migration_test.go +++ b/tests/basic/legacy_shared_sharedv4_service_migration_test.go @@ -90,8 +90,17 @@ func setMigrateLegacySharedToSharedv4Service(on bool) { func getLegacySharedVolumeCount(contexts []*scheduler.Context) int { count := 0 for _, ctx := range contexts { - vols, err := Inst().S.GetVolumes(ctx) - log.FailOnError(err, "error geting volumes used by app") + var vols []*volume.Volume + var err error + t := func() (interface{}, bool , error) { + vols, err = Inst().S.GetVolumes(ctx) + if err != nil { + return "", true, err + } + return "", false, nil + } + _, err = task.DoRetryWithTimeout(t, 5 * time.Minute, 10 * time.Second) + log.FailOnError(err, "Failed to get volumes for app %s", ctx.App.Key) for _, v := range vols { vol, err := Inst().V.InspectVolume(v.ID) log.FailOnError(err, "Failed to inspect volume %v", v.ID) @@ -389,11 +398,12 @@ var _ = Describe("{LegacySharedToSharedv4ServiceMigrationRestart}", func() { for _, ctx := range contexts { returnMapOfPodsUsingApiSharedVolumes(podMap, volMap, ctx) } - setMigrateLegacySharedToSharedv4Service(true) - time.Sleep(210 * time.Second) // sleep 3.5 minutes. totalSharedVolumes := getLegacySharedVolumeCount(contexts) timeForMigration := ((totalSharedVolumes + 30) / 30) * 10 + setMigrateLegacySharedToSharedv4Service(true) + time.Sleep(210 * time.Second) // sleep 3.5 minutes. + stepLog := "Pause Migration and let all Apps come up and restart Migration" Step(stepLog, func() { setMigrateLegacySharedToSharedv4Service(false) @@ -446,6 +456,9 @@ var _ = Describe("{LegacySharedToSharedv4ServicePxRestart}", func() { for _, ctx := range contexts { returnMapOfPodsUsingApiSharedVolumes(podMap, volMap, ctx) } + totalSharedVolumes := getLegacySharedVolumeCount(contexts) + timeForMigration := ((totalSharedVolumes + 30) / 30) * 10 + setMigrateLegacySharedToSharedv4Service(true) time.Sleep(210 * time.Second) // sleep 3.5 minutes. @@ -460,8 +473,6 @@ var _ = Describe("{LegacySharedToSharedv4ServicePxRestart}", func() { log.FailOnError(err, fmt.Sprintf("Driver is down on node %s", pxNode.Name)) }) - totalSharedVolumes := getLegacySharedVolumeCount(contexts) - timeForMigration := ((totalSharedVolumes + 30) / 30) * 10 waitAllSharedVolumesToGetMigrated(contexts, timeForMigration) countPostTimeout := getLegacySharedVolumeCount(contexts) dash.VerifyFatal(countPostTimeout == 0, true, fmt.Sprintf("Post migration count is [%d] instead of 0", countPostTimeout)) @@ -516,6 +527,8 @@ var _ = Describe("{LegacySharedToSharedv4ServiceNodeDecommission}", func() { log.FailOnError(err, fmt.Sprintf("error in executing prereq for node %s decommission", pxNode.Name)) // Transition after preparing for decommission. + totalSharedVolumes := getLegacySharedVolumeCount(contexts) + timeForMigration := ((totalSharedVolumes + 30) / 30) * 10 setMigrateLegacySharedToSharedv4Service(true) time.Sleep(90 * time.Second) // sleep 1.5 minute. @@ -530,8 +543,6 @@ var _ = Describe("{LegacySharedToSharedv4ServiceNodeDecommission}", func() { stepLog = "Validate migration process after node Decommission" Step(stepLog, func() { - totalSharedVolumes := getLegacySharedVolumeCount(contexts) - timeForMigration := ((totalSharedVolumes + 30) / 30) * 10 waitAllSharedVolumesToGetMigrated(contexts, timeForMigration) countPostTimeout := getLegacySharedVolumeCount(contexts) dash.VerifyFatal(countPostTimeout == 0, true, fmt.Sprintf("Post migration count is [%d] instead of 0", countPostTimeout)) @@ -627,6 +638,9 @@ var _ = Describe("{LegacySharedToSharedv4ServiceRestartCoordinator}", func() { break } } + totalSharedVolumes := getLegacySharedVolumeCount(contexts) + timeForMigration := ((totalSharedVolumes + 30) / 30) * 10 + setMigrateLegacySharedToSharedv4Service(true) time.Sleep(120 * time.Second) // sleep 2 minutes. @@ -638,8 +652,6 @@ var _ = Describe("{LegacySharedToSharedv4ServiceRestartCoordinator}", func() { log.FailOnError(err, fmt.Sprintf("Driver is down on node %s", nodeForPxRestart.Name)) }) - totalSharedVolumes := getLegacySharedVolumeCount(contexts) - timeForMigration := ((totalSharedVolumes + 30) / 30) * 10 waitAllSharedVolumesToGetMigrated(contexts, timeForMigration) countPostTimeout := getLegacySharedVolumeCount(contexts) dash.VerifyFatal(countPostTimeout == 0, true, fmt.Sprintf("Post migration count is [%d] instead of 0", countPostTimeout)) @@ -685,13 +697,13 @@ var _ = Describe("{LegacySharedToSharedv4ServiceCreateSnapshotsClones}", func() returnMapOfPodsUsingApiSharedVolumes(podMap, volMap, ctx) } createSnapshotsAndClones(volMap, "snapshot-1", "clone-1") + totalSharedVolumes := getLegacySharedVolumeCount(contexts) + timeForMigration := ((totalSharedVolumes + 30) / 30) * 10 setMigrateLegacySharedToSharedv4Service(true) time.Sleep(120 * time.Second) // sleep 2 minutes. createSnapshotsAndClones(volMap, "snapshot-2", "clone-2") - totalSharedVolumes := getLegacySharedVolumeCount(contexts) - timeForMigration := ((totalSharedVolumes + 30) / 30) * 10 waitAllSharedVolumesToGetMigrated(contexts, timeForMigration) countPostTimeout := getLegacySharedVolumeCount(contexts) dash.VerifyFatal(countPostTimeout == 0, true, fmt.Sprintf("Post migration count is [%d] instead of 0", countPostTimeout)) @@ -801,6 +813,8 @@ var _ = Describe("{LegacySharedToSharedv4ServicePxKill}", func() { for _, ctx := range contexts { returnMapOfPodsUsingApiSharedVolumes(podMap, volMap, ctx) } + totalSharedVolumes := getLegacySharedVolumeCount(contexts) + timeForMigration := ((totalSharedVolumes + 30) / 30) * 10 setMigrateLegacySharedToSharedv4Service(true) time.Sleep(180 * time.Second) // sleep 3 minutes. @@ -815,8 +829,6 @@ var _ = Describe("{LegacySharedToSharedv4ServicePxKill}", func() { log.FailOnError(err, fmt.Sprintf("Driver is down on node %s", pxNode.Name)) }) - totalSharedVolumes := getLegacySharedVolumeCount(contexts) - timeForMigration := ((totalSharedVolumes + 30) / 30) * 10 waitAllSharedVolumesToGetMigrated(contexts, timeForMigration) countPostTimeout := getLegacySharedVolumeCount(contexts) dash.VerifyFatal(countPostTimeout == 0, true, fmt.Sprintf("Post migration count is [%d] instead of 0", countPostTimeout)) diff --git a/tests/basic/misc_test.go b/tests/basic/misc_test.go index 00be264ca..fb665f6f3 100644 --- a/tests/basic/misc_test.go +++ b/tests/basic/misc_test.go @@ -10,6 +10,7 @@ import ( "github.com/portworx/torpedo/drivers/volume" "github.com/portworx/torpedo/drivers/volume/portworx" + "github.com/portworx/torpedo/drivers/volume/portworx/schedops" opsapi "github.com/libopenstorage/openstorage/api" "github.com/portworx/torpedo/pkg/log" @@ -18,6 +19,7 @@ import ( . "github.com/onsi/ginkgo/v2" "github.com/portworx/sched-ops/k8s/apps" + "github.com/portworx/sched-ops/k8s/core" "github.com/portworx/torpedo/drivers/node" "github.com/portworx/torpedo/drivers/scheduler" "github.com/portworx/torpedo/pkg/testrailuttils" @@ -25,6 +27,8 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) +var k8sCore = core.Instance() + // This test performs basic test of starting an application and destroying it (along with storage) var _ = Describe("{SetupTeardown}", func() { var testrailID = 35258 @@ -1157,3 +1161,97 @@ var _ = Describe("{AutoFSTrimReplAddWithNoPool0}", func() { AfterEachTest(contexts, testrailID, runID) }) }) + +// Add a test to detach all the disks from a node and then reattach them to a different node +var _ = Describe("{NodeDiskDetachAttach}", func() { + + JustBeforeEach(func() { + StartTorpedoTest("NodeDiskDetachAttach", "Validate disk detach and attach", nil, 0) + }) + var contexts []*scheduler.Context + + testName := "nodediskdetachattach" + stepLog := "has to detach all disks from a node and reattach them to a different node" + It(stepLog, func() { + log.InfoD(stepLog) + contexts = make([]*scheduler.Context, 0) + + for i := 0; i < Inst().GlobalScaleFactor; i++ { + contexts = append(contexts, ScheduleApplications(fmt.Sprintf("%s-%d", testName, i))...) + } + + randomNum := rand.New(rand.NewSource(time.Now().Unix())) + + ValidateApplications(contexts) + // Fetch the node where PX is not started + nonPXNodes := node.GetPXDisabledNodes() + // Remove disks from all nodes in nonPXNodes + for _, n := range nonPXNodes { + // Fetch the disks attached to the node + err := Inst().N.RemoveNonRootDisks(n) + log.FailOnError(err, fmt.Sprintf("Failed to remove disks on node %s", n.Name)) + } + randNonPxNode := nonPXNodes[randomNum.Intn(len(nonPXNodes))] + + // Fetch a random node from the StorageNodes + storageNodes := node.GetStorageNodes() + randomStorageNode := storageNodes[randomNum.Intn(len(storageNodes))] + + // Fetch random storage node and detach the disks attached to that node + var oldNodeIDtoMatch string + var newNodeIDtoMatch string + Step(fmt.Sprintf("detach disks attached from a random storage node %s and attach to non px node %s", randomStorageNode.Name, randNonPxNode.Name), func() { + log.Infof("Detaching disks from node %s and attaching to node %s", randomStorageNode.Name, randNonPxNode.Name) + // ToDo - Ensure the above selected node has volumes/apps running on it + // Store the Node ID of randomStorageNode for future use + oldNodeIDtoMatch = randomStorageNode.Id + // Stop PX on the node + err = k8sCore.AddLabelOnNode(randomStorageNode.Name, schedops.PXServiceLabelKey, "stop") + log.FailOnError(err, fmt.Sprintf("Failed to add label %s=stop on node %s", schedops.PXServiceLabelKey, randomStorageNode.Name)) + + err = Inst().N.MoveDisks(randomStorageNode, randNonPxNode) + log.FailOnError(err, fmt.Sprintf("Failed to move disks from node %s to node %s", randomStorageNode.Name, randNonPxNode.Name)) + + // Add PXEnabled false label to srcVM + err = k8sCore.AddLabelOnNode(randomStorageNode.Name, schedops.PXEnabledLabelKey, "false") + log.FailOnError(err, fmt.Sprintf("Failed to add label %s=stop on node %s", schedops.PXServiceLabelKey, randomStorageNode.Name)) + + // Start PX on the node + err = k8sCore.AddLabelOnNode(randNonPxNode.Name, schedops.PXEnabledLabelKey, "true") + log.FailOnError(err, fmt.Sprintf("Failed to add label %s=true on node %s", schedops.PXEnabledLabelKey, randNonPxNode.Name)) + err = k8sCore.AddLabelOnNode(randNonPxNode.Name, schedops.PXServiceLabelKey, "start") + log.FailOnError(err, fmt.Sprintf("Failed to add label %s=start on node %s", schedops.PXServiceLabelKey, randNonPxNode.Name)) + err = Inst().V.WaitForPxPodsToBeUp(randNonPxNode) + log.FailOnError(err, fmt.Sprintf("Failed to wait for PX pods to be up on node %s", randNonPxNode.Name)) + // Refresh the driver endpoints + err = Inst().S.RefreshNodeRegistry() + log.FailOnError(err, "error refreshing node registry") + err = Inst().V.RefreshDriverEndpoints() + log.FailOnError(err, "error refreshing storage drive endpoints") + // Wait for the driver to be up on the node + randNonPxNode, err = node.GetNodeByName(randNonPxNode.Name) + log.FailOnError(err, fmt.Sprintf("Failed to get node %s", randNonPxNode.Name)) + err = Inst().V.WaitDriverUpOnNode(randNonPxNode, Inst().DriverStartTimeout) + dash.VerifyFatal(err, nil, "Validate volume is driver up") + // Verify the node ID is same as earlier stored Node ID + newNodeIDtoMatch = randNonPxNode.Id + + dash.VerifyFatal(oldNodeIDtoMatch, newNodeIDtoMatch, fmt.Sprintf("Node ID mismatch for node %s after moving the disks", randNonPxNode.Name)) + log.Infof("Node ID matches for node %s [%s == %s]", randNonPxNode.Name, oldNodeIDtoMatch, newNodeIDtoMatch) + }) + + // ToDo - Verify the integrity of apps, cluster and volumes + + Step("destroy apps", func() { + opts := make(map[string]bool) + opts[scheduler.OptionsWaitForResourceLeakCleanup] = true + for _, ctx := range contexts { + TearDownContext(ctx, opts) + } + }) + }) + JustAfterEach(func() { + defer EndTorpedoTest() + AfterEachTest(contexts) + }) +}) diff --git a/tests/basic/node_decommission_test.go b/tests/basic/node_decommission_test.go index 50c80033f..efcca6e80 100644 --- a/tests/basic/node_decommission_test.go +++ b/tests/basic/node_decommission_test.go @@ -59,7 +59,6 @@ var _ = Describe("{DecommissionNode}", func() { for i := 0; i < Inst().GlobalScaleFactor; i++ { contexts = append(contexts, ScheduleApplications(fmt.Sprintf("%s-%d", testName, i))...) } - ValidateApplications(contexts) var storageDriverNodes []node.Node diff --git a/tests/basic/ocp_node_recycle_test.go b/tests/basic/ocp_node_recycle_test.go deleted file mode 100644 index 6211591e6..000000000 --- a/tests/basic/ocp_node_recycle_test.go +++ /dev/null @@ -1,277 +0,0 @@ -package tests - -import ( - "fmt" - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - "github.com/portworx/sched-ops/k8s/operator" - "github.com/portworx/torpedo/drivers/node" - "github.com/portworx/torpedo/drivers/scheduler" - "github.com/portworx/torpedo/drivers/scheduler/openshift" - "github.com/portworx/torpedo/pkg/log" - . "github.com/portworx/torpedo/tests" -) - -// Sanity test for OCP Recycle method -var _ = Describe("{RecycleOCPNode}", func() { - - var contexts []*scheduler.Context - - BeforeEach(func() { - wantAllAfterSuiteActions = false - wantAfterSuiteSystemCheck = true - }) - JustBeforeEach(func() { - StartTorpedoTest("RecycleOCPNode", "Test drives and pools after recyling a node", nil, 0) - }) - - It("Validing the drives and pools after recyling a node", func() { - Step("Get the storage and storageless nodes and delete them", func() { - if Inst().S.String() != openshift.SchedName { - log.Warnf("Failed: This test is not supported for scheduler: [%s]", Inst().S.String()) - return - } - contexts = make([]*scheduler.Context, 0) - - for i := 0; i < Inst().GlobalScaleFactor; i++ { - contexts = append(contexts, ScheduleApplications(fmt.Sprintf("recyclenode-%d", i))...) - } - - ValidateApplications(contexts) - storagelessNodes, err := Inst().V.GetStoragelessNodes() - Expect(err).NotTo(HaveOccurred(), fmt.Sprintf("Failed to get storageless nodes. Error: [%v]", err)) - if storagelessNodes != nil { - delNode, err := node.GetNodeByName(storagelessNodes[0].Hostname) - Expect(err).NotTo(HaveOccurred(), fmt.Sprintf("Failed to get node object using Name. Error: [%v]", err)) - Step( - fmt.Sprintf("Listing all nodes before recycling a storageless node %s", delNode.Name), - func() { - workerNodes := node.GetWorkerNodes() - for x, wNode := range workerNodes { - log.Infof("WorkerNode[%d] is: [%s] and volDriverID is [%s]", x, wNode.Name, wNode.VolDriverNodeID) - } - }) - Step( - fmt.Sprintf("Recycle a storageless node and validating the drives: %s", delNode.Name), - func() { - err := Inst().S.DeleteNode(delNode) - Expect(err).NotTo(HaveOccurred(), - fmt.Sprintf("Failed to recycle a node [%s]. Error: [%v]", delNode.Name, err)) - - }) - Step( - fmt.Sprintf("Listing all nodes after recycle a storageless node %s", delNode.Name), - func() { - workerNodes := node.GetWorkerNodes() - for x, wNode := range workerNodes { - log.Infof("WorkerNode[%d] is: [%s] and volDriverID is [%s]", x, wNode.Name, wNode.VolDriverNodeID) - } - }) - } - // Validating the apps after recycling the StorageLess node - ValidateApplications(contexts) - workerNodes := node.GetStorageDriverNodes() - delNode := workerNodes[0] - Step( - fmt.Sprintf("Recycle a storage node: [%s] and validating the drives", delNode.Name), - func() { - err := Inst().S.DeleteNode(delNode) - Expect(err).NotTo(HaveOccurred(), - fmt.Sprintf("Failed to recycle a node [%s]. Error: [%v]", delNode.Name, err)) - }) - Step(fmt.Sprintf("Listing all nodes after recycling a storage node %s", delNode.Name), func() { - workerNodes := node.GetWorkerNodes() - for x, wNode := range workerNodes { - log.Infof("WorkerNode[%d] is: [%s] and volDriverID is [%s]", x, wNode.Name, wNode.VolDriverNodeID) - } - }) - // Validating the apps after recycling the Storage node - ValidateApplications(contexts) - }) - }) - JustAfterEach(func() { - EndTorpedoTest() - }) -}) - -var _ = Describe("{AddOCPStorageNode}", func() { - - var contexts []*scheduler.Context - - BeforeEach(func() { - wantAllAfterSuiteActions = false - wantAfterSuiteSystemCheck = true - }) - JustBeforeEach(func() { - StartTorpedoTest("AddOCPStorageNode", "Add a new storage node the OCP cluster", nil, 0) - }) - stepLog := "Validating the drives and pools after adding new storage node" - - It(stepLog, func() { - log.InfoD(stepLog) - stepLog = "Add storage node" - - Step(stepLog, func() { - if Inst().S.String() != openshift.SchedName { - log.Warnf("Failed: This test is not supported for scheduler: [%s]", Inst().S.String()) - return - } - log.InfoD(stepLog) - contexts = make([]*scheduler.Context, 0) - - for i := 0; i < Inst().GlobalScaleFactor; i++ { - contexts = append(contexts, ScheduleApplications(fmt.Sprintf("addstnode-%d", i))...) - } - - ValidateApplications(contexts) - - var numOfStorageNodes int - Step(stepLog, func() { - log.InfoD(stepLog) - stc, err := Inst().V.GetDriver() - - log.FailOnError(err, "error getting volume driver") - maxStorageNodesPerZone := *stc.Spec.CloudStorage.MaxStorageNodesPerZone - numOfStorageNodes = len(node.GetStorageNodes()) - log.Infof("maxStorageNodesPerZone %d", int(maxStorageNodesPerZone)) - log.Infof("numOfStorageNodes %d", numOfStorageNodes) - - var updatedMaxStorageNodesPerZone uint32 = 0 - if int(maxStorageNodesPerZone) == numOfStorageNodes { - //increase max per zone - updatedMaxStorageNodesPerZone = maxStorageNodesPerZone + 1 - } - - if int(maxStorageNodesPerZone) < numOfStorageNodes { - //updating max per zone - updatedMaxStorageNodesPerZone = uint32(numOfStorageNodes) - } - if updatedMaxStorageNodesPerZone != 0 { - - stc.Spec.CloudStorage.MaxStorageNodesPerZone = &updatedMaxStorageNodesPerZone - log.InfoD("updating maxStorageNodesPerZone from %d to %d", maxStorageNodesPerZone, updatedMaxStorageNodesPerZone) - pxOperator := operator.Instance() - _, err = pxOperator.UpdateStorageCluster(stc) - log.FailOnError(err, "error updating storage cluster") - - } - //Scaling the cluster by one node - expReplicas := len(node.GetWorkerNodes()) + 1 - log.InfoD("scaling up the cluster to replicas %d", expReplicas) - err = Inst().S.ScaleCluster(expReplicas) - - dash.VerifyFatal(err, nil, fmt.Sprintf("verify cluster successfully scaled to %d", expReplicas)) - - }) - - stepLog = "validate PX on all nodes after cluster scale up" - - Step(stepLog, func() { - log.InfoD(stepLog) - nodes := node.GetWorkerNodes() - for _, n := range nodes { - log.InfoD("Check PX status on %v", n.Name) - err := Inst().V.WaitForPxPodsToBeUp(n) - dash.VerifyFatal(err, nil, fmt.Sprintf("verify px is up on node %s", n.Name)) - } - }) - - err := Inst().V.RefreshDriverEndpoints() - log.FailOnError(err, "error refreshing driver end points") - - updatedStorageNodesCount := len(node.GetStorageNodes()) - dash.VerifySafely(numOfStorageNodes+1, updatedStorageNodesCount, "verify new storage node is added") - ValidateAndDestroy(contexts, nil) - }) - }) - JustAfterEach(func() { - EndTorpedoTest() - }) -}) - -var _ = Describe("{AddOCPStoragelessNode}", func() { - - var contexts []*scheduler.Context - - BeforeEach(func() { - wantAllAfterSuiteActions = false - wantAfterSuiteSystemCheck = true - }) - JustBeforeEach(func() { - StartTorpedoTest("AddOCPStoragelessNode", "Add a new storageless node the OCP cluster", nil, 0) - }) - stepLog := "Validating px after adding new storageless node" - - It(stepLog, func() { - log.InfoD(stepLog) - stepLog = "Add storageless node" - - Step(stepLog, func() { - if Inst().S.String() != openshift.SchedName { - log.Warnf("Failed: This test is not supported for scheduler: [%s]", Inst().S.String()) - return - } - log.InfoD(stepLog) - contexts = make([]*scheduler.Context, 0) - - for i := 0; i < Inst().GlobalScaleFactor; i++ { - contexts = append(contexts, ScheduleApplications(fmt.Sprintf("addslnode-%d", i))...) - } - - ValidateApplications(contexts) - numOfStoragelessNodes := len(node.GetStorageLessNodes()) - - Step(stepLog, func() { - log.InfoD(stepLog) - stc, err := Inst().V.GetDriver() - - log.FailOnError(err, "error getting volume driver") - maxStorageNodesPerZone := *stc.Spec.CloudStorage.MaxStorageNodesPerZone - numOfStorageNodes := len(node.GetStorageNodes()) - log.Infof("maxStorageNodesPerZone %d", int(maxStorageNodesPerZone)) - log.Infof("numOfStoragelessNodes %d", numOfStoragelessNodes) - - if int(maxStorageNodesPerZone) > numOfStorageNodes { - //updating max per zone - updatedMaxStorageNodesPerZone := uint32(numOfStorageNodes) - stc.Spec.CloudStorage.MaxStorageNodesPerZone = &updatedMaxStorageNodesPerZone - log.InfoD("updating maxStorageNodesPerZone from %d to %d", maxStorageNodesPerZone, updatedMaxStorageNodesPerZone) - pxOperator := operator.Instance() - _, err = pxOperator.UpdateStorageCluster(stc) - log.FailOnError(err, "error updating storage cluster") - - } - //Scaling the cluster by one node - expReplicas := len(node.GetWorkerNodes()) + 1 - log.InfoD("scaling up the cluster to replicas %d", expReplicas) - err = Inst().S.ScaleCluster(expReplicas) - - dash.VerifyFatal(err, nil, fmt.Sprintf("verify cluster successfully scaled to %d", expReplicas)) - - }) - - stepLog = "validate PX on all nodes after cluster scale up" - - Step(stepLog, func() { - log.InfoD(stepLog) - nodes := node.GetWorkerNodes() - for _, n := range nodes { - log.InfoD("Check PX status on %v", n.Name) - err := Inst().V.WaitForPxPodsToBeUp(n) - dash.VerifyFatal(err, nil, fmt.Sprintf("verify px is up on node %s", n.Name)) - } - }) - - err := Inst().V.RefreshDriverEndpoints() - log.FailOnError(err, "error refreshing driver end points") - - updatedStoragelessNodesCount := len(node.GetStorageLessNodes()) - dash.VerifySafely(numOfStoragelessNodes+1, updatedStoragelessNodesCount, "verify new storageless node is added") - - ValidateAndDestroy(contexts, nil) - }) - }) - JustAfterEach(func() { - EndTorpedoTest() - }) -}) diff --git a/tests/basic/pool_function_test.go b/tests/basic/pool_function_test.go index b76278676..d588f4073 100644 --- a/tests/basic/pool_function_test.go +++ b/tests/basic/pool_function_test.go @@ -52,27 +52,35 @@ var _ = Describe("{PoolExpandMultipleTimes}", func() { EndTorpedoTest() }) - //It("Select a pool and expand it by 100 GiB 3 time with add-disk type. ", func() { - // StartTorpedoTest("PoolExpandDiskAdd3Times", - // "Validate storage pool expansion 3 times with type=add-disk", nil, 0) - // for i := 0; i < 3; i++ { - // poolToResize = getStoragePool(poolIDToResize) - // originalSizeInBytes = poolToResize.TotalSize - // targetSizeInBytes = originalSizeInBytes + 100*units.GiB - // targetSizeGiB = targetSizeInBytes / units.GiB - - // log.InfoD("Current Size of pool %s is %d GiB. Expand to %v GiB with type add-disk...", - // poolIDToResize, poolToResize.TotalSize/units.GiB, targetSizeGiB) - // triggerPoolExpansion(poolIDToResize, targetSizeGiB, api.SdkStoragePool_RESIZE_TYPE_ADD_DISK) - // resizeErr := waitForOngoingPoolExpansionToComplete(poolIDToResize) - // dash.VerifyFatal(resizeErr, nil, "Pool expansion does not result in error") - // verifyPoolSizeEqualOrLargerThanExpected(poolIDToResize, targetSizeGiB) - // } - //}) + It("Select a pool and expand it by 100 GiB 3 time with add-disk type. ", func() { + // TestRail:https://portworx.testrail.net/index.php?/tests/view/86355092 + StartTorpedoTest("PoolExpandDiskAdd3Times", + "Validate storage pool expansion 3 times with type=add-disk", nil, 86355092) + for i := 0; i < 3; i++ { + poolToResize = getStoragePool(poolIDToResize) + originalSizeInBytes = poolToResize.TotalSize + targetSizeInBytes = originalSizeInBytes + 100*units.GiB + targetSizeGiB = targetSizeInBytes / units.GiB + + log.InfoD("Current Size of pool %s is %d GiB. Expand to %v GiB with type add-disk...", + poolIDToResize, poolToResize.TotalSize/units.GiB, targetSizeGiB) + triggerPoolExpansion(poolIDToResize, targetSizeGiB, api.SdkStoragePool_RESIZE_TYPE_ADD_DISK) + resizeErr := waitForOngoingPoolExpansionToComplete(poolIDToResize) + + if isDMthin, _ := IsDMthin(); isDMthin { + dash.VerifyFatal(resizeErr != nil, true, + "Pool expansion request of add-disk type should be rejected with dmthin") + } else { + dash.VerifyFatal(resizeErr, nil, "Pool expansion does not result in error") + verifyPoolSizeEqualOrLargerThanExpected(poolIDToResize, targetSizeGiB) + } + } + }) It("Select a pool and expand it by 100 GiB 3 times with resize-disk type. ", func() { + // TestRail:https://portworx.testrail.net/index.php?/tests/view/86355067 StartTorpedoTest("PoolExpandDiskResize3Times", - "Validate storage pool expansion with type=resize-disk", nil, 0) + "Validate storage pool expansion with type=resize-disk", nil, 86355067) for i := 0; i < 3; i++ { poolToResize = getStoragePool(poolIDToResize) originalSizeInBytes = poolToResize.TotalSize @@ -89,7 +97,7 @@ var _ = Describe("{PoolExpandMultipleTimes}", func() { }) }) -var _ = Describe("{PoolExpandSmoky}", func() { +var _ = Describe("{PoolExpandSmoke}", func() { BeforeEach(func() { contexts = scheduleApps() }) @@ -109,21 +117,6 @@ var _ = Describe("{PoolExpandSmoky}", func() { EndTorpedoTest() }) - //It("Select a pool and expand it by 100 GiB with add-disk type. ", func() { - // StartTorpedoTest("PoolExpandDiskAdd", - // "Validate storage pool expansion with type=add-disk", nil, 0) - // originalSizeInBytes = poolToResize.TotalSize - // targetSizeInBytes = originalSizeInBytes + 100*units.GiB - // targetSizeGiB = targetSizeInBytes / units.GiB - - // log.InfoD("Current Size of the pool %s is %d GiB. Trying to expand to %v GiB with type add-disk", - // poolIDToResize, poolToResize.TotalSize/units.GiB, targetSizeGiB) - // triggerPoolExpansion(poolIDToResize, targetSizeGiB, api.SdkStoragePool_RESIZE_TYPE_ADD_DISK) - // resizeErr := waitForOngoingPoolExpansionToComplete(poolIDToResize) - // dash.VerifyFatal(resizeErr, nil, "Pool expansion does not result in error") - // verifyPoolSizeEqualOrLargerThanExpected(poolIDToResize, targetSizeGiB) - //}) - It("Verify expanding pool with add-disk type is rejected with dmthin. ", func() { StartTorpedoTest("PoolExpandDiskAdd", "Validate storage pool expansion with type=add-disk", nil, 0) @@ -134,12 +127,8 @@ var _ = Describe("{PoolExpandSmoky}", func() { log.InfoD("Current Size of the pool %s is %d GiB. Trying to expand to %v GiB with type add-disk", poolIDToResize, poolToResize.TotalSize/units.GiB, targetSizeGiB) triggerPoolExpansion(poolIDToResize, targetSizeGiB, api.SdkStoragePool_RESIZE_TYPE_ADD_DISK) - resizeErr := waitForOngoingPoolExpansionToComplete(poolIDToResize) - - if isDMthin, _ := IsDMthin(); isDMthin { - dash.VerifyFatal(resizeErr != nil, true, - "Pool expansion request of add-disk type should be rejected with dmthin") - } else { + if isDMthin, _ := IsDMthin(); !isDMthin { + resizeErr := waitForOngoingPoolExpansionToComplete(poolIDToResize) dash.VerifyFatal(resizeErr, nil, "Pool expansion does not result in error") verifyPoolSizeEqualOrLargerThanExpected(poolIDToResize, targetSizeGiB) } @@ -174,10 +163,94 @@ var _ = Describe("{PoolExpandSmoky}", func() { dash.VerifyFatal(resizeErr, nil, "Pool expansion does not result in error") verifyPoolSizeEqualOrLargerThanExpected(poolIDToResize, targetSizeGiB) }) +}) +var _ = Describe("{PoolExpandRejectConcurrentDiskResize}", func() { + BeforeEach(func() { + contexts = scheduleApps() + }) + + JustBeforeEach(func() { + poolIDToResize = pickPoolToResize() + log.Infof("Picked pool %s to resize", poolIDToResize) + poolToResize = getStoragePool(poolIDToResize) + storageNode, err = GetNodeWithGivenPoolID(poolIDToResize) + log.FailOnError(err, "Failed to get node with given pool ID") + }) + + JustAfterEach(func() { + AfterEachTest(contexts) + }) + + AfterEach(func() { + appsValidateAndDestroy(contexts) + EndTorpedoTest() + }) + + // test resizing all pools on one storage node concurrently and ensure only the first one makes progress + It("Select all pools on a storage node and expand them concurrently. ", func() { + // TestRail:https://portworx.testrail.net/index.php?/tests/view/86355074 + StartTorpedoTest("PoolExpandRejectConcurrentDiskResize", + "Validate storage pool expansion rejects concurrent requests", nil, 86355074) + var pools []*api.StoragePool + Step("Verify multiple pools are present on this node", func() { + // collect all pools available + pools = append(pools, storageNode.Pools...) + dash.VerifyFatal(len(pools) > 1, true, "This test requires more than 1 pool.") + }) + + Step("Expand all pools concurrently. ", func() { + expandType := api.SdkStoragePool_RESIZE_TYPE_RESIZE_DISK + var wg sync.WaitGroup + for _, p := range pools { + wg.Add(1) + go func(p *api.StoragePool) { + defer wg.Done() + err = Inst().V.ExpandPool(p.Uuid, expandType, p.TotalSize/units.GiB+100, true) + }(p) + } + wg.Wait() + }) + + Step("Verify only one expansion is making progress at any given time", func() { + inProgressCount := 0 + startTime := time.Now() + for time.Since(startTime) < 1*time.Minute { + inProgressCount = 0 + time.Sleep(1 * time.Second) + storageNode, err = GetNodeWithGivenPoolID(poolIDToResize) + for _, p := range storageNode.Pools { + if p.LastOperation.Status == api.SdkStoragePool_OPERATION_IN_PROGRESS { + inProgressCount++ + } + dash.VerifyFatal(inProgressCount <= 1, true, "Only one pool expansion should be in progress at any given time.") + } + } + }) + }) + + // test expansion request on a pool while a previous expansion is in progress is rejected + It("Expand a pool while a previous expansion is in progress", func() { + expandType := api.SdkStoragePool_RESIZE_TYPE_RESIZE_DISK + targetSize := poolToResize.TotalSize/units.GiB + 100 + err = Inst().V.ExpandPool(poolIDToResize, expandType, targetSize, true) + isExpandInProgress, expandErr := poolResizeIsInProgress(poolToResize) + if expandErr != nil { + log.Fatalf("Error checking if pool expansion is in progress: %v", expandErr) + } + if !isExpandInProgress { + log.Warnf("Pool expansion already finished. Skipping this test. Use a testing app that writes " + + "more data which may slow down resize-disk type expansion. ") + return + } + expandResponse := Inst().V.ExpandPoolUsingPxctlCmd(*storageNode, poolToResize.Uuid, expandType, targetSize+100, true) + dash.VerifyFatal(expandResponse != nil, true, "Pool expansion should fail when expansion is in progress") + dash.VerifyFatal(strings.Contains(expandResponse.Error(), "is already in progress"), true, + "Pool expansion failure reason should be communicated to the user ") + }) }) -var _ = Describe("{PoolExpandRejectConcurrent}", func() { +var _ = Describe("{PoolExpandRejectConcurrentDiskAdd}", func() { BeforeEach(func() { contexts = scheduleApps() }) @@ -186,8 +259,6 @@ var _ = Describe("{PoolExpandRejectConcurrent}", func() { poolIDToResize = pickPoolToResize() log.Infof("Picked pool %s to resize", poolIDToResize) poolToResize = getStoragePool(poolIDToResize) - resizeErr := waitForOngoingPoolExpansionToComplete(poolIDToResize) - dash.VerifyFatal(resizeErr, nil, "Previous pool expansion(s) should not result in error") storageNode, err = GetNodeWithGivenPoolID(poolIDToResize) log.FailOnError(err, "Failed to get node with given pool ID") }) @@ -203,15 +274,13 @@ var _ = Describe("{PoolExpandRejectConcurrent}", func() { // test resizing all pools on one storage node concurrently and ensure only the first one makes progress It("Select all pools on a storage node and expand them concurrently. ", func() { - // TestRail:https://portworx.testrail.net/index.php?/tests/view/34542836&group_by=cases:custom_automated&group_order=desc&group_id=2 + // TestRail:https://portworx.testrail.net/index.php?/tests/view/34542836 StartTorpedoTest("PoolExpandRejectConcurrent", "Validate storage pool expansion rejects concurrent requests", nil, 34542836) var pools []*api.StoragePool Step("Verify multiple pools are present on this node", func() { // collect all pools available - for _, p := range storageNode.Pools { - pools = append(pools, p) - } + pools = append(pools, storageNode.Pools...) dash.VerifyFatal(len(pools) > 1, true, "This test requires more than 1 pool.") }) @@ -233,7 +302,7 @@ var _ = Describe("{PoolExpandRejectConcurrent}", func() { startTime := time.Now() for time.Since(startTime) < 1*time.Minute { inProgressCount = 0 - time.Sleep(5) + time.Sleep(5 * time.Second) storageNode, err = GetNodeWithGivenPoolID(poolIDToResize) for _, p := range storageNode.Pools { if p.LastOperation.Status == api.SdkStoragePool_OPERATION_IN_PROGRESS { @@ -253,7 +322,7 @@ var _ = Describe("{PoolExpandRejectConcurrent}", func() { // wait for expansion to start // TODO: this is a hack to wait for expansion to start. The existing WaitForExpansionToStart() risks returning // when the expansion has already completed. - time.Sleep(1) + time.Sleep(5 * time.Second) // verify pool expansion is in progress isExpandInProgress, expandErr := poolResizeIsInProgress(poolToResize) if expandErr != nil { @@ -271,7 +340,62 @@ var _ = Describe("{PoolExpandRejectConcurrent}", func() { }) }) -var _ = Describe("{PoolExpandWithReboot}", func() { +var _ = Describe("{PoolExpandDiskResizeWithReboot}", func() { + BeforeEach(func() { + contexts = scheduleApps() + }) + + JustBeforeEach(func() { + poolIDToResize = pickPoolToResize() + log.Infof("Picked pool %s to resize", poolIDToResize) + poolToResize = getStoragePool(poolIDToResize) + storageNode, err = GetNodeWithGivenPoolID(poolIDToResize) + log.FailOnError(err, "Failed to get node with given pool ID") + }) + + JustAfterEach(func() { + AfterEachTest(contexts) + }) + + AfterEach(func() { + appsValidateAndDestroy(contexts) + EndTorpedoTest() + }) + + It("Initiate pool expansion using resize-disk and reboot node", func() { + StartTorpedoTest("PoolExpandDiskResizeWithReboot", "Initiate pool expansion using resize-disk and reboot node", nil, 51309) + runID = testrailuttils.AddRunsToMilestone(testrailID) + Step("Select a pool that has I/O and expand it by 100 GiB with resize-disk type. ", func() { + originalSizeInBytes = poolToResize.TotalSize + targetSizeInBytes = originalSizeInBytes + 100*units.GiB + targetSizeGiB = targetSizeInBytes / units.GiB + log.InfoD("Current Size of the pool %s is %d GiB. Trying to expand to %v GiB with type resize-disk", + poolIDToResize, poolToResize.TotalSize/units.GiB, targetSizeGiB) + triggerPoolExpansion(poolIDToResize, targetSizeGiB, api.SdkStoragePool_RESIZE_TYPE_RESIZE_DISK) + }) + + Step("Wait for expansion to start and reboot node", func() { + err := WaitForExpansionToStart(poolIDToResize) + log.FailOnError(err, "Timed out waiting for expansion to start") + err = RebootNodeAndWaitForPxUp(*storageNode) + log.FailOnError(err, "Failed to reboot node and wait till it is up") + }) + + log.Infof("Debug Pool %s", poolIDToResize) + Step("Ensure pool has been expanded to the expected size", func() { + _ = waitForOngoingPoolExpansionToComplete(poolIDToResize) + verifyPoolSizeEqualOrLargerThanExpected(poolIDToResize, targetSizeGiB) + }) + log.Infof("Debug Pool %s", poolIDToResize) + Step("Pool has expanded. Reboot the node", func() { + err = RebootNodeAndWaitForPxUp(*storageNode) + log.FailOnError(err, "Failed to reboot node and wait till it is up") + verifyPoolSizeEqualOrLargerThanExpected(poolIDToResize, targetSizeGiB) + }) + }) +}) + +var _ = Describe("{PoolExpandDiskAddWithReboot}", func() { BeforeEach(func() { contexts = scheduleApps() }) @@ -317,10 +441,16 @@ var _ = Describe("{PoolExpandWithReboot}", func() { dash.VerifyFatal(err, nil, "Pool expansion does not result in error") verifyPoolSizeEqualOrLargerThanExpected(poolIDToResize, targetSizeGiB) }) + + Step("Pool has expanded. Reboot the node", func() { + err = RebootNodeAndWaitForPxUp(*storageNode) + log.FailOnError(err, "Failed to reboot node and wait till it is up") + verifyPoolSizeEqualOrLargerThanExpected(poolIDToResize, targetSizeGiB) + }) }) }) -var _ = Describe("{PoolExpandWithPXRestart}", func() { +var _ = Describe("{PoolExpandDiskResizePXRestart}", func() { BeforeEach(func() { contexts = scheduleApps() }) @@ -346,13 +476,13 @@ var _ = Describe("{PoolExpandWithPXRestart}", func() { StartTorpedoTest("RestartAfterPoolExpansion", "Restart PX after pool expansion", nil, testrailID) - Step("Select a pool that has I/O and expand it by 100 GiB with add-disk type. ", func() { + Step("Select a pool that has I/O and expand it by 100 GiB with resize-disk type. ", func() { originalSizeInBytes = poolToResize.TotalSize targetSizeInBytes = originalSizeInBytes + 100*units.GiB targetSizeGiB = targetSizeInBytes / units.GiB - log.InfoD("Current Size of the pool %s is %d GiB. Trying to expand to %v GiB with type add-disk", + log.InfoD("Current Size of the pool %s is %d GiB. Trying to expand to %v GiB with type resize-disk", poolIDToResize, poolToResize.TotalSize/units.GiB, targetSizeGiB) - triggerPoolExpansion(poolIDToResize, targetSizeGiB, api.SdkStoragePool_RESIZE_TYPE_ADD_DISK) + triggerPoolExpansion(poolIDToResize, targetSizeGiB, api.SdkStoragePool_RESIZE_TYPE_RESIZE_DISK) }) Step("Wait for expansion to finish and restart PX", func() { @@ -371,11 +501,42 @@ var _ = Describe("{PoolExpandWithPXRestart}", func() { dash.VerifyFatal(poolToResize != nil, true, "Pool is up and running after restart") verifyPoolSizeEqualOrLargerThanExpected(poolIDToResize, targetSizeGiB) }) + + Step("Expansioin successful. Restart PX", func() { + err = Inst().V.RestartDriver(*storageNode, nil) + log.FailOnError(err, fmt.Sprintf("Error restarting px on node [%s]", storageNode.Name)) + err = Inst().V.WaitDriverUpOnNode(*storageNode, addDriveUpTimeOut) + log.FailOnError(err, fmt.Sprintf("Timed out waiting for px to come up on node [%s]", storageNode.Name)) + verifyPoolSizeEqualOrLargerThanExpected(poolIDToResize, targetSizeGiB) + }) }) +}) - It("Initiate pool expansion using add-drive and restart PX", func() { - StartTorpedoTest("PoolExpandAddDiskAndPXRestart", - "Initiate pool expansion using add-drive and restart PX", nil, testrailID) +var _ = Describe("{PoolExpandDiskAddPXRestart}", func() { + BeforeEach(func() { + contexts = scheduleApps() + }) + + JustBeforeEach(func() { + poolIDToResize = pickPoolToResize() + log.Infof("Picked pool %s to resize", poolIDToResize) + poolToResize = getStoragePool(poolIDToResize) + storageNode, err = GetNodeWithGivenPoolID(poolIDToResize) + log.FailOnError(err, "Failed to get node with given pool ID") + }) + + JustAfterEach(func() { + AfterEachTest(contexts) + }) + + AfterEach(func() { + appsValidateAndDestroy(contexts) + EndTorpedoTest() + }) + + It("Restart PX after pool expansion", func() { + StartTorpedoTest("RestartAfterPoolExpansion", + "Restart PX after pool expansion", nil, testrailID) Step("Select a pool that has I/O and expand it by 100 GiB with add-disk type. ", func() { originalSizeInBytes = poolToResize.TotalSize @@ -386,31 +547,65 @@ var _ = Describe("{PoolExpandWithPXRestart}", func() { triggerPoolExpansion(poolIDToResize, targetSizeGiB, api.SdkStoragePool_RESIZE_TYPE_ADD_DISK) }) - Step("Wait for expansion to start and reboot node", func() { - err := WaitForExpansionToStart(poolIDToResize) - log.FailOnError(err, "Timed out waiting for expansion to start") + Step("Wait for expansion to finish and restart PX", func() { + resizeErr := waitForOngoingPoolExpansionToComplete(poolIDToResize) + dash.VerifyFatal(resizeErr, nil, "Pool expansion does not result in error") + log.FailOnError(Inst().V.RestartDriver(*storageNode, nil), + fmt.Sprintf("Error restarting px on node [%s]", storageNode.Name)) + log.FailOnError(Inst().V.WaitDriverUpOnNode(*storageNode, addDriveUpTimeOut), + fmt.Sprintf("Timed out waiting for px to come up on node [%s]", storageNode.Name)) + }) + + Step("Ensure pool is up and running", func() { + // Ensure pool is up and running + poolToResize = getStoragePool(poolIDToResize) + // Ensure poolToResize is not nil + dash.VerifyFatal(poolToResize != nil, true, "Pool is up and running after restart") + verifyPoolSizeEqualOrLargerThanExpected(poolIDToResize, targetSizeGiB) + }) + + Step("Expansioin successful. Restart PX", func() { err = Inst().V.RestartDriver(*storageNode, nil) log.FailOnError(err, fmt.Sprintf("Error restarting px on node [%s]", storageNode.Name)) err = Inst().V.WaitDriverUpOnNode(*storageNode, addDriveUpTimeOut) log.FailOnError(err, fmt.Sprintf("Timed out waiting for px to come up on node [%s]", storageNode.Name)) - }) - - Step("Ensure pool has been expanded to the expected size", func() { - resizeErr := waitForOngoingPoolExpansionToComplete(poolIDToResize) - dash.VerifyFatal(resizeErr, nil, "Pool expansion does not result in error") verifyPoolSizeEqualOrLargerThanExpected(poolIDToResize, targetSizeGiB) }) }) }) -var _ = Describe("{PoolExpandResizeInvalidPoolID}", func() { +var _ = Describe("{PoolExpandInvalidSize}", func() { + // TestrailId: https://portworx.testrail.net/index.php?/tests/view/34542945 + BeforeEach(func() { + StartTorpedoTest("PoolExpansionDiskResizeInvalidSize", + "Initiate pool expansion using invalid expansion size", nil, 34542945) + }) + + AfterEach(func() { + EndTorpedoTest() + }) + + stepLog := "select a pool and expand it by 30000000 GiB with resize-disk type" + It(stepLog, func() { + log.InfoD(stepLog) + // pick pool to resize + pools, err := GetAllPoolsPresent() + log.FailOnError(err, "Unable to get the storage Pools") + pooltoPick := pools[0] + storageNode, err = GetNodeWithGivenPoolID(pooltoPick) + log.FailOnError(err, "Failed to get node with given pool ID") + + resizeErr := Inst().V.ExpandPool(pooltoPick, api.SdkStoragePool_RESIZE_TYPE_RESIZE_DISK, 30000000, true) + dash.VerifyFatal(resizeErr, nil, "Verify error occurs with invalid Pool expansion size") + }) - var testrailID = 34542946 - // testrailID corresponds to: https://portworx.testrail.net/index.php?/tests/view/34542946 +}) +var _ = Describe("{PoolExpandResizeInvalidPoolID}", func() { + // TestrailID: https://portworx.testrail.net/index.php?/tests/view/34542946 BeforeEach(func() { StartTorpedoTest("PoolExpandResizeInvalidPoolID", - "Initiate pool expansion using invalid Id", nil, testrailID) + "Initiate pool expansion using invalid Id", nil, 34542946) }) AfterEach(func() { @@ -426,7 +621,7 @@ var _ = Describe("{PoolExpandResizeInvalidPoolID}", func() { // Resize Pool with Invalid Pool ID stepLog = fmt.Sprintf("Expanding pool on Node UUID [%s] using auto", invalidPoolUUID) Step(stepLog, func() { - resizeErr := Inst().V.ExpandPool(invalidPoolUUID, api.SdkStoragePool_RESIZE_TYPE_AUTO, 100, true) + resizeErr := Inst().V.ExpandPool(invalidPoolUUID, api.SdkStoragePool_RESIZE_TYPE_RESIZE_DISK, 100, true) dash.VerifyFatal(resizeErr != nil, true, "Verify error occurs with invalid Pool UUID") // Verify error on pool expansion failure var errMatch error @@ -441,14 +636,11 @@ var _ = Describe("{PoolExpandResizeInvalidPoolID}", func() { }) -var _ = Describe("{PoolExpandDiskAddAndVerifyFromOtherNode}", func() { - - var testrailID = 34542840 - // testrailID corresponds to: https://portworx.testrail.net/index.php?/tests/view/34542840 +var _ = Describe("{PoolExpandDiskResizeAndVerifyFromOtherNode}", func() { BeforeEach(func() { - StartTorpedoTest("PoolExpandDiskAddAndVerifyFromOtherNode", - "Initiate pool expansion and verify from other node", nil, testrailID) + StartTorpedoTest("PoolExpandDiskResizeAndVerifyFromOtherNode", + "Initiate pool expansion and verify from other node", nil, 34542840) contexts = scheduleApps() }) @@ -469,7 +661,7 @@ var _ = Describe("{PoolExpandDiskAddAndVerifyFromOtherNode}", func() { EndTorpedoTest() }) - stepLog := "should get the existing pool and expand it by adding a disk and verify from other node" + stepLog := "should get the existing pool and expand it by resizing a disk and verify from other node" It(stepLog, func() { log.InfoD(stepLog) // get original total size @@ -485,9 +677,9 @@ var _ = Describe("{PoolExpandDiskAddAndVerifyFromOtherNode}", func() { targetSizeInBytes = originalSizeInBytes + 100*units.GiB targetSizeGiB = targetSizeInBytes / units.GiB - log.InfoD("Current Size of the pool %s is %d GiB. Trying to expand to %v GiB with type add-disk", + log.InfoD("Current Size of the pool %s is %d GiB. Trying to expand to %v GiB with type resize-disk", poolIDToResize, poolToResize.TotalSize/units.GiB, targetSizeGiB) - triggerPoolExpansion(poolIDToResize, targetSizeGiB, api.SdkStoragePool_RESIZE_TYPE_ADD_DISK) + triggerPoolExpansion(poolIDToResize, targetSizeGiB, api.SdkStoragePool_RESIZE_TYPE_RESIZE_DISK) Step("Ensure pool has been expanded to the expected size", func() { err = waitForOngoingPoolExpansionToComplete(poolIDToResize) @@ -520,50 +712,88 @@ var _ = Describe("{PoolExpandDiskAddAndVerifyFromOtherNode}", func() { }) -var _ = Describe("{PoolExpansionDiskResizeInvalidSize}", func() { +var _ = Describe("{PoolExpandDiskAddAndVerifyFromOtherNode}", func() { + // TestrailID: https://portworx.testrail.net/index.php?/tests/view/34542840 + BeforeEach(func() { + StartTorpedoTest("PoolExpandDiskAddAndVerifyFromOtherNode", + "Initiate pool expansion and verify from other node", nil, 34542840) + contexts = scheduleApps() + }) - var testrailID = 34542945 - // testrailID corresponds to: https://portworx.testrail.net/index.php?/tests/view/34542945 + JustBeforeEach(func() { + poolIDToResize = pickPoolToResize() + log.Infof("Picked pool %s to resize", poolIDToResize) + poolToResize = getStoragePool(poolIDToResize) + storageNode, err = GetNodeWithGivenPoolID(poolIDToResize) + log.FailOnError(err, "Failed to get node with given pool ID") + }) - BeforeEach(func() { - StartTorpedoTest("PoolExpansionDiskResizeInvalidSize", - "Initiate pool expansion using invalid expansion size", nil, testrailID) + JustAfterEach(func() { + AfterEachTest(contexts) }) AfterEach(func() { + appsValidateAndDestroy(contexts) EndTorpedoTest() }) - stepLog := "select a pool and expand it by 30000000 GiB with resize-disk type" + stepLog := "should get the existing pool and expand it by adding a disk and verify from other node" It(stepLog, func() { log.InfoD(stepLog) - // pick pool to resize - pools, err := GetAllPoolsPresent() - log.FailOnError(err, "Unable to get the storage Pools") - pooltoPick := pools[0] - storageNode, err = GetNodeWithGivenPoolID(pooltoPick) - log.FailOnError(err, "Failed to get node with given pool ID") + // get original total size + provisionStatus, err := GetClusterProvisionStatusOnSpecificNode(*storageNode) + var orignalTotalSize float64 + for _, pstatus := range provisionStatus { + if pstatus.NodeUUID == storageNode.Id { + orignalTotalSize += pstatus.TotalSize + } + } - resizeErr := Inst().V.ExpandPool(pooltoPick, api.SdkStoragePool_RESIZE_TYPE_RESIZE_DISK, 30000000, true) - dash.VerifyFatal(resizeErr, nil, "Verify error occurs with invalid Pool expansion size") + originalSizeInBytes = poolToResize.TotalSize + targetSizeInBytes = originalSizeInBytes + 100*units.GiB + targetSizeGiB = targetSizeInBytes / units.GiB - time.Sleep(2 * time.Minute) + log.InfoD("Current Size of the pool %s is %d GiB. Trying to expand to %v GiB with type add-disk", + poolIDToResize, poolToResize.TotalSize/units.GiB, targetSizeGiB) + triggerPoolExpansion(poolIDToResize, targetSizeGiB, api.SdkStoragePool_RESIZE_TYPE_ADD_DISK) + + Step("Ensure pool has been expanded to the expected size", func() { + err = waitForOngoingPoolExpansionToComplete(poolIDToResize) + dash.VerifyFatal(err, nil, "Pool expansion does not result in error") + verifyPoolSizeEqualOrLargerThanExpected(poolIDToResize, targetSizeGiB) + }) + + stNodes, err := GetStorageNodes() + log.FailOnError(err, "Unable to get the storage nodes") + var verifyNode node.Node + for _, node := range stNodes { + status, _ := IsPxRunningOnNode(&node) + if node.Id != storageNode.Id && status { + verifyNode = node + break + } + } + + // get final total size + provisionStatus, err = GetClusterProvisionStatusOnSpecificNode(verifyNode) + var finalTotalSize float64 + for _, pstatus := range provisionStatus { + if pstatus.NodeUUID == storageNode.Id { + finalTotalSize += pstatus.TotalSize + } + } + dash.VerifyFatal(finalTotalSize > orignalTotalSize, true, "Pool expansion failed, pool size is not greater than pool size before expansion") - // Verify error on pool expansion failure - match := checkPoolShowMessageOutput(storageNode) - dash.VerifyFatal(match, true, "Pool expand with invalid PoolUUID failed as expected.") }) }) var _ = Describe("{PoolExpandResizeWithSameSize}", func() { - - var testrailID = 34542944 - // testrailID corresponds to: https://portworx.testrail.net/index.php?/tests/view/34542944 + // TestrailId: https://portworx.testrail.net/index.php?/tests/view/34542944 BeforeEach(func() { StartTorpedoTest("PoolExpandResizeWithSameSize", - "Initiate pool expansion using same size", nil, testrailID) + "Initiate pool expansion using same size", nil, 34542944) }) AfterEach(func() { @@ -597,7 +827,7 @@ var _ = Describe("{PoolExpandResizeWithSameSize}", func() { var _ = Describe("{PoolExpandWhileResizeDiskInProgress}", func() { var testrailID = 34542896 - // testrailID corresponds to: https://portworx.testrail.net/index.php?/tests/view/34542896 + // TestrailId: https://portworx.testrail.net/index.php?/tests/view/34542896 BeforeEach(func() { StartTorpedoTest("PoolExpandWhileResizeDiskInProgress", @@ -650,7 +880,7 @@ var _ = Describe("{PoolExpandWhileResizeDiskInProgress}", func() { if !re.MatchString(fmt.Sprintf("%v", err)) { errMatch = fmt.Errorf("failed to verify pool expand when one already in progress") } - dash.VerifyFatal(errMatch, nil, "Pool expand with one resize already in Porgress failed as expected.") + dash.VerifyFatal(errMatch, nil, "Pool expand with one resize already in progress failed as expected.") Step("Ensure pool has been expanded to the expected size", func() { err = waitForOngoingPoolExpansionToComplete(poolIDToResize) @@ -846,14 +1076,14 @@ var _ = Describe("{PoolExpandResizeDiskInMaintenanceMode}", func() { log.InfoD(stepLog) var nodeDetail *node.Node var err error - stepLog = "Move node to maintenance mode" + stepLog = "Move Pool to maintenance mode" Step(stepLog, func() { log.InfoD(stepLog) nodeDetail, err = GetNodeWithGivenPoolID(poolToResize.Uuid) dash.VerifyFatal(err, nil, fmt.Sprintf("Failed to get Node Details using PoolUUID [%v]", poolToResize.Uuid)) - log.InfoD("Bring Node to Maintenance Mode") - err = Inst().V.EnterMaintenance(*nodeDetail) + log.InfoD("Bring Pool to Maintenance Mode") + err = Inst().V.EnterPoolMaintenance(*nodeDetail) dash.VerifyFatal(err, nil, fmt.Sprintf("Failed to shift Node [%s] to Mainteinance Mode", nodeDetail.Name)) }) @@ -873,8 +1103,8 @@ var _ = Describe("{PoolExpandResizeDiskInMaintenanceMode}", func() { stepLog = "Exit node out of maintenance mode" Step(stepLog, func() { log.InfoD(stepLog) - log.InfoD("Bring Node out of Maintenance Mode") - err = Inst().V.ExitMaintenance(*nodeDetail) + log.InfoD("Bring Pool out of Maintenance Mode") + err = Inst().V.ExitPoolMaintenance(*nodeDetail) dash.VerifyFatal(err, nil, fmt.Sprintf("Failed to shift Node [%s] out of Mainteinance Mode", nodeDetail.Name)) }) @@ -926,14 +1156,14 @@ var _ = Describe("{PoolExpandAddDiskInMaintenanceMode}", func() { log.InfoD(stepLog) var nodeDetail *node.Node var err error - stepLog = "Move node to maintenance mode" + stepLog = "Move pool to maintenance mode" Step(stepLog, func() { log.InfoD(stepLog) nodeDetail, err = GetNodeWithGivenPoolID(poolToResize.Uuid) dash.VerifyFatal(err, nil, fmt.Sprintf("Failed to get Node Details using PoolUUID [%v]", poolToResize.Uuid)) - log.InfoD("Bring Node to Maintenance Mode") - err = Inst().V.EnterMaintenance(*nodeDetail) + log.InfoD("Bring Pool to Maintenance Mode") + err = Inst().V.EnterPoolMaintenance(*nodeDetail) dash.VerifyFatal(err, nil, fmt.Sprintf("Failed to shift Node [%s] to Mainteinance Mode", nodeDetail.Name)) }) @@ -947,24 +1177,33 @@ var _ = Describe("{PoolExpandAddDiskInMaintenanceMode}", func() { log.InfoD("Current Size of the pool %s is %d GiB. Trying to expand to %v GiB with type add-disk", poolIDToResize, poolToResize.TotalSize/units.GiB, targetSizeGiB) err := Inst().V.ExpandPool(poolIDToResize, api.SdkStoragePool_RESIZE_TYPE_ADD_DISK, targetSizeGiB, true) - dash.VerifyFatal(err, nil, "pool expansion requested successfully") - }) - stepLog = "Exit node out of maintenance mode" - Step(stepLog, func() { - log.InfoD(stepLog) - log.InfoD("Bring Node out of Maintenance Mode") - err = Inst().V.ExitMaintenance(*nodeDetail) - dash.VerifyFatal(err, nil, fmt.Sprintf("Failed to shift Node [%s] out of Mainteinance Mode", nodeDetail.Name)) + if isDMthin, _ := IsDMthin(); isDMthin { + dash.VerifyFatal(err != nil, true, + "Pool expansion request of add-disk type should be rejected with dmthin") + dash.VerifyFatal(strings.Contains(err.Error(), "add-drive type expansion is not supported with px-storev2"), true, fmt.Sprintf("check error message: %v", err.Error())) + } else { + dash.VerifyFatal(err, nil, "pool expansion requested successfully") + } }) - stepLog = "Verify pool expand completes successfully" - Step(stepLog, func() { - log.InfoD(stepLog) - resizeErr := waitForOngoingPoolExpansionToComplete(poolIDToResize) - dash.VerifyFatal(resizeErr, nil, "Pool expansion does not result in error") - verifyPoolSizeEqualOrLargerThanExpected(poolIDToResize, targetSizeGiB) - }) + if isDMthin, _ := IsDMthin(); !isDMthin { + stepLog = "Exit Pool out of maintenance mode" + Step(stepLog, func() { + log.InfoD(stepLog) + log.InfoD("Bring Node out of Maintenance Mode") + err = Inst().V.ExitMaintenance(*nodeDetail) + dash.VerifyFatal(err, nil, fmt.Sprintf("Failed to shift Node [%s] out of Mainteinance Mode", nodeDetail.Name)) + }) + + stepLog = "Verify pool expand completes successfully" + Step(stepLog, func() { + log.InfoD(stepLog) + resizeErr := waitForOngoingPoolExpansionToComplete(poolIDToResize) + dash.VerifyFatal(resizeErr, nil, "Pool expansion does not result in error") + verifyPoolSizeEqualOrLargerThanExpected(poolIDToResize, targetSizeGiB) + }) + } }) }) @@ -1055,19 +1294,6 @@ var _ = Describe("{PoolExpandTestLimits}", func() { StartTorpedoTest("PoolExpandTestWithin15TiBLimit", "Initiate pool expansion using resize-disk to 15 TiB target size", nil, testrailID) - // To achieve total pool size of 15 TiB: - // 1. Add another drive of same size for pool to have 2 drives. - // 2. Perform resize-disk operation which is faster than pool rebalance - // due to adding a new 7 TiB drive. - targetSizeGiB := (poolToResize.TotalSize / units.GiB) * 2 - - log.InfoD("Next trying to expand the pool %s to %v GiB with type add-disk", - poolIDToResize, targetSizeGiB) - triggerPoolExpansion(poolIDToResize, targetSizeGiB, api.SdkStoragePool_RESIZE_TYPE_ADD_DISK) - resizeErr := waitForOngoingPoolExpansionToComplete(poolIDToResize) - dash.VerifyFatal(resizeErr, nil, "Pool expansion should not result in error") - verifyPoolSizeEqualOrLargerThanExpected(poolIDToResize, targetSizeGiB) - targetSizeTiB := uint64(15) targetSizeInBytes = targetSizeTiB * units.TiB targetSizeGiB = targetSizeInBytes / units.GiB @@ -1075,18 +1301,17 @@ var _ = Describe("{PoolExpandTestLimits}", func() { log.InfoD("Current Size of the pool %s is %d GiB. Trying to expand to %v TiB with type resize-disk", poolIDToResize, targetSizeGiB, targetSizeTiB) triggerPoolExpansion(poolIDToResize, targetSizeGiB, api.SdkStoragePool_RESIZE_TYPE_RESIZE_DISK) - resizeErr = waitForOngoingPoolExpansionToComplete(poolIDToResize) + resizeErr := waitForOngoingPoolExpansionToComplete(poolIDToResize) dash.VerifyFatal(resizeErr, nil, "Pool expansion should not result in error") verifyPoolSizeEqualOrLargerThanExpected(poolIDToResize, targetSizeGiB) }) - It("Expand pool to 20 TiB (beyond max supported capacity for DMThin) with add-disk type. ", func() { - var testrailID = 50643 - // testrailID corresponds to: https://portworx.testrail.net/index.php?/cases/view/50643 + It("Expand pool to 20 TiB (beyond max supported capacity for DMThin) with resize-disk type. ", func() { + // TestrailId: https://portworx.testrail.net/index.php?/cases/view/50643 StartTorpedoTest("DMThinPoolExpandBeyond15TiBLimit", - "Initiate pool expansion using add-disk to 20 TiB target size", nil, testrailID) + "Initiate pool expansion using resize-disk to 20 TiB target size", nil, testrailID) isDMthin, err := IsDMthin() dash.VerifyFatal(err, nil, "error verifying if set up is DMTHIN enabled") dash.VerifyFatal(isDMthin, true, "DMThin/PX-Storev2 is not enabled on underlaying PX cluster. Skipping `PoolExpandTestBeyond15TiBLimit` test.") @@ -1094,9 +1319,9 @@ var _ = Describe("{PoolExpandTestLimits}", func() { targetSizeTiB := uint64(20) targetSizeInBytes = targetSizeTiB * units.TiB targetSizeGiB = targetSizeInBytes / units.GiB - log.InfoD("Trying to expand pool %s to %v TiB with type add-disk", + log.InfoD("Trying to expand pool %s to %v TiB with type resize-disk", poolIDToResize, targetSizeTiB) - err = Inst().V.ExpandPool(poolIDToResize, api.SdkStoragePool_RESIZE_TYPE_ADD_DISK, targetSizeGiB, true) + err = Inst().V.ExpandPool(poolIDToResize, api.SdkStoragePool_RESIZE_TYPE_RESIZE_DISK, targetSizeGiB, true) dash.VerifyFatal(err != nil, true, "DMThin pool expansion to 20 TB should result in error") }) }) @@ -1189,7 +1414,7 @@ func checkPoolShowMessageOutput(n *node.Node) bool { for _, l := range outLines { line := strings.Trim(l, " ") // the following error is expected cause we are trying to expand the pool beyond the limit - if strings.Contains(line, "could not find a suitable storage distribution") { + if strings.Contains(line, "cannot be expanded beyond maximum size") { return true } } @@ -1535,11 +1760,9 @@ var _ = Describe("{PoolExpandStorageFullPoolResize}", func() { var testrailID = 34542835 // testrailID corresponds to: https://portworx.testrail.net/index.php?/tests/view/34542835 - var runID int JustBeforeEach(func() { StartTorpedoTest("PoolExpandStorageFullPoolResize", "Feed a pool full, then expand the pool using resize-disk", nil, testrailID) - runID = testrailuttils.AddRunsToMilestone(testrailID) }) var contexts []*scheduler.Context @@ -1633,7 +1856,9 @@ var _ = Describe("{PoolExpandStorageFullPoolResize}", func() { JustAfterEach(func() { defer EndTorpedoTest() - AfterEachTest(contexts, testrailID, runID) + // Cores are expected with StoragePool full. + // AfterEachTest will fail due to cores found during the test. + // AfterEachTest(contexts, testrailID, runID) }) }) diff --git a/tests/basic/pure_test.go b/tests/basic/pure_test.go index 85cb8b171..395060b43 100644 --- a/tests/basic/pure_test.go +++ b/tests/basic/pure_test.go @@ -2,6 +2,7 @@ package tests import ( "fmt" + "github.com/devans10/pugo/flasharray" "github.com/portworx/sched-ops/k8s/storage" @@ -2104,7 +2105,7 @@ var _ = Describe("{PVCLUNValidation}", func() { } for _, pvc := range pvcList.Items { - err := Inst().S.WaitForSinglePVCToBound(pvc.Name, nsName) + err := Inst().S.WaitForSinglePVCToBound(pvc.Name, nsName, 0) log.FailOnError(err, fmt.Sprintf("error validating PVC [%s] status in namespace [%s]", pvc.Name, nsName)) } @@ -2363,3 +2364,1979 @@ var _ = Describe("{FADAVolMigrateValidation}", func() { }) }) + +var _ = Describe("{VolAttachFAPxRestart}", func() { + /* + https://purestorage.atlassian.net/browse/PTX-21440 + 1. Create a host in the FA whose secret is not present in pure secret + 2. Create a volume and attach it to the host created in step 1 + 3. using iscsiadm commands run commands to login to the controllers + 4. check multipath -ll output + 5. Restart portworx + 6. The multipath entry for the volume attached from a different FA shouldn't vanish + */ + + JustBeforeEach(func() { + StartTorpedoTest("VolAttachFAPxRestart", "Attach a vol from a FA, restart portworx and check multipath consistency", nil, 0) + }) + + var ( + hostName = fmt.Sprintf("torpedo-host-%v", time.Now().UnixNano()) + volumeName = fmt.Sprintf("torpedo-vol-%v", time.Now().UnixNano()) + faSecret = Inst().FaSecret + FAclient *flasharray.Client + MultipathBeforeRestart string + faMgmtEndPoint string + faAPIToken string + host *flasharray.Host + IQNExists bool + ) + + itLog := "Attach a volume from a different FA, restart portworx and check multipath consistency" + It(itLog, func() { + log.InfoD(itLog) + // select a random node to run the test + n := node.GetStorageDriverNodes()[0] + + stepLog := "get the secrete of FA which is not present in pure secret" + Step(stepLog, func() { + log.InfoD(stepLog) + //get the flash array details + volDriverNamespace, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "failed to get volume driver [%s] namespace", Inst().V.String()) + + pxPureSecret, err := pureutils.GetPXPureSecret(volDriverNamespace) + log.FailOnError(err, "Failed to get secret %v", pxPureSecret) + flashArraysInSecret := pxPureSecret.Arrays + + if len(flashArraysInSecret) == 0 { + log.FailOnError(fmt.Errorf("no FlashArrays details found"), fmt.Sprintf("error getting FlashArrays creds from %s [%s]", PureSecretName, pxPureSecret)) + } + + for _, value := range strings.Split(faSecret, ",") { + faMgmtEndPoint = strings.Split(value, ":")[0] + faAPIToken = strings.Split(value, ":")[1] + if len(faMgmtEndPoint) == 0 || len(faAPIToken) == 0 { + continue + } + log.InfoD("famanagement endpoint: %v, faAPIToken: %v", faMgmtEndPoint, faAPIToken) + break + } + if len(faMgmtEndPoint) == 0 || len(faAPIToken) == 0 { + log.FailOnError(fmt.Errorf("no FlashArrays details found"), fmt.Sprintf("error getting FlashArrays creds from %s [%s]", PureSecretName, pxPureSecret)) + } + + for _, fa := range flashArraysInSecret { + if fa.MgmtEndPoint == faMgmtEndPoint { + log.FailOnError(fmt.Errorf("Flash Array details present in secret"), "Flash Array details should not be present in the secret") + } + } + }) + + stepLog = "Create a volume, create a host, attach the volume to the host, update iqn of the host and attach the volume to the host" + Step(stepLog, func() { + log.InfoD(stepLog) + + iqn, err := GetIQNOfNode(n) + log.FailOnError(err, "Failed to get iqn of the node %v", n.Name) + log.InfoD("Iqn of the node: %v", iqn) + + //create a connections to the FA whose credentials not present in the pure secret + FAclient, err = pureutils.PureCreateClientAndConnect(faMgmtEndPoint, faAPIToken) + log.FailOnError(err, "Failed to create client and connect to FA") + + // Check if the IQN of the node is present in the FA if present take the existing host else create one + IQNExists, err = pureutils.IsIQNExistsOnFA(FAclient, iqn) + log.FailOnError(err, "Failed to check if iqn exists on FA") + + if !IQNExists { + //create a host in the FA + host, err = pureutils.CreateNewHostOnFA(FAclient, hostName) + log.FailOnError(err, "Failed to create host on FA") + log.InfoD("Host created on FA: %v", host.Name) + + //Update iqn of the specific host + _, err = pureutils.UpdateIQNOnSpecificHosts(FAclient, hostName, iqn) + log.FailOnError(err, "Failed to update iqn on host %v", hostName) + log.InfoD("Updated iqn on host %v", hostName) + + } else { + // If iqn already exist in FA find the host which is using it + host, err = pureutils.GetHostFromIqn(FAclient, iqn) + log.FailOnError(err, "Failed to get host from FA") + log.InfoD("Host already exists on FA: %v", host) + } + + //create a volume on the FA + volSize := 1048576 * rand.Intn(10) + volume, err := pureutils.CreateVolumeOnFABackend(FAclient, volumeName, volSize) + log.FailOnError(err, "Failed to create volume on FA") + log.InfoD("Volume created on FA: %v", volume.Name) + + //Attach the volume to the host + connectedVolume, err := pureutils.ConnectVolumeToHost(FAclient, host.Name, volumeName) + log.FailOnError(err, "Failed to connect volume to host") + log.InfoD("Volume connected to host: %v", connectedVolume.Name) + + }) + stepLog = "Run iscsiadm commands to login to the controllers" + Step(stepLog, func() { + + //Run iscsiadm commands to login to the controllers + networkInterfaces, err := pureutils.GetSpecificInterfaceBasedOnServiceType(FAclient, "iscsi") + + for _, networkInterface := range networkInterfaces { + err = LoginIntoController(n, networkInterface, *FAclient) + log.FailOnError(err, "Failed to login into controller") + log.InfoD("Successfully logged into controller: %v", networkInterface.Address) + } + + // run multipath after login + cmd := "multipath -ll" + MultipathBeforeRestart, err = runCmd(cmd, n) + log.FailOnError(err, "Failed to run multipath -ll command on node %v", n.Name) + log.InfoD("Output of multipath -ll command before restart: %v", MultipathBeforeRestart) + + }) + + stepLog = "Restart portworx and check multipath consistency" + Step(stepLog, func() { + log.InfoD(stepLog) + err := Inst().V.StopDriver([]node.Node{n}, false, nil) + log.FailOnError(err, fmt.Sprintf("Failed to stop portworx on node [%s]", n.Name)) + err = Inst().V.WaitDriverDownOnNode(n) + log.FailOnError(err, fmt.Sprintf("Driver is up on node [%s]", n.Name)) + err = Inst().V.StartDriver(n) + log.FailOnError(err, fmt.Sprintf("Failed to start portworx on node [%s]", n.Name)) + err = Inst().V.WaitDriverUpOnNode(n, addDriveUpTimeOut) + log.FailOnError(err, fmt.Sprintf("Driver is down on node [%s]", n.Name)) + dash.VerifyFatal(err == nil, true, + fmt.Sprintf("PX is up after restarting on node [%s]", n.Name)) + + time.Sleep(10 * time.Second) + //run multipath after restart + cmd := "multipath -ll" + multipathAfterRestart, err := runCmd(cmd, n) + log.FailOnError(err, "Failed to run multipath -ll command on node %v", n.Name) + log.InfoD("Output of multipath -ll command after restart: %v", multipathAfterRestart) + + //check if the multipath entries are same before and after restart + dash.VerifyFatal(MultipathBeforeRestart == multipathAfterRestart, true, "Multipath entries are same before and after restart") + + }) + + stepLog = "Delete the volume and host from the FA" + Step(stepLog, func() { + log.InfoD(stepLog) + //log out of all the controllers + networkInterfaces, err := pureutils.GetSpecificInterfaceBasedOnServiceType(FAclient, "iscsi") + + for _, networkInterface := range networkInterfaces { + err = LogoutFromController(n, networkInterface, *FAclient) + log.FailOnError(err, "Failed to login into controller") + log.InfoD("Successfully logged out of controller: %v", networkInterface.Address) + } + + //disconnect volume from host + _, err = pureutils.DisConnectVolumeFromHost(FAclient, hostName, volumeName) + log.FailOnError(err, "Failed to disconnect volume from host") + log.InfoD("Volume disconnected from host: %v", volumeName) + + //Delete the volume + _, err = pureutils.DeleteVolumeOnFABackend(FAclient, volumeName) + log.FailOnError(err, "Failed to delete volume on FA") + log.InfoD("Volume deleted on FA: %v", volumeName) + + //Delete the host from FAbackend + if !IQNExists { + _, err = pureutils.DeleteHostOnFA(FAclient, hostName) + log.FailOnError(err, "Failed to delete host on FA") + log.InfoD("Host deleted on FA: %v", hostName) + } + }) + + }) + + JustAfterEach(func() { + defer EndTorpedoTest() + }) +}) + +func LoginIntoController(n node.Node, networkInterface flasharray.NetworkInterface, FAclient flasharray.Client) error { + ipAddress := networkInterface.Address + iqn, err := GetIQNOfFA(n, FAclient) + cmd := fmt.Sprintf("iscsiadm -m node -P %s -p %s -l", iqn, ipAddress) + iscsiAdmOutput, err := runCmd(cmd, n) + if err != nil { + return err + } + log.InfoD("Output of iscsiadm login command: %v", iscsiAdmOutput) + + return nil +} + +func LogoutFromController(n node.Node, networkInterface flasharray.NetworkInterface, FAclient flasharray.Client) error { + ipAddress := networkInterface.Address + iqn, err := GetIQNOfFA(n, FAclient) + cmd := fmt.Sprintf("iscsiadm -m node -P %s -p %s --logout", iqn, ipAddress) + iscsiAdmOutput, err := runCmd(cmd, n) + if err != nil { + return err + } + log.InfoD("Output of iscsiadm login command: %v", iscsiAdmOutput) + + return nil +} + +var _ = Describe("{VolAttachSameFAPxRestart}", func() { + /* + https://purestorage.atlassian.net/browse/PTX-21440 + 1. Create a host in the FA whose secret is in pure secret + 2. Create a volume and attach it to the host created in step 1 + 3. using iscsiadm commands run commands to login to the controllers + 4. check multipath -ll output + 5. Restart portworx + 6. The multipath entry for the volume attached from a different FA shouldn't vanish and I/O should be consistent + */ + + JustBeforeEach(func() { + StartTorpedoTest("VolAttachSameFAPxRestart", "Attach a vol from a FA, restart portworx and check multipath consistency", nil, 0) + }) + + var ( + hostName = fmt.Sprintf("torpedo-host-%v", time.Now().UnixNano()) + volumeName = fmt.Sprintf("torpedo-vol-%v", time.Now().UnixNano()) + FAclient *flasharray.Client + MultipathBeforeRestart string + faMgmtEndPoint string + faAPIToken string + host *flasharray.Host + volSize int + wg sync.WaitGroup + ) + + itLog := "Attach a volume from a different FA, restart portworx and check multipath consistency and I/O consistency" + It(itLog, func() { + log.InfoD(itLog) + // select a random node to run the test + n := node.GetStorageDriverNodes()[0] + + stepLog := "get the secrete of FA in pure secret" + Step(stepLog, func() { + log.InfoD(stepLog) + //get the flash array details + volDriverNamespace, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "failed to get volume driver [%s] namespace", Inst().V.String()) + + pxPureSecret, err := pureutils.GetPXPureSecret(volDriverNamespace) + log.FailOnError(err, "Failed to get secret %v", pxPureSecret) + flashArrays := pxPureSecret.Arrays + + if len(flashArrays) == 0 { + log.FailOnError(fmt.Errorf("no FlashArrays details found"), fmt.Sprintf("error getting FlashArrays creds from %s [%s]", PureSecretName, pxPureSecret)) + } + + faMgmtEndPoint = flashArrays[0].MgmtEndPoint + faAPIToken = flashArrays[0].APIToken + }) + + stepLog = "Create a volume, create a host, attach the volume to the host, update iqn of the host and attach the volume to the host" + Step(stepLog, func() { + log.InfoD(stepLog) + + iqn, err := GetIQNOfNode(n) + log.FailOnError(err, "Failed to get iqn of the node %v", n.Name) + log.InfoD("Iqn of the node: %v", iqn) + + //create a connections to the FA whose credentials not present in the pure secret + FAclient, err = pureutils.PureCreateClientAndConnect(faMgmtEndPoint, faAPIToken) + log.FailOnError(err, "Failed to create client and connect to FA") + + // Check if the IQN of the node is present in the FA if present take the existing host else create one + IQNExists, err := pureutils.IsIQNExistsOnFA(FAclient, iqn) + log.FailOnError(err, "Failed to check if iqn exists on FA") + + if !IQNExists { + //create a host in the FA + host, err = pureutils.CreateNewHostOnFA(FAclient, hostName) + log.FailOnError(err, "Failed to create host on FA") + log.InfoD("Host created on FA: %v", host.Name) + + //Update iqn of the specific host + _, err = pureutils.UpdateIQNOnSpecificHosts(FAclient, hostName, iqn) + log.FailOnError(err, "Failed to update iqn on host %v", hostName) + log.InfoD("Updated iqn on host %v", hostName) + + } else { + // If iqn already exist in FA find the host which is using it + host, err = pureutils.GetHostFromIqn(FAclient, iqn) + log.FailOnError(err, "Failed to get host from FA") + log.InfoD("Host already exists on FA: %v", host) + } + + //create a volume on the FA + volSize = 104857600000 * (rand.Intn(10) + 1) + volume, err := pureutils.CreateVolumeOnFABackend(FAclient, volumeName, volSize) + log.FailOnError(err, "Failed to create volume on FA") + log.InfoD("Volume created on FA: %v", volume.Name) + + //Attach the volume to the host + connectedVolume, err := pureutils.ConnectVolumeToHost(FAclient, host.Name, volumeName) + log.FailOnError(err, "Failed to connect volume to host") + log.InfoD("Volume connected to host: %v", connectedVolume.Name) + + }) + stepLog = "Run iscsiadm commands to login to the controllers" + Step(stepLog, func() { + + //run multipath before refresh + cmd := "multipath -ll" + output, err := runCmd(cmd, n) + log.FailOnError(err, "Failed to run multipath -ll command on node %v", n.Name) + log.InfoD("Output of multipath -ll command before PX restart : %v", output) + + // Refresh the iscsi session + err = RefreshIscsiSession(n) + log.FailOnError(err, "Failed to refresh iscsi session") + log.InfoD("Successfully refreshed iscsi session") + + //sleep for 10s for the entries to update + time.Sleep(10 * time.Second) + + // run multipath after login + cmd = "multipath -ll" + MultipathBeforeRestart, err = runCmd(cmd, n) + log.FailOnError(err, "Failed to run multipath -ll command on node %v", n.Name) + log.InfoD("Output of multipath -ll command before PX restart : %v", MultipathBeforeRestart) + + // multipath before and after shoouldn't be same + dash.VerifyFatal(MultipathBeforeRestart != output, true, "Multipath entries are different before and after refresh") + + }) + stepLog = "create ext4 file system on top of the volume,mount it to /home/test Start running fio on the volume" + Step(stepLog, func() { + log.InfoD(stepLog) + //Get the device path of the volume + cmd := "multipath -ll | grep dm- | sort -n | tail -n 1" + dm, err := runCmd(cmd, n) + log.FailOnError(err, "Failed to get the device path of the volume") + log.InfoD("Device path of the volume: %v", dm) + dmPath := strings.Fields(dm) + if len(dmPath) > 2 { + dm = dmPath[1] + } else { + log.FailOnError(fmt.Errorf("Failed to get the device path of the volume"), "Failed to get the device path of the volume") + } + //create ext4 file system on top of the volume + cmd = fmt.Sprintf("mkfs.ext4 /dev/%s", dm) + _, err = runCmd(cmd, n) + log.FailOnError(err, "Failed to create ext4 file system on the volume") + log.InfoD("Successfully created ext4 file system on the volume") + + //Mount the volume to /home/test + cmd = fmt.Sprintf("mkdir -p /home/test && mount /dev/%s /home/test", dm) + _, err = runCmd(cmd, n) + log.FailOnError(err, "Failed to mount the volume to /home/test") + log.InfoD("Successfully mounted the volume to /home/test") + + //pick a random name for a file to write data into + fileName := fmt.Sprintf("/home/test/fio-%v", time.Now().UnixNano()) + + //Create a file with the random name + cmd = fmt.Sprintf("touch %s", fileName) + _, err = runCmd(cmd, n) + log.FailOnError(err, "Failed to create a file with the random name") + log.InfoD("Successfully created a file with the random name") + + //run fio on the volume + + wg.Add(1) + go func() { + defer wg.Done() + fioCmd := fmt.Sprintf("fio --name=randwrite --ioengine=libaio --iodepth=32 --rw=randwrite --bs=4k --direct=1 --size=%vG --numjobs=1 --runtime=30 --time_based --group_reporting --filename=%s", volSize/2, fileName) + _, err = runCmd(fioCmd, n) + log.FailOnError(err, "Failed to run fio on the volume") + log.InfoD("Successfully ran fio on the volume") + }() + + }) + + stepLog = "Restart portworx and check multipath consistency" + Step(stepLog, func() { + log.InfoD(stepLog) + err := Inst().V.StopDriver([]node.Node{n}, false, nil) + log.FailOnError(err, fmt.Sprintf("Failed to stop portworx on node [%s]", n.Name)) + err = Inst().V.WaitDriverDownOnNode(n) + log.FailOnError(err, fmt.Sprintf("Driver is up on node [%s]", n.Name)) + err = Inst().V.StartDriver(n) + log.FailOnError(err, fmt.Sprintf("Failed to start portworx on node [%s]", n.Name)) + err = Inst().V.WaitDriverUpOnNode(n, addDriveUpTimeOut) + log.FailOnError(err, fmt.Sprintf("Driver is down on node [%s]", n.Name)) + dash.VerifyFatal(err == nil, true, + fmt.Sprintf("PX is up after restarting on node [%s]", n.Name)) + + //run multipath after restart + cmd := "multipath -ll" + multipathAfterRestart, err := runCmd(cmd, n) + log.FailOnError(err, "Failed to run multipath -ll command on node %v", n.Name) + + //check if the multipath entries are same before and after restart + dash.VerifyFatal(MultipathBeforeRestart == multipathAfterRestart, true, "Multipath entries are same before and after restart") + + }) + wg.Wait() + + stepLog = "Delete the volume and host from the FA" + Step(stepLog, func() { + log.InfoD(stepLog) + //disconnect volume from host + _, err = pureutils.DisConnectVolumeFromHost(FAclient, host.Name, volumeName) + log.FailOnError(err, "Failed to disconnect volume from host") + log.InfoD("Volume disconnected from host: %v", volumeName) + + //Delete the volume + _, err = pureutils.DeleteVolumeOnFABackend(FAclient, volumeName) + log.FailOnError(err, "Failed to delete volume on FA") + log.InfoD("Volume deleted on FA: %v", volumeName) + + //Refresh the iscsi session + err = RefreshIscsiSession(n) + log.FailOnError(err, "Failed to refresh iscsi session") + log.InfoD("Successfully refreshed iscsi session") + + }) + + }) + + JustAfterEach(func() { + defer EndTorpedoTest() + }) +}) + +/* +This test deploys app with FBDA volume having storageClass with pure_nfs_endpoint parameter. +It validates that FBDA volume gets consumed over IP mentioned in `pure_nfs_endpoint` parameter of storageClass. +*/ +var _ = Describe("{FBDAMultiTenancyBasicTest}", func() { + var contexts []*scheduler.Context + var testName string + var customConfigAppName string + + testName = "fbda-multitenancy" + JustBeforeEach(func() { + StartTorpedoTest("FBDAMultiTenancyBasicTest", "Validate FBDA vols get consumed over IP mentioned in `pure_nfs_endpoint` parameter of storageClass", nil, 0) + Step("setup credential necessary for cloudsnap", createCloudsnapCredential) + customConfigAppName = skipTestIfNoRequiredCustomAppConfigFound() + contexts = ScheduleApplications(testName) + for i := 0; i < len(contexts); i++ { + contexts[i].SkipVolumeValidation = true + } + ValidateApplicationsPureSDK(contexts) + }) + + When("pure_nfs_endpoint parameter specified in storageClass", func() { + It("should create a FBDA volume over pure_nfs_endpoint mentioned in storageClass", func() { + ctx := findContext(contexts, customConfigAppName) + + vols, err := Inst().S.GetVolumes(ctx) + dash.VerifyFatal(err, nil, "Failed to get list of volumes") + dash.VerifyFatal(len(vols) > 0, true, "Failed to get volumes") + + expectedPureNfsEndpoint := Inst().CustomAppConfig[customConfigAppName].StorageClassPureNfsEndpoint + + for _, vol := range vols { + apiVol, err := Inst().V.InspectVolume(vol.ID) + log.FailOnError(err, fmt.Sprintf("Failed to inspect volume [%s]", apiVol.GetId())) + // Validate the volume is created over the NFS endpoint mentioned in storageClass + dash.VerifyFatal(apiVol.Spec.ProxySpec.PureFileSpec.NfsEndpoint, expectedPureNfsEndpoint, "FBDA volume is not using NFS endpoint mentioned in storageClass.") + } + }) + + JustAfterEach(func() { + defer EndTorpedoTest() + opts := make(map[string]bool) + opts[scheduler.OptionsWaitForResourceLeakCleanup] = true + + for _, ctx := range contexts { + TearDownContext(ctx, opts) + } + Step("delete credential used for cloudsnap", deleteCloudsnapCredential) + AfterEachTest(contexts) + }) + }) +}) + +var _ = Describe("{FBDAMultiTenancyUpdatePureNFSEnpoint}", func() { + var contexts []*scheduler.Context + var customConfigAppName, originalNFSEndpoint string + var origCustomAppConfigs map[string]scheduler.AppConfig + + testName := "fbda-mt-update-endp" + + JustBeforeEach(func() { + StartTorpedoTest("FBDAMultiTenancyUpdatePureNFSEnpoint", "Validate Pure NFS endpoint can be changed using pxctl", nil, 0) + Step("setup credential necessary for cloudsnap", createCloudsnapCredential) + customConfigAppName = skipTestIfNoRequiredCustomAppConfigFound() + + // save the original custom app configs + origCustomAppConfigs = make(map[string]scheduler.AppConfig) + for appName, customAppConfig := range Inst().CustomAppConfig { + origCustomAppConfigs[appName] = customAppConfig + } + + // update the custom app config with empty string for Pure NFS endpoint + // So that app uses NFS endpoint from pure.json secret. + Inst().CustomAppConfig[customConfigAppName] = scheduler.AppConfig{ + StorageClassPureNfsEndpoint: "", + } + + log.Infof("JustBeforeEach using Inst().CustomAppConfig = %v", Inst().CustomAppConfig) + + err := Inst().S.RescanSpecs(Inst().SpecDir, Inst().V.String()) + log.FailOnError(err, fmt.Sprintf("Failed to rescan specs from %s", Inst().SpecDir)) + + contexts = ScheduleApplications(testName) + for i := 0; i < len(contexts); i++ { + contexts[i].SkipVolumeValidation = true + } + ValidateApplicationsPureSDK(contexts) + }) + + When("pure_nfs_endpoint is updated through pxctl", func() { + It("should use newer pure_nfs_endpoint during next FBDA volume mount", func() { + ctx := findContext(contexts, customConfigAppName) + vols, err := Inst().S.GetVolumes(ctx) + dash.VerifyFatal(err, nil, "Failed to get list of volumes") + dash.VerifyFatal(len(vols) > 0, true, "Failed to get volumes") + + newNFSEndpoint := origCustomAppConfigs[customConfigAppName].StorageClassPureNfsEndpoint + fbdaVolNames := []string{} + + for _, vol := range vols { + if backendType, ok := vol.Labels[k8s.PureDAVolumeLabel]; !ok || + backendType != k8s.PureDAVolumeLabelValueFB { + continue + } + fbdaVolNames = append(fbdaVolNames, vol.Name) + + apiVol, err := Inst().V.InspectVolume(vol.ID) + log.FailOnError(err, fmt.Sprintf("Failed to inspect volume [%s]", apiVol.GetId())) + + if apiVol.Spec != nil && apiVol.Spec.ProxySpec != nil { + if apiVol.Spec.ProxySpec.PureFileSpec != nil && apiVol.Spec.ProxySpec.PureFileSpec.NfsEndpoint != "" { + originalNFSEndpoint = apiVol.Spec.ProxySpec.PureFileSpec.NfsEndpoint + } else { + originalNFSEndpoint = apiVol.Spec.ProxySpec.Endpoint + } + } + dash.VerifyFatal(originalNFSEndpoint != newNFSEndpoint, true, + fmt.Sprintf("Verify new NFS endpoint [%s] is not same as old [%s].", newNFSEndpoint, originalNFSEndpoint)) + + err = Inst().V.UpdateFBDANFSEndpoint(apiVol.GetId(), newNFSEndpoint) + dash.VerifyFatal(err, nil, + fmt.Sprintf("Verify NFS endpoint is updated to [%s] through pxctl for volume [%s]", newNFSEndpoint, apiVol.GetId())) + } + + // Remount FBDA volumes by, + // scaling down app to 0 and then back to origial replica count. + originalAppScaleMap, err := scaleAppToZero(ctx) + dash.VerifyFatal(err, nil, fmt.Sprintf("Verify app [%s] is scaled down successfully. ", ctx.App.Key)) + + err = Inst().S.ScaleApplication(ctx, originalAppScaleMap) + dash.VerifyFatal(err, nil, fmt.Sprintf("Verify app [%s] is scaled up successfully.", ctx.App.Key)) + + for _, vol := range vols { + apiVol, err := Inst().V.InspectVolume(vol.ID) + log.FailOnError(err, fmt.Sprintf("Failed to inspect volume [%s]", apiVol.GetId())) + dash.VerifyFatal(apiVol.Spec.ProxySpec.PureFileSpec.NfsEndpoint, newNFSEndpoint, + "FBDA volume is using NFS endpoint set using pxctl.") + } + validateMountOnHost(ctx, newNFSEndpoint, fbdaVolNames) + }) + }) + + JustAfterEach(func() { + defer EndTorpedoTest() + opts := make(map[string]bool) + opts[scheduler.OptionsWaitForResourceLeakCleanup] = true + for _, ctx := range contexts { + TearDownContext(ctx, opts) + } + + // restore the original custom app configs + for appName, customAppConfig := range origCustomAppConfigs { + Inst().CustomAppConfig[appName] = customAppConfig + } + // remove any keys that are not present in the orig map + for appName := range Inst().CustomAppConfig { + if _, ok := origCustomAppConfigs[appName]; !ok { + delete(Inst().CustomAppConfig, appName) + } + } + log.Infof("JustAfterEach restoring Inst().CustomAppConfig = %v", Inst().CustomAppConfig) + err := Inst().S.RescanSpecs(Inst().SpecDir, Inst().V.String()) + Expect(err).NotTo(HaveOccurred(), "Failed to rescan specs from %s", Inst().SpecDir) + Step("delete credential used for cloudsnap", deleteCloudsnapCredential) + AfterEachTest(contexts) + }) +}) + +func validateMountOnHost(ctx *scheduler.Context, newNFSEndpoint string, fbdaVolNames []string) { + // For each node this app is running on, get the mount table. + // Then check for all FBDA volumes and validate they use the correct mount source. + appNodes, err := Inst().S.GetNodesForApp(ctx) + log.FailOnError(err, fmt.Sprintf("failed to get nodes for app: %v", ctx.App.Key)) + + for _, n := range appNodes { + mountOutput, err := Inst().N.RunCommand(n, "mount", node.ConnectionOpts{ + Timeout: k8s.DefaultTimeout, + TimeBeforeRetry: k8s.DefaultRetryInterval, + Sudo: true}) + log.FailOnError(err, fmt.Sprintf("failed to get mounts on node '%s': %v", n.Name, err)) + + for _, line := range strings.Split(mountOutput, "\n") { + if !strings.Contains(line, "nfs") { // Only consider NFS volumes + continue + } + + foundVol := "" + for _, volName := range fbdaVolNames { + if strings.Contains(line, volName) { + foundVol = volName + break + } + } + + if foundVol == "" { // Only consider volumes that are in our list of volume names + continue + } + + // Check that we are using the correct address + dash.VerifyFatal(strings.Contains(line, newNFSEndpoint), true, + fmt.Sprintf("Verify mount line for volume [%s] contains new NFS endpoint '%s'", foundVol, n.Name)) + } + } +} + +func scaleAppToZero(ctx *scheduler.Context) (map[string]int32, error) { + log.InfoD(fmt.Sprintf("scale down app %s to 0", ctx.App.Key)) + originalAppScaleMap := make(map[string]int32) + originalAppScaleMap, err := Inst().S.GetScaleFactorMap(ctx) + if err != nil { + return originalAppScaleMap, err + } + + applicationScaleDownMap := make(map[string]int32, len(ctx.App.SpecList)) + for name := range originalAppScaleMap { + applicationScaleDownMap[name] = 0 + } + + err = Inst().S.ScaleApplication(ctx, applicationScaleDownMap) + if err != nil { + return originalAppScaleMap, err + } + return originalAppScaleMap, nil +} + +func skipTestIfNoRequiredCustomAppConfigFound() string { + var customConfigAppName string + if Inst().CustomAppConfig == nil { + log.Warnf("No CustomAppConfig found, skipping test") + Skip("No CustomAppConfig found") + } + + log.Infof("Using CustomAppConfig: %+v", Inst().CustomAppConfig) + // Skip the test if we don't find any of our apps + for appNameFromCustomAppConfig := range Inst().CustomAppConfig { + found := false + for _, appName := range Inst().AppList { + if appName == appNameFromCustomAppConfig { + found = true + customConfigAppName = appNameFromCustomAppConfig + break + } + } + if !found { + log.Warnf("App %v not found in %d contexts, skipping test", appNameFromCustomAppConfig, len(contexts)) + Skip(fmt.Sprintf("app %v not found", appNameFromCustomAppConfig)) + } + } + return customConfigAppName +} + +var _ = Describe("{FADAPodRecoveryDisableDataPortsOnFA}", func() { + + /* + PTX : https://purestorage.atlassian.net/browse/PTX-23763 + Verify that FA Pods Recovers after bringing back network Interface down on all FA's + + */ + JustBeforeEach(func() { + log.Infof("Starting Torpedo tests ") + StartTorpedoTest("FADAPodRecoveryDisableDataPortsOnFA", + "Verify Pod Recovers from RO mode after Bounce after blocking network interface from FA end", + nil, 0) + }) + + itLog := "FADAPodRecoveryDisableDataPortsOnFA" + It(itLog, func() { + + var contexts []*scheduler.Context + var k8sCore = core.Instance() + + // Pick all the Volumes with RWO Status, We check if the Volume is with Access Mode RWO and PureBlock Volume + vols := make([]*volume.Volume, 0) + stepLog = "Schedule application" + Step(stepLog, func() { + contexts = make([]*scheduler.Context, 0) + for i := 0; i < Inst().GlobalScaleFactor; i++ { + contexts = append(contexts, ScheduleApplications(fmt.Sprintf("fapodrecovery-%d", i))...) + } + }) + + ValidateApplications(contexts) + defer appsValidateAndDestroy(contexts) + + flashArrayGetIscsiPorts := func() map[string][]string { + flashArrays, err := FlashArrayGetIscsiPorts() + log.FailOnError(err, "Failed to Get Details on Flasharray iscsi ports that are in Use ") + + return flashArrays + } + + interfaces := flashArrayGetIscsiPorts() + log.Infof("Map of List [%v]", interfaces) + + disableInterfaces := func() { + stepLog = "Disable all Data ports on the FA Controller" + Step(stepLog, func() { + for mgmtIp, iFaces := range interfaces { + for _, eachIface := range iFaces { + log.Infof("Disabling Network interfaces [%v] on FA Host [%v]", eachIface, mgmtIp) + log.FailOnError(DisableFlashArrayNetworkInterface(mgmtIp, eachIface), "Disabling network interface failed?") + } + } + }) + } + + enableInterfaces := func() { + stepLog = "Enable all Data ports on the FA Controller" + Step(stepLog, func() { + for mgmtIp, iFaces := range interfaces { + for _, eachIface := range iFaces { + log.Infof("Enabling Interface [%v] on FA Host [%v]", eachIface, mgmtIp) + log.FailOnError(EnableFlashArrayNetworkInterface(mgmtIp, eachIface), "Enabling Network interface failed?") + } + } + }) + } + + defer enableInterfaces() + + stepLog = "Get all Volumes and Validate " + Step(stepLog, func() { + for _, ctx := range contexts { + appVols, err := Inst().S.GetVolumes(ctx) + log.FailOnError(err, fmt.Sprintf("error getting volumes for app [%s]", ctx.App.Key)) + vols = append(vols, appVols...) + } + }) + + allStorageNodes := node.GetStorageNodes() + + stepLog = "Disable Data port on all FA's " + Step(stepLog, func() { + disableInterfaces() + }) + + // Sleep for sometime for PVC's to go in RO mode while data ingest in progress + time.Sleep(15 * time.Minute) + + // Verify Px goes down on all the nodes present in the cluster + for _, eachNodes := range allStorageNodes { + log.FailOnError(Inst().V.WaitDriverDownOnNode(eachNodes), fmt.Sprintf("Driver on the Node [%v] is not down yet", eachNodes.Name)) + } + + stepLog = "Verify if pods are not in Running state after disabling " + Step(stepLog, func() { + for _, eachVol := range vols { + // Pod details after blocking IP + podsOnBlock, err := k8sCore.GetPodsUsingPVC(eachVol.Name, eachVol.Namespace) + log.FailOnError(err, "unable to find the node from the pod") + + // Verify that Pod Bounces and not in Running state till the time iscsi rules are not reverted + for _, eachPodAfter := range podsOnBlock { + if eachPodAfter.Status.Phase == "Running" { + log.FailOnError(fmt.Errorf("pod is in Running State [%v]", + eachPodAfter.Status.HostIP), "Pod is in Running state") + } + log.Infof("Pod with Name [%v] placed on Host [%v] and Phase [%v]", + eachPodAfter.Name, eachPodAfter.Status.HostIP, eachPodAfter.Status.Phase) + } + } + }) + + // Enable Back the network interface on all the FA CLuster + enableInterfaces() + + // Sleep for some time for Px to come up online and working + time.Sleep(10 * time.Minute) + + stepLog = "Verify that each pods comes back online once network restored" + Step(stepLog, func() { + + }) + // Verify Px goes down on all the nodes present in the cluster + for _, eachNodes := range allStorageNodes { + log.FailOnError(Inst().V.WaitDriverUpOnNode(eachNodes, Inst().DriverStartTimeout), + fmt.Sprintf("Driver on the Node [%v] is not Up yet", eachNodes.Name)) + } + + stepLog = "Verify Each pod in Running State after bringing back data ports" + Step(stepLog, func() { + for _, eachVol := range vols { + // Pod details after blocking IP + podsAfterRevert, err := k8sCore.GetPodsUsingPVC(eachVol.Name, eachVol.Namespace) + log.FailOnError(err, "unable to find the node from the pod") + + for _, eachPod := range podsAfterRevert { + if eachPod.Status.Phase != "Running" { + log.FailOnError(fmt.Errorf("Pod didn't bounce on the node [%v]", + eachPod.Status.HostIP), "Pod didn't bounce on the node") + } + } + } + }) + + }) + + JustAfterEach(func() { + log.Infof("In Teardown") + defer EndTorpedoTest() + AfterEachTest(contexts) + }) +}) + +func pickRandomElementsFromArray(array []string, sampleCount int) []string { + // Seed the random number generator + rand.Seed(time.Now().UnixNano()) + + // Shuffle the slice + rand.Shuffle(len(array), func(i, j int) { + array[i], array[j] = array[j], array[i] + }) + + // Pick the first two elements + return array[:sampleCount] +} + +// Function to Enable Interfaces provided interface list +func enableInterfaces(interfaces map[string][]string) { + stepLog = "Enable all Data ports on the FA Controller" + Step(stepLog, func() { + for mgmtIp, iFaces := range interfaces { + for _, eachIface := range iFaces { + log.Infof("Enabling Interface [%v] on FA Host [%v]", eachIface, mgmtIp) + log.FailOnError(EnableFlashArrayNetworkInterface(mgmtIp, eachIface), "Enabling Network interface failed?") + } + } + }) +} + +// Function to disable Interfaces provided interface list +func disableInterfaces(interfaces map[string][]string) { + stepLog = "Disable all Data ports on the FA Controller" + Step(stepLog, func() { + for mgmtIp, iFaces := range interfaces { + for _, eachIface := range iFaces { + log.Infof("Disabling Network interfaces [%v] on FA Host [%v]", eachIface, mgmtIp) + log.FailOnError(DisableFlashArrayNetworkInterface(mgmtIp, eachIface), "Disabling network interface failed?") + } + } + }) +} + +// Do pool resize when few of the iscsi ports are down in FA +var _ = Describe("{PoolResizeFewIscsiPortsDown}", func() { + + /* + PTX : https://purestorage.atlassian.net/browse/PTX-23831 + Do pool resize when few of the iscsi ports are down in FA + + */ + JustBeforeEach(func() { + log.Infof("Starting Torpedo tests ") + StartTorpedoTest("PoolResizeFewIscsiPortsDown", + "Do pool resize when few of the iscsi ports are down in FA", + nil, 0) + }) + + itLog := "PoolResizeFewIscsiPortsDown" + It(itLog, func() { + var contexts []*scheduler.Context + //var k8sCore = core.Instance() + stepLog = "Schedule application" + Step(stepLog, func() { + contexts = make([]*scheduler.Context, 0) + for i := 0; i < Inst().GlobalScaleFactor; i++ { + contexts = append(contexts, ScheduleApplications(fmt.Sprintf("poolresizeiscsidown-%d", i))...) + } + }) + defer appsValidateAndDestroy(contexts) + + poolDetails := []*api.StoragePool{} + stepLog = "Get List of all storage pools present in the cluster" + Step(stepLog, func() { + poolsAvailable, err := Inst().V.ListStoragePools(metav1.LabelSelector{}) + log.FailOnError(err, "Failed to list storage pools") + log.Infof("List of pools present in the cluster [%v]", poolsAvailable) + for _, v := range poolsAvailable { + poolDetails = append(poolDetails, v) + } + }) + + // Pick Random Pool for Resize + randomPool := poolDetails[rand.Intn(len(poolDetails))] + log.Infof("Random pool picked for test [%v]", randomPool.GetUuid()) + + // Get Details of iscsi ports present in the cluster + flashArrays, err := FlashArrayGetIscsiPorts() + log.FailOnError(err, "Failed to Get Details on Flasharray iscsi ports that are in Use ") + + // Pick up random interfaces from each node leaving one interface to work + randomInterfaces := make(map[string][]string) + for MgmtIp, ifaces := range flashArrays { + if len(ifaces) == 1 { + Skip(fmt.Sprintf("only 1 interface present in the Backend FA. Skipping the test [%v]", "PoolResizeFewIscsiPortsDown")) + } else { + randomInterfaces[MgmtIp] = pickRandomElementsFromArray(ifaces, len(ifaces)-1) + } + } + + defer enableInterfaces(randomInterfaces) + + // Block Iptable Ports on each element + disableInterfaces(randomInterfaces) + + stepLog := "Initiate pool expansion drive using Resize type Auto " + Step(stepLog, func() { + log.InfoD(stepLog) + + poolToBeResized, err := GetStoragePoolByUUID(randomPool.Uuid) + log.FailOnError(err, fmt.Sprintf("Failed to get pool using UUID %s", randomPool.Uuid)) + drvSize, err := getPoolDiskSize(poolToBeResized) + log.FailOnError(err, "error getting drive size for pool [%s]", poolToBeResized.Uuid) + expectedSize := (poolToBeResized.TotalSize / units.GiB) + drvSize + + isjournal, err := IsJournalEnabled() + log.FailOnError(err, "Failed to check if Journal enabled") + + log.InfoD("Current Size of the pool %s is %d", randomPool.Uuid, poolToBeResized.TotalSize/units.GiB) + err = Inst().V.ExpandPool(randomPool.Uuid, api.SdkStoragePool_RESIZE_TYPE_AUTO, expectedSize, true) + dash.VerifyFatal(err, nil, "Pool expansion init successful?") + + err = WaitForExpansionToStart(poolToBeResized.Uuid) + log.FailOnError(err, "pool expansion not started") + + resizeErr := waitForPoolToBeResized(expectedSize, randomPool.Uuid, isjournal) + dash.VerifyFatal(resizeErr, nil, fmt.Sprintf("Verify pool %s expansion using resize-disk", randomPool.Uuid)) + + }) + + }) + JustAfterEach(func() { + log.Infof("In Teardown") + defer EndTorpedoTest() + AfterEachTest(contexts) + }) +}) + +// Do pool resize when all the iscsi ports are down in FA +var _ = Describe("{PoolResizeAllIscsiPortsDown}", func() { + + /* + PTX : https://purestorage.atlassian.net/browse/PTX-23832 + Do pool resize when all of iscsi ports are down in FA + + */ + JustBeforeEach(func() { + log.Infof("Starting Torpedo tests ") + StartTorpedoTest("PoolResizeAllIscsiPortsDown", + "Do pool resize when all of iscsi ports are down in FA", + nil, 0) + }) + + itLog := "PoolResizeAllIscsiPortsDown" + It(itLog, func() { + var contexts []*scheduler.Context + //var k8sCore = core.Instance() + stepLog = "Schedule application" + Step(stepLog, func() { + contexts = make([]*scheduler.Context, 0) + for i := 0; i < Inst().GlobalScaleFactor; i++ { + contexts = append(contexts, ScheduleApplications(fmt.Sprintf("poolresizeiscsidown-%d", i))...) + } + }) + defer appsValidateAndDestroy(contexts) + + poolDetails := []*api.StoragePool{} + stepLog = "Get List of all storage pools present in the cluster" + Step(stepLog, func() { + poolsAvailable, err := Inst().V.ListStoragePools(metav1.LabelSelector{}) + log.FailOnError(err, "Failed to list storage pools") + log.Infof("List of pools present in the cluster [%v]", poolsAvailable) + for _, v := range poolsAvailable { + poolDetails = append(poolDetails, v) + } + }) + + // Pick Random Pool for Resize + randomPool := poolDetails[rand.Intn(len(poolDetails))] + log.Infof("Random pool picked for test [%v]", randomPool.GetUuid()) + + // Get Details of iscsi ports present in the cluster + flashArrays, err := FlashArrayGetIscsiPorts() + log.FailOnError(err, "Failed to Get Details on Flasharray iscsi ports that are in Use ") + + defer enableInterfaces(flashArrays) + + stepLog := "Initiate pool expansion drive and restart PX" + Step(stepLog, func() { + log.InfoD(stepLog) + + poolToBeResized, err := GetStoragePoolByUUID(randomPool.Uuid) + log.FailOnError(err, fmt.Sprintf("Failed to get pool using UUID %s", randomPool.Uuid)) + drvSize, err := getPoolDiskSize(poolToBeResized) + log.FailOnError(err, "error getting drive size for pool [%s]", poolToBeResized.Uuid) + expectedSize := (poolToBeResized.TotalSize / units.GiB) + drvSize + + // Block Iptable Ports on each element + disableInterfaces(flashArrays) + + // Sleep for 2 min before proceeding to Pool Expansion + time.Sleep(2 * time.Minute) + + log.InfoD("Current Size of the pool %s is %d", randomPool.Uuid, poolToBeResized.TotalSize/units.GiB) + err = Inst().V.ExpandPool(randomPool.Uuid, api.SdkStoragePool_RESIZE_TYPE_AUTO, expectedSize, true) + log.Infof("Pool Expansion status [%v]", err) + if err == nil { + log.FailOnError(fmt.Errorf("Pool expansion completed even if all iscsi ports are down"), "pool expansion completed ?") + } + }) + + // Enable Back network interfaces on all the nodes + enableInterfaces(flashArrays) + + // Wait for Px to come up + // Verify Px goes down on all the nodes present in the cluster + for _, eachNodes := range node.GetStorageNodes() { + log.FailOnError(Inst().V.WaitDriverUpOnNode(eachNodes, Inst().DriverStartTimeout), + fmt.Sprintf("Driver on the Node [%v] is not Up yet", eachNodes.Name)) + } + + // Retry Pool Expand again after px comes up + stepLog = "Initiate pool expansion drive and restart PX" + Step(stepLog, func() { + log.InfoD(stepLog) + + poolToBeResized, err := GetStoragePoolByUUID(randomPool.Uuid) + log.FailOnError(err, fmt.Sprintf("Failed to get pool using UUID %s", randomPool.Uuid)) + drvSize, err := getPoolDiskSize(poolToBeResized) + log.FailOnError(err, "error getting drive size for pool [%s]", poolToBeResized.Uuid) + expectedSize := (poolToBeResized.TotalSize / units.GiB) + drvSize + + isjournal, err := IsJournalEnabled() + log.FailOnError(err, "Failed to check if Journal enabled") + + log.InfoD("Current Size of the pool %s is %d", randomPool.Uuid, poolToBeResized.TotalSize/units.GiB) + err = Inst().V.ExpandPool(randomPool.Uuid, api.SdkStoragePool_RESIZE_TYPE_AUTO, expectedSize, true) + dash.VerifyFatal(err, nil, "Pool expansion init successful?") + + err = WaitForExpansionToStart(poolToBeResized.Uuid) + log.FailOnError(err, "pool expansion not started") + + resizeErr := waitForPoolToBeResized(expectedSize, randomPool.Uuid, isjournal) + dash.VerifyFatal(resizeErr == nil, true, fmt.Sprintf("Verify pool %s expansion using resize-disk", randomPool.Uuid)) + + }) + + }) + JustAfterEach(func() { + log.Infof("In Teardown") + defer EndTorpedoTest() + AfterEachTest(contexts) + }) +}) + +// Do pool resize when all the iscsi ports are down in FA +var _ = Describe("{IscsiPortsDownDuringPoolExpandInProgress}", func() { + + /* + PTX : https://purestorage.atlassian.net/browse/PTX-23835 + bring iscsi port down when pool expansion in progress + + */ + JustBeforeEach(func() { + log.Infof("Starting Torpedo tests ") + StartTorpedoTest("IscsiPortsDownDuringPoolExpandInProgress", + "bring all iscsi port down when pool expansion in progress", + nil, 0) + }) + + itLog := "IscsiPortsDownDuringPoolExpandInProgress" + It(itLog, func() { + var contexts []*scheduler.Context + //var k8sCore = core.Instance() + stepLog = "Schedule application" + Step(stepLog, func() { + contexts = make([]*scheduler.Context, 0) + for i := 0; i < Inst().GlobalScaleFactor; i++ { + contexts = append(contexts, ScheduleApplications(fmt.Sprintf("poolresizeiscsidown-%d", i))...) + } + }) + defer appsValidateAndDestroy(contexts) + + poolDetails := []*api.StoragePool{} + stepLog = "Get List of all storage pools present in the cluster" + Step(stepLog, func() { + poolsAvailable, err := Inst().V.ListStoragePools(metav1.LabelSelector{}) + log.FailOnError(err, "Failed to list storage pools") + log.Infof("List of pools present in the cluster [%v]", poolsAvailable) + for _, v := range poolsAvailable { + poolDetails = append(poolDetails, v) + } + }) + + // Pick Random Pool for Resize + randomPool := poolDetails[rand.Intn(len(poolDetails))] + log.Infof("Random pool picked for test [%v]", randomPool.GetUuid()) + + // Get Details of iscsi ports present in the cluster + flashArrays, err := FlashArrayGetIscsiPorts() + log.FailOnError(err, "Failed to Get Details on Flasharray iscsi ports that are in Use ") + + defer enableInterfaces(flashArrays) + + // Wait for Px to come up + // Verify Px goes down on all the nodes present in the cluster + storageNodes := node.GetStorageNodes() + for _, eachNodes := range storageNodes { + log.FailOnError(Inst().V.WaitDriverUpOnNode(eachNodes, Inst().DriverStartTimeout), + fmt.Sprintf("Driver on the Node [%v] is not Up yet", eachNodes.Name)) + } + + // Retry Pool Expand again after px comes up + stepLog = "Initiate pool expansion drives" + Step(stepLog, func() { + log.InfoD(stepLog) + + poolToBeResized, err := GetStoragePoolByUUID(randomPool.Uuid) + log.FailOnError(err, fmt.Sprintf("Failed to get pool using UUID %s", randomPool.Uuid)) + drvSize, err := getPoolDiskSize(poolToBeResized) + log.FailOnError(err, "error getting drive size for pool [%s]", poolToBeResized.Uuid) + expectedSize := (poolToBeResized.TotalSize / units.GiB) + drvSize + + isjournal, err := IsJournalEnabled() + log.FailOnError(err, "Failed to check if Journal enabled") + + log.InfoD("Current Size of the pool %s is %d", randomPool.Uuid, poolToBeResized.TotalSize/units.GiB) + err = Inst().V.ExpandPool(randomPool.Uuid, api.SdkStoragePool_RESIZE_TYPE_AUTO, expectedSize, true) + dash.VerifyFatal(err, nil, "Pool expansion init successful?") + + err = WaitForExpansionToStart(poolToBeResized.Uuid) + log.FailOnError(err, "pool expansion not started") + + // Block Iptable Ports on each element + disableInterfaces(flashArrays) + + // Verify Px goes down on all the nodes present in the cluster + for _, eachNodes := range storageNodes { + log.FailOnError(Inst().V.WaitDriverDownOnNode(eachNodes), fmt.Sprintf("Driver on the Node [%v] is not down yet", eachNodes.Name)) + } + + // Enable Back network interfaces on all the nodes + enableInterfaces(flashArrays) + + // Verify Px goes down on all the nodes present in the cluster + for _, eachNodes := range node.GetStorageNodes() { + log.FailOnError(Inst().V.WaitDriverUpOnNode(eachNodes, Inst().DriverStartTimeout), + fmt.Sprintf("Driver on the Node [%v] is not Up yet", eachNodes.Name)) + } + + // Wait for Pool to be resized + resizeErr := waitForPoolToBeResized(expectedSize, randomPool.Uuid, isjournal) + log.Infof("%v", resizeErr) + dash.VerifyFatal(resizeErr == nil, true, fmt.Sprintf("Verify pool %s expansion using resize-disk", randomPool.Uuid)) + + }) + + }) + JustAfterEach(func() { + log.Infof("In Teardown") + defer EndTorpedoTest() + AfterEachTest(contexts) + }) +}) + +var _ = Describe("{IscsiPortsDownDuringNewPoolCreateInProgress}", func() { + + /* + PTX : https://purestorage.atlassian.net/browse/PTX-23835 + bring iscsi port down when pool Creation in progress + + */ + JustBeforeEach(func() { + log.Infof("Starting Torpedo tests ") + StartTorpedoTest("IscsiPortsDownDuringNewPoolCreateInProgress", + "bring all iscsi port down when New Pool Creation in progress", + nil, 0) + }) + + itLog := "IscsiPortsDownDuringNewPoolCreateInProgress" + It(itLog, func() { + var contexts []*scheduler.Context + var wg sync.WaitGroup + + //var k8sCore = core.Instance() + stepLog = "Schedule application" + Step(stepLog, func() { + contexts = make([]*scheduler.Context, 0) + for i := 0; i < Inst().GlobalScaleFactor; i++ { + contexts = append(contexts, ScheduleApplications(fmt.Sprintf("poolresizeiscsidown-%d", i))...) + } + }) + defer appsValidateAndDestroy(contexts) + + poolId, err := GetPoolIDWithIOs(contexts) + log.FailOnError(err, "Failed to Get Details of pool with Running IO") + + // Get the list of nodes present in the cluster + nodeId, err := GetNodeFromPoolUUID(poolId) + log.FailOnError(err, fmt.Sprintf("Failed to Get Details of Node with Pool UUID [%v]", poolId)) + + // Get Details of iscsi ports present in the cluster + flashArrays, err := FlashArrayGetIscsiPorts() + log.FailOnError(err, "Failed to Get Details on Flasharray iscsi ports that are in Use ") + + defer enableInterfaces(flashArrays) + + // Wait for Px to come up + // Verify Px goes down on all the nodes present in the cluster + storageNodes := node.GetStorageNodes() + for _, eachNodes := range storageNodes { + log.FailOnError(Inst().V.WaitDriverUpOnNode(eachNodes, Inst().DriverStartTimeout), + fmt.Sprintf("Driver on the Node [%v] is not Up yet", eachNodes.Name)) + } + + createNewPool := func(selectedNode *node.Node) { + defer wg.Done() + defer GinkgoRecover() + newSpec := "size=250" + err = Inst().V.AddCloudDrive(selectedNode, newSpec, -1) + log.FailOnError(err, fmt.Sprintf("Add cloud drive failed on node %s", selectedNode.Name)) + } + + stepLog = "Initiate New Pool Creation on the node" + Step(stepLog, func() { + log.InfoD(stepLog) + + // Get List of Pools present in the cluster + poolDetails := []*api.StoragePool{} + poolsAvailable, err := Inst().V.ListStoragePools(metav1.LabelSelector{}) + log.FailOnError(err, "Failed to list storage pools") + log.Infof("List of pools present in the cluster [%v]", poolsAvailable) + for _, v := range poolsAvailable { + poolDetails = append(poolDetails, v) + } + + wg.Add(1) + go createNewPool(nodeId) + + time.Sleep(20 * time.Second) + + // Block Iptable Ports on each element + disableInterfaces(flashArrays) + wg.Wait() + time.Sleep(10 * time.Minute) + + // Enable Back network interfaces on all the nodes + enableInterfaces(flashArrays) + + // Verify Px goes down on all the nodes present in the cluster + for _, eachNodes := range node.GetStorageNodes() { + log.FailOnError(Inst().V.WaitDriverUpOnNode(eachNodes, Inst().DriverStartTimeout), + fmt.Sprintf("Driver on the Node [%v] is not Up yet", eachNodes.Name)) + } + + // Get List of Pools present in the cluster + poolDetailsAfterEnable := []*api.StoragePool{} + poolsAvailableAfterEnable, err := Inst().V.ListStoragePools(metav1.LabelSelector{}) + log.FailOnError(err, "Failed to list storage pools") + log.Infof("List of pools present in the cluster [%v]", poolsAvailableAfterEnable) + for _, v := range poolsAvailableAfterEnable { + poolDetailsAfterEnable = append(poolDetailsAfterEnable, v) + } + + // Comparing if new pool is created + dash.VerifyFatal(len(poolDetailsAfterEnable) > len(poolDetails), true, "New pool created ?") + }) + + }) + JustAfterEach(func() { + log.Infof("In Teardown") + defer EndTorpedoTest() + AfterEachTest(contexts) + }) +}) + +var _ = Describe("{FBDATopologyCreateTest}", func() { + var scName, ns, pvcName, pureNfsEndpoint string + JustBeforeEach(func() { + StartTorpedoTest("FBDATopologyCreateTest", + "Try Creating FBDA pvcs using various topology options", nil, 0) + customConfigAppName := skipTestIfNoRequiredCustomAppConfigFound() + pureNfsEndpoint = Inst().CustomAppConfig[customConfigAppName].StorageClassPureNfsEndpoint + }) + itLog := "FBDATopologyCreateTest" + It(itLog, func() { + createSC := func(scName, pureNfsEndpoint string, allowedTopologies map[string][]string) { + + params := make(map[string]string) + params["repl"] = "1" + params["priority_io"] = "high" + params["io_profile"] = "auto" + params["backend"] = "pure_file" + params["pure_nfs_endpoint"] = pureNfsEndpoint + bindMode := storageApi.VolumeBindingImmediate + + storage.Instance().DeleteStorageClass(scName) + time.Sleep(1 * time.Second) + var allowVolExpansion bool = true + err := CreateFlashStorageClass(scName, "pure_file", + v1.PersistentVolumeReclaimDelete, + params, []string{}, + &allowVolExpansion, bindMode, allowedTopologies) + dash.VerifyFatal(err, nil, + "Verify storage class is created successfully with topology labels") + } + + scName, ns, pvcName = "fbda-topology-sc", "testns", "pvcwithtop" + + type testCases struct { + allowedTopologies map[string][]string + isErrorExpected bool + } + testCases1 := []testCases{ + { + allowedTopologies: map[string][]string{ + k8s.TopologyZoneK8sNodeLabel: {"zone-0"}, + k8s.TopologyRegionK8sNodeLabel: {"region-0"}, + }, + isErrorExpected: false, + }, + { + allowedTopologies: map[string][]string{ + k8s.TopologyZoneK8sNodeLabel: {"zone-0"}, + }, + isErrorExpected: true, + }, + { + allowedTopologies: nil, + isErrorExpected: true, + }, + } + + for i, t := range testCases1 { + log.Infof("Running test case [%d]\n", i) + createSC(scName, pureNfsEndpoint, t.allowedTopologies) + + ns, err := CreateNamespaces(ns, 1) + log.FailOnError(err, fmt.Sprintf("error creating namespace [%s] failed [%v]", ns, err)) + + err = CreateFlashPVCOnCluster(pvcName, scName, ns[0], "5Gi") + dash.VerifyFatal(err, nil, fmt.Sprintf("Verify PVC [%s] is created successfully", pvcName)) + + time.Sleep(10 * time.Second) + pvc, err := core.Instance().GetPersistentVolumeClaim(pvcName, ns[0]) + log.FailOnError(err, "Failed to create PVC [%v]. Error : [%v]", pvcName, err) + err = Inst().S.WaitForSinglePVCToBound(pvcName, ns[0], 3) + + if !t.isErrorExpected { + dash.VerifyFatal(err, nil, fmt.Sprintf("Verify PVC [%s] got bound successfully.", pvc.Name)) + } else { + dash.VerifyFatal(err != nil, true, fmt.Sprintf("Verify PVC [%s] fails to get bound.", pvc.Name)) + } + err = storage.Instance().DeleteStorageClass(scName) + log.FailOnError(err, fmt.Sprintf("error deleting storage class [%s]", scName)) + err = core.Instance().DeletePersistentVolumeClaim(pvcName, ns[0]) + log.FailOnError(err, fmt.Sprintf("error deleting PVC [%s] in [%s] namespace", pvcName, ns[0])) + err = core.Instance().DeleteNamespace(ns[0]) + log.FailOnError(err, fmt.Sprintf("error deleting namespace [%s]", ns[0])) + time.Sleep(30 * time.Second) + } + }) + JustAfterEach(func() { + defer func() { + + EndTorpedoTest() + }() + }) +}) + +var _ = Describe("{DeleteFADAVolumeFromBackend}", func() { + + /* + PTX : https://purestorage.atlassian.net/browse/PTX-23835 + Px Should throw proper error message when backend volumes from FA is deleted + + */ + JustBeforeEach(func() { + log.Infof("Starting Torpedo tests ") + StartTorpedoTest("DeleteFADAVolumeFromBackend", + "Delete FADA volume from Backend and verify Pod status once volume deleted", + nil, 0) + }) + + itLog := "DeleteFADAVolumeFromBackend" + It(itLog, func() { + var contexts []*scheduler.Context + + //var k8sCore = core.Instance() + stepLog = "Schedule application" + Step(stepLog, func() { + contexts = make([]*scheduler.Context, 0) + for i := 0; i < Inst().GlobalScaleFactor; i++ { + contexts = append(contexts, ScheduleApplications(fmt.Sprintf("poolresizeiscsidown-%d", i))...) + } + }) + //ValidateApplications(contexts) + defer appsValidateAndDestroy(contexts) + + allPureVolumes := []volume.Volume{} + + // Get all the volumes with IO running + for _, eachCtx := range contexts { + volumes, err := Inst().S.GetVolumes(eachCtx) + log.FailOnError(err, "Failed to get list of all volumes") + + pureVols, err := FilterAllPureVolumes(volumes) + log.FailOnError(err, "Failed to get list of pure volumes") + + allPureVolumes = append(allPureVolumes, pureVols...) + } + + // Pick a Random Volume with IO + randomIndex := rand.Intn(len(allPureVolumes)) + pickVolume := allPureVolumes[randomIndex] + log.InfoD("Volume picked for deletion is [%v] with ID [%v]", pickVolume.Name, pickVolume.ID) + + pvc, err := GetPVCObjFromVol(&pickVolume) + log.FailOnError(err, "Failed to get details about the PVC") + log.Infof("PVC Name for the volume [%v] is [%v]", pvc.Spec.VolumeName, pvc.Name) + + // Pod details after blocking IP + podsOnBlock, err := k8sCore.GetPodsUsingPVC(pvc.Name, pvc.Namespace) + log.FailOnError(err, "unable to find the node from the pod") + + // Verify that Pod Bounces and not in Running state till the time iscsi rules are not reverted + for _, eachPodAfter := range podsOnBlock { + log.Infof("Pod [%v] is in State [%v]", eachPodAfter.Name, eachPodAfter.Status.Phase) + } + + log.Infof("Deleting the PVC [%v] from FA Backend", pickVolume.ID) + faDetails, err := GetFADetailsFromVolumeName(pickVolume.ID) + log.FailOnError(err, "Failed to get list of all volumes") + + for _, eachFA := range faDetails { + log.Infof("Delete volume [%v] with Name [%v] from FA Backend [%v] returned error", pickVolume.Name, pickVolume.ID, eachFA) + deleted, err := DeleteVolumeFromFABackend(eachFA, pickVolume.ID) + log.FailOnError(err, "delete volume [%v] from FA Backend [%v] returned error", pickVolume.Name, eachFA) + dash.VerifyFatal(deleted, true, "is volume deleted from backend") + } + + // Sleep for some time after deleting the PVC + time.Sleep(15 * time.Minute) + + // Pod details after blocking IP + podsAfter, err := k8sCore.GetPodsUsingPVC(pvc.Name, pvc.Namespace) + log.FailOnError(err, "unable to find the node from the pod") + + // Verify that Pod Bounces and not in Running state till the time iscsi rules are not reverted + // TODO : Exact behaviour not known ( https://purestorage.atlassian.net/browse/PWX-37170 ) + // The function below will be updated later once the issue is fixed + for _, eachPodAfter := range podsAfter { + if eachPodAfter.Status.Phase == "Running" { + log.FailOnError(fmt.Errorf("Pod [%v] still in Running state even after backend volumes are deleted", eachPodAfter.Name), "is Pod still running ?") + } + } + }) + + JustAfterEach(func() { + log.Infof("In Teardown") + defer EndTorpedoTest() + AfterEachTest(contexts) + }) + +}) + +var _ = Describe("{ExpandMultiplePoolsWhenFADAVolumeCreationInProgress}", func() { + + /* + https://purestorage.atlassian.net/browse/PTX-23977 + Expand multiple pools in parallel , when lots of FADA Volumes are being created + + */ + JustBeforeEach(func() { + log.Infof("Starting Torpedo tests ") + StartTorpedoTest("CreateNewPoolWhenFADAVolumeCreationInProgress", + "Automate Scenario Create new pools when lots of Create / Delete FADA Volumes are in progress", + nil, 0) + }) + + itLog := "ExpandMultiplePoolsWhenFADAVolumeCreationInProgress" + It(itLog, func() { + + // Create Namespace on the cluster + nsuuid := uuid.New() + nsName := fmt.Sprintf("fada-ns-%s", nsuuid.String()) + + log.Infof("Create Namespace with Name [%v]", nsName) + namespace, err := CreateNamespaces(nsName, 1) + log.FailOnError(err, "Failed to create Namespace") + + deleteNamespaces := func() { + log.Infof("Deleting Namespaces created during test [%v]", namespace) + err := DeleteNamespaces(namespace) + log.FailOnError(err, fmt.Sprintf("Failed to Delete namespaces [%v]", namespace)) + } + defer deleteNamespaces() + + // Create Storage Class + scName := fmt.Sprintf("fada-sc-%s", nsuuid.String()) + log.Infof("Create Storage class with Name [%v]", scName) + var allowVolExpansion bool = true + err = CreateFlashStorageClass(scName, + "pure_block", + v1.PersistentVolumeReclaimDelete, + nil, nil, &allowVolExpansion, + storageApi.VolumeBindingImmediate, + nil) + log.FailOnError(err, fmt.Sprintf("Failed to create storage class [%v] ", scName)) + + var wgfada sync.WaitGroup + wgfada.Add(1) + createFADAVolumes := func(wg *sync.WaitGroup) { + defer GinkgoRecover() + wg.Done() + for _, eachNs := range namespace { + // Create 100 PVCs on the Namespace + for i := 0; i < 100; i++ { + pvcName := fmt.Sprintf("fada-pvc-%d-%s", i, nsuuid.String()) + log.FailOnError(CreateFlashPVCOnCluster(pvcName, scName, eachNs, "100"), + "Failed to create PVC on the cluster") + + log.FailOnError(Inst().S.WaitForSinglePVCToBound(pvcName, eachNs, 0), + "Errored occured while checking if PVC Bounded") + + } + } + } + + // Expand Pools on all available Nodes while Volume Creation in Progress + poolIdsToExpand := []string{} + for _, eachNodes := range node.GetStorageNodes() { + pools, err := GetPoolsDetailsOnNode(&eachNodes) + // Get random Pool + randomIndex := rand.Intn(len(pools)) + pickPool := pools[randomIndex] + if err == nil { + poolIdsToExpand = append(poolIdsToExpand, pickPool.Uuid) + } else { + log.InfoD("Errored while getting Pool IDs , ignoring for now ...") + } + } + dash.VerifyFatal(len(poolIdsToExpand) > 0, true, + fmt.Sprintf("No pools with IO present ?")) + + go createFADAVolumes(&wgfada) + + expandType := []api.SdkStoragePool_ResizeOperationType{api.SdkStoragePool_RESIZE_TYPE_ADD_DISK} + if !IsPoolAddDiskSupported() { + expandType = []api.SdkStoragePool_ResizeOperationType{api.SdkStoragePool_RESIZE_TYPE_RESIZE_DISK} + } + wg, err := ExpandMultiplePoolsInParallel(poolIdsToExpand, 100, expandType) + dash.VerifyFatal(err, nil, "Pool expansion in parallel failed") + + wg.Wait() + wgfada.Wait() + + // Get List of all PVCs created on the Namespace + pvcs, err := GetAllPVCFromNs(namespace[0], nil) + log.FailOnError(err, "Failed to get list of all PVCs on Specific Namespace") + dash.VerifyFatal(len(pvcs) == 100, true, fmt.Sprintf("did all PVC's created, length of PVCs created [%v]?", len(pvcs))) + + }) + + JustAfterEach(func() { + log.Infof("In Teardown") + defer EndTorpedoTest() + AfterEachTest(contexts) + }) + +}) + +var _ = Describe("{ExpandMultiplePoolsWhenFBDAVolumeCreationInProgress}", func() { + + /* + https://purestorage.atlassian.net/browse/PTX-24081 + Expand multiple pools in parallel , when lots of FBDA Volumes are being created + + */ + JustBeforeEach(func() { + log.Infof("Starting Torpedo tests ") + StartTorpedoTest("ExpandMultiplePoolsWhenFBDAVolumeCreationInProgress", + "Automate Scenario Create new pools when lots of Create / Delete FBDA Volumes are in progress", + nil, 0) + }) + + itLog := "ExpandMultiplePoolsWhenFBDAVolumeCreationInProgress" + It(itLog, func() { + + volDriverNamespace, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "failed to get volume driver [%s] namespace", Inst().V.String()) + pxPureSecret, err := pureutils.GetPXPureSecret(volDriverNamespace) + log.FailOnError(err, "failed to get secret [%s] in namespace [%s]", PureSecretName, volDriverNamespace) + listFB := pxPureSecret.Blades + + if len(listFB) == 0 { + log.FailOnError(fmt.Errorf("No FB Configurations is provided"), "is fb configured?") + } + + // Create Namespace on the cluster + nsuuid := uuid.New() + nsName := fmt.Sprintf("fbda-ns-%s", nsuuid.String()) + + log.Infof("Create Namespace with Name [%v]", nsName) + namespace, err := CreateNamespaces(nsName, 1) + log.FailOnError(err, "Failed to create Namespace") + + deleteNamespaces := func() { + log.Infof("Deleting Namespaces created during test [%v]", namespace) + err := DeleteNamespaces(namespace) + log.FailOnError(err, fmt.Sprintf("Failed to Delete namespaces [%v]", namespace)) + } + defer deleteNamespaces() + + // Create Storage Class + scName := fmt.Sprintf("fbda-sc-%s", nsuuid.String()) + log.Infof("Create Storage class with Name [%v]", scName) + + params := make(map[string]string) + params["pure_export_rules"] = "*(rw)" + + mountOptions := []string{"nfsvers=4.1", "tcp"} + var allowVolExpansion bool = true + err = CreateFlashStorageClass(scName, + "pure_file", + v1.PersistentVolumeReclaimDelete, + nil, mountOptions, &allowVolExpansion, + storageApi.VolumeBindingImmediate, + nil) + log.FailOnError(err, fmt.Sprintf("Failed to create storage class [%v] ", scName)) + + var wgfada sync.WaitGroup + wgfada.Add(1) + createFADAVolumes := func(wg *sync.WaitGroup) { + defer GinkgoRecover() + wg.Done() + for _, eachNs := range namespace { + // Create 100 PVCs on the Namespace + for i := 0; i < 100; i++ { + pvcName := fmt.Sprintf("fbda-pvc-%d-%s", i, nsuuid.String()) + log.FailOnError(CreateFlashPVCOnCluster(pvcName, scName, eachNs, "100"), + "Failed to create PVC on the cluster") + + log.FailOnError(Inst().S.WaitForSinglePVCToBound(pvcName, eachNs, 0), + "Errored occured while checking if PVC Bounded") + } + } + } + + // Expand Pools on all available Nodes while Volume Creation in Progress + poolIdsToExpand := []string{} + for _, eachNodes := range node.GetStorageNodes() { + pools, err := GetPoolsDetailsOnNode(&eachNodes) + // Get random Pool + randomIndex := rand.Intn(len(pools)) + pickPool := pools[randomIndex] + if err == nil { + poolIdsToExpand = append(poolIdsToExpand, pickPool.Uuid) + } else { + log.InfoD("Errored while getting Pool IDs , ignoring for now ...") + } + } + dash.VerifyFatal(len(poolIdsToExpand) > 0, true, + fmt.Sprintf("No pools with IO present ?")) + + go createFADAVolumes(&wgfada) + + expandType := []api.SdkStoragePool_ResizeOperationType{api.SdkStoragePool_RESIZE_TYPE_ADD_DISK} + if !IsPoolAddDiskSupported() { + expandType = []api.SdkStoragePool_ResizeOperationType{api.SdkStoragePool_RESIZE_TYPE_RESIZE_DISK} + } + wg, err := ExpandMultiplePoolsInParallel(poolIdsToExpand, 100, expandType) + dash.VerifyFatal(err, nil, "Pool expansion in parallel failed") + + wg.Wait() + wgfada.Wait() + + }) + + JustAfterEach(func() { + log.Infof("In Teardown") + defer EndTorpedoTest() + AfterEachTest(contexts) + }) + +}) + +var _ = Describe("{CreateNewPoolsWhenFadaFbdaVolumeCreationInProgress}", func() { + + /* + https://purestorage.atlassian.net/browse/PTX-23974 + Expand multiple pools in parallel , when lots of FADA and FBDA Volumes are being created + + */ + JustBeforeEach(func() { + log.Infof("Starting Torpedo tests ") + StartTorpedoTest("CreateNewPoolsWhenFadaFbdaVolumeCreationInProgress", + "Automate Scenario Create new pools when new Pools when lots of FADA / FBDA Volumes are getting Created", + nil, 0) + }) + + itLog := "CreateNewPoolsWhenFadaFbdaVolumeCreationInProgress" + It(itLog, func() { + + volDriverNamespace, err := Inst().V.GetVolumeDriverNamespace() + log.FailOnError(err, "failed to get volume driver [%s] namespace", Inst().V.String()) + pxPureSecret, err := pureutils.GetPXPureSecret(volDriverNamespace) + log.FailOnError(err, "failed to get secret [%s] in namespace [%s]", PureSecretName, volDriverNamespace) + listFB := pxPureSecret.Blades + + // Create Namespace on the cluster + nsuuid := uuid.New() + nsName := fmt.Sprintf("fbda-ns-%s", nsuuid.String()) + + log.Infof("Create Namespace with Name [%v]", nsName) + namespace, err := CreateNamespaces(nsName, 1) + log.FailOnError(err, "Failed to create Namespace") + + deleteNamespaces := func() { + log.Infof("Deleting Namespaces created during test [%v]", namespace) + err := DeleteNamespaces(namespace) + log.FailOnError(err, fmt.Sprintf("Failed to Delete namespaces [%v]", namespace)) + } + defer deleteNamespaces() + + var nodesToUse []node.Node + for _, each := range node.GetStorageNodes() { + sPools, err := GetPoolsDetailsOnNode(&each) + if err != nil { + fmt.Printf("[%v]", err) + } + if len(sPools) < 8 { + nodesToUse = append(nodesToUse, each) + } + } + + // Create Storage Class for FA + scNameFA := fmt.Sprintf("fada-sc-%s", nsuuid.String()) + log.Infof("Create Storage class with Name [%v]", scNameFA) + var allowVolExpansionFA bool = true + err = CreateFlashStorageClass(scNameFA, + "pure_block", + v1.PersistentVolumeReclaimDelete, + nil, nil, &allowVolExpansionFA, + storageApi.VolumeBindingImmediate, + nil) + log.FailOnError(err, fmt.Sprintf("Failed to create storage class [%v] ", scNameFA)) + + if len(listFB) > 1 { + // Create Storage Class FB + scNameFB := fmt.Sprintf("fbda-sc-%s", nsuuid.String()) + log.Infof("Create Storage class with Name [%v]", scNameFB) + + params := make(map[string]string) + params["pure_export_rules"] = "*(rw)" + + mountOptions := []string{"nfsvers=4.1", "tcp"} + var allowVolExpansion bool = true + err = CreateFlashStorageClass(scNameFB, + "pure_file", + v1.PersistentVolumeReclaimDelete, + nil, mountOptions, &allowVolExpansion, + storageApi.VolumeBindingImmediate, + nil) + log.FailOnError(err, fmt.Sprintf("Failed to create storage class [%v] ", scNameFB)) + } + + // Create Continuous FADA Volumes on the cluster + var wgfada sync.WaitGroup + wgfada.Add(1) + createFADAVolumes := func(wg *sync.WaitGroup) { + defer GinkgoRecover() + wg.Done() + for _, eachNs := range namespace { + // Create 100 PVCs on the Namespace + for i := 0; i < 100; i++ { + pvcName := fmt.Sprintf("fada-pvc-%d-%s", i, nsuuid.String()) + log.FailOnError(CreateFlashPVCOnCluster(pvcName, scNameFA, eachNs, "100"), + "Failed to create PVC on the cluster") + + log.FailOnError(Inst().S.WaitForSinglePVCToBound(pvcName, eachNs, 0), + "Errored occured while checking if PVC Bounded") + } + } + } + + var wgfbda sync.WaitGroup + createFBDAVolumes := func(wg *sync.WaitGroup) { + defer GinkgoRecover() + wg.Done() + for _, eachNs := range namespace { + // Create 100 PVCs on the Namespace + for i := 0; i < 100; i++ { + pvcName := fmt.Sprintf("fbda-pvc-%d-%s", i, nsuuid.String()) + log.FailOnError(CreateFlashPVCOnCluster(pvcName, scNameFA, eachNs, "100"), + "Failed to create PVC on the cluster") + log.FailOnError(Inst().S.WaitForSinglePVCToBound(pvcName, eachNs, 0), + "Errored occured while checking if PVC Bounded") + } + } + } + + go createFADAVolumes(&wgfada) + if len(listFB) > 1 { + // Create Continuous FADA Volumes on the cluster + wgfbda.Add(1) + go createFBDAVolumes(&wgfbda) + } + + log.Infof("Create new pools on multiple Nodes in Parallel") + log.FailOnError(CreateNewPoolsOnMultipleNodesInParallel(nodesToUse), "Failed to Create New Pools") + wgfada.Wait() + if len(listFB) > 1 { + wgfbda.Wait() + } + + }) + + JustAfterEach(func() { + log.Infof("In Teardown") + defer EndTorpedoTest() + AfterEachTest(contexts) + }) + +}) + +var _ = Describe("{CreateCloneOfTheFADAVolume}", func() { + /* + https://purestorage.atlassian.net/browse/PTX-24002 + 1.Deploy a FADA app + 2.Take the corresponding pxctl volume of the pvc and try to clone it + 3.Check the corresponding volume clone is available in FA backend + 4.Delete the FADA app + + */ + var contexts []*scheduler.Context + JustBeforeEach(func() { + StartTorpedoTest("CreateCloneOfTheFADAVolume", "Create Clone of the FADA Volume and verify the status", nil, 0) + }) + itLog := "Create Clone of the FADA Volume and verify the status and check creation of cloned volume in FA backend" + It(itLog, func() { + log.InfoD(itLog) + var volumeName string + var cloneVolumeId string + flashArrays, err := GetFADetailsUsed() + log.FailOnError(err, "Failed to get FA details used") + stepLog := "Deploy FADA app" + Step(stepLog, func() { + log.InfoD(stepLog) + taskName := "deploy-fada" + context, err := Inst().S.Schedule(taskName, scheduler.ScheduleOptions{ + AppKeys: []string{"fio-fa-davol"}, + StorageProvisioner: fmt.Sprintf("%v", portworx.PortworxCsi), + Namespace: taskName, + }) + log.FailOnError(err, "Failed to schedule application of namespace [%v]", taskName) + contexts = append(contexts, context...) + }) + ValidateApplications(contexts) + + stepLog = "Get the corresponding Px volume for the PVC and clone the volume " + Step(stepLog, func() { + log.InfoD(stepLog) + for _, context := range contexts { + appsvols, err := Inst().S.GetVolumes(context) + log.FailOnError(err, "Failed to get volumes for app %s", context.App.Key) + log.InfoD("Starting the Clone of the Volume") + for _, vol := range appsvols[:1] { + cloneVolumeId, err := Inst().V.CloneVolume(vol.ID) + log.FailOnError(err, "Failed to clone volume [%v]", vol.ID) + log.InfoD("Clone Volume ID [%v] for parent volume [%v]", cloneVolumeId, vol.ID) + } + } + log.InfoD("Get the corresponding volume name for the volId") + for _, context := range contexts { + appsvols, err := Inst().S.GetVolumes(context) + log.FailOnError(err, "Failed to get volumes for app %s", context.App.Key) + for _, vol := range appsvols { + if vol.ID == cloneVolumeId { + if vol.Name != "" { + volumeName = vol.Name + log.InfoD("Volume Name for the Clone Volume is [%v]", volumeName) + } + break + + } + } + } + }) + checkVolumeExistsInFlashArrays := func(volumeName string, flashArrays []pureutils.FlashArrayEntry) error { + cloneVolFound := false + + for _, fa := range flashArrays { + faClient, err := pureutils.PureCreateClientAndConnect(fa.MgmtEndPoint, fa.APIToken) + log.FailOnError(err, fmt.Sprintf("Failed to connect to FA using Mgmt IP [%v]", fa.MgmtEndPoint)) + volName, err := GetVolumeCompleteNameOnFA(faClient, volumeName) + log.FailOnError(err, fmt.Sprintf("Failed to get volume name for volume [%v]", volumeName)) + log.Infof("Name of the Volume is [%v]", volName) + + isExists, err := pureutils.IsFAVolumeExists(faClient, volName) + log.FailOnError(err, fmt.Sprintf("Failed to check if volume exists on FA: %v", err)) + + if isExists { + log.InfoD("Volume [%v] exists on the FA Cluster [%v]", volName, fa.MgmtEndPoint) + return nil + } + log.Infof("Volume [%v] doesn't exist on the FA Cluster [%v]", volName, fa.MgmtEndPoint) + + } + if !cloneVolFound { + return fmt.Errorf("volume %s does not exist in any of the FlashArrays", volumeName) + } + return nil + } + stepLog = "Check the corresponding volume clone is available in FA backend" + Step(stepLog, func() { + log.InfoD(stepLog) + err := checkVolumeExistsInFlashArrays(volumeName, flashArrays) + log.FailOnError(err, "Failed to check if volume exists in FA backend") + }) + + }) + JustAfterEach(func() { + defer EndTorpedoTest() + appsValidateAndDestroy(contexts) + }) +}) diff --git a/tests/basic/px_cluster_migration_test.go b/tests/basic/px_cluster_migration_test.go index 2f3fe4eb1..b667bbc9b 100644 --- a/tests/basic/px_cluster_migration_test.go +++ b/tests/basic/px_cluster_migration_test.go @@ -54,6 +54,25 @@ func waitForIKSMasterUpdate(schedVersion string) error { } +func waitForIBMNodeToDelete(nodeToKill node.Node) error { + t := func() (interface{}, bool, error) { + + currState, err := Inst().N.GetNodeState(nodeToKill) + if err != nil { + return "", true, err + } + if currState == ibm.DELETED { + return "", false, nil + } + + return "", true, fmt.Errorf("node [%s] not deleted yet, current state : %s", nodeToKill.Hostname, currState) + + } + + _, err := task.DoRetryWithTimeout(t, 10*time.Minute, 1*time.Minute) + return err +} + func upgradeIKSWorkerNodes(schedVersion, poolName string) error { storageDriverNodes := node.GetStorageDriverNodes() diff --git a/tests/basic/sharedv4_multivol_test.go b/tests/basic/sharedv4_multivol_test.go index bbd42adc1..86789a7da 100644 --- a/tests/basic/sharedv4_multivol_test.go +++ b/tests/basic/sharedv4_multivol_test.go @@ -32,40 +32,12 @@ var _ = Describe("{MultiVolumeMountsForSharedV4}", func() { stepLog := "has to create multiple sharedv4 volumes and mount to single pod" It(stepLog, func() { log.InfoD(stepLog) - // set frequency mins depending on the chaos level - var frequency int - var timeout time.Duration - - chaosLevel := Inst().ChaosLevel - if chaosLevel != 0 { - frequency = 10 * chaosLevel - timeout = (15 * time.Duration(chaosLevel) * time.Minute) / 10 - } else { - frequency = 10 - timeout = 1 * time.Minute - } - log.InfoD("setting number of volumes=%v and app readiness timeout=%v for chaos level %v", - frequency, timeout, chaosLevel) - - customAppConfig := scheduler.AppConfig{ - ClaimsCount: frequency, - } - - provider := Inst().V.String() - contexts = []*scheduler.Context{} - // there should be only 1 app - Expect(len(Inst().AppList)).To(Equal(1)) - appName := Inst().AppList[0] - - Inst().CustomAppConfig[appName] = customAppConfig - err := Inst().S.RescanSpecs(Inst().SpecDir, provider) - log.FailOnError(err, "Failed to rescan specs from %s for storage provider %s", Inst().SpecDir, provider) stepLog = "schedule application with multiple sharedv4 volumes attached" + timeout := 5 * time.Minute Step(stepLog, func() { log.InfoD(stepLog) - log.InfoD("Number of Volumes to be mounted: %v", frequency) taskName := "sharedv4-multivol" @@ -77,6 +49,10 @@ var _ = Describe("{MultiVolumeMountsForSharedV4}", func() { } for _, ctx := range contexts { + pvcs, err := k8sCore.GetPersistentVolumeClaims(ctx.App.NameSpace, nil) + log.FailOnError(err, "Failed to get PVCs for app %s", ctx.App.Key) + timeout = (15 * time.Duration(len(pvcs.Items)) * time.Minute) / 10 + log.InfoD("Number of Volumes to be mounted: %v", len(pvcs.Items)) ctx.ReadinessTimeout = timeout ctx.SkipVolumeValidation = false ValidateContext(ctx) diff --git a/tests/basic/sharedv4_svc_test.go b/tests/basic/sharedv4_svc_test.go index 9dcbbab37..003915b73 100644 --- a/tests/basic/sharedv4_svc_test.go +++ b/tests/basic/sharedv4_svc_test.go @@ -2,7 +2,6 @@ package tests import ( "fmt" - "gopkg.in/yaml.v2" "os" "path" "path/filepath" @@ -11,6 +10,8 @@ import ( "sync" "time" + "gopkg.in/yaml.v2" + "github.com/portworx/torpedo/pkg/log" "github.com/portworx/torpedo/pkg/testrailuttils" @@ -1830,7 +1831,7 @@ func waitForNumPodsToEqual(ctx *scheduler.Context, numPods int) { func getSv4TestAppVol(ctx *scheduler.Context) (*volume.Volume, *api.Volume, *node.Node) { vols, err := Inst().S.GetVolumes(ctx) Expect(err).NotTo(HaveOccurred()) - Expect(len(vols)).To(Equal(1)) + Expect(len(vols)).To(Not(BeZero())) vol := vols[0] apiVol, err := Inst().V.InspectVolume(vol.ID) diff --git a/tests/basic/storage_pool_test.go b/tests/basic/storage_pool_test.go index 6d6334a83..bbd2f1a97 100644 --- a/tests/basic/storage_pool_test.go +++ b/tests/basic/storage_pool_test.go @@ -8,6 +8,10 @@ import ( "regexp" "slices" "sort" + "strconv" + "strings" + "sync" + "time" "github.com/Masterminds/semver/v3" "github.com/portworx/torpedo/drivers/node/ssh" @@ -20,18 +24,15 @@ import ( "github.com/portworx/torpedo/pkg/log" - "strconv" - "strings" - "sync" - "time" - "github.com/libopenstorage/openstorage/api" . "github.com/onsi/ginkgo/v2" + "github.com/portworx/sched-ops/k8s/core" "github.com/portworx/sched-ops/task" "github.com/portworx/torpedo/drivers/scheduler" "github.com/portworx/torpedo/pkg/testrailuttils" "github.com/portworx/torpedo/pkg/units" . "github.com/portworx/torpedo/tests" + corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -85,6 +86,9 @@ var _ = Describe("{StoragePoolExpandDiskAdd}", func() { stepLog := "should get the existing pool and expand it by adding a disk" It(stepLog, func() { log.InfoD(stepLog) + if !IsPoolAddDiskSupported() { + Skip("Pool Add Disk is not supported on DMthin Cluster") + } contexts = make([]*scheduler.Context, 0) for i := 0; i < Inst().GlobalScaleFactor; i++ { @@ -125,7 +129,7 @@ var _ = Describe("{StoragePoolExpandDiskAdd}", func() { stepLog = "Calculate expected pool size and trigger pool resize" Step(stepLog, func() { log.InfoD(stepLog) - expectedSize = poolToBeResized.TotalSize * 2 / units.GiB + expectedSize = (poolToBeResized.TotalSize / units.GiB) + 100 expectedSize = roundUpValue(expectedSize) isjournal, err := IsJournalEnabled() log.FailOnError(err, "Failed to check is Journal enabled") @@ -140,33 +144,28 @@ var _ = Describe("{StoragePoolExpandDiskAdd}", func() { enterPoolMaintenanceAddDisk(poolIDToResize) defer exitPoolMaintenance(poolIDToResize) - err = Inst().V.ExpandPool(poolIDToResize, api.SdkStoragePool_RESIZE_TYPE_ADD_DISK, expectedSize, false) - if err != nil { - isPoolAddDiskSupported := IsPoolAddDiskSupported() - if !isPoolAddDiskSupported { - IsExpectederr := strings.Contains(err.Error(), "add-drive type expansion is not supported with px-storev2. Use resize-drive expansion type") - dash.VerifyFatal(IsExpectederr, true, err.Error()) - log.InfoD("Drive add not supported :%s, hence skipping the test", err.Error()) - Skip("drive add to existing pool not supported for px-storev2 or px-cache pools") - - } + if IsPoolAddDiskSupported() { + err = Inst().V.ExpandPool(poolIDToResize, api.SdkStoragePool_RESIZE_TYPE_ADD_DISK, expectedSize, false) + log.FailOnError(err, "is Pool Expand using Add disk successful ?") + resizeErr := waitForPoolToBeResized(expectedSize, poolIDToResize, isjournal) + dash.VerifyFatal(resizeErr, nil, fmt.Sprintf("Expected new size to be '%d' or '%d' if pool has journal", expectedSize, expectedSizeWithJournal)) } - dash.VerifyFatal(err, nil, "Pool expansion init successful?") - resizeErr := waitForPoolToBeResized(expectedSize, poolIDToResize, isjournal) - dash.VerifyFatal(resizeErr, nil, fmt.Sprintf("Expected new size to be '%d' or '%d' if pool has journal", expectedSize, expectedSizeWithJournal)) }) Step("Ensure that new pool has been expanded to the expected size", func() { - ValidateApplications(contexts) - resizedPool, err := GetStoragePoolByUUID(poolIDToResize) - log.FailOnError(err, fmt.Sprintf("Failed to get pool using UUID %s", poolIDToResize)) - newPoolSize := resizedPool.TotalSize / units.GiB - isExpansionSuccess := false - if newPoolSize >= expectedSizeWithJournal { - isExpansionSuccess = true + if IsPoolAddDiskSupported() { + ValidateApplications(contexts) + resizedPool, err := GetStoragePoolByUUID(poolIDToResize) + log.FailOnError(err, fmt.Sprintf("Failed to get pool using UUID %s", poolIDToResize)) + newPoolSize := resizedPool.TotalSize / units.GiB + isExpansionSuccess := false + if newPoolSize >= expectedSizeWithJournal { + isExpansionSuccess = true + } + dash.VerifyFatal(isExpansionSuccess, true, + fmt.Sprintf("expected new pool size to be %v or %v if pool has journal, got %v", expectedSize, expectedSizeWithJournal, newPoolSize)) + appsValidateAndDestroy(contexts) } - dash.VerifyFatal(isExpansionSuccess, true, - fmt.Sprintf("expected new pool size to be %v or %v if pool has journal, got %v", expectedSize, expectedSizeWithJournal, newPoolSize)) - appsValidateAndDestroy(contexts) + }) }) JustAfterEach(func() { @@ -1197,7 +1196,7 @@ var _ = Describe("{AddDriveWithPXRestart}", func() { } finalPoolCount = len(pools) dash.VerifyFatal(newTotalPoolSize, expectedTotalPoolSize, fmt.Sprintf("Validate total pool size after add cloud drive on node %s", stNode.Name)) - dash.VerifyFatal(initialPoolCount+1 == finalPoolCount, true, fmt.Sprintf("Total pool count after cloud drive add with PX restart Expected:[%d] Got:[%d]", initialPoolCount, finalPoolCount)) + dash.VerifyFatal(initialPoolCount+1 == finalPoolCount, true, fmt.Sprintf("Total pool count after cloud drive add with PX restart Expected:[%d] Got:[%d]", initialPoolCount+1, finalPoolCount)) }) }) @@ -2081,7 +2080,7 @@ var _ = Describe("{AddWithPXRestart}", func() { It(stepLog, func() { isPoolAddDiskSupported := IsPoolAddDiskSupported() if !isPoolAddDiskSupported { - dash.VerifyFatal(false, true, "Add disk operation is not supported for DMThin Setup") + Skip("Add disk operation is not supported for DMThin Setup") } log.InfoD(stepLog) contexts = make([]*scheduler.Context, 0) @@ -3681,7 +3680,7 @@ var _ = Describe("{PoolMaintenanceModeAddDisk}", func() { It(stepLog, func() { isPoolAddDiskSupported := IsPoolAddDiskSupported() if !isPoolAddDiskSupported { - dash.VerifyFatal(false, true, "Add disk operation is not supported for DMThin Setup") + Skip("Pool Add disk is not supported on DMThin Cluster") } log.InfoD(stepLog) @@ -3759,28 +3758,18 @@ var _ = Describe("{PoolMaintenanceModeAddDisk}", func() { isjournal, err := IsJournalEnabled() log.FailOnError(err, "Failed to check if Journal enabled") - log.InfoD("Current Size of the pool %s is %d", poolToBeResized.Uuid, poolToBeResized.TotalSize/units.GiB) - err = Inst().V.ExpandPool(poolToBeResized.Uuid, api.SdkStoragePool_RESIZE_TYPE_ADD_DISK, expectedSize, true) - if err != nil { - isPoolAddDiskSupported := IsPoolAddDiskSupported() - if !isPoolAddDiskSupported { - IsExpectederr := strings.Contains(err.Error(), "add-drive type expansion is not supported with px-storev2. Use resize-drive expansion type") - dash.VerifyFatal(IsExpectederr, true, err.Error()) - log.InfoD("Drive add not supported :%s, hence skipping the test", err.Error()) - Skip("drive add to existing pool not supported for px-storev2 or px-cache pools") - - } - + if IsPoolAddDiskSupported() { + log.InfoD("Current Size of the pool %s is %d", poolToBeResized.Uuid, poolToBeResized.TotalSize/units.GiB) + err = Inst().V.ExpandPool(poolToBeResized.Uuid, api.SdkStoragePool_RESIZE_TYPE_ADD_DISK, expectedSize, true) + log.FailOnError(err, "Pool Expand using Add Disk Failed ") + resizeErr := waitForPoolToBeResized(expectedSize, poolToBeResized.Uuid, isjournal) + dash.VerifyFatal(resizeErr, nil, fmt.Sprintf("Verify pool %s on node %s expansion using add-disk", poolToBeResized.Uuid, stNode.Name)) } - dash.VerifyFatal(err, nil, "Pool expansion init successful?") - resizeErr := waitForPoolToBeResized(expectedSize, poolToBeResized.Uuid, isjournal) - dash.VerifyFatal(resizeErr, nil, fmt.Sprintf("Verify pool %s on node %s expansion using add-disk", poolToBeResized.Uuid, stNode.Name)) - + status, err = Inst().V.GetNodeStatus(*stNode) + log.FailOnError(err, "err getting node [%s] status", stNode.Name) + log.Infof(fmt.Sprintf("Node %s status %s after exit", stNode.Name, status.String())) }) - status, err = Inst().V.GetNodeStatus(*stNode) - log.FailOnError(err, "err getting node [%s] status", stNode.Name) - log.Infof(fmt.Sprintf("Node %s status %s after exit", stNode.Name, status.String())) }) JustAfterEach(func() { @@ -4338,7 +4327,7 @@ var _ = Describe("{PXRestartAddDisk}", func() { It(stepLog, func() { isPoolAddDiskSupported := IsPoolAddDiskSupported() if !isPoolAddDiskSupported { - dash.VerifyFatal(false, true, "Add disk operation is not supported for DMThin Setup") + Skip("Add disk operation is not supported for DMThin Setup") } log.InfoD(stepLog) contexts = make([]*scheduler.Context, 0) @@ -5054,7 +5043,7 @@ var _ = Describe("{ResizeKvdbNoQuorum}", func() { ValidateApplications(contexts) defer appsValidateAndDestroy(contexts) - stoageDriverNodes := node.GetStorageDriverNodes() + stoageDriverNodes := node.GetStorageNodes() nonKvdbNodes := make([]node.Node, 0) kvdbNodes := make([]node.Node, 0) @@ -5076,6 +5065,10 @@ var _ = Describe("{ResizeKvdbNoQuorum}", func() { } } + if len(nonKvdbNodes) == 0 { + log.FailOnError(fmt.Errorf("No non kvdb nodes found"), "non kvdb nodes doesnt not exist in the cluster") + } + selPool := nonKvdbNodes[0].Pools[0] poolToBeResized, err := GetStoragePoolByUUID(selPool.Uuid) log.FailOnError(err, fmt.Sprintf("Failed to get pool using UUID %s", selPool.Uuid)) @@ -6338,7 +6331,7 @@ var _ = Describe("{ChangedIOPriorityPersistPoolExpand}", func() { contexts = make([]*scheduler.Context, 0) for i := 0; i < Inst().GlobalScaleFactor; i++ { - contexts = append(contexts, ScheduleApplications(fmt.Sprintf("changedioprioritypoolexpand-%d", i))...) + contexts = append(contexts, ScheduleApplications(fmt.Sprintf("chgpriopoolex-%d", i))...) } ValidateApplications(contexts) defer appsValidateAndDestroy(contexts) @@ -7126,6 +7119,10 @@ var _ = Describe("{ExpandUsingAddDriveAndPXRestart}", func() { It(stepLog, func() { log.InfoD(stepLog) + if !IsPoolAddDiskSupported() { + Skip("Add disk is not supported in DMThin") + } + contexts = make([]*scheduler.Context, 0) for i := 0; i < Inst().GlobalScaleFactor; i++ { contexts = append(contexts, ScheduleApplications(fmt.Sprintf("pladddrvrestrt-%d", i))...) @@ -7192,6 +7189,10 @@ var _ = Describe("{ExpandUsingAddDriveAndNodeRestart}", func() { It(stepLog, func() { log.InfoD(stepLog) + if !IsPoolAddDiskSupported() { + Skip("Add disk is not supported on DMThin Cluster") + } + contexts = make([]*scheduler.Context, 0) for i := 0; i < Inst().GlobalScaleFactor; i++ { contexts = append(contexts, ScheduleApplications(fmt.Sprintf("expanddiskadddrive-%d", i))...) @@ -7274,7 +7275,7 @@ var _ = Describe("{ResizeDiskAddDiskSamePool}", func() { It(stepLog, func() { isPoolAddDiskSupported := IsPoolAddDiskSupported() if !isPoolAddDiskSupported { - dash.VerifyFatal(false, true, "Add disk operation is not supported for DMThin Setup") + Skip("Add disk operation is not supported for DMThin Setup") } log.InfoD(stepLog) contexts = make([]*scheduler.Context, 0) @@ -7327,24 +7328,26 @@ var _ = Describe("{ResizeDiskAddDiskSamePool}", func() { dash.VerifyFatal(resizeErr, nil, fmt.Sprintf("Verify pool [%s] on expansion using auto option", poolToBeResized.Uuid)) - expectedSize += drvSize + if IsPoolAddDiskSupported() { + expectedSize += drvSize - // Expand Pool using Add Drive and verify if the Pool is expanded successfully - err = Inst().V.ExpandPool(poolToBeResized.Uuid, - api.SdkStoragePool_RESIZE_TYPE_ADD_DISK, - expectedSize, true) - dash.VerifyFatal(err, - nil, - "Pool expansion init successful?") + // Expand Pool using Add Drive and verify if the Pool is expanded successfully + err = Inst().V.ExpandPool(poolToBeResized.Uuid, + api.SdkStoragePool_RESIZE_TYPE_ADD_DISK, + expectedSize, true) + dash.VerifyFatal(err, + nil, + "Pool expansion init successful?") - resizeErr = waitForPoolToBeResized(expectedSize, poolUUID, isjournal) - dash.VerifyFatal(resizeErr, nil, - fmt.Sprintf("Verify pool [%s] on expansion using auto option", poolUUID)) + resizeErr = waitForPoolToBeResized(expectedSize, poolUUID, isjournal) + dash.VerifyFatal(resizeErr, nil, + fmt.Sprintf("Verify pool [%s] on expansion using auto option", poolUUID)) - allPoolsOnNodeAfterResize, err := GetPoolsDetailsOnNode(nodeDetail) - log.FailOnError(err, fmt.Sprintf("Failed to get all Pools present in Node [%s]", nodeDetail.Name)) - dash.VerifyFatal(len(allPoolsOnNode) <= len(allPoolsOnNodeAfterResize), true, - "New pool is created on trying to expand pool using add disk option") + allPoolsOnNodeAfterResize, err := GetPoolsDetailsOnNode(nodeDetail) + log.FailOnError(err, fmt.Sprintf("Failed to get all Pools present in Node [%s]", nodeDetail.Name)) + dash.VerifyFatal(len(allPoolsOnNode) <= len(allPoolsOnNodeAfterResize), true, + "New pool is created on trying to expand pool using add disk option") + } }) JustAfterEach(func() { @@ -7648,6 +7651,20 @@ var _ = Describe("{AllPoolsDeleteAndCreateAndDelete}", func() { }) func deletePoolAndValidate(stNode node.Node, poolIDToDelete string) { + isPureBackend := false + validateMultipath := []string{} + if IsPureCluster() { + isPureBackend = true + } + + if isPureBackend { + // if pure backend , we get the list of all multipath devices used while creating the pool + // later check if those multipath devices are still exist post deleting the pool + multipathDevBeforeDelete, err := GetMultipathDeviceOnPool(&stNode) + log.FailOnError(err, fmt.Sprintf("Failed to get list of Multipath devices on Node [%v]", stNode.Name)) + validateMultipath = multipathDevBeforeDelete[poolIDToDelete] + } + poolsBfr, err := Inst().V.ListStoragePools(metav1.LabelSelector{}) log.FailOnError(err, "Failed to list storage pools") @@ -7671,6 +7688,16 @@ func deletePoolAndValidate(stNode node.Node, poolIDToDelete string) { _, ok := poolsMap[poolIDToDelete] dash.VerifyFatal(ok, false, "verify drive is deleted from the node") + if isPureBackend { + // Get list of all Multipath devices after deleting the pool + allMultipathDev, err := GetMultipathDeviceIDsOnNode(&stNode) + log.FailOnError(err, fmt.Sprintf("failed to get multipath devices on Node [%v]", stNode.Name)) + for _, eachMultipath := range allMultipathDev { + for _, validateEach := range validateMultipath { + dash.VerifyFatal(validateEach == eachMultipath, false, fmt.Sprintf("Multipath device [%v] did not delete on Deleting Pool", validateEach)) + } + } + } }) } @@ -8720,7 +8747,7 @@ var _ = Describe("{DriveAddAsJournal}", func() { } log.InfoD("adding journal failed as expected. verifying the error") re := regexp.MustCompile(".*journal exists*") - re1 := regexp.MustCompile(".*Journal device.*is alredy configured*") + re1 := regexp.MustCompile(".*Journal device.*is already configured*") dash.VerifyFatal(re.MatchString(fmt.Sprintf("%v", err)) || re1.MatchString(fmt.Sprintf("%v", err)), true, fmt.Sprintf("Errored while adding Pool as expected on Node [%v]", nodeDetail.Name)) @@ -9320,6 +9347,9 @@ var _ = Describe("{ExpandMultiplePoolWithIOsInClusterAtOnce}", func() { fmt.Sprintf("No pools with IO present ?")) expandType := []api.SdkStoragePool_ResizeOperationType{api.SdkStoragePool_RESIZE_TYPE_ADD_DISK} + if !IsPoolAddDiskSupported() { + expandType = []api.SdkStoragePool_ResizeOperationType{api.SdkStoragePool_RESIZE_TYPE_RESIZE_DISK} + } wg, err := ExpandMultiplePoolsInParallel(poolIdsToExpand, 100, expandType) dash.VerifyFatal(err, nil, "Pool expansion in parallel failed") @@ -9835,7 +9865,13 @@ func scheduleApps() []*scheduler.Context { func pickPoolToResize(excludeNodeIDs ...string) string { poolWithIO, err := GetPoolIDWithIOs(contexts) - if poolWithIO == "" || err != nil { + + if err != nil { + log.Warnf("Error identifying pool with IOs, Errot: %v", err) + } + if poolWithIO != "" { + return poolWithIO + } else { log.Warnf("No pool with IO found, picking a random pool in use to resize") } poolIDsInUseByTestingApp, err := GetPoolsInUse() @@ -9890,8 +9926,15 @@ func triggerPoolExpansion(poolIDToResize string, targetSizeGiB uint64, expandTyp stepLog := "Trigger pool expansion" Step(stepLog, func() { log.InfoD(stepLog) + isDMthin, _ := IsDMthin() err := Inst().V.ExpandPool(poolIDToResize, expandType, targetSizeGiB, true) - dash.VerifyFatal(err, nil, "pool expansion requested successfully") + if isDMthin && expandType == api.SdkStoragePool_RESIZE_TYPE_ADD_DISK { + dash.VerifyFatal(err != nil, true, + "Pool expansion request of add-disk type should be rejected with dmthin") + dash.VerifyFatal(strings.Contains(err.Error(), "add-drive type expansion is not supported with px-storev2"), true, fmt.Sprintf("check error message: %v", err.Error())) + } else { + dash.VerifyFatal(err, nil, "pool expansion requested successfully") + } }) } func waitForOngoingPoolExpansionToComplete(poolIDToResize string) error { @@ -12080,3 +12123,387 @@ var _ = Describe("{PoolDeleteMultiplePools}", func() { }) }) + +var _ = Describe("{VolResizeAllVolumes}", func() { + + /* + PTX-23576 + Trigger vol resize on all volumes at once + */ + + JustBeforeEach(func() { + StartTorpedoTest("VolResizeAllVolumes", "Trigger vol resize on all volumes at once", nil, 0) + }) + + itLog := "VolResizeAllVolumes" + It(itLog, func() { + var contexts []*scheduler.Context + var k8sCore = core.Instance() + + type VolumeDetails struct { + vol *volume.Volume + pvc *corev1.PersistentVolumeClaim + ctx *scheduler.Context + } + volSizeMap := []*VolumeDetails{} + + stepLog = "Enable Trashcan on the cluster" + Step(stepLog, + func() { + log.InfoD(stepLog) + err := EnableTrashcanOnCluster("90") + log.FailOnError(err, "failed to enable trashcan on the cluster") + }) + + stepLog = "Schedule Applications on the cluster and get details of Volumes" + Step(stepLog, func() { + for i := 0; i < Inst().GlobalScaleFactor; i++ { + contexts = append(contexts, ScheduleApplications(fmt.Sprintf("volresizeallvol-%d", i))...) + } + }) + appsDeleted := false + deleteApps := func() { + if !appsDeleted { + appsValidateAndDestroy(contexts) + } + } + + ValidateApplications(contexts) + defer deleteApps() + + stepLog = "Verify parallel resize of all the volumes " + Step(stepLog, func() { + for _, eachCtx := range contexts { + vols, err := Inst().S.GetVolumes(eachCtx) + log.FailOnError(err, "Failed to get list of Volumes in the cluster") + for _, eachVol := range vols { + volDetails := VolumeDetails{} + + // Get details on the Volume + volDetails.vol = eachVol + + // Get PVC object from the Volume + pvc, err := GetPVCObjFromVol(eachVol) + log.FailOnError(err, "Failed to get PVC Details from Volume [%v]", eachVol.Name) + + // Update volSizeMap to perform Parallel Resize of all the Volumes present in the cluster + volDetails.pvc = pvc + volSizeMap = append(volSizeMap, &volDetails) + } + } + }) + + for _, eachVol := range volSizeMap { + // Pod details after blocking IP + podsAfterblk, err := k8sCore.GetPodsUsingPVC(eachVol.vol.Name, eachVol.vol.Namespace) + log.FailOnError(err, "unable to find the node from the pod") + for _, eachPodAfter := range podsAfterblk { + log.Infof(fmt.Sprintf("Current state of the Pod [%v] is [%v]", eachPodAfter.Name, eachPodAfter.Status.Phase)) + if eachPodAfter.Status.Phase != "Running" { + log.Infof(fmt.Sprintf("State of the Pod before Resize volume [%v] is [%v]", eachPodAfter.Name, eachPodAfter.Status.Phase)) + log.FailOnError(fmt.Errorf("Pod [%v] Consuming Volume [%v] is not in Running State ", + eachPodAfter.Name, eachVol.vol.Name), "Pod not in Running State") + } + } + } + + // Volume resize routine resizes specific Volume + log.InfoD("start Volume resize on each Volume present in the cluster") + ResizePvcInParallel := func(newVolumeIDs *VolumeDetails) { + defer GinkgoRecover() + volCurSize := newVolumeIDs.vol.Size / units.GiB + volNewSize := volCurSize + 10 + log.Infof("Resizing Volume [%v] from size [%v]/[%v] to [%v]/[%v]", + newVolumeIDs.vol.Name, newVolumeIDs.vol.Size, newVolumeIDs.vol.Size/units.GB, + volNewSize*units.GB, volNewSize) + + log.Infof("Resizing PVC [%v] to [%v]", newVolumeIDs.pvc.Name, volNewSize) + vol, err := Inst().S.ResizePVC(newVolumeIDs.ctx, newVolumeIDs.pvc, 10) + log.FailOnError(err, "Failed to resize PVC [%v]", vol.Name) + + time.Sleep(30 * time.Second) + volReSize, err := Inst().V.InspectVolume(vol.ID) + log.FailOnError(err, "inspect returned error ?") + + log.Infof("Verify volume size after resizing the volume [%v]", vol.Name) + dash.VerifyFatal(volReSize.Spec.Size > newVolumeIDs.vol.Size, true, + fmt.Sprintf("Resize of Volume didnot happen? current size is [%v]", volReSize.Spec.Size/units.GiB)) + + log.Infof(fmt.Sprintf("Volume [%v] resized from [%v] to [%v]", + newVolumeIDs.vol.Name, newVolumeIDs.vol.Size, volReSize.Spec.Size)) + dash.VerifyFatal((volReSize.Spec.Size/units.GiB) == volNewSize, true, + fmt.Sprintf("Resize of Volume didnot happen? current size is [%v]!", volReSize.Spec.Size/units.GiB)) + + } + + // Resize Volumes in parallel + ResizeVolumes := func(volId string) { + defer GinkgoRecover() + sizeBeforeResize, err := Inst().V.InspectVolume(volId) + log.FailOnError(err, "inspect returned error ?") + toResize := sizeBeforeResize.Spec.Size + (10 * units.GiB) + log.Infof("Resizing Volume [%v] from [%v] to [%v]", + volId, sizeBeforeResize.Spec.Size, toResize/units.GiB) + + // Resize Volume and verify if volume resized + log.FailOnError(Inst().V.ResizeVolume(volId, toResize), "Failed to resize volume") + + //Size after resize + sizeAfterResize, err := Inst().V.InspectVolume(volId) + log.FailOnError(err, "inspect returned error ?") + + dash.VerifyFatal(sizeBeforeResize.Spec.Size < sizeAfterResize.Spec.Size, true, + "Volume resize did not happen") + + log.Infof("Volume [%v] resized from [%v] to [%v] and expected is [%v]", + volId, sizeBeforeResize.Spec.Size, toResize, sizeAfterResize.Spec.Size) + + dash.VerifyFatal((toResize/units.GiB) == (sizeAfterResize.Spec.Size/units.GiB), true, + fmt.Sprintf("Resize of Volume didnot happen? current size is [%v]!", sizeAfterResize.Spec.Size)) + + } + + for _, eachVol := range volSizeMap { + Step(fmt.Sprintf("Do Resize on Volume [%v]", eachVol.vol.Name), func() { + go ResizePvcInParallel(eachVol) + }) + } + + // wait for some time before checking all the applications are Up and Running + time.Sleep(60 * time.Second) + + for _, eachVol := range volSizeMap { + // Pod details after blocking IP + podsAfterblk, err := k8sCore.GetPodsUsingPVC(eachVol.vol.Name, eachVol.vol.Namespace) + log.FailOnError(err, fmt.Sprintf("failed to get details of Pods assigned to volume [%v]", eachVol.vol.Name)) + for _, eachPodAfter := range podsAfterblk { + log.Infof(fmt.Sprintf("State of the pod after resize [%v] is [%v]", + eachPodAfter.Name, eachPodAfter.Status.Phase)) + if eachPodAfter.Status.Phase != "Running" { + log.FailOnError(fmt.Errorf("Pod [%v] Consuming Volume [%v] is not in Running State ", + eachPodAfter.Name, eachVol.vol.Name), "Pod not in Running State") + } + } + } + + // Destroy all apps + DestroyApps(contexts, nil) + appsDeleted = true + + // Restore all the Volumes from trashcan + var trashcanVols []string + stepLog = "validate volumes in trashcan" + Step(stepLog, func() { + // wait for few seconds for pvc to get deleted and volume to get detached + time.Sleep(60 * time.Second) + node := node.GetStorageDriverNodes()[0] + log.InfoD(stepLog) + trashcanVols, err = Inst().V.GetTrashCanVolumeIds(node) + log.FailOnError(err, "error While getting trashcan volumes") + log.Infof("trashcan len: %v", trashcanVols) + dash.VerifyFatal(len(trashcanVols) > 0, true, "validate volumes exist in trashcan") + + for _, volsInTrash := range trashcanVols { + if volsInTrash != "" { + volReSize, err := Inst().V.InspectVolume(volsInTrash) + log.FailOnError(err, "inspect returned error for volume [%v]?", volsInTrash) + if !volReSize.InTrashcan { + log.FailOnError(fmt.Errorf("Volume [%v] is still not in trashcan", volsInTrash), + "is volume in trashcan after delete ?") + } + } + } + }) + + log.Infof("list of volumes in trashcan [%v]", trashcanVols) + + // Get List of volumes present in the cluster before Restoring volumes + allVols, err := Inst().V.ListAllVolumes() + log.FailOnError(err, "failed to get list of volumes") + log.Infof("List of all Volumes present in the cluster [%v]", allVols) + + stepLog = "validate restore volumes from trashcan" + restoredVol := []string{} + newUUID, err := uuid.NewRandom() + log.FailOnError(err, "failed to get random UUID") + + Step(stepLog, func() { + // Restore Volumes from trashcan + for _, eachVol := range trashcanVols { + if eachVol != "" { + err = trashcanRestore(eachVol, fmt.Sprintf("restore_%v_%v", newUUID, eachVol)) + log.FailOnError(err, fmt.Sprintf("Failed restoring volume [%v] from trashcan", eachVol)) + restoredVol = append(restoredVol, fmt.Sprintf("restore_%v_%v", newUUID, eachVol)) + } + } + }) + + // Get List of volumes present in the cluster before Restoring volumes + allVolsAfterRestore, err := Inst().V.ListAllVolumes() + log.FailOnError(err, "failed to get list of volumes") + log.Infof("List of all Volumes present in the cluster after restore [%v]", allVolsAfterRestore) + + for _, eachVolume := range restoredVol { + volReSize, err := Inst().V.InspectVolume(eachVolume) + log.FailOnError(err, "inspect returned error for volume [%v]?", volReSize.Id) + if strings.Contains(eachVolume, fmt.Sprintf("restore_%v", newUUID)) { + log.Infof("Resizing Volume [%v]", eachVolume) + // Resize Volume in parallel + go ResizeVolumes(eachVolume) + } + } + + time.Sleep(60 * time.Second) + // Sleep for some time and try deleting Volumes which were restore from trashcan + for _, eachVolume := range restoredVol { + if strings.Contains(eachVolume, fmt.Sprintf("restore_%v", newUUID)) { + log.Infof("Deleting the volume [%v]", eachVolume) + // Delete Volumes which are restored / Resized + log.FailOnError(Inst().V.DeleteVolume(eachVolume), "failed to delete volumes") + } + } + stepLog = "Disable trashcan on the cluster" + Step(stepLog, + func() { + log.InfoD(stepLog) + err := EnableTrashcanOnCluster("0") + log.FailOnError(err, "failed to disable trashcan on the cluster") + }) + + }) + + JustAfterEach(func() { + defer EndTorpedoTest() + AfterEachTest(contexts) + }) + +}) + +var _ = Describe("{VolHAIncreaseAllVolumes}", func() { + JustBeforeEach(func() { + StartTorpedoTest("VolHAIncreaseAllVolumes", "Trigger vol HA Increase on all volumes at once", nil, 0) + }) + + itLog := "VolHAIncreaseAllVolumes" + It(itLog, func() { + var contexts []*scheduler.Context + var wg sync.WaitGroup + + stepLog = "Schedule Applications on the cluster and get details of Volumes" + Step(stepLog, func() { + for i := 0; i < Inst().GlobalScaleFactor; i++ { + contexts = append(contexts, ScheduleApplications(fmt.Sprintf("volresizeallvol-%d", i))...) + } + }) + ValidateApplications(contexts) + defer appsValidateAndDestroy(contexts) + + type volMap struct { + ReplSet int64 + volObj *volume.Volume + } + volHAMap := []*volMap{} + + revertReplica := func() { + for _, eachvol := range volHAMap { + getReplicaSets, err := Inst().V.GetReplicaSets(eachvol.volObj) + log.FailOnError(err, "Failed to get replication factor on the volume") + if len(getReplicaSets[0].Nodes) != int(eachvol.ReplSet) { + log.Infof("Reverting Replication factor on Volume [%v] with ID [%v] to [%v]", + eachvol.volObj.Name, eachvol.volObj.ID, eachvol.ReplSet) + err := Inst().V.SetReplicationFactor(eachvol.volObj, eachvol.ReplSet, + nil, nil, true) + log.FailOnError(err, "failed to set replicaiton value of Volume [%v]", eachvol.volObj.Name) + } + } + } + + setReplOnVolumes := func(vol *volume.Volume, curReplSet int64, wait bool, wg *sync.WaitGroup) { + defer wg.Done() + defer GinkgoRecover() + var setRepl int64 + if curReplSet == 1 || curReplSet == 3 { + setRepl = 2 + } else { + setRepl = 3 + } + opts := volume.Options{ + ValidateReplicationUpdateTimeout: replicationUpdateTimeout, + } + log.Infof("Setting Replication factor on Volume [%v] with ID [%v] to [%v]", vol.Name, vol.ID, setRepl) + err = Inst().V.SetReplicationFactor(vol, setRepl, nil, nil, wait, opts) + log.FailOnError(err, fmt.Sprintf("err setting repl factor to %d for vol : %s", setRepl, vol.Name)) + + } + defer revertReplica() + + // Wait for some time so that IO's will generate some data on all the volumes created so that + // HA Update will take some time to finish + time.Sleep(10 * time.Minute) + + getReplFactors := func(vol *volume.Volume) { + defer wg.Done() + defer GinkgoRecover() + volDet := volMap{} + curReplSet, err := Inst().V.GetReplicationFactor(vol) + log.FailOnError(err, "failed to get replication factor of the volume") + volDet.volObj = vol + volDet.ReplSet = curReplSet + log.Infof("Volume [%v] is with HA [%v]", volDet.volObj.Name, volDet.ReplSet) + volHAMap = append(volHAMap, &volDet) + } + + for _, eachCtx := range contexts { + vols, err := Inst().S.GetVolumes(eachCtx) + log.FailOnError(err, "Failed to get list of Volumes in the cluster") + + for _, eachVol := range vols { + wg.Add(1) + log.Infof("Get Repl factor for Volume [%v]", eachVol.Name) + go getReplFactors(eachVol) + } + } + wg.Wait() + + // Wait for all the Volumes in Clean State + for _, eachVol := range volHAMap { + log.FailOnError(WaitForVolumeClean(eachVol.volObj), "is Volume in clean state ?") + } + log.Infof("All Volumes are in clean state, proceeding with HA Update") + + // Set Repl Factor on all the volumes at ones + for _, eachVol := range volHAMap { + wg.Add(1) + log.Infof("Set Repl on Volume [%v] to [%v]", eachVol.volObj.Name, eachVol.ReplSet) + go setReplOnVolumes(eachVol.volObj, eachVol.ReplSet, false, &wg) + } + wg.Wait() + + // Wait for 2 min before validating the volume + time.Sleep(2 * time.Minute) + + log.Infof("Waiting for all volumes in clean state") + // Wait for all the Volumes in Clean State after starting Resync of the volume + for _, eachVol := range volHAMap { + log.FailOnError(WaitForVolumeClean(eachVol.volObj), "is Volume in clean state ?") + } + + // Verify Repl Resync Completed after all volumes are in Clean state + for _, eachVol := range volHAMap { + curReplSet, err := Inst().V.GetReplicationFactor(eachVol.volObj) + log.FailOnError(err, "failed to get replication factor of the volume") + + if eachVol.ReplSet == 3 || eachVol.ReplSet == 1 { + dash.VerifyFatal(curReplSet == 2, true, fmt.Sprintf("Verify if HA Value is 2 for Volume [%v]", eachVol.volObj.Name)) + } else { + dash.VerifyFatal(curReplSet == 3, true, fmt.Sprintf("Verify if HA Value is 3 for Volume [%v]", eachVol.volObj.Name)) + } + } + + }) + + JustAfterEach(func() { + defer EndTorpedoTest() + AfterEachTest(contexts) + }) +}) \ No newline at end of file diff --git a/tests/basic/upgrade_cluster_test.go b/tests/basic/upgrade_cluster_test.go index 4fc357572..caf9990b1 100644 --- a/tests/basic/upgrade_cluster_test.go +++ b/tests/basic/upgrade_cluster_test.go @@ -108,7 +108,7 @@ var _ = Describe("{UpgradeCluster}", func() { time.Sleep(30 * time.Minute) } - PrintK8sCluterInfo() + PrintK8sClusterInfo() }) Step("update node drive endpoints", func() { @@ -133,7 +133,7 @@ var _ = Describe("{UpgradeCluster}", func() { PrintPxctlStatus() } // Printing cluster node info after the upgrade - PrintK8sCluterInfo() + PrintK8sClusterInfo() dash.VerifyFatal(err, nil, fmt.Sprintf("verify volume driver after upgrade to %s", version)) }) diff --git a/tests/basic/upgrade_test.go b/tests/basic/upgrade_test.go index caed99ab9..4d29fd235 100644 --- a/tests/basic/upgrade_test.go +++ b/tests/basic/upgrade_test.go @@ -457,7 +457,8 @@ var _ = Describe("{UpgradeVolumeDriverFromCatalog}", func() { imageList, err := optest.GetImagesFromVersionURL(upgradeHop, k8sVersion.String()) log.FailOnError(err, "error getting images using URL [%s] and k8s version [%s]", upgradeHop, k8sVersion.String()) - err = optest.ValidateStorageCluster(imageList, stc, ValidateStorageClusterTimeout, defaultRetryInterval, true) + storageClusterValidateTimeout := time.Duration(len(node.GetStorageDriverNodes())*9) * time.Minute + err = optest.ValidateStorageCluster(imageList, stc, storageClusterValidateTimeout, defaultRetryInterval, true) dash.VerifyFatal(err, nil, fmt.Sprintf("Verify PX upgrade from version [%s] to version [%s]", currPXVersion, nextPXVersion)) timeAfterUpgrade = time.Now() diff --git a/tests/basic/volume_ops_test.go b/tests/basic/volume_ops_test.go index 39f87b9bb..25c9c5e18 100644 --- a/tests/basic/volume_ops_test.go +++ b/tests/basic/volume_ops_test.go @@ -344,6 +344,7 @@ var _ = Describe("{VolumeUpdateForAttachedNode}", func() { currRep, err := Inst().V.GetReplicationFactor(v) log.FailOnError(err, "Failed to get vol %s repl factor", v.Name) attachedNode, err := Inst().V.GetNodeForVolume(v, defaultCommandTimeout, defaultCommandRetry) + log.FailOnError(err, fmt.Sprintf("Failed to get node for vol %s", v.Name)) replicaSets, err := Inst().V.GetReplicaSets(v) log.FailOnError(err, "Failed to get vol %s replica sets", v.Name) @@ -421,7 +422,10 @@ var _ = Describe("{VolumeUpdateForAttachedNode}", func() { MaxRF = int64(len(node.GetStorageDriverNodes())) / currAggr } expReplMap[v] = int64(math.Min(float64(MaxRF), float64(currRep)+1)) - err = Inst().V.SetReplicationFactor(v, currRep+1, updateReplicaSet, nil, true) + opts := volume.Options{ + ValidateReplicationUpdateTimeout: validateReplicationUpdateTimeout, + } + err = Inst().V.SetReplicationFactor(v, currRep+1, updateReplicaSet, nil, true, opts) log.FailOnError(err, "Failed to set vol %s repl factor", v.Name) dash.VerifyFatal(err == nil, true, fmt.Sprintf("Vol %s repl factor set as expected?", v.Name)) }) @@ -604,7 +608,7 @@ var _ = Describe("{CreateDeleteVolumeKillKVDBMaster}", func() { }) var contexts []*scheduler.Context - stepLog := "has to schedule apps and update replication factor for attached node" + stepLog := "Continuously creates and deletes volume while killing kvdb master node" It(stepLog, func() { var wg sync.WaitGroup @@ -993,6 +997,9 @@ var _ = Describe("{CloudsnapAndRestore}", func() { retain := 8 interval := 4 + err := CreatePXCloudCredential() + log.FailOnError(err, "failed to create cloud credential") + n := node.GetStorageDriverNodes()[0] uuidCmd := "pxctl cred list -j | grep uuid" output, err := runCmd(uuidCmd, n) @@ -1038,11 +1045,19 @@ var _ = Describe("{CloudsnapAndRestore}", func() { }) + defer func() { + err := storkops.Instance().DeleteSchedulePolicy(policyName) + log.FailOnError(err, fmt.Sprintf("error deleting a SchedulePolicy [%s]", policyName)) + }() + stepLog = "Verify that cloud snap status" Step(stepLog, func() { log.InfoD(stepLog) for _, ctx := range contexts { + if !strings.Contains(ctx.App.Key, "cloudsnap") { + continue + } var appVolumes []*volume.Volume var err error appNamespace := ctx.App.Key + "-" + ctx.UID @@ -1130,6 +1145,9 @@ var _ = Describe("{CloudsnapAndRestore}", func() { stepLog = "Validating cloud snapshot backup size values" Step(stepLog, func() { for _, ctx := range contexts { + if !strings.Contains(ctx.App.Key, "cloudsnap") { + continue + } // Validate the cloud snapshot backup size values [PTX-17342] log.Infof("Validating cloud snapshot backup size values for app [%s]", ctx.App.Key) vols, err := Inst().S.GetVolumeParameters(ctx) @@ -1218,27 +1236,31 @@ var _ = Describe("{CloudsnapAndRestore}", func() { } else { log.FailOnError(fmt.Errorf("no snapshot with Ready status found for vol[%s] in namespace[%s]", vol.Name, vol.Namespace), "error getting volume snapshot") } - } - } } - }) - stepLog = "Validating and Destroying apps" + + stepLog = "Validating apps after cloudsnap restore" Step(stepLog, func() { + for _, ctx := range contexts { ctx.ReadinessTimeout = 15 * time.Minute - ctx.SkipVolumeValidation = false + //skipping volume validation as ip_profiles are updated + ctx.SkipVolumeValidation = true ValidateContext(ctx) - opts := make(map[string]bool) - DestroyApps(contexts, opts) } }) }) JustAfterEach(func() { defer EndTorpedoTest() + bucketName, err := GetCloudsnapBucketName(contexts) + log.FailOnError(err, "error getting cloud snap bucket name") + opts := make(map[string]bool) + DestroyApps(contexts, opts) + err = DeleteCloudSnapBucket(bucketName) + log.FailOnError(err, "error deleting cloud snap bucket") AfterEachTest(contexts) }) }) @@ -1524,7 +1546,7 @@ var _ = Describe("{ResizeVolumeAfterFull}", func() { waitForVolumeFull := func(volName *volume.Volume) error { waitTillVolume := func() (interface{}, bool, error) { - volumeFull, err := IsVolumeFull(*randomVol) + volumeFull, err := IsVolumeFull(*volName) if err != nil { return nil, true, err } @@ -1730,6 +1752,9 @@ var _ = Describe("{TrashcanRecoveryWithCloudsnap}", func() { stepLog := "Validate the successful restore from Trashcan of volume in resync" It(stepLog, func() { log.InfoD(stepLog) + err := CreatePXCloudCredential() + log.FailOnError(err, "failed to create cloud credential") + stepLog = "Enable Trashcan" Step(stepLog, func() { @@ -1766,6 +1791,12 @@ var _ = Describe("{TrashcanRecoveryWithCloudsnap}", func() { log.FailOnError(err, fmt.Sprintf("error creating a SchedulePolicy [%s]", policyName)) } }) + + defer func() { + err := storkops.Instance().DeleteSchedulePolicy(policyName) + log.FailOnError(err, fmt.Sprintf("error deleting a SchedulePolicy [%s]", policyName)) + + }() fioPVC := "fio-pvc" fioPVName := "fio-pv" fioOutputPVC := "fio-output-pvc" @@ -2006,6 +2037,12 @@ var _ = Describe("{TrashcanRecoveryWithCloudsnap}", func() { }) JustAfterEach(func() { defer EndTorpedoTest() + bucketName, err := GetCloudsnapBucketName(contexts) + log.FailOnError(err, "error getting cloud snap bucket name") + opts := make(map[string]bool) + DestroyApps(contexts, opts) + err = DeleteCloudSnapBucket(bucketName) + log.FailOnError(err, "error deleting cloud snap bucket") AfterEachTest(contexts) }) }) @@ -2103,6 +2140,9 @@ func validateCloudSnaps(appNamespace string) (map[string]string, error) { return snapsMap, fmt.Errorf("snapshotSchedule has an empty migration in it's most recent status,Err: %v", err) } status, err = WaitForSnapShotToReady(snapshotScheduleName, status.Name, appNamespace) + if err != nil { + return snapsMap, err + } log.Infof("Snapshot %s has status %v", status.Name, status.Status) if status.Status == snapv1.VolumeSnapshotConditionError { @@ -2246,17 +2286,8 @@ var _ = Describe("{CloudSnapWithPXEvents}", func() { stepLog = "validate cloud cred and create schedule policy" Step(stepLog, func() { log.InfoD(stepLog) - n := node.GetStorageDriverNodes()[0] - uuidCmd := "pxctl cred list -j | grep uuid" - output, err := runCmd(uuidCmd, n) - log.FailOnError(err, "error getting uuid for cloudsnap credential") - if output == "" { - log.FailOnError(fmt.Errorf("cloud cred is not created"), "Check for cloud cred exists?") - } - - credUUID := strings.Split(strings.TrimSpace(output), " ")[1] - credUUID = strings.ReplaceAll(credUUID, "\"", "") - log.Infof("Got Cred UUID: %s", credUUID) + err := CreatePXCloudCredential() + log.FailOnError(err, "failed to create cloud credential") contexts = make([]*scheduler.Context, 0) policyName := "intervalpolicy" @@ -2285,6 +2316,11 @@ var _ = Describe("{CloudSnapWithPXEvents}", func() { } }) + defer func() { + err := storkops.Instance().DeleteSchedulePolicy(policyName) + log.FailOnError(err, fmt.Sprintf("error deleting a SchedulePolicy [%s]", policyName)) + }() + for i := 0; i < Inst().GlobalScaleFactor; i++ { contexts = append(contexts, ScheduleApplications(fmt.Sprintf("cspxevents-%d", i))...) } @@ -2597,6 +2633,12 @@ var _ = Describe("{CloudSnapWithPXEvents}", func() { }) JustAfterEach(func() { defer EndTorpedoTest() + bucketName, err := GetCloudsnapBucketName(contexts) + log.FailOnError(err, "error getting cloud snap bucket name") + opts := make(map[string]bool) + DestroyApps(contexts, opts) + err = DeleteCloudSnapBucket(bucketName) + log.FailOnError(err, "failed to delete cloud snap bucket") AfterEachTest(contexts, testrailID, runID) }) }) @@ -2625,23 +2667,13 @@ var _ = Describe("{PoolFullCloudsnap}", func() { It(stepLog, func() { stepLog = "Create cloudsnap schedule and validate cloud cred" - + policyName := "intervalpolicy" Step(stepLog, func() { log.InfoD(stepLog) - n := node.GetStorageDriverNodes()[0] - uuidCmd := "pxctl cred list -j | grep uuid" - output, err := runCmd(uuidCmd, n) - log.FailOnError(err, "error getting uuid for cloudsnap credential") - if output == "" { - log.FailOnError(fmt.Errorf("cloud cred is not created"), "Check for cloud cred exists?") - } - - credUUID := strings.Split(strings.TrimSpace(output), " ")[1] - credUUID = strings.ReplaceAll(credUUID, "\"", "") - log.Infof("Got Cred UUID: %s", credUUID) + err := CreatePXCloudCredential() + log.FailOnError(err, "failed to create cloud credential") contexts = make([]*scheduler.Context, 0) - policyName := "intervalpolicy" stepLog = fmt.Sprintf("create schedule policy %s", policyName) Step(stepLog, func() { @@ -2670,6 +2702,11 @@ var _ = Describe("{PoolFullCloudsnap}", func() { }) + defer func() { + err := storkops.Instance().DeleteSchedulePolicy(policyName) + log.FailOnError(err, fmt.Sprintf("error deleting a SchedulePolicy [%s]", policyName)) + }() + log.InfoD(stepLog) existingAppList := Inst().AppList @@ -2849,6 +2886,12 @@ var _ = Describe("{PoolFullCloudsnap}", func() { JustAfterEach(func() { defer EndTorpedoTest() + bucketName, err := GetCloudsnapBucketName(contexts) + log.FailOnError(err, "error getting cloud snap bucket name") + opts := make(map[string]bool) + DestroyApps(contexts, opts) + err = DeleteCloudSnapBucket(bucketName) + log.FailOnError(err, "failed to delete cloud snap bucket") AfterEachTest(contexts, testrailID, runID) }) }) diff --git a/tests/common.go b/tests/common.go index c3842e2ce..175a1e9a4 100644 --- a/tests/common.go +++ b/tests/common.go @@ -10,6 +10,12 @@ import ( "errors" "flag" "fmt" + "k8s.io/apimachinery/pkg/api/resource" + + "github.com/devans10/pugo/flasharray" + + "github.com/aws/aws-sdk-go/aws/awserr" + "io/ioutil" "math/rand" "net/http" @@ -57,6 +63,7 @@ import ( "github.com/portworx/sched-ops/k8s/operator" policyops "github.com/portworx/sched-ops/k8s/policy" k8sStorage "github.com/portworx/sched-ops/k8s/storage" + schedstorage "github.com/portworx/sched-ops/k8s/storage" "github.com/portworx/sched-ops/k8s/stork" storkops "github.com/portworx/sched-ops/k8s/stork" "github.com/portworx/sched-ops/task" @@ -312,6 +319,7 @@ const ( anthosInstPathCliFlag = "anthos-inst-path" skipSystemCheckCliFlag = "torpedo-skip-system-checks" dataIntegrityValidationTestsFlag = "data-integrity-validation-tests" + faSecretCliFlag = "fa-secret" ) // Dashboard params @@ -358,7 +366,7 @@ const ( defaultMonitorDriver = "prometheus" defaultStorageDriver = "pxd" defaultPdsDriver = "pds" - defaultLogLocation = "/tmp/" + defaultLogLocation = "/testresults/" defaultBundleLocation = "/var/cores" defaultLogLevel = "debug" defaultAppScaleFactor = 1 @@ -959,32 +967,52 @@ func ValidatePDB(pdbValue int, allowedDisruptions int, initialNumNodes int, isCl close(*errChan[0]) } }() - - currentPdbValue, _ := GetPDBValue() + t := func() (interface{}, bool, error) { + currentPdbValue, _ := GetPDBValue() + if currentPdbValue == -1 { + return -1, true, fmt.Errorf("failed to get PDB value") + } + return currentPdbValue, false, nil + } + currentPdbValue, _ := task.DoRetryWithTimeout(t, defaultTimeout, defaultRetryInterval) if currentPdbValue == -1 { err := fmt.Errorf("failed to get PDB value") processError(err, errChan...) } + Step("Validate PDB minAvailable for px storage", func() { if currentPdbValue != pdbValue { err := fmt.Errorf("PDB minAvailable value has changed. Expected: %d, Actual: %d", pdbValue, currentPdbValue) processError(err, errChan...) } + }) Step("Validate number of disruptions ", func() { - nodes, err := Inst().V.GetDriverNodes() - if err != nil { - processError(err, errChan...) + t := func() (interface{}, bool, error) { + nodes, err := Inst().V.GetDriverNodes() + if err != nil { + return nil, true, fmt.Errorf("failed to get portworx nodes due to %v. Retrying with timeout", err) + } else { + return nodes, false, nil + } } - currentNumNodes := len(nodes) - if allowedDisruptions < initialNumNodes-currentNumNodes { - err := fmt.Errorf("number of nodes down is more than allowed disruptions . Expected: %d, Actual: %d", allowedDisruptions, initialNumNodes-currentNumNodes) + nodes, err := task.DoRetryWithTimeout(t, defaultTimeout, defaultRetryInterval) + if err != nil { processError(err, errChan...) + } else { + currentNumNodes := len(nodes.([]*opsapi.StorageNode)) + if allowedDisruptions < initialNumNodes-currentNumNodes { + err := fmt.Errorf("number of nodes down is more than allowed disruptions . Expected: %d, Actual: %d", allowedDisruptions, initialNumNodes-currentNumNodes) + processError(err, errChan...) + } + if initialNumNodes-currentNumNodes > 1 { + *isClusterParallelyUpgraded = true + + } } - if initialNumNodes-currentNumNodes > 1 { - *isClusterParallelyUpgraded = true - } + }) + } func GetPDBValue() (int, int) { @@ -1628,6 +1656,7 @@ func ValidateCSIVolumeClone(ctx *scheduler.Context, errChan ...*chan error) { log.Warnf("No FlashArray DirectAccess volumes, skipping") processError(err, errChan...) } else { + log.Infof("==== Cloning volume %s\n", vols[0].Name) timestamp := strconv.Itoa(int(time.Now().Unix())) request := scheduler.CSICloneRequest{ Timestamp: timestamp, @@ -1687,33 +1716,43 @@ func ValidatePureVolumeLargeNumOfClones(ctx *scheduler.Context, errChan ...*chan // ValidatePoolExpansionWithPureVolumes is the ginkgo spec for executing a pool expansion when FA/FB volumes is attached func ValidatePoolExpansionWithPureVolumes(ctx *scheduler.Context, errChan ...*chan error) { Step("For validation of an expanding storage pools while FA/FB volumes are attached", func() { - pools, err := Inst().V.ListStoragePools(metav1.LabelSelector{}) - if err != nil { - err = fmt.Errorf("error getting storage pools list. Err: %v", err) - log.Error(err.Error()) + var vols []*volume.Volume + var err error + Step(fmt.Sprintf("get %s app's pure volumes", ctx.App.Key), func() { + vols, err = Inst().S.GetPureVolumes(ctx, "pure_block") processError(err, errChan...) - } + }) + if len(vols) == 0 { + log.Warnf("No FlashArray DirectAccess volumes, skipping") + } else { - if len(pools) == 0 { - err = fmt.Errorf("length of pools should be greater than 0") - processError(err, errChan...) - } - for _, pool := range pools { - initialPoolSize := pool.TotalSize / units.GiB - err = Inst().V.ResizeStoragePoolByPercentage(pool.Uuid, opsapi.SdkStoragePool_RESIZE_TYPE_RESIZE_DISK, 20) + pools, err := Inst().V.ListStoragePools(metav1.LabelSelector{}) if err != nil { - err = fmt.Errorf("error initiating pool [%v ] %v: [%v]", pool.Uuid, opsapi.SdkStoragePool_RESIZE_TYPE_RESIZE_DISK, err.Error()) + err = fmt.Errorf("error getting storage pools list. Err: %v", err) log.Error(err.Error()) - } else { - err = waitForPoolToBeResized(initialPoolSize, pool.Uuid) + processError(err, errChan...) + } + + if len(pools) == 0 { + err = fmt.Errorf("length of pools should be greater than 0") + processError(err, errChan...) + } + for _, pool := range pools { + initialPoolSize := pool.TotalSize / units.GiB + err = Inst().V.ResizeStoragePoolByPercentage(pool.Uuid, opsapi.SdkStoragePool_RESIZE_TYPE_RESIZE_DISK, 20) if err != nil { - err = fmt.Errorf("pool [%v] %v failed. Error: %v", pool.Uuid, opsapi.SdkStoragePool_RESIZE_TYPE_RESIZE_DISK, err) - log.Error(err) + err = fmt.Errorf("error initiating pool [%v ] %v: [%v]", pool.Uuid, opsapi.SdkStoragePool_RESIZE_TYPE_RESIZE_DISK, err.Error()) + log.Error(err.Error()) + } else { + err = waitForPoolToBeResized(initialPoolSize, pool.Uuid) + if err != nil { + err = fmt.Errorf("pool [%v] %v failed. Error: %v", pool.Uuid, opsapi.SdkStoragePool_RESIZE_TYPE_RESIZE_DISK, err) + log.Error(err) + } } } } }) - } // ValidateMountOptionsWithPureVolumes is the ginkgo spec for executing a check for mountOptions flag @@ -1731,10 +1770,18 @@ func ValidateMountOptionsWithPureVolumes(ctx *scheduler.Context, errChan ...*cha log.FailOnError(err, " Error Occured while getting storage class for pvc %s", pvcObj) } if strings.Contains(strings.Join(sc.MountOptions, ""), "nosuid") { - attachedNode, err := Inst().V.GetNodeForVolume(vol, defaultCmdTimeout*3, defaultCmdRetryInterval) - log.FailOnError(err, "Failed to get app %s's attachednode", ctx.App.Key) - err = Inst().V.ValidatePureFaFbMountOptions(vol.ID, requiredMountOptions, attachedNode) - dash.VerifySafely(err, nil, "Testing mount options are properly applied on pure volumes") + // Ignore mount path check if the volume type is purefile, https://purestorage.atlassian.net/issues/PWX-37040 + isPureFile, err := Inst().V.IsPureFileVolume(vol) + log.FailOnError(err, "Failed to get details about PureFile") + log.Infof("Given Volume is [%v] and PureFile [%v]", vol.Name, isPureFile) + + if !isPureFile { + attachedNode, err := Inst().V.GetNodeForVolume(vol, defaultCmdTimeout*3, defaultCmdRetryInterval) + log.FailOnError(err, "Failed to get app %s's attachednode", ctx.App.Key) + + err = Inst().V.ValidatePureFaFbMountOptions(vol.ID, requiredMountOptions, attachedNode) + dash.VerifySafely(err, nil, "Testing mount options are properly applied on pure volumes") + } } else { log.Infof("There is no nosuid mount option in this volume %s", vol) } @@ -1760,23 +1807,28 @@ func ValidateCreateOptionsWithPureVolumes(ctx *scheduler.Context, errChan ...*ch processError(err, errChan...) } - attachedNode, err := Inst().V.GetNodeForVolume(v, defaultCmdTimeout*3, defaultCmdRetryInterval) - if err != nil { - err = fmt.Errorf("Failed to get app %s's attachednode. Err: %v", ctx.App.Key, err) - processError(err, errChan...) - } - if strings.Contains(fmt.Sprint(sc.Parameters), "-b ") { - FSType, ok := sc.Parameters["csi.storage.k8s.io/fstype"] - if ok { - err = Inst().V.ValidatePureFaCreateOptions(v.ID, FSType, attachedNode) - dash.VerifySafely(err, nil, "File system create options specified in the storage class are properly applied to the pure volumes") + isPureFile, err := Inst().V.IsPureFileVolume(v) + log.FailOnError(err, "Failed to get details about PureFile") + log.Infof("Given Volume is [%v] and PureFile [%v]", v.Name, isPureFile) + + if !isPureFile { + attachedNode, err := Inst().V.GetNodeForVolume(v, defaultCmdTimeout*3, defaultCmdRetryInterval) + if err != nil { + err = fmt.Errorf("Failed to get app %s's attachednode. Err: %v", ctx.App.Key, err) + processError(err, errChan...) + } + if strings.Contains(fmt.Sprint(sc.Parameters), "-b ") { + FSType, ok := sc.Parameters["csi.storage.k8s.io/fstype"] + if ok { + err = Inst().V.ValidatePureFaCreateOptions(v.ID, FSType, attachedNode) + dash.VerifySafely(err, nil, "File system create options specified in the storage class are properly applied to the pure volumes") + } else { + log.Infof("Storage class doesn't have key 'csi.storage.k8s.io/fstype' in parameters") + } } else { - log.Infof("Storage class doesn't have key 'csi.storage.k8s.io/fstype' in parameters") + log.Infof("Storage class doesn't have createoption -b of size 2048 added to it") } - } else { - log.Infof("Storage class doesn't have createoption -b of size 2048 added to it") } - } } @@ -2469,6 +2521,7 @@ func DestroyAppsWithData(contexts []*scheduler.Context, opts map[string]bool, co TearDownContext(ctx, opts) } + /* Removing Data error validation till PB-6271 is resolved. if allErrors != "" { if IsReplacePolicySetToDelete { log.Infof("Skipping data continuity check as the replace policy was set to delete in this scenario") @@ -2478,6 +2531,7 @@ func DestroyAppsWithData(contexts []*scheduler.Context, opts map[string]bool, co return fmt.Errorf("Data validation failed for apps. Error - [%s]", allErrors) } } + */ return nil } @@ -2775,6 +2829,16 @@ func ValidateClusterSize(count int64) { currentNodeCount, err := Inst().S.GetASGClusterSize() log.FailOnError(err, "Failed to Get ASG Cluster Size") + if Inst().S.String() == openshift.SchedName { + isPxOnMaster, err := IsPxRunningOnMaster() + log.FailOnError(err, "Failed to check if px is running on master") + if !isPxOnMaster { + node.GetMasterNodes() + //Removing master nodes for currentNodeCount + currentNodeCount = currentNodeCount - int64(len(node.GetMasterNodes())) + } + } + dash.VerifyFatal(currentNodeCount, count, "ASG cluster size is as expected?") // Validate storage node count @@ -2788,6 +2852,29 @@ func ValidateClusterSize(count int64) { dash.VerifyFatal(len(storageNodes), expectedStoragesNodes, "Storage nodes matches the expected number?") } +func IsPxRunningOnMaster() (bool, error) { + + var namespace string + var err error + if namespace, err = Inst().S.GetPortworxNamespace(); err != nil { + log.Errorf("Failed to get portworx namespace. Error : %v", err) + return false, nil + } + var isPXOnControlplane = false + pxOperator := operator.Instance() + stcList, err := pxOperator.ListStorageClusters(namespace) + if err == nil { + stc, err := pxOperator.GetStorageCluster(stcList.Items[0].Name, stcList.Items[0].Namespace) + if err != nil { + return false, fmt.Errorf("failed to get StorageCluster [%s] from namespace [%s], Err: %v", stcList.Items[0].Name, stcList.Items[0].Namespace, err.Error()) + } + isPXOnControlplane, _ = strconv.ParseBool(stc.Annotations["portworx.io/run-on-master"]) + } + + return isPXOnControlplane, nil + +} + // GetStorageNodes get storage nodes in the cluster func GetStorageNodes() ([]node.Node, error) { @@ -2886,7 +2973,9 @@ func runCmd(cmd string, n node.Node) error { func runCmdOnce(cmd string, n node.Node) (string, error) { output, err := Inst().N.RunCommandWithNoRetry(n, cmd, node.ConnectionOpts{ - Sudo: true, + Timeout: defaultCmdTimeout, + TimeBeforeRetry: defaultCmdRetryInterval, + Sudo: true, }) if err != nil { log.Warnf("failed to run cmd: %s. err: %v", cmd, err) @@ -6788,6 +6877,7 @@ type Torpedo struct { AnthosAdminWorkStationNodeIP string AnthosInstPath string SkipSystemChecks bool + FaSecret string } // ParseFlags parses command line flags @@ -6847,6 +6937,8 @@ func ParseFlags() { var torpedoJobType string var anthosWsNodeIp string var anthosInstPath string + var faSecret string + log.Infof("The default scheduler is %v", defaultScheduler) flag.StringVar(&s, schedulerCliFlag, defaultScheduler, "Name of the scheduler to use") flag.StringVar(&n, nodeDriverCliFlag, defaultNodeDriver, "Name of the node driver to use") @@ -6920,6 +7012,8 @@ func ParseFlags() { flag.StringVar(&pdsDriverName, pdsDriveCliFlag, defaultPdsDriver, "Name of the pdsdriver to use") flag.StringVar(&anthosWsNodeIp, anthosWsNodeIpCliFlag, "", "Anthos admin work station node IP") flag.StringVar(&anthosInstPath, anthosInstPathCliFlag, "", "Anthos config path where all conf files present") + flag.StringVar(&faSecret, faSecretCliFlag, "", "comma seperated list of famanagementip=tokenValue pairs") + // System checks https://github.com/portworx/torpedo/blob/86232cb195400d05a9f83d57856f8f29bdc9789d/tests/common.go#L2173 // should be skipped from AfterSuite() if this flag is set to true. This is to avoid distracting test failures due to // unstable testing environments. @@ -7155,6 +7249,7 @@ func ParseFlags() { AnthosInstPath: anthosInstPath, IsPDSApps: deployPDSApps, SkipSystemChecks: skipSystemChecks, + FaSecret: faSecret, } if instance.S.String() == "openshift" { instance.LogLoc = "/mnt" @@ -8343,18 +8438,17 @@ func GetPoolExpansionEligibility(stNode *node.Node) (map[string]bool, error) { var maxCloudDrives int - if _, err := core.Instance().GetSecret(PX_VSPHERE_SCERET_NAME, namespace); err == nil { + if _, err = core.Instance().GetSecret(PX_VSPHERE_SCERET_NAME, namespace); err == nil { + maxCloudDrives = VSPHERE_MAX_CLOUD_DRIVES + } + if _, err = core.Instance().GetSecret(PX_VSPHERE_SCERET_NAME, namespace); err == nil { maxCloudDrives = VSPHERE_MAX_CLOUD_DRIVES - } else if _, err := core.Instance().GetSecret(PX_PURE_SECRET_NAME, namespace); err == nil { + } else if _, err = core.Instance().GetSecret(PX_PURE_SECRET_NAME, namespace); err == nil { maxCloudDrives = FA_MAX_CLOUD_DRIVES } else { maxCloudDrives = CLOUD_PROVIDER_MAX_CLOUD_DRIVES } - if err != nil { - return nil, err - } - var currentNodeDrives int drvM, err := Inst().V.GetPoolDrives(stNode) @@ -8691,6 +8785,7 @@ func WaitForPoolOffline(n node.Node) error { return err } +// GetPoolIDFromPoolUUID Returns Pool ID from Pool UUID func GetPoolIDFromPoolUUID(poolUuid string) (int32, error) { nodesPresent := node.GetStorageNodes() for _, each := range nodesPresent { @@ -8707,6 +8802,20 @@ func GetPoolIDFromPoolUUID(poolUuid string) (int32, error) { return -1, nil } +// GetPoolObjFromPoolIdOnNode Returns pool object from pool ID on a specific Node +func GetPoolObjFromPoolIdOnNode(n *node.Node, poolID int) (*opsapi.StoragePool, error) { + poolDetails, err := GetPoolsDetailsOnNode(n) + if err != nil { + return nil, err + } + for _, eachPool := range poolDetails { + if eachPool.ID == int32(poolID) { + return eachPool, nil + } + } + return nil, fmt.Errorf("Failed to get details of Storage Pool On specific Node ") +} + func GetAutoFsTrimStatusForCtx(ctx *scheduler.Context) (map[string]opsapi.FilesystemTrim_FilesystemTrimStatus, error) { appVolumes, err := Inst().S.GetVolumes(ctx) @@ -9398,17 +9507,21 @@ func AddMetadataDisk(n node.Node) error { } -// createNamespaces Create N number of namespaces and return namespace list -func createNamespaces(numberOfNamespaces int) ([]string, error) { +// CreateNamespaces Create N number of namespaces and return namespace list +func CreateNamespaces(nsName string, numberOfNamespaces int) ([]string, error) { // Create multiple namespaces in string var ( namespaces []string ) + namespace := fmt.Sprintf("large-resource-%v", time.Now().Unix()) + if nsName != "" { + namespace = fmt.Sprintf("%s", nsName) + } // Create a good number of namespaces - for i := 0; i < numberOfNamespaces; i++ { - namespace := fmt.Sprintf("large-resource-%d-%v", i, time.Now().Unix()) + for nsCount := 0; nsCount < numberOfNamespaces; nsCount++ { + namespace := fmt.Sprintf("%v-%v", namespace, nsCount) nsName := &corev1.Namespace{ ObjectMeta: metav1.ObjectMeta{ Name: namespace, @@ -11159,10 +11272,11 @@ func installGrafana(namespace string) { } func SetupProxyServer(n node.Node) error { - createDirCommand := "mkdir -p /exports/testnfsexportdir" output, err := Inst().N.RunCommandWithNoRetry(n, createDirCommand, node.ConnectionOpts{ - Sudo: true, + Sudo: true, + TimeBeforeRetry: defaultRetryInterval, + Timeout: defaultTimeout, }) if err != nil { return err @@ -11171,7 +11285,9 @@ func SetupProxyServer(n node.Node) error { addVersionCmd := "echo -e \"MOUNTD_NFS_V4=\"yes\"\nRPCNFSDARGS=\"-N 2 -N 4\"\" >> /etc/sysconfig/nfs" output, err = Inst().N.RunCommandWithNoRetry(n, addVersionCmd, node.ConnectionOpts{ - Sudo: true, + Sudo: true, + TimeBeforeRetry: defaultRetryInterval, + Timeout: defaultTimeout, }) if err != nil { return err @@ -11180,15 +11296,65 @@ func SetupProxyServer(n node.Node) error { updateExportsCmd := "echo \"/exports/testnfsexportdir *(rw,sync,no_root_squash)\" > /etc/exports" output, err = Inst().N.RunCommandWithNoRetry(n, updateExportsCmd, node.ConnectionOpts{ - Sudo: true, + Sudo: true, + TimeBeforeRetry: defaultRetryInterval, + Timeout: defaultTimeout, }) if err != nil { return err } log.Infof(output) + + checkExportfsCmd := "which exportfs" + output, err = Inst().N.RunCommandWithNoRetry(n, checkExportfsCmd, node.ConnectionOpts{ + Sudo: true, + TimeBeforeRetry: defaultRetryInterval, + Timeout: defaultTimeout, + }) + if err != nil || output == "" { + log.Warnf("The command exportfs not found") + + var installNfsUtilsCmd string + checkDistroCmd := "source /etc/os-release && echo $ID" + output, err = Inst().N.RunCommandWithNoRetry(n, checkDistroCmd, node.ConnectionOpts{ + Sudo: true, + TimeBeforeRetry: defaultRetryInterval, + Timeout: defaultTimeout, + }) + if err != nil { + return err + } + log.Infof("The Linux distribution is %s", output) + + switch strings.TrimSpace(output) { + case "ubuntu", "debian": + log.Infof("Installing nfs-common") + installNfsUtilsCmd = "apt-get update && apt-get install -y nfs-common" + case "centos", "rhel", "fedora": + log.Infof("Installing nfs-utils") + installNfsUtilsCmd = "yum install -y nfs-utils" + default: + return fmt.Errorf("unsupported Linux distribution") + } + + output, err = Inst().N.RunCommandWithNoRetry(n, installNfsUtilsCmd, node.ConnectionOpts{ + Sudo: true, + TimeBeforeRetry: defaultRetryInterval, + Timeout: defaultTimeout, + }) + if err != nil { + return err + } + log.Infof(output) + } else { + log.Infof(output) + } + exportCmd := "exportfs -a" output, err = Inst().N.RunCommandWithNoRetry(n, exportCmd, node.ConnectionOpts{ - Sudo: true, + Sudo: true, + TimeBeforeRetry: defaultRetryInterval, + Timeout: defaultTimeout, }) if err != nil { return err @@ -11197,7 +11363,9 @@ func SetupProxyServer(n node.Node) error { enableNfsServerCmd := "systemctl enable nfs-server" output, err = Inst().N.RunCommandWithNoRetry(n, enableNfsServerCmd, node.ConnectionOpts{ - Sudo: true, + Sudo: true, + TimeBeforeRetry: defaultRetryInterval, + Timeout: defaultTimeout, }) if err != nil { return err @@ -11206,7 +11374,9 @@ func SetupProxyServer(n node.Node) error { startNfsServerCmd := "systemctl restart nfs-server" output, err = Inst().N.RunCommandWithNoRetry(n, startNfsServerCmd, node.ConnectionOpts{ - Sudo: true, + Sudo: true, + TimeBeforeRetry: defaultRetryInterval, + Timeout: defaultTimeout, }) if err != nil { return err @@ -11318,7 +11488,7 @@ func GetClusterNodesInfo(stopSignal <-chan struct{}, mError *error) { } // PrintK8sClusterInfo prints info about K8s cluster nodes -func PrintK8sCluterInfo() { +func PrintK8sClusterInfo() { log.Info("Get cluster info..") t := func() (interface{}, bool, error) { nodeList, err := core.Instance().GetNodes() @@ -11326,16 +11496,16 @@ func PrintK8sCluterInfo() { return "", true, fmt.Errorf("failed to get nodes, Err %v", err) } if len(nodeList.Items) > 0 { - for _, node := range nodeList.Items { + for _, n := range nodeList.Items { nodeType := "Worker" - if core.Instance().IsNodeMaster(node) { + if core.Instance().IsNodeMaster(n) { nodeType = "Master" } log.Infof( "Node Name: %s, Node Type: %s, Kernel Version: %s, Kubernetes Version: %s, OS: %s, Container Runtime: %s", - node.Name, nodeType, - node.Status.NodeInfo.KernelVersion, node.Status.NodeInfo.KubeletVersion, node.Status.NodeInfo.OSImage, - node.Status.NodeInfo.ContainerRuntimeVersion) + n.Name, nodeType, + n.Status.NodeInfo.KernelVersion, n.Status.NodeInfo.KubeletVersion, n.Status.NodeInfo.OSImage, + n.Status.NodeInfo.ContainerRuntimeVersion) } return "", false, nil } @@ -11346,73 +11516,366 @@ func PrintK8sCluterInfo() { } } -// ExportSourceKubeConfig changes the KUBECONFIG environment variable to the source cluster config path -func ExportSourceKubeConfig() error { - sourceClusterConfigPath, err := GetSourceClusterConfigPath() +func CreatePXCloudCredential() error { + /* + Creating a cloud credential for cloudsnap wit the given params + Deleting the existing cred if exists so that we can use same creds to delete the s3 bucket once test is completed. + */ + id, secret, endpoint, s3Region, disableSSl, err := getCreateCredParams() + if err != nil { return err } - err = os.Unsetenv("KUBECONFIG") + + n := node.GetStorageDriverNodes()[0] + uuidCmd := "cred list -j | grep uuid" + + output, err := Inst().V.GetPxctlCmdOutputConnectionOpts(n, uuidCmd, node.ConnectionOpts{ + IgnoreError: false, + TimeBeforeRetry: defaultRetryInterval, + Timeout: defaultTimeout, + }, false) if err != nil { - return err + log.Warnf("No creds found, creating new cred, Err: %v", err) } - return os.Setenv("KUBECONFIG", sourceClusterConfigPath) -} -// ExportDestinationKubeConfig changes the KUBECONFIG environment variable to the destination cluster config path -func ExportDestinationKubeConfig() error { - DestinationClusterConfigPath, err := GetDestinationClusterConfigPath() - if err != nil { - return err + if output != "" { + log.Infof("Cloud Cred exists [%s]", output) + log.Warnf("Deleting existing cred and creating new cred with given params") + credUUID := strings.Split(output, ":")[1] + credUUID = strings.ReplaceAll(strings.TrimSpace(credUUID), "\"", "") + credDeleteCmd := fmt.Sprintf("cred delete %s", credUUID) + output, err = Inst().V.GetPxctlCmdOutputConnectionOpts(n, credDeleteCmd, node.ConnectionOpts{ + IgnoreError: false, + TimeBeforeRetry: defaultRetryInterval, + Timeout: defaultTimeout, + }, false) + + if err != nil { + err = fmt.Errorf("error deleting existing cred [%s], cause: %v", credUUID, err) + return err + } + + log.Infof("Deleted exising cred [%s]", output) } - err = os.Unsetenv("KUBECONFIG") + cloudCredName := "px-cloud-cred" + + credCreateCmd := fmt.Sprintf("cred create %s --provider s3 --s3-access-key %s --s3-secret-key %s --s3-endpoint %s --s3-region %s", cloudCredName, id, secret, endpoint, s3Region) + + if disableSSl { + credCreateCmd = fmt.Sprintf("%s --s3-disable-ssl", credCreateCmd) + } + + log.Infof("Running command [%s]", credCreateCmd) + + // Execute the command and check get rebalance status + output, err = Inst().V.GetPxctlCmdOutputConnectionOpts(node.GetStorageNodes()[0], credCreateCmd, node.ConnectionOpts{ + IgnoreError: false, + TimeBeforeRetry: defaultRetryInterval, + Timeout: defaultTimeout, + }, false) + if err != nil { + err = fmt.Errorf("error creating cloud cred, cause: %v", err) return err } - return os.Setenv("KUBECONFIG", DestinationClusterConfigPath) + + log.Infof(output) + + return nil + } -// SwitchBothKubeConfigANDContext switches both KUBECONFIG and context to the given cluster -func SwitchBothKubeConfigANDContext(cluster string) error { - if cluster == "source" { - err := ExportSourceKubeConfig() - if err != nil { - return err +func GetCloudsnapBucketName(contexts []*scheduler.Context) (string, error) { + + var bucketName string + //Stopping cloudnsnaps before bucket deletion + for _, ctx := range contexts { + if strings.Contains(ctx.App.Key, "cloudsnap") { + if bucketName == "" { + vols, err := Inst().S.GetVolumeParameters(ctx) + if err != nil { + err = fmt.Errorf("error getting volume params for %s, cause: %v", ctx.App.Key, err) + return "", err + } + for vol, params := range vols { + csBksps, err := Inst().V.GetCloudsnaps(vol, params) + if err != nil { + err = fmt.Errorf("error getting cloud snaps for %s, cause: %v", vol, err) + return "", err + } + for _, csBksp := range csBksps { + bkid := csBksp.GetId() + bucketName = strings.Split(bkid, "/")[0] + break + } + } + log.Infof("Got Bucket Name [%s]", bucketName) + } + vols, err := Inst().S.GetVolumes(ctx) + if err != nil { + return "", err + } + for _, vol := range vols { + appVol, err := Inst().V.InspectVolume(vol.ID) + if err != nil { + return "", err + } + err = suspendCloudsnapBackup(appVol.Id) + if err != nil { + return "", err + } + } } - err = SetSourceKubeConfig() + } + return bucketName, nil +} + +func DeleteCloudSnapBucket(bucketName string) error { + + if bucketName != "" { + id, secret, endpoint, s3Region, _, err := getCreateCredParams() if err != nil { return err } - } else if cluster == "destination" { - err := ExportDestinationKubeConfig() - if err != nil { - return err + var sess *session.Session + if strings.Contains(endpoint, "minio") { + + sess, err = session.NewSessionWithOptions(session.Options{ + Config: aws.Config{ + Endpoint: aws.String(endpoint), + Region: aws.String(s3Region), + Credentials: credentials.NewStaticCredentials(id, secret, ""), + S3ForcePathStyle: aws.Bool(true), + }, + }) + if err != nil { + return fmt.Errorf("failed to initialize new session: %v", err) + } } - err = SetDestinationKubeConfig() + + if strings.Contains(endpoint, "amazonaws") { + sess, err = session.NewSessionWithOptions(session.Options{ + Config: aws.Config{ + Region: aws.String(s3Region), + Credentials: credentials.NewStaticCredentials(id, secret, ""), + }, + }) + if err != nil { + return fmt.Errorf("failed to initialize new session: %v", err) + } + } + + if sess == nil { + return fmt.Errorf("failed to initialize new session using endpoint [%s], Cause: %v", endpoint, err) + } + + client := s3.New(sess) + err = deleteAndValidateBucketDeletion(client, bucketName) if err != nil { return err } } + return nil } -// DoPDBValidation continuously validates the Pod Disruption Budget against -// cluster upgrades, appending errors to mError, until a stop signal is received. -func DoPDBValidation(stopSignal <-chan struct{}, mError *error) { - pdbValue, allowedDisruptions := GetPDBValue() - isClusterParallelyUpgraded := false - nodes, err := Inst().V.GetDriverNodes() - if err != nil { - *mError = multierr.Append(*mError, err) - return - } - totalNodes := len(nodes) - itr := 1 - for { - log.Infof("PDB validation iteration: #%d", itr) - select { - case <-stopSignal: +func deleteAndValidateBucketDeletion(client *s3.S3, bucketName string) error { + // Delete all objects and versions in the bucket + log.Debugf("Deleting bucket [%s]", bucketName) + time.Sleep(5 * time.Minute) + err := client.ListObjectsV2Pages(&s3.ListObjectsV2Input{ + Bucket: aws.String(bucketName), + }, func(page *s3.ListObjectsV2Output, lastPage bool) bool { + // Iterate through the objects in the bucket and delete them + var objects []*s3.ObjectIdentifier + for _, obj := range page.Contents { + objects = append(objects, &s3.ObjectIdentifier{ + Key: obj.Key, + }) + } + + _, err := client.DeleteObjects(&s3.DeleteObjectsInput{ + Bucket: aws.String(bucketName), + Delete: &s3.Delete{ + Objects: objects, + Quiet: aws.Bool(true), + }, + }) + if err != nil { + fmt.Printf("Failed to delete objects in bucket: %v\n", err) + return false + } + + return true + }) + if err != nil { + return fmt.Errorf("failed to delete objects in bucket: %v", err) + } + + // Delete the bucket + _, err = client.DeleteBucket(&s3.DeleteBucketInput{ + Bucket: aws.String(bucketName), + }) + if err != nil { + var aerr awserr.Error + if errors.As(err, &aerr) { + if aerr.Code() == s3.ErrCodeNoSuchBucket { + log.Infof("Bucket: %v doesn't exist.!!", bucketName) + return nil + } + return fmt.Errorf("couldn't delete bucket: %v", err) + } + } + + log.Infof("Successfully deleted the bucket: %v", bucketName) + return nil +} + +func suspendCloudsnapBackup(volId string) error { + + isBackupActive, err := IsCloudsnapBackupActiveOnVolume(volId) + if err != nil { + return fmt.Errorf("error checking backup status for volume [%s],Err: %v ", volId, err) + } + log.Infof("Backup status for vol [%s]: %v", volId, isBackupActive) + + if isBackupActive { + scheduleOfVol, err := GetVolumeSnapShotScheduleOfVol(volId) + if err != nil { + return fmt.Errorf("error getting volumes snapshot schedule for volume [%s],Err: %v ", volId, err) + } + + if !*scheduleOfVol.Spec.Suspend { + log.Infof("Snapshot schedule is not suspended. Suspending it") + makeSuspend := true + scheduleOfVol.Spec.Suspend = &makeSuspend + _, err := storkops.Instance().UpdateSnapshotSchedule(scheduleOfVol) + if err != nil { + return fmt.Errorf("error suspending volumes snapshot schedule for volume [%s],Err: %v ", volId, err) + } + + } + } + return nil +} + +func getCreateCredParams() (id, secret, endpoint, s3Region string, disableSSLBool bool, err error) { + + id = os.Getenv("S3_AWS_ACCESS_KEY_ID") + if id == "" { + id = os.Getenv("AWS_ACCESS_KEY_ID") + } + + if id == "" { + err = fmt.Errorf("S3_AWS_ACCESS_KEY_ID or AWS_ACCESS_KEY_ID Environment variable is not provided") + return + + } + + secret = os.Getenv("S3_AWS_SECRET_ACCESS_KEY") + if secret == "" { + secret = os.Getenv("AWS_SECRET_ACCESS_KEY") + } + if secret == "" { + err = fmt.Errorf("S3_AWS_SECRET_ACCESS_KEY or AWS_SECRET_ACCESS_KEY Environment variable is not provided") + return + } + + endpoint = os.Getenv("S3_ENDPOINT") + if endpoint == "" { + err = fmt.Errorf("S3_ENDPOINT Environment variable is not provided") + return + } + + s3Region = os.Getenv("S3_REGION") + if s3Region == "" { + err = fmt.Errorf("S3_REGION Environment variable is not provided") + return + } + + disableSSL := os.Getenv("S3_DISABLE_SSL") + disableSSLBool = false + + if len(disableSSL) > 0 { + disableSSLBool, err = strconv.ParseBool(disableSSL) + if err != nil { + err = fmt.Errorf("S3_DISABLE_SSL=%s is not a valid boolean value,err: %v", disableSSL, err) + return + } + } + + return +} + +// ExportSourceKubeConfig changes the KUBECONFIG environment variable to the source cluster config path +func ExportSourceKubeConfig() error { + sourceClusterConfigPath, err := GetSourceClusterConfigPath() + if err != nil { + return err + } + err = os.Unsetenv("KUBECONFIG") + if err != nil { + return err + } + return os.Setenv("KUBECONFIG", sourceClusterConfigPath) +} + +// ExportDestinationKubeConfig changes the KUBECONFIG environment variable to the destination cluster config path +func ExportDestinationKubeConfig() error { + DestinationClusterConfigPath, err := GetDestinationClusterConfigPath() + if err != nil { + return err + } + + err = os.Unsetenv("KUBECONFIG") + if err != nil { + return err + } + return os.Setenv("KUBECONFIG", DestinationClusterConfigPath) +} + +// SwitchBothKubeConfigANDContext switches both KUBECONFIG and context to the given cluster +func SwitchBothKubeConfigANDContext(cluster string) error { + if cluster == "source" { + err := ExportSourceKubeConfig() + if err != nil { + return err + } + err = SetSourceKubeConfig() + if err != nil { + return err + } + } else if cluster == "destination" { + err := ExportDestinationKubeConfig() + if err != nil { + return err + } + err = SetDestinationKubeConfig() + if err != nil { + return err + } + } + return nil +} + +// DoPDBValidation continuously validates the Pod Disruption Budget against +// cluster upgrades, appending errors to mError, until a stop signal is received. +func DoPDBValidation(stopSignal <-chan struct{}, mError *error) { + pdbValue, allowedDisruptions := GetPDBValue() + isClusterParallelyUpgraded := false + nodes, err := Inst().V.GetDriverNodes() + if err != nil { + *mError = multierr.Append(*mError, err) + return + } + totalNodes := len(nodes) + itr := 1 + for { + log.Infof("PDB validation iteration: #%d", itr) + select { + case <-stopSignal: if allowedDisruptions > 1 && !isClusterParallelyUpgraded { err := fmt.Errorf("cluster is not parallely upgraded") *mError = multierr.Append(*mError, err) @@ -11491,7 +11954,7 @@ func IsCloudsnapBackupActiveOnVolume(volName string) (bool, error) { } for _, csBksp := range csBksps { - if csBksp.GetSrcVolumeName() == volName && csBksp.GetStatus() == opsapi.SdkCloudBackupStatusType_SdkCloudBackupStatusTypeActive { + if csBksp.GetSrcVolumeName() == volName && (csBksp.GetStatus() == opsapi.SdkCloudBackupStatusType_SdkCloudBackupStatusTypeActive || csBksp.GetStatus() == opsapi.SdkCloudBackupStatusType_SdkCloudBackupStatusTypeNotStarted) { return true, nil } @@ -11766,3 +12229,696 @@ func SplitStorageDriverUpgradeURL(upgradeURL string) (string, string, error) { pxVersion := pathSegments[len(pathSegments)-1] return endpoint.String(), pxVersion, nil } + +// GetIQNOfNode returns the IQN of the given node in a FA setup +func GetIQNOfNode(n node.Node) (string, error) { + cmd := "cat /etc/iscsi/initiatorname.iscsi" + output, err := runCmdGetOutput(cmd, n) + if err != nil { + return "", err + } + + for _, line := range strings.Split(output, "\n") { + if strings.Contains(line, "InitiatorName") { + return strings.Split(line, "=")[1], nil + } + } + return "", fmt.Errorf("iqn not found") +} + +// GetIQNOfFA gets the IQN of the FA +func GetIQNOfFA(n node.Node, FAclient flasharray.Client) (string, error) { + //Run iscsiadm commands to login to the controllers + networkInterfaces, err := pureutils.GetSpecificInterfaceBasedOnServiceType(&FAclient, "iscsi") + log.FailOnError(err, "Failed to get network interfaces based on service type") + + for _, networkInterface := range networkInterfaces { + ip := networkInterface.Address + log.InfoD("IP address of the iscsi service: %v", ip) + cmd := fmt.Sprintf("iscsiadm -m discovery -t st -p %s", ip) + output, err := runCmdGetOutput(cmd, n) + if err != nil { + return "", err + } + log.InfoD("Output of iscsiadm discovery command: %v", output) + // Split the input text by newline character to get each line + controllers := strings.Split(output, "\n") + // Loop through each line + for _, controller := range controllers { + // Split the line by space + parts := strings.Split(controller, " ") + if len(parts) == 2 { + iqn := parts[1] + return iqn, nil + } + } + + } + return "", fmt.Errorf("IQN not found") + +} + +func RefreshIscsiSession(n node.Node) error { + cmd := "iscsiadm -m session --rescan" + _, err := runCmdGetOutput(cmd, n) + if err != nil { + return err + } + return nil +} + +// GetPVCObjFromVol Returns pvc object from Volume +func GetPVCObjFromVol(vol *volume.Volume) (*v1.PersistentVolumeClaim, error) { + return k8sCore.GetPersistentVolumeClaim(vol.Name, vol.Namespace) +} + +// Enables and Sets trashcan on the cluster +func EnableTrashcanOnCluster(size string) error { + currNode := node.GetStorageDriverNodes()[0] + log.Infof("setting value of trashcan (volume-expiration-minutes) to [%v] ", size) + err := Inst().V.SetClusterOptsWithConfirmation(currNode, + map[string]string{"--volume-expiration-minutes": fmt.Sprintf("%v", size)}) + return err +} + +// WaitForVolumeClean Returns True if Volume in clean state +func WaitForVolumeClean(vol *volume.Volume) error { + t := func() (interface{}, bool, error) { + volDetails, err := Inst().V.InspectVolume(vol.ID) + if err != nil { + return nil, true, fmt.Errorf("error getting volume by using id %s", vol.ID) + } + + for _, v := range volDetails.RuntimeState { + log.InfoD("RuntimeState is in state %s", v.GetRuntimeState()["RuntimeState"]) + if v.GetRuntimeState()["RuntimeState"] == "clean" { + return nil, false, nil + } + } + return nil, true, fmt.Errorf("volume resync hasn't started") + } + _, err := task.DoRetryWithTimeout(t, 30*time.Minute, 60*time.Second) + return err +} + +// GetFADetailsUsed Returns list of FlashArrays used in the cluster +func GetFADetailsUsed() ([]pureutils.FlashArrayEntry, error) { + //get the flash array details + volDriverNamespace, err := Inst().V.GetVolumeDriverNamespace() + if err != nil { + return nil, fmt.Errorf("Failed to get details on FlashArray used in the cluster") + } + + pxPureSecret, err := pureutils.GetPXPureSecret(volDriverNamespace) + if err != nil { + return nil, fmt.Errorf("Unable to get Px Pure Secret") + } + + if len(pxPureSecret.Arrays) > 0 { + return pxPureSecret.Arrays, nil + } + return nil, fmt.Errorf("Failed to list FA Arrays ") +} + +func FlashArrayGetIscsiPorts() (map[string][]string, error) { + flashArrays, err := GetFADetailsUsed() + log.FailOnError(err, "Failed to get flasharray details") + + faWithIscsi := make(map[string][]string) + for _, eachFaInt := range flashArrays { + // Connect to Flash Array using Mgmt IP and API Token + faClient, err := pureutils.PureCreateClientAndConnect(eachFaInt.MgmtEndPoint, eachFaInt.APIToken) + if err != nil { + return nil, err + } + + // Get All Data Interfaces + faData, err := pureutils.GetSpecificInterfaceBasedOnServiceType(faClient, "iscsi") + if err != nil || len(faData) == 0 { + log.Infof("Failed to get data interface on to FA using Mgmt IP [%v]", eachFaInt.MgmtEndPoint) + return nil, err + } + log.InfoD("All FA Details [%v]", faData) + + for _, eachFA := range faData { + log.Infof("Each FA Details [%v]", eachFA) + if eachFA.Enabled && eachFA.Address != "" { + log.Infof("Fa Interface with iscsi IP [%v]", eachFA.Name) + faWithIscsi[eachFaInt.MgmtEndPoint] = append(faWithIscsi[eachFaInt.MgmtEndPoint], eachFA.Name) + } + } + } + return faWithIscsi, nil +} + +// DisableFlashArrayNetworkInterface Disables network interface provided fa Management IP and IFace to Disable on FA +func DisableFlashArrayNetworkInterface(faMgmtIP string, iface string) error { + flashArrays, err := GetFADetailsUsed() + if err != nil { + return err + } + + for _, eachFaInt := range flashArrays { + // Connect to Flash Array using Mgmt IP and API Token + faClient, err := pureutils.PureCreateClientAndConnect(eachFaInt.MgmtEndPoint, eachFaInt.APIToken) + if err != nil { + return err + } + + if eachFaInt.MgmtEndPoint == faMgmtIP { + isEnabled, err := pureutils.IsNetworkInterfaceEnabled(faClient, iface) + log.FailOnError(err, fmt.Sprintf("Interface [%v] is not enabled on FA [%v]", iface, eachFaInt.MgmtEndPoint)) + if err != nil { + log.Errorf("Interface [%v] is not enabled on FA [%v]", iface, eachFaInt.MgmtEndPoint) + return err + } + if !isEnabled { + log.Infof("Network interface is not enabled Ignoring...") + return nil + } + + // Ignore the check here as there is an issue with API's that we are using + _, _ = pureutils.DisableNetworkInterface(faClient, iface) + time.Sleep(10 * time.Second) + + isDisabled, errDis := pureutils.IsNetworkInterfaceEnabled(faClient, iface) + log.Infof("[%v] is Enabled [%v]", iface, isDisabled) + if !isDisabled && errDis == nil { + return nil + } + } + } + return fmt.Errorf("Disabling Interface failed for interface [%v] on Mgmt Ip [%v]", iface, faMgmtIP) +} + +// EnableFlashArrayNetworkInterface Enables network interface on FA Management IP +func EnableFlashArrayNetworkInterface(faMgmtIP string, iface string) error { + flashArrays, err := GetFADetailsUsed() + if err != nil { + return err + } + for _, eachFaInt := range flashArrays { + // Connect to Flash Array using Mgmt IP and API Token + faClient, err := pureutils.PureCreateClientAndConnect(eachFaInt.MgmtEndPoint, eachFaInt.APIToken) + if err != nil { + log.Errorf("Failed to connect to FA using Mgmt IP [%v]", eachFaInt.MgmtEndPoint) + return err + } + + if eachFaInt.MgmtEndPoint == faMgmtIP { + isEnabled, err := pureutils.IsNetworkInterfaceEnabled(faClient, iface) + if err != nil { + log.Errorf(fmt.Sprintf("Interface [%v] is not enabled on FA [%v]", iface, eachFaInt.MgmtEndPoint)) + return err + } + if isEnabled { + log.Infof("Network Interface [%v] is already enabled on cluster [%v]", iface, eachFaInt.MgmtEndPoint) + return nil + } + + // Ignore the check here as there is an issue with API's that we are using + _, _ = pureutils.EnableNetworkInterface(faClient, iface) + isEnabled, errDis := pureutils.IsNetworkInterfaceEnabled(faClient, iface) + if isEnabled && errDis == nil { + return nil + } + } + } + return fmt.Errorf("Enabling Interface failed for interface [%v] on Mgmt Ip [%v]", iface, faMgmtIP) +} + +// GetFBDetailsFromCluster Returns list of FlashBlades used in the cluster +func GetFBDetailsFromCluster() ([]pureutils.FlashBladeEntry, error) { + //get the flash array details + volDriverNamespace, err := Inst().V.GetVolumeDriverNamespace() + if err != nil { + return nil, fmt.Errorf("Failed to get details on FlashBlade used in the cluster") + } + + pxPureSecret, err := pureutils.GetPXPureSecret(volDriverNamespace) + if err != nil { + return nil, fmt.Errorf("Unable to get Px Pure Secret") + } + + if len(pxPureSecret.Blades) > 0 { + return pxPureSecret.Blades, nil + } + return nil, fmt.Errorf("Failed to list available blades from FB ") +} + +// FilterAllPureVolumes returns filtered Pure Volumes from list of Volumes +func FilterAllPureVolumes(volumes []*volume.Volume) ([]volume.Volume, error) { + pureVolumes := []volume.Volume{} + for _, eachVol := range volumes { + isPureVol, err := Inst().V.IsPureVolume(eachVol) + log.FailOnError(err, "validating pureVolume returned err") + if isPureVol { + pureVolumes = append(pureVolumes, *eachVol) + } + } + return pureVolumes, nil +} + +// GetFADetailsFromVolumeName returns FA Struct of FA where the volume is created +func GetFADetailsFromVolumeName(volumeName string) ([]pureutils.FlashArrayEntry, error) { + faEntries := []pureutils.FlashArrayEntry{} + allFAs, err := GetFADetailsUsed() + if err != nil { + return nil, err + } + for _, eachFA := range allFAs { + // Connect to FA Client + log.Info("Connecting to FA [%v]", eachFA.MgmtEndPoint) + faClient, err := pureutils.PureCreateClientAndConnect(eachFA.MgmtEndPoint, eachFA.APIToken) + if err != nil { + log.Errorf("Failed to connect to FA using Mgmt IP [%v]", eachFA.MgmtEndPoint) + return nil, err + } + + // List all the Volumes present in FA + allVolumes, err := pureutils.ListAllTheVolumesFromSpecificFA(faClient) + if err != nil { + return nil, err + } + for _, eachVol := range allVolumes { + if strings.Contains(eachVol.Name, volumeName) { + log.Infof("Volume [%v] present on Host [%v]", eachVol.Name, eachFA.MgmtEndPoint) + faEntries = append(faEntries, eachFA) + } + } + } + return faEntries, nil +} + +// GetVolumeCompleteNameOnFA returns volume Name with Prefix from FA +func GetVolumeCompleteNameOnFA(faClient *flasharray.Client, volName string) (string, error) { + // List all the Volumes present in FA + allVolumes, err := pureutils.ListAllTheVolumesFromSpecificFA(faClient) + if err != nil { + return "", err + } + for _, eachVol := range allVolumes { + if strings.Contains(eachVol.Name, volName) { + return eachVol.Name, nil + } + } + return "", nil +} + +// GetConnectedHostToVolume returns the host details attached to Volume +func GetConnectedHostToVolume(faClient *flasharray.Client, volumeName string) (string, error) { + allHostVolumes, err := pureutils.ListVolumesFromHosts(faClient) + if err != nil { + return "", err + } + for eachHost, volumeDetails := range allHostVolumes { + for _, eachVol := range volumeDetails { + if eachVol.Vol == volumeName { + log.Infof("Volume [%v] is present in Host [%v]", eachVol.Vol, eachHost) + return eachHost, nil + } + } + } + return "", fmt.Errorf("Failed to get details of Host for Volume [%v]", volumeName) +} + +// DeleteVolumeFromFABackend returns true if volume is deleted from backend +func DeleteVolumeFromFABackend(fa pureutils.FlashArrayEntry, volumeName string) (bool, error) { + faClient, err := pureutils.PureCreateClientAndConnect(fa.MgmtEndPoint, fa.APIToken) + if err != nil { + log.Errorf("Failed to connect to FA using Mgmt IP [%v]", fa.MgmtEndPoint) + return false, err + } + + volName, err := GetVolumeCompleteNameOnFA(faClient, volumeName) + if err != nil { + return false, err + } + log.Infof("Name of the Volume is [%v]", volName) + + // Get details of Host from Volume Name + hostName, err := GetConnectedHostToVolume(faClient, volName) + if err != nil { + return false, err + } + log.Infof("Host Name attached to Volume [%v] is [%v]", volName, hostName) + + // Disconnect Host from Volume + connVol, err := pureutils.DisConnectVolumeFromHost(faClient, hostName, volName) + if err != nil { + return false, err + } + log.Infof("Details of Disconnected Volume [%v]", connVol) + + // Verify if volume exists in specific FA + isExists, err := pureutils.IsFAVolumeExists(faClient, volName) + if err != nil { + return false, err + } + if !isExists { + log.Infof("Volume [%v] doesn't exist on the FA Cluster [%v]", volName, fa.MgmtEndPoint) + return true, nil + } + // Delete the Volume from FA Backend + log.Infof("Deleting volume with Name [%v]", volName) + _, err = pureutils.DeleteVolumeOnFABackend(faClient, volName) + if err != nil { + return false, err + } + // Verify if the volume is still exists on FA + // Verify if volume exists in specific FA + isExists, err = pureutils.IsFAVolumeExists(faClient, volName) + if err != nil { + return false, err + } + if isExists { + return false, fmt.Errorf("Volume [%v] still exist in backend", volName) + } + return true, nil + +} + +type MultipathDevices struct { + DevId string + DmID string + Size string + Status string + Type string + Paths []PathInfo +} + +// PathInfo represents information about a path of a multipath device. +type PathInfo struct { + Devnode string + Status string +} + +// Returns all the list of multipath devices present in the cluster nodes +func GetAllMultipathDevicesPresent(n *node.Node) ([]MultipathDevices, error) { + multiPathDevs := []MultipathDevices{} + output, err := runCmdOnce(fmt.Sprintf("multipath -ll"), *n) + log.Infof("%v", err) + if err != nil { + return nil, err + } + log.Infof("Output Details before parsing [%v]", output) + + devDetailsPattern := regexp.MustCompile(`^(.*)\s+(dm-.*)\s+(.*)\,.*`) + sizeMatchPattern := regexp.MustCompile(`.*size=([0-9]+G)\s+.*`) + statusMatchPatern := regexp.MustCompile(`.*status\=(\w+)`) + sdMatchPattern := regexp.MustCompile(`.*\s+(\d+:\d+:\d+:\d+)+\s+(sd\w+)\s+([0-9:]+)\s+(.*)`) + + // Create a Reader from the string + reader := strings.Split(output, "\n") + log.Infof("Output Details [%v]", reader) + + initPatternFound := false + multipathDevices := MultipathDevices{} + for i, eachLine := range reader { + matched := devDetailsPattern.FindStringSubmatch(eachLine) + if len(matched) > 1 { + if initPatternFound { + multiPathDevs = append(multiPathDevs, multipathDevices) + } + multipathDevices = MultipathDevices{} + multipathDevices.DevId = matched[1] + multipathDevices.DmID = matched[2] + multipathDevices.Type = matched[3] + initPatternFound = true + } + + matched = sizeMatchPattern.FindStringSubmatch(eachLine) + if len(matched) > 1 { + multipathDevices.Size = matched[1] + } + + matched = statusMatchPatern.FindStringSubmatch(eachLine) + if len(matched) > 1 { + multipathDevices.Status = matched[1] + } + + matched = sdMatchPattern.FindStringSubmatch(eachLine) + if len(matched) > 1 { + paths := PathInfo{} + paths.Devnode = matched[2] + paths.Status = matched[4] + multipathDevices.Paths = append(multipathDevices.Paths, paths) + } + // Validate Last Line + if i == len(reader)-1 { + multiPathDevs = append(multiPathDevs, multipathDevices) + } + } + + return multiPathDevs, nil +} + +// GetMultipathDeviceIDsOnNode returns List of all Multipath Devices on Node +func GetMultipathDeviceIDsOnNode(n *node.Node) ([]string, error) { + multiPathDev := []string{} + multiPathDevices, err := GetAllMultipathDevicesPresent(n) + if err != nil { + return nil, err + } + for _, eachMultipathDev := range multiPathDevices { + multiPathDev = append(multiPathDev, eachMultipathDev.DevId) + } + return multiPathDev, nil +} + +// CreateFlashStorageClass Creates storage class for Purity Backend +// ReclaimPolicy can be v1.PersistentVolumeReclaimDelete, v1.PersistentVolumeReclaimRetain, v1.PersistentVolumeReclaimRecycle +// volumeBinding storageapi.VolumeBindingImmediate, storageapi.VolumeBindingWaitForFirstConsumer +func CreateFlashStorageClass(scName string, + scType string, + ReclaimPolicy v1.PersistentVolumeReclaimPolicy, + params map[string]string, + MountOptions []string, + AllowVolumeExpansion *bool, + VolumeBinding storageapi.VolumeBindingMode, + AllowedTopologies map[string][]string) error { + + var reclaimPolicy v1.PersistentVolumeReclaimPolicy + param := make(map[string]string) + for key, value := range params { + param[key] = value + } + // add pure backend type + param["backend"] = scType + param["repl"] = "1" + + v1obj := metav1.ObjectMeta{ + Name: scName, + } + + if VolumeBinding != storageapi.VolumeBindingImmediate && VolumeBinding != storageapi.VolumeBindingWaitForFirstConsumer { + return fmt.Errorf("Unsupported binding mode specified , please use storageapi.VolumeBindingImmediate or storageapi.VolumeBindingWaitForFirstConsumer") + } + + // Declare Reclaim Policies + switch ReclaimPolicy { + case v1.PersistentVolumeReclaimDelete: + reclaimPolicy = v1.PersistentVolumeReclaimDelete + case v1.PersistentVolumeReclaimRetain: + reclaimPolicy = v1.PersistentVolumeReclaimRetain + case v1.PersistentVolumeReclaimRecycle: + reclaimPolicy = v1.PersistentVolumeReclaimRecycle + } + + var allowedTopologies []v1.TopologySelectorTerm = nil + if AllowedTopologies != nil { + topologySelector := v1.TopologySelectorTerm{} + topologyList := []v1.TopologySelectorLabelRequirement{} + for key, value := range AllowedTopologies { + topology := v1.TopologySelectorLabelRequirement{} + topology.Key = key + topology.Values = value + topologyList = append(topologyList, topology) + } + topologySelector.MatchLabelExpressions = topologyList + allowedTopologies = append(allowedTopologies, topologySelector) + } + + scObj := storageapi.StorageClass{ + ObjectMeta: v1obj, + Provisioner: k8s.CsiProvisioner, + Parameters: param, + MountOptions: MountOptions, + ReclaimPolicy: &reclaimPolicy, + AllowVolumeExpansion: AllowVolumeExpansion, + VolumeBindingMode: &VolumeBinding, + AllowedTopologies: allowedTopologies, + } + + k8storage := schedstorage.Instance() + _, err := k8storage.CreateStorageClass(&scObj) + return err +} + +// CreateFlashPVCOnCluster Creates PVC on the Cluster +func CreateFlashPVCOnCluster(pvcName string, scName string, nameSpace string, sizeGb string) error { + log.InfoD("creating PVC [%s] in namespace [%s]", pvcName, nameSpace) + pvcObj := &v1.PersistentVolumeClaim{ + ObjectMeta: metav1.ObjectMeta{ + Name: pvcName, + Namespace: nameSpace, + }, + Spec: v1.PersistentVolumeClaimSpec{ + AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}, + StorageClassName: &scName, + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{ + v1.ResourceStorage: resource.MustParse(sizeGb), + }, + }, + }, + } + _, err := core.Instance().CreatePersistentVolumeClaim(pvcObj) + return err +} + +// GetAllPVCFromNs returns all PVC's Created on specific NameSpace +func GetAllPVCFromNs(nsName string, labelSelector map[string]string) ([]v1.PersistentVolumeClaim, error) { + pvcList, err := core.Instance().GetPersistentVolumeClaims(nsName, labelSelector) + if err != nil { + return nil, err + } + return pvcList.Items, nil +} + +// Returns details about cloud drives present in the cluster +type CloudConfig struct { + Type string `json:"Type"` + Size int `json:"Size"` + ID string `json:"ID"` + PoolID string `json:"PoolID"` + Path string `json:"Path"` + Iops int `json:"Iops"` + Vpus int `json:"Vpus"` + PXType string `json:"PXType"` + State string `json:"State"` + Labels map[string]string `json:"labels"` + AttachOptions interface{} `json:"AttachOptions"` + Provisioner string `json:"Provisioner"` + EncryptionKeyInfo string `json:"EncryptionKeyInfo"` +} + +type CloudData struct { + Configs map[string]CloudConfig `json:"Configs"` + NodeID string `json:"NodeID"` + ReservedInstanceID string `json:"ReservedInstanceID"` + SchedulerNodeName string `json:"SchedulerNodeName"` + NodeIndex int `json:"NodeIndex"` + CreateTimestamp time.Time `json:"CreateTimestamp"` + InstanceID string `json:"InstanceID"` + Zone string `json:"Zone"` + State string `json:"State"` + Labels map[string]string `json:"labels"` +} + +// GetCloudDriveDetailsOnCluster returns list of cloud drives on the cluster +func GetCloudDriveList() (*map[string]CloudData, error) { + var data map[string]CloudData + allNodes := node.GetStorageNodes() + for _, eachNode := range allNodes { + + stNode, err := Inst().V.GetDriverNode(&eachNode) + if err != nil { + return nil, err + } + if stNode.Status != opsapi.Status_STATUS_OK { + continue + } + command := "pxctl cd list -j" + output, err := runCmdOnce(command, eachNode) + log.Infof("%v", err) + if err != nil { + return nil, err + } + + err = json.Unmarshal([]byte(output), &data) + if err != nil { + fmt.Println("Error:", err) + return nil, err + } + break + } + log.Infof("%v", &data) + return &data, nil + +} + +// GetCloudDrivesOnSpecificNode Returns details of all Cloud drives from specific Node +func GetCloudDrivesOnSpecificNode(n *node.Node) (*CloudData, error) { + allCloudDrives, err := GetCloudDriveList() + if err != nil { + return nil, err + } + for nodeId, cList := range *allCloudDrives { + if nodeId == n.Id { + return &cList, nil + } + } + return nil, fmt.Errorf("Failed to get Cloud Drive on Specific Node [%v]", n.Name) +} + +// IsPureCluster returns True if backend Type is Pure +func IsPureCluster() bool { + if stc, err := Inst().V.GetDriver(); err == nil { + if oputil.IsPure(stc) { + logrus.Infof("Pure installation with PX operator detected.") + return true + } + } + return false +} + +// IsPureCloudProvider Returns true if cloud Provider is Pure +func IsPureCloudProvider() bool { + if stc, err := Inst().V.GetDriver(); err == nil { + if oputil.GetCloudProvider(stc) == "pure" { + return true + } + } + return false +} + +// GetDrivesFromSpecificPoolOnNode returns List of Drives On Specific Node +func GetDrivesFromSpecificPoolOnNode(n *node.Node, poolId string) ([]string, error) { + allPools, err := Inst().V.GetPoolDrives(n) + if err != nil { + return nil, err + } + log.Infof("All Pool IDs [%v]", allPools) + if val, ok := allPools[poolId]; ok { + return val, nil + } + return nil, fmt.Errorf("Failed to get details of Drive on Pool [%v]", poolId) +} + +// GetMultipathDeviceOnPool Returns list of multipath devices on Pool +func GetMultipathDeviceOnPool(n *node.Node) (map[string][]string, error) { + multipathMap := make(map[string][]string) + + // Get All Multipath Devices on the perticular Node + allMultipathDev, err := GetMultipathDeviceIDsOnNode(n) + if err != nil { + return nil, err + } + + allPools, err := Inst().V.GetPoolDrives(n) + if err != nil { + return nil, err + } + + for eachPoolId, eachDev := range allPools { + for _, dev := range eachDev { + for _, multiDev := range allMultipathDev { + if strings.Contains(dev, multiDev) { + multipathMap[eachPoolId] = append(multipathMap[eachPoolId], multiDev) + } + } + } + } + return multipathMap, nil +} \ No newline at end of file diff --git a/tests/kubevirt_helper.go b/tests/kubevirt_helper.go index c350e1ff2..989cde0c9 100644 --- a/tests/kubevirt_helper.go +++ b/tests/kubevirt_helper.go @@ -39,6 +39,8 @@ var ( k8sKubevirt = kubevirt.Instance() importerPodCompletionTimeout = 30 * time.Minute importerPodRetryInterval = 20 * time.Second + defaultMigrationTimeout = 30 * time.Minute + defaultMigrationRetryInterval = 30 * time.Second ) // AddDisksToKubevirtVM is a function which takes number of disks to add and adds them to the kubevirt VMs passed (Please provide size in Gi) @@ -233,7 +235,7 @@ func GetStorageClassOfVmPVC(vm *scheduler.Context) (string, error) { // StartAndWaitForVMIMigration starts the VM migration and waits for the VM to be in running state in the new node func StartAndWaitForVMIMigration(virtualMachineCtx *scheduler.Context, ctx context1.Context) error { - + log.InfoD("Initiating VM migration for VM [%s] in namespace [%s]", virtualMachineCtx.App.Key, virtualMachineCtx.App.NameSpace) vms, err := GetAllVMsFromScheduledContexts([]*scheduler.Context{virtualMachineCtx}) if err != nil { return err @@ -275,6 +277,7 @@ func StartAndWaitForVMIMigration(virtualMachineCtx *scheduler.Context, ctx conte t := func() (interface{}, bool, error) { migr, err = kubevirtdy.Instance().GetVirtualMachineInstanceMigration(ctx, vmiNamespace, migration.Name) if err != nil { + log.InfoD("Error: %v", err) return "", false, fmt.Errorf("failed to get migration for VM [%s] in namespace [%s]", vmiName, vmiNamespace) } if !(migr.Phase == "Succeeded") { @@ -297,7 +300,7 @@ func StartAndWaitForVMIMigration(virtualMachineCtx *scheduler.Context, ctx conte log.InfoD("VM pod live migrated to node: [%s]", nodeNameAfterMigration) return "", false, nil } - _, err = task.DoRetryWithTimeout(t, defaultVmMountCheckTimeout, defaultVmMountCheckRetryInterval) + _, err = task.DoRetryWithTimeout(t, defaultMigrationTimeout, defaultMigrationRetryInterval) if err != nil { return err } @@ -762,3 +765,75 @@ func DeployVMTemplatesAndValidate() error { _, err = task.DoRetryWithTimeout(waitForCompletedAnnotations, importerPodCompletionTimeout, importerPodRetryInterval) return err } + +// GetReplicaNodesOfVM returns a list of nodes where the replica of the volumes are present +func GetReplicaNodesOfVM(virtualMachineCtx *scheduler.Context) ([]string, error) { + vols, err := Inst().S.GetVolumes(virtualMachineCtx) + if err != nil { + return nil, err + } + // Get replica nodes where the volumes are present + replicaNodes, err := getReplicaNodes(vols[0]) + if err != nil { + return nil, err + } + replicaNodesName := []string{} + for _, replicaNode := range replicaNodes { + id, err := node.GetNodeDetailsByNodeID(replicaNode) + log.FailOnError(err, "Failed to get node details by node id") + replicaNodesName = append(replicaNodesName, id.Name) + } + + return replicaNodesName, nil +} + +func GetNonReplicaNodesOfVM(virtualMachineCtx *scheduler.Context) ([]string, error) { + vols, err := Inst().S.GetVolumes(virtualMachineCtx) + if err != nil { + return nil, err + } + // Get replica nodes where the volumes are present + replicaNodes, err := getReplicaNodes(vols[0]) + if err != nil { + return nil, err + } + for _, replicaNode := range replicaNodes { + log.Infof("Replica node: %s", replicaNode) + } + + replicaNodesName := []string{} + for _, replicaNode := range replicaNodes { + id, err := node.GetNodeDetailsByNodeID(replicaNode) + log.FailOnError(err, "Failed to get node details by node id") + replicaNodesName = append(replicaNodesName, id.Name) + } + + // Get all nodes in the cluster + allNodes, err := GetStorageNodes() + if err != nil { + return nil, err + } + for _, node := range allNodes { + log.Infof("All nodes: %s", node.Name) + } + + // Get non-replica nodes + nonReplicaNodes := []string{} + + for _, node := range allNodes { + flag := false + for _, replicaNode := range replicaNodesName { + if node.Name == replicaNode { + flag = true + } + } + if !flag { + nonReplicaNodes = append(nonReplicaNodes, node.Name) + } + } + for _, nonReplicaNode := range nonReplicaNodes { + log.Infof("Non-replica node: %s", nonReplicaNode) + } + + return nonReplicaNodes, nil +} diff --git a/tests/longevity/longevity_helper.go b/tests/longevity/longevity_helper.go index 4cefb152b..846ae2618 100644 --- a/tests/longevity/longevity_helper.go +++ b/tests/longevity/longevity_helper.go @@ -209,8 +209,10 @@ func populateDisruptiveTriggers() { RebootManyNodes: true, RestartKvdbVolDriver: true, NodeDecommission: true, + DetachDrives: true, CsiSnapShot: false, CsiSnapRestore: false, + DeleteCloudsnaps: false, KVDBFailover: true, HAIncreaseAndReboot: true, AddDiskAndReboot: true, @@ -218,6 +220,7 @@ func populateDisruptiveTriggers() { VolumeCreatePxRestart: true, OCPStorageNodeRecycle: true, CrashPXDaemon: true, + PowerOffAllVMs: true, } } @@ -560,10 +563,12 @@ func populateIntervals() { triggerInterval[UpgradeVolumeDriver] = make(map[int]time.Duration) triggerInterval[UpgradeVolumeDriverFromCatalog] = make(map[int]time.Duration) triggerInterval[UpgradeCluster] = make(map[int]time.Duration) + triggerInterval[PowerOffAllVMs] = make(map[int]time.Duration) triggerInterval[AppTasksDown] = make(map[int]time.Duration) triggerInterval[AutoFsTrim] = make(map[int]time.Duration) triggerInterval[UpdateVolume] = make(map[int]time.Duration) triggerInterval[UpdateIOProfile] = make(map[int]time.Duration) + triggerInterval[DetachDrives] = make(map[int]time.Duration) triggerInterval[RestartManyVolDriver] = make(map[int]time.Duration) triggerInterval[RebootManyNodes] = make(map[int]time.Duration) triggerInterval[NodeDecommission] = make(map[int]time.Duration) @@ -618,9 +623,10 @@ func populateIntervals() { triggerInterval[VolumeDriverDownVCluster] = make(map[int]time.Duration) triggerInterval[SetDiscardMounts] = make(map[int]time.Duration) triggerInterval[ResetDiscardMounts] = make(map[int]time.Duration) + triggerInterval[ScaleFADAVolumeAttach] = map[int]time.Duration{} + triggerInterval[DeleteCloudsnaps] = make(map[int]time.Duration) baseInterval := 10 * time.Minute - triggerInterval[BackupScaleMongo][10] = 1 * baseInterval triggerInterval[BackupScaleMongo][9] = 2 * baseInterval triggerInterval[BackupScaleMongo][8] = 3 * baseInterval @@ -937,7 +943,6 @@ func populateIntervals() { triggerInterval[StorkAppBkpPoolResize][3] = 21 * baseInterval triggerInterval[StorkAppBkpPoolResize][2] = 24 * baseInterval triggerInterval[StorkAppBkpPoolResize][1] = 27 * baseInterval - baseInterval = 60 * time.Minute triggerInterval[AppTasksDown][10] = 1 * baseInterval @@ -995,6 +1000,17 @@ func populateIntervals() { triggerInterval[CrashPXDaemon][2] = 24 * baseInterval triggerInterval[CrashPXDaemon][1] = 27 * baseInterval + triggerInterval[PowerOffAllVMs][10] = 1 * baseInterval + triggerInterval[PowerOffAllVMs][9] = 3 * baseInterval + triggerInterval[PowerOffAllVMs][8] = 6 * baseInterval + triggerInterval[PowerOffAllVMs][7] = 9 * baseInterval + triggerInterval[PowerOffAllVMs][6] = 12 * baseInterval + triggerInterval[PowerOffAllVMs][5] = 15 * baseInterval + triggerInterval[PowerOffAllVMs][4] = 18 * baseInterval + triggerInterval[PowerOffAllVMs][3] = 21 * baseInterval + triggerInterval[PowerOffAllVMs][2] = 24 * baseInterval + triggerInterval[PowerOffAllVMs][1] = 27 * baseInterval + triggerInterval[NodeMaintenanceCycle][10] = 1 * baseInterval triggerInterval[NodeMaintenanceCycle][9] = 3 * baseInterval triggerInterval[NodeMaintenanceCycle][8] = 6 * baseInterval @@ -1189,6 +1205,17 @@ func populateIntervals() { triggerInterval[CloudSnapShotRestore][2] = 24 * baseInterval triggerInterval[CloudSnapShotRestore][1] = 27 * baseInterval + triggerInterval[DeleteCloudsnaps][10] = 1 * baseInterval + triggerInterval[DeleteCloudsnaps][9] = 3 * baseInterval + triggerInterval[DeleteCloudsnaps][8] = 6 * baseInterval + triggerInterval[DeleteCloudsnaps][7] = 9 * baseInterval + triggerInterval[DeleteCloudsnaps][6] = 12 * baseInterval + triggerInterval[DeleteCloudsnaps][5] = 15 * baseInterval // Default global chaos level, 3 hrs + triggerInterval[DeleteCloudsnaps][4] = 18 * baseInterval + triggerInterval[DeleteCloudsnaps][3] = 21 * baseInterval + triggerInterval[DeleteCloudsnaps][2] = 24 * baseInterval + triggerInterval[DeleteCloudsnaps][1] = 27 * baseInterval + triggerInterval[LocalSnapShot][10] = 1 * baseInterval triggerInterval[LocalSnapShot][9] = 3 * baseInterval triggerInterval[LocalSnapShot][8] = 6 * baseInterval @@ -1321,6 +1348,17 @@ func populateIntervals() { triggerInterval[UpdateIOProfile][2] = 24 * baseInterval triggerInterval[UpdateIOProfile][1] = 27 * baseInterval + triggerInterval[DetachDrives][10] = 1 * baseInterval + triggerInterval[DetachDrives][9] = 3 * baseInterval + triggerInterval[DetachDrives][8] = 6 * baseInterval + triggerInterval[DetachDrives][7] = 9 * baseInterval + triggerInterval[DetachDrives][6] = 12 * baseInterval + triggerInterval[DetachDrives][5] = 15 * baseInterval + triggerInterval[DetachDrives][4] = 18 * baseInterval + triggerInterval[DetachDrives][3] = 21 * baseInterval + triggerInterval[DetachDrives][2] = 24 * baseInterval + triggerInterval[DetachDrives][1] = 27 * baseInterval + triggerInterval[NodeDecommission][10] = 1 * baseInterval triggerInterval[NodeDecommission][9] = 3 * baseInterval triggerInterval[NodeDecommission][8] = 6 * baseInterval @@ -1617,6 +1655,17 @@ func populateIntervals() { triggerInterval[OCPStorageNodeRecycle][2] = 24 * baseInterval triggerInterval[OCPStorageNodeRecycle][1] = 30 * baseInterval + triggerInterval[ScaleFADAVolumeAttach][10] = 1 * baseInterval + triggerInterval[ScaleFADAVolumeAttach][9] = 3 * baseInterval + triggerInterval[ScaleFADAVolumeAttach][8] = 6 * baseInterval + triggerInterval[ScaleFADAVolumeAttach][7] = 9 * baseInterval + triggerInterval[ScaleFADAVolumeAttach][6] = 12 * baseInterval + triggerInterval[ScaleFADAVolumeAttach][5] = 15 * baseInterval + triggerInterval[ScaleFADAVolumeAttach][4] = 18 * baseInterval + triggerInterval[ScaleFADAVolumeAttach][3] = 21 * baseInterval + triggerInterval[ScaleFADAVolumeAttach][2] = 24 * baseInterval + triggerInterval[ScaleFADAVolumeAttach][1] = 30 * baseInterval + // Chaos Level of 0 means disable test trigger triggerInterval[DeployApps][0] = 0 triggerInterval[RebootNode][0] = 0 @@ -1687,14 +1736,17 @@ func populateIntervals() { triggerInterval[AutopilotRebalance][0] = 0 triggerInterval[VolumeCreatePxRestart][0] = 0 triggerInterval[CloudSnapShotRestore][0] = 0 + triggerInterval[DeleteCloudsnaps][0] = 0 triggerInterval[LocalSnapShotRestore][0] = 0 triggerInterval[UpdateIOProfile][0] = 0 triggerInterval[AggrVolDepReplResizeOps][0] = 0 triggerInterval[UpdateIOProfile][0] = 0 + triggerInterval[DetachDrives][0] = 0 triggerInterval[AddStorageNode][0] = 0 triggerInterval[AddStoragelessNode][0] = 0 triggerInterval[OCPStorageNodeRecycle][0] = 0 triggerInterval[NodeDecommission][0] = 0 + triggerInterval[PowerOffAllVMs][0] = 0 triggerInterval[HAIncreaseAndRestartPX][0] = 0 triggerInterval[HAIncreaseAndCrashPX][0] = 0 triggerInterval[CrashPXDaemon][0] = 0 @@ -1705,6 +1757,7 @@ func populateIntervals() { triggerInterval[ReallocateSharedMount][0] = 0 triggerInterval[SetDiscardMounts][0] = 0 triggerInterval[ResetDiscardMounts][0] = 0 + triggerInterval[ScaleFADAVolumeAttach][0] = 0 } func isTriggerEnabled(triggerType string) (time.Duration, bool) { diff --git a/tests/longevity/longevity_test.go b/tests/longevity/longevity_test.go index 473ca42d4..6e2fec3b3 100644 --- a/tests/longevity/longevity_test.go +++ b/tests/longevity/longevity_test.go @@ -2,7 +2,6 @@ package tests import ( "fmt" - "github.com/portworx/torpedo/drivers/scheduler/iks" "math" "os" "strconv" @@ -10,6 +9,8 @@ import ( "sync" "time" + "github.com/portworx/torpedo/drivers/scheduler/iks" + "github.com/portworx/torpedo/pkg/log" . "github.com/onsi/ginkgo/v2" @@ -29,18 +30,17 @@ var _ = Describe("{Longevity}", func() { var populateDone bool triggerEventsChan := make(chan *EventRecord, 100) triggerFunctions = map[string]func(*[]*scheduler.Context, *chan *EventRecord){ - DeployApps: TriggerDeployNewApps, - RebootNode: TriggerRebootNodes, - ValidatePdsApps: TriggerValidatePdsApps, - CrashNode: TriggerCrashNodes, - CrashPXDaemon: TriggerCrashPXDaemon, - RestartVolDriver: TriggerRestartVolDriver, - CrashVolDriver: TriggerCrashVolDriver, - HAIncrease: TriggerHAIncrease, - HADecrease: TriggerHADecrease, - VolumeClone: TriggerVolumeClone, - VolumeResize: TriggerVolumeResize, - //EmailReporter: TriggerEmailReporter, + DeployApps: TriggerDeployNewApps, + RebootNode: TriggerRebootNodes, + ValidatePdsApps: TriggerValidatePdsApps, + CrashNode: TriggerCrashNodes, + CrashPXDaemon: TriggerCrashPXDaemon, + RestartVolDriver: TriggerRestartVolDriver, + CrashVolDriver: TriggerCrashVolDriver, + HAIncrease: TriggerHAIncrease, + HADecrease: TriggerHADecrease, + VolumeClone: TriggerVolumeClone, + VolumeResize: TriggerVolumeResize, AppTaskDown: TriggerAppTaskDown, AppTasksDown: TriggerAppTasksDown, AddDrive: TriggerAddDrive, @@ -74,6 +74,7 @@ var _ = Describe("{Longevity}", func() { MongoAsyncDR: TriggerMongoAsyncDR, AsyncDRVolumeOnly: TriggerAsyncDRVolumeOnly, AutoFsTrimAsyncDR: TriggerAutoFsTrimAsyncDR, + DetachDrives: TriggerDetachDrives, IopsBwAsyncDR: TriggerIopsBwAsyncDR, StorkApplicationBackup: TriggerStorkApplicationBackup, StorkAppBkpVolResize: TriggerStorkAppBkpVolResize, @@ -85,8 +86,8 @@ var _ = Describe("{Longevity}", func() { AddDiskAndReboot: TriggerPoolAddDiskAndReboot, ResizeDiskAndReboot: TriggerPoolResizeDiskAndReboot, AutopilotRebalance: TriggerAutopilotPoolRebalance, - VolumeCreatePxRestart: TriggerVolumeCreatePXRestart, DeleteOldNamespaces: TriggerDeleteOldNamespaces, + DeleteCloudsnaps: TriggerDeleteCloudsnaps, MetroDRMigrationSchedule: TriggerMetroDRMigrationSchedule, CloudSnapShotRestore: TriggerCloudSnapshotRestore, LocalSnapShotRestore: TriggerLocalSnapshotRestore, @@ -105,7 +106,9 @@ var _ = Describe("{Longevity}", func() { CreateAndRunMultipleFioOnVcluster: TriggerCreateAndRunMultipleFioOnVcluster, VolumeDriverDownVCluster: TriggerVolumeDriverDownVCluster, SetDiscardMounts: TriggerSetDiscardMounts, + PowerOffAllVMs: TriggerPowerOffAllVMs, ResetDiscardMounts: TriggerResetDiscardMounts, + ScaleFADAVolumeAttach: TriggerScaleFADAVolumeAttach, } //Creating a distinct trigger to make sure email triggers at regular intervals emailTriggerFunction = map[string]func(){ diff --git a/tests/testTriggers.go b/tests/testTriggers.go index cae259bf9..32aaa668c 100644 --- a/tests/testTriggers.go +++ b/tests/testTriggers.go @@ -4,13 +4,6 @@ import ( "bytes" "container/ring" "fmt" - "github.com/devans10/pugo/flasharray" - oputil "github.com/libopenstorage/operator/pkg/util/test" - "github.com/portworx/torpedo/drivers/scheduler/aks" - "github.com/portworx/torpedo/drivers/scheduler/eks" - "github.com/portworx/torpedo/drivers/scheduler/gke" - "github.com/portworx/torpedo/drivers/scheduler/iks" - "github.com/portworx/torpedo/pkg/osutils" "math" "math/rand" "net/url" @@ -25,15 +18,27 @@ import ( "text/template" "time" + + "github.com/devans10/pugo/flasharray" + oputil "github.com/libopenstorage/operator/pkg/util/test" + "github.com/portworx/torpedo/drivers/scheduler/aks" + "github.com/portworx/torpedo/drivers/scheduler/eks" + "github.com/portworx/torpedo/drivers/scheduler/gke" + "github.com/portworx/torpedo/drivers/scheduler/iks" + "github.com/portworx/torpedo/pkg/osutils" + "golang.org/x/exp/slices" + volsnapv1 "github.com/kubernetes-csi/external-snapshotter/client/v6/apis/volumesnapshot/v1" snapv1 "github.com/kubernetes-incubator/external-storage/snapshot/pkg/apis/crd/v1" apios "github.com/libopenstorage/openstorage/api" opsapi "github.com/libopenstorage/openstorage/api" + operatorcorev1 "github.com/libopenstorage/operator/pkg/apis/core/v1" storkapi "github.com/libopenstorage/stork/pkg/apis/stork/v1alpha1" storkv1 "github.com/libopenstorage/stork/pkg/apis/stork/v1alpha1" "github.com/onsi/ginkgo/v2" "github.com/pborman/uuid" api "github.com/portworx/px-backup-api/pkg/apis/v1" + "github.com/portworx/sched-ops/k8s/apps" "github.com/portworx/sched-ops/k8s/core" "github.com/portworx/sched-ops/k8s/operator" storage "github.com/portworx/sched-ops/k8s/storage" @@ -41,10 +46,11 @@ import ( "github.com/portworx/sched-ops/task" "gopkg.in/natefinch/lumberjack.v2" appsapi "k8s.io/api/apps/v1" - corev1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1" storageapi "k8s.io/api/storage/v1" + "k8s.io/apimachinery/pkg/api/resource" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/portworx/torpedo/drivers/backup" "github.com/portworx/torpedo/drivers/monitor/prometheus" @@ -150,6 +156,14 @@ const ( REBOOT ErrorInjection = "reboot" ) +const ( + deploymentCount = 250 + deploymentNamePrefix = "fada-scale-dep" + pvcNamePrefix = "fada-scale-pvc" + fadaNamespacePrefix = "fada-namespace" + podAttachTimeout = 15 * time.Minute +) + // TODO Need to add for AutoJournal //var IOProfileChange = [4]apios.IoProfile{apios.IoProfile_IO_PROFILE_NONE, apios.IoProfile_IO_PROFILE_AUTO_JOURNAL, apios.IoProfile_IO_PROFILE_AUTO, apios.IoProfile_IO_PROFILE_DB_REMOTE} @@ -504,8 +518,12 @@ const ( // UpdateVolume provides option to update volume with properties like iopriority. UpdateVolume = "updateVolume" UpdateIOProfile = "updateIOProfile" + DetachDrives = "detachDrives" + PowerOffAllVMs = "powerOffAllVMs" // NodeDecommission decommission random node in the PX cluster NodeDecommission = "nodeDecomm" + // Delelete cloudsnaps + DeleteCloudsnaps = "deleteCloudsnaps" //NodeRejoin rejoins the decommissioned node into the PX cluster NodeRejoin = "nodeRejoin" // RelaxedReclaim enables RelaxedReclaim in PX cluster @@ -633,6 +651,9 @@ const ( // ResetDiscardMounts Sets and resets discard cluster wide options on the cluster ResetDiscardMounts = "ResetDiscardMounts" + + // ScaleFADAVolumeAttach create and attach FADA volumes at scale + ScaleFADAVolumeAttach = "ScaleFADAVolumeAttach" ) // TriggerCoreChecker checks if any cores got generated @@ -813,6 +834,131 @@ func TriggerDeployNewApps(contexts *[]*scheduler.Context, recordChan *chan *Even }) } +// TriggerDetachDrives Detach all vsphere cloud drives, verify storage node will be recoevred after node maintenance cycle. +func TriggerDetachDrives(contexts *[]*scheduler.Context, recordChan *chan *EventRecord) { + defer ginkgo.GinkgoRecover() + defer endLongevityTest() + startLongevityTest(DetachDrives) + event := &EventRecord{ + Event: Event{ + ID: GenerateUUID(), + Type: DetachDrives, + }, + Start: time.Now().Format(time.RFC1123), + Outcome: []error{}, + } + defer func() { + event.End = time.Now().Format(time.RFC1123) + *recordChan <- event + }() + setMetrics(*event) + stepLog := "Detach cloud drives from Storage node" + Step(stepLog, func() { + var err error + var stc *operatorcorev1.StorageCluster + log.Infof(stepLog) + Step(stepLog, + func() { + log.Infof(stepLog) + getSTC := func() (interface{}, bool, error) { + namespace, err := Inst().S.GetPortworxNamespace() + if err != nil { + return nil, false, fmt.Errorf("Portworx namespace %s is not found: err %v", namespace, err) + } + pxOperator := operator.Instance() + stcList, err := pxOperator.ListStorageClusters(namespace) + if err != nil { + return nil, false, fmt.Errorf("Storage cluster list are not available: err %v", err) + } + log.Infof("Stc list %v ", stcList) + stc, err = pxOperator.GetStorageCluster(stcList.Items[0].Name, stcList.Items[0].Namespace) + if err != nil { + return nil, false, fmt.Errorf("Storage cluster is not available: err %v", err) + } + return nil, false, nil + } + _, err = task.DoRetryWithTimeout(getSTC, 3*time.Minute, 1*time.Minute) + UpdateOutcome(event, err) + var nodeId string + storageNodes := node.GetStorageNodes() + nodeId = storageNodes[0].VolDriverNodeID + err = Inst().N.DetachDrivesFromVM(stc, storageNodes[0].Name) + UpdateOutcome(event, err) + time.Sleep(time.Duration(1 * time.Minute)) + statusErr := Inst().V.WaitDriverUpOnNode(storageNodes[0], 10*time.Minute) + if statusErr != nil { + if strings.Contains(statusErr.Error(), apios.Status_STATUS_STORAGE_DOWN.String()) { + log.Infof("Node has gone to Storage Down state after detach %v: Node %s", statusErr, storageNodes[0].Name) + } else { + UpdateOutcome(event, statusErr) + } + } + storageNode, err := Inst().V.GetDriverNode(&storageNodes[0]) + UpdateOutcome(event, err) + if storageNode.Status.String() != apios.Status_STATUS_STORAGE_DOWN.String() { + UpdateOutcome(event, fmt.Errorf("Node %s: Expected: %v Actual: %v", storageNode.SchedulerNodeName, + apios.Status_STATUS_STORAGE_DOWN, storageNode.Status)) + } + log.Infof("Status of the storage node %s ,%v ", storageNode.SchedulerNodeName, storageNode.Status) + statusErr = Inst().V.EnterMaintenance(storageNodes[0]) + UpdateOutcome(event, statusErr) + status, _ := Inst().V.GetNodeStatus(storageNodes[0]) + log.Infof("Status when the storage node entered maintenance mode %s , ", status.String()) + if status.String() != apios.Status_STATUS_MAINTENANCE.String() { + UpdateOutcome(event, fmt.Errorf("Node %s: Expected: %v Actual: %v", storageNodes[0].Name, + apios.Status_STATUS_MAINTENANCE, status)) + } + statusErr = Inst().V.ExitMaintenance(storageNodes[0]) + UpdateOutcome(event, statusErr) + status, _ = Inst().V.GetNodeStatus(storageNodes[0]) + log.Infof("Node Status after exit maintenance mode %v , %s", status, storageNodes[0].Name) + if status.String() != apios.Status_STATUS_OK.String() { + UpdateOutcome(event, fmt.Errorf("Node %s: Expected: %v Actual: %v", storageNodes[0].Name, + apios.Status_STATUS_MAINTENANCE, status)) + } + err = Inst().V.RefreshDriverEndpoints() + UpdateOutcome(event, err) + //There are chances that storageless node can convert storage node by attaching these drives. Hence making sure + //This node id is up. + var selectedStorageNode *node.Node + storageNodes = node.GetStorageNodes() + for _, nodeInfo := range storageNodes { + if nodeInfo.VolDriverNodeID == nodeId { + selectedStorageNode = &nodeInfo + log.Infof("Node which has the nodeID %v , %s", status, (*selectedStorageNode).Name) + break + } + } + if selectedStorageNode != nil { + status, err = Inst().V.GetNodeStatus(*selectedStorageNode) + if err != nil { + UpdateOutcome(event, err) + } else { + log.Infof("Node Status %v node: %s", status, (*selectedStorageNode).SchedulerNodeName) + if status.String() != apios.Status_STATUS_OK.String() { + UpdateOutcome(event, fmt.Errorf("Node %s: Expected: %v Actual: %v", (*selectedStorageNode).SchedulerNodeName, + apios.Status_STATUS_OK, status)) + } + } + } else { + UpdateOutcome(event, fmt.Errorf("Failed to find the node!")) + } + for _, ctx := range *contexts { + log.Infof("Validating context: %v", ctx.App.Key) + ctx.SkipVolumeValidation = false + errorChan := make(chan error, errorChannelSize) + ValidateContext(ctx, &errorChan) + for err := range errorChan { + UpdateOutcome(event, err) + } + } + err = ValidateDataIntegrity(contexts) + UpdateOutcome(event, err) + updateMetrics(*event) + }) + }) +} + // TriggerVolumeCreatePXRestart create volume , attach , detach and reboot nodes parallely func TriggerVolumeCreatePXRestart(contexts *[]*scheduler.Context, recordChan *chan *EventRecord) { @@ -2051,7 +2197,7 @@ func TriggerPoolMaintenanceCycle(contexts *[]*scheduler.Context, recordChan *cha func isNodeHealthy(n node.Node, eventType string) error { status, err := Inst().V.GetNodeStatus(n) if err != nil { - log.Errorf("Unable to get Node [%s] status, skipping [%s] for the node", n.Name, eventType) + log.Errorf("Unable to get Node [%s] status, skipping [%s] for the node [%+v]. Error: [%v]", n.Name, eventType, n, err) return err } @@ -2563,7 +2709,7 @@ func TriggerRebootManyNodes(contexts *[]*scheduler.Context, recordChan *chan *Ev Step(stepLog, func() { log.InfoD(stepLog) nodesToReboot := getNodesByChaosLevel(RebootManyNodes) - selectedNodes := make([]node.Node, len(nodesToReboot)) + selectedNodes := make([]node.Node, 0) for _, n := range nodesToReboot { err := isNodeHealthy(n, event.Event.Type) if err != nil { @@ -3354,6 +3500,11 @@ func TriggerCloudSnapShot(contexts *[]*scheduler.Context, recordChan *chan *Even policyName := "intervalpolicy" schedPolicy, err := storkops.Instance().GetSchedulePolicy(policyName) if err != nil { + err = CreatePXCloudCredential() + if err != nil { + UpdateOutcome(event, err) + return + } retain := 10 interval := getCloudSnapInterval(CloudSnapShot) log.InfoD("Creating a interval schedule policy %v with interval %v minutes", policyName, interval) @@ -3481,6 +3632,77 @@ func TriggerCloudSnapShot(contexts *[]*scheduler.Context, recordChan *chan *Even } +//TriggerDeleteCloudsnaps +func TriggerDeleteCloudsnaps(contexts *[]*scheduler.Context, recordChan *chan *EventRecord){ + defer ginkgo.GinkgoRecover() + defer endLongevityTest() + startLongevityTest(DeleteCloudsnaps) + event := &EventRecord{ + Event: Event{ + ID: GenerateUUID(), + Type: DeleteCloudsnaps, + }, + Start: time.Now().Format(time.RFC1123), + Outcome: []error{}, + } + defer func() { + event.End = time.Now().Format(time.RFC1123) + *recordChan <- event + }() + setMetrics(*event) + stepLog := "Delete all cloudsnaps" + Step(stepLog, func() { + log.Infof(stepLog) + var volCloudsnapMap = make(map[string][]string) + for _, ctx := range *contexts { + vols, err := Inst().S.GetVolumeParameters(ctx) + log.Infof("Validating context: %v", ctx.App.Key) + log.Infof("Volumes : %v", vols) + UpdateOutcome(event, err) + for vol, params := range vols { + inspectedVol, err:= Inst().V.InspectVolume(vol) + UpdateOutcome(event, err) + csBksps, err := Inst().V.GetCloudsnapsOfGivenVolume(vol, inspectedVol.Id, params) + UpdateOutcome(event, err) + var cloudsnapIds []string + for _, bk := range csBksps { + cloudsnapIds = append(cloudsnapIds, bk.Id) + } + if len(csBksps) > 0 { + volCloudsnapMap[vol] = cloudsnapIds + err = Inst().V.DeleteAllCloudsnaps(vol,csBksps[0].SrcVolumeId, params) + if err != nil && !strings.Contains(err.Error(), "Key already exists") { + UpdateOutcome(event, err) + } + } + } + } + log.Infof("Wait for 10 minutes") + time.Sleep(600 * time.Second) + for _, ctx := range *contexts { + vols, err := Inst().S.GetVolumeParameters(ctx) + UpdateOutcome(event, err) + for vol, params := range vols { + log.Infof("Volume Name : %s", vol) + inspectedVol, err:= Inst().V.InspectVolume(vol) + UpdateOutcome(event, err) + csBksps, err := Inst().V.GetCloudsnapsOfGivenVolume(vol, inspectedVol.Id, params) + UpdateOutcome(event, err) + cloudsnapIds, ok := volCloudsnapMap[vol] + if ok { + for _, bk := range csBksps { + if slices.Contains(cloudsnapIds, bk.Id ){ + log.Infof("Cloud snap hasn not deleted successfully : %s: vol %s", bk.Id , vol ) + UpdateOutcome(event, fmt.Errorf("Cloud snap has not deleted successfully : %s: vol %s", bk.Id , vol)) + } + } + } + } + } + updateMetrics(*event) + }) +} + // TriggerCloudSnapshotRestore perform in-place cloud snap restore func TriggerCloudSnapshotRestore(contexts *[]*scheduler.Context, recordChan *chan *EventRecord) { @@ -3502,6 +3724,13 @@ func TriggerCloudSnapshotRestore(contexts *[]*scheduler.Context, recordChan *cha *recordChan <- event }() + defer func() { + bucketName, err := GetCloudsnapBucketName(*contexts) + UpdateOutcome(event, err) + err = DeleteCloudSnapBucket(bucketName) + UpdateOutcome(event, err) + }() + setMetrics(*event) stepLog := "Verify cloud snap restore" @@ -5334,11 +5563,15 @@ func isPoolResizePossible(poolToBeResized *opsapi.StoragePool) (bool, error) { updatedPoolToBeResized := pools[poolToBeResized.Uuid] if updatedPoolToBeResized.LastOperation.Status != opsapi.SdkStoragePool_OPERATION_SUCCESSFUL { if updatedPoolToBeResized.LastOperation.Status == opsapi.SdkStoragePool_OPERATION_FAILED { - return nil, false, fmt.Errorf("PoolResize has failed. Error: %s", updatedPoolToBeResized.LastOperation) + if strings.Contains(updatedPoolToBeResized.LastOperation.Msg, "aborting due to unclean volumes") { + log.Warnf("Previous Pool expanison has failed due to unclean volumes [%s], continuing with force option", updatedPoolToBeResized.LastOperation.Msg) + return nil, false, nil + } + return nil, false, fmt.Errorf("previous pool expansion has failed. Error: %s", updatedPoolToBeResized.LastOperation) } log.InfoD("Pool Resize is already in progress: %v", updatedPoolToBeResized.LastOperation) if strings.Contains(updatedPoolToBeResized.LastOperation.Msg, "Will not proceed with pool expansion") { - return nil, false, fmt.Errorf("PoolResize has failed. Error: %s", updatedPoolToBeResized.LastOperation.Msg) + return nil, false, fmt.Errorf("pool resize not possible. Error: %s", updatedPoolToBeResized.LastOperation.Msg) } return nil, true, nil } @@ -6033,7 +6266,7 @@ func TriggerUpdateCluster(contexts *[]*scheduler.Context, recordChan *chan *Even time.Sleep(30 * time.Minute) } - PrintK8sCluterInfo() + PrintK8sClusterInfo() }) Step("validate storage components", func() { @@ -6052,7 +6285,7 @@ func TriggerUpdateCluster(contexts *[]*scheduler.Context, recordChan *chan *Even } // Printing cluster node info after the upgrade - PrintK8sCluterInfo() + PrintK8sClusterInfo() }) // TODO: This currently doesn't work for most distros and commenting out this change, see PTX-22409 @@ -6228,7 +6461,8 @@ func TriggerUpgradeVolumeDriverFromCatalog(contexts *[]*scheduler.Context, recor UpdateOutcome(event, fmt.Errorf("error getting images using URL [%s] and k8s version [%s]. Err: [%v]", upgradeHop, k8sVersion.String(), err)) return } - err = oputil.ValidateStorageCluster(imageList, stc, ValidateStorageClusterTimeout, defaultRetryInterval, true) + storageClusterValidateTimeout := time.Duration(len(node.GetStorageDriverNodes())*9) * time.Minute + err = oputil.ValidateStorageCluster(imageList, stc, storageClusterValidateTimeout, defaultRetryInterval, true) if err != nil { UpdateOutcome(event, fmt.Errorf("error validating storage cluster after upgrade. Err: [%v]", err)) return @@ -6458,6 +6692,124 @@ func TriggerVolumeUpdate(contexts *[]*scheduler.Context, recordChan *chan *Event updateMetrics(*event) } +// TriggerPowerOffVMs +func TriggerPowerOffAllVMs(contexts *[]*scheduler.Context, recordChan *chan *EventRecord) { + defer ginkgo.GinkgoRecover() + defer endLongevityTest() + startLongevityTest(PowerOffAllVMs) + event := &EventRecord{ + Event: Event{ + ID: GenerateUUID(), + Type: PowerOffAllVMs, + }, + Start: time.Now().Format(time.RFC1123), + Outcome: []error{}, + } + defer func() { + event.End = time.Now().Format(time.RFC1123) + *recordChan <- event + }() + setMetrics(*event) + stepLog := "Power off all worker nodes test " + Step(stepLog, func() { + log.Infof(stepLog) + workerNodes := node.GetWorkerNodes() + var numberOfThread int = 5 + var numberOfNodePerThread int + // If number of VMs to restarted is less than numberOfThread then + // only one vm assigned to each thread, else assign len(workerNodes)/numberOfThread + // to per thread + if len(workerNodes) < numberOfThread { + numberOfThread = len(workerNodes) + numberOfNodePerThread = 1 + } else { + numberOfNodePerThread = len(workerNodes) / numberOfThread + } + var counter int = 0 + // Assign vms to every thread. + nodesInThread := make([][]node.Node, numberOfThread) + for t := 0; t < numberOfThread; t++ { + nodesInThread[t] = make([]node.Node, numberOfNodePerThread) + for n := 0; n < numberOfNodePerThread; n++ { + nodesInThread[t][n] = workerNodes[counter] + counter++ + } + } + //Create an additional thread for remainder. Example if 12 VMs, assign first 10 vms to + // 5 threads and assign remaining 2 vms 6th thread. + if counter < len(workerNodes) { + log.Infof("Additional nodes : %d", len(workerNodes)-counter) + additonalThread := make([]node.Node, len(workerNodes)-counter) + var index int = 0 + for counter < len(workerNodes) { + additonalThread[index] = workerNodes[counter] + index++ + counter++ + } + nodesInThread = append(nodesInThread, additonalThread) + numberOfThread++ + } + stepLog = "Power off all worker nodes in batches" + Step(stepLog, func() { + var poweroffwg sync.WaitGroup + for i := 0; i < numberOfThread; i++ { + poweroffwg.Add(1) + go func(nodeList []node.Node) { + defer poweroffwg.Done() + for _, nodeInfo := range nodeList { + log.Infof("Node Name : %v", nodeInfo.Name) + err := Inst().N.PowerOffVM(nodeInfo) + UpdateOutcome(event, err) + } + }(nodesInThread[i]) + } + poweroffwg.Wait() + log.Infof("Completed power off VMs") + log.Infof("Wait for 5 minutes") + time.Sleep(time.Duration(5 * time.Minute)) + }) + stepLog = "Power on all worker nodes" + Step(stepLog, func() { + var poweronwg sync.WaitGroup + log.Infof("Poweron thread starts") + for i := 0; i < numberOfThread; i++ { + poweronwg.Add(1) + go func(nodeList []node.Node) { + defer poweronwg.Done() + for _, nodeInfo := range nodeList { + log.Infof("Node Name : %v", nodeInfo.Name) + err := Inst().N.PowerOnVM(nodeInfo) + UpdateOutcome(event, err) + } + }(nodesInThread[i]) + } + poweronwg.Wait() + log.Infof("Completed power on Nodes") + for _, node := range workerNodes { + err := Inst().S.IsNodeReady(node) + err = Inst().V.WaitDriverUpOnNode(node, Inst().DriverStartTimeout) + UpdateOutcome(event, err) + } + }) + stepLog = "Verify APP, volume staus and check data integrity if enabled" + // //Wait for PX to be up on all worker nodes + Step(stepLog, func() { + for _, ctx := range *contexts { + log.Infof("Validating context: %v", ctx.App.Key) + ctx.SkipVolumeValidation = false + errorChan := make(chan error, errorChannelSize) + ValidateContext(ctx, &errorChan) + for err := range errorChan { + UpdateOutcome(event, err) + } + } + err := ValidateDataIntegrity(contexts) + UpdateOutcome(event, err) + }) + updateMetrics(*event) + }) +} + // TriggerVolumeUpdate enables to test volume update func TriggerVolumeIOProfileUpdate(contexts *[]*scheduler.Context, recordChan *chan *EventRecord) { defer ginkgo.GinkgoRecover() @@ -6693,17 +7045,19 @@ func updateIOPriorityOnVolumes(contexts *[]*scheduler.Context, event *EventRecor func validateAutoFsTrim(contexts *[]*scheduler.Context, event *EventRecord) { for _, ctx := range *contexts { - var appVolumes []*volume.Volume - var err error if strings.Contains(ctx.App.Key, "fstrim") { - appVolumes, err = Inst().S.GetVolumes(ctx) - UpdateOutcome(event, err) + appVolumes, err := Inst().S.GetVolumes(ctx) + if err != nil { + UpdateOutcome(event, fmt.Errorf("error getting volumes for app %s: %v", ctx.App.Key, err)) + continue + } if len(appVolumes) == 0 { UpdateOutcome(event, fmt.Errorf("found no volumes for app %s", ctx.App.Key)) + continue } for _, v := range appVolumes { - // Skip autofs trim status on Pure DA volumes + // Skip autofstrim status on Pure DA volumes isPureVol, err := Inst().V.IsPureVolume(v) if err != nil { UpdateOutcome(event, err) @@ -6715,58 +7069,48 @@ func validateAutoFsTrim(contexts *[]*scheduler.Context, event *EventRecord) { ) continue } - log.Infof("Getting info : %s", v.ID) + + log.Infof("Getting volume %s inspect response", v.ID) appVol, err := Inst().V.InspectVolume(v.ID) if err != nil { - log.Errorf("Error inspecting volume: %v", err) + UpdateOutcome(event, fmt.Errorf("error inspecting volume [%v]: %v", v.ID, err)) + continue } - attachedNode := appVol.AttachedOn - - var fsTrimStatuses map[string]opsapi.FilesystemTrim_FilesystemTrimStatus + attachedNode := appVol.AttachedOn t := func() (interface{}, bool, error) { - fsTrimStatuses, err = Inst().V.GetAutoFsTrimStatus(attachedNode) + fsTrimStatuses, err := Inst().V.GetAutoFsTrimStatus(attachedNode) if err != nil { return nil, true, fmt.Errorf("error autofstrim status node %v status", attachedNode) } - - return nil, false, nil + val, ok := fsTrimStatuses[appVol.Id] + var fsTrimStatus opsapi.FilesystemTrim_FilesystemTrimStatus + if !ok { + fsTrimStatus, _ = waitForFsTrimStatus(event, attachedNode, appVol.Id) + } else { + fsTrimStatus = val + } + log.Infof("autofstrim status for volume %v, status: %v", appVol.Id, val.String()) + if fsTrimStatus != -1 { + if fsTrimStatus == opsapi.FilesystemTrim_FS_TRIM_COMPLETED { + return nil, false, nil + } else if fsTrimStatus == opsapi.FilesystemTrim_FS_TRIM_FAILED { + return nil, false, fmt.Errorf("autoFstrim failed for volume %v, status: %v", v.ID, val.String()) + } else { + return nil, true, fmt.Errorf("current autofstrim status for volume %v is %v. Expected status is %v", v.ID, val.String(), opsapi.FilesystemTrim_FS_TRIM_COMPLETED) + } + } else { + return nil, true, fmt.Errorf("autofstrim for volume %v not started yet", v.ID) + } } _, err = task.DoRetryWithTimeout(t, defaultDriverStartTimeout, defaultRetryInterval) if err != nil { UpdateOutcome(event, err) return } - - val, ok := fsTrimStatuses[appVol.Id] - var fsTrimStatus opsapi.FilesystemTrim_FilesystemTrimStatus - - if !ok { - fsTrimStatus, _ = waitForFsTrimStatus(event, attachedNode, appVol.Id) - } else { - fsTrimStatus = val - } - - if fsTrimStatus != -1 { - - if fsTrimStatus == opsapi.FilesystemTrim_FS_TRIM_FAILED || fsTrimStatus == opsapi.FilesystemTrim_FS_TRIM_STOPPED || fsTrimStatus == opsapi.FilesystemTrim_FS_TRIM_UNKNOWN { - - err = fmt.Errorf("AutoFstrim failed for volume %v, status: %v", v.ID, val.String()) - UpdateOutcome(event, err) - - } else { - log.InfoD("Autofstrim status for volume %v, status: %v", v.ID, val.String()) - - } - } else { - log.Infof("autofstrim for volume %v not started yet", v.ID) - } - } - } } - } func waitForFsTrimStatus(event *EventRecord, attachedNode, volumeID string) (opsapi.FilesystemTrim_FilesystemTrimStatus, error) { @@ -7400,11 +7744,11 @@ func getCloudSnapInterval(triggerType string) int { case 7: interval = 60 case 8: - interval = 30 + interval = 45 case 9: - interval = 20 + interval = 30 case 10: - interval = 10 + interval = 20 } return interval @@ -7513,9 +7857,11 @@ func TriggerKVDBFailover(contexts *[]*scheduler.Context, recordChan *chan *Event nodeMap := node.GetNodesByVoDriverNodeID() nodeContexts := make([]*scheduler.Context, 0) + log.Infof("KVDB node map is [%v]", kvdbNodeIDMap) for kvdbID, nodeID := range kvdbNodeIDMap { kvdbNode := nodeMap[nodeID] + appNodeContexts, err := GetContextsOnNode(contexts, &kvdbNode) nodeContexts = append(nodeContexts, appNodeContexts...) errorChan := make(chan error, errorChannelSize) @@ -7623,27 +7969,30 @@ func TriggerKVDBFailover(contexts *[]*scheduler.Context, recordChan *chan *Event } func validateKVDBMembers(event *EventRecord, kvdbMembers map[string]*volume.MetadataNode, isDestuctive bool) bool { - log.InfoD("Current KVDB members: %v", kvdbMembers) allHealthy := true if len(kvdbMembers) == 0 { - err := fmt.Errorf("No KVDB membes to validate") + err := fmt.Errorf("no KVDB membes to validate") UpdateOutcome(event, err) return false } + log.InfoD("Current KVDB members are") + for _, m := range kvdbMembers { + log.InfoD(m.Name) + } - for id, m := range kvdbMembers { + for _, m := range kvdbMembers { if !m.IsHealthy { - err := fmt.Errorf("kvdb member node: %v is not healthy", id) - allHealthy = allHealthy && false + err := fmt.Errorf("kvdb member node: %v is not healthy", m.Name) + allHealthy = false log.Warn(err.Error()) if isDestuctive { UpdateOutcome(event, err) } } else { - log.InfoD("KVDB member node %v is healthy", id) + log.InfoD("KVDB member node %v is healthy", m.Name) } } @@ -10087,7 +10436,7 @@ func TriggerAddOCPStorageNode(contexts *[]*scheduler.Context, recordChan *chan * dashStats["new-scale"] = fmt.Sprintf("%d", expReplicas) dashStats["storage-node"] = "true" updateLongevityStats(AddStorageNode, stats.NodeScaleUpEventName, dashStats) - err = Inst().S.ScaleCluster(expReplicas) + err = Inst().S.SetASGClusterSize(int64(expReplicas), 10*time.Minute) if err != nil { UpdateOutcome(event, err) isClusterScaled = false @@ -10100,6 +10449,12 @@ func TriggerAddOCPStorageNode(contexts *[]*scheduler.Context, recordChan *chan * return } + err := Inst().S.RefreshNodeRegistry() + UpdateOutcome(event, err) + + err = Inst().V.RefreshDriverEndpoints() + UpdateOutcome(event, err) + stepLog = "validate PX on all nodes after cluster scale up" hasPXUp := true Step(stepLog, func() { @@ -10118,7 +10473,7 @@ func TriggerAddOCPStorageNode(contexts *[]*scheduler.Context, recordChan *chan * return } - err := Inst().V.RefreshDriverEndpoints() + err = Inst().V.RefreshDriverEndpoints() UpdateOutcome(event, err) updatedStorageNodesCount := len(node.GetStorageNodes()) @@ -10216,7 +10571,7 @@ func TriggerAddOCPStoragelessNode(contexts *[]*scheduler.Context, recordChan *ch dashStats["new-scale"] = fmt.Sprintf("%d", expReplicas) dashStats["storage-node"] = "false" updateLongevityStats(AddStoragelessNode, stats.NodeScaleUpEventName, dashStats) - err = Inst().S.ScaleCluster(expReplicas) + err = Inst().S.SetASGClusterSize(int64(expReplicas), 10*time.Minute) if err != nil { UpdateOutcome(event, err) isClusterScaled = false @@ -10228,6 +10583,11 @@ func TriggerAddOCPStoragelessNode(contexts *[]*scheduler.Context, recordChan *ch if !isClusterScaled { return } + err := Inst().S.RefreshNodeRegistry() + UpdateOutcome(event, err) + + err = Inst().V.RefreshDriverEndpoints() + UpdateOutcome(event, err) stepLog = "validate PX on all nodes after cluster scale up" hasPXUp := true @@ -10246,7 +10606,7 @@ func TriggerAddOCPStoragelessNode(contexts *[]*scheduler.Context, recordChan *ch if !hasPXUp { return } - err := Inst().V.RefreshDriverEndpoints() + err = Inst().V.RefreshDriverEndpoints() UpdateOutcome(event, err) updatedStoragelessNodesCount := len(node.GetStorageLessNodes()) @@ -10259,7 +10619,6 @@ func TriggerAddOCPStoragelessNode(contexts *[]*scheduler.Context, recordChan *ch validateContexts(event, contexts) updateMetrics(*event) - } func TriggerOCPStorageNodeRecycle(contexts *[]*scheduler.Context, recordChan *chan *EventRecord) { @@ -10311,6 +10670,19 @@ func TriggerOCPStorageNodeRecycle(contexts *[]*scheduler.Context, recordChan *ch updateLongevityStats(OCPStorageNodeRecycle, stats.NodeRecycleEventName, dashStats) err := Inst().S.DeleteNode(delNode) UpdateOutcome(event, err) + + stepLog = fmt.Sprintf("wait for %s minutes for auto recovery of storeage nodes", + Inst().AutoStorageNodeRecoveryTimeout.String()) + + Step(stepLog, func() { + log.InfoD(stepLog) + time.Sleep(Inst().AutoStorageNodeRecoveryTimeout) + }) + err = Inst().S.RefreshNodeRegistry() + UpdateOutcome(event, err) + + err = Inst().V.RefreshDriverEndpoints() + UpdateOutcome(event, err) }) Step(fmt.Sprintf("Listing all nodes after recycling a storage node %s", delNode.Name), func() { workerNodes := node.GetWorkerNodes() @@ -10348,7 +10720,6 @@ func TriggerOCPStorageNodeRecycle(contexts *[]*scheduler.Context, recordChan *ch validateContexts(event, contexts) updateMetrics(*event) - } // TriggerReallocSharedMount peforms sharedv4 and sharedv4_svc volumes reallocation @@ -10962,6 +11333,246 @@ func TriggerResetDiscardMounts(contexts *[]*scheduler.Context, recordChan *chan }) } +func TriggerScaleFADAVolumeAttach(contexts *[]*scheduler.Context, recordChan *chan *EventRecord) { + defer endLongevityTest() + startLongevityTest(ScaleFADAVolumeAttach) + defer ginkgo.GinkgoRecover() + var wg sync.WaitGroup + + event := &EventRecord{ + Event: Event{ + ID: GenerateUUID(), + Type: ScaleFADAVolumeAttach, + }, + Start: time.Now().Format(time.RFC1123), + Outcome: []error{}, + } + + defer func() { + event.End = time.Now().Format(time.RFC1123) + *recordChan <- event + }() + + setMetrics(*event) + + stepLog := "Adding FADA volumes at scale to validate FADA volumes attachment in scale " + + Step(stepLog, func() { + log.InfoD(stepLog) + var param = make(map[string]string) + var appContexts []*scheduler.Context + sem := make(chan struct{}, 10) + + fadaScName := PureBlockStorageClass + time.Now().Format("01-02-15h04m05s") + log.Infof("Creating pure_block storage class class: %s", fadaScName) + param[PureBackend] = k8s.PureBlock + _, err := createPureStorageClass(fadaScName, param) + if err != nil { + log.Errorf("StorageClass creation failed for SC: %s", fadaScName) + UpdateOutcome(event, err) + } + log.InfoD("Deployng FADA based applications") + startTime := time.Now() + for x := 0; x < deploymentCount; x++ { + pvcName := fmt.Sprintf("%s-%d", pvcNamePrefix, x) + namespace := fmt.Sprintf("%s-%d", fadaNamespacePrefix, x) + deploymentName := fmt.Sprintf("%s-%d", fadaScName, x) + wg.Add(1) + sem <- struct{}{} + go func(scName string, pvcName string, ns string, depName string, wg *sync.WaitGroup, ctx *[]*scheduler.Context, event *EventRecord, sem chan struct{}) { + deployFadaApps(fadaScName, pvcName, namespace, deploymentName, wg, ctx, event) + <-sem + }(fadaScName, pvcName, namespace, deploymentName, &wg, &appContexts, event, sem) + } + wg.Wait() + close(sem) + log.InfoD("Validating applications context") + validateContexts(event, &appContexts) + log.Infof("Attaching [%d] FADA volumes took: [%v]", deploymentCount, time.Since(startTime)) + if time.Since(startTime) > podAttachTimeout { + UpdateOutcome(event, fmt.Errorf("failed to complete all fada pods attachment in [%v]", podAttachTimeout)) + } + + stepLog = "Cleaning up the FADA deployments" + Step(stepLog, func() { + log.InfoD(stepLog) + sem := make(chan struct{}, 10) + for x := 0; x < deploymentCount; x++ { + sem <- struct{}{} + wg.Add(1) + go func(ctx *scheduler.Context, wg *sync.WaitGroup, event *EventRecord, sem chan struct{}) { + cleanupDeployment(ctx, wg, event) + <-sem + }(appContexts[x], &wg, event, sem) + } + wg.Wait() + close(sem) + log.InfoD("Successfully cleaned up the FADA deployments") + }) + updateMetrics(*event) + }) +} + +// deployFadaApps deploy deployment using FADA volumes +func deployFadaApps(scName string, pvcName string, ns string, depName string, wg *sync.WaitGroup, ctx *[]*scheduler.Context, event *EventRecord) { + defer wg.Done() + + metadata := make(map[string]string, 0) + pvcSize := "1Gi" + metadata["app"] = "fada-data-app" + + if err := createNameSpace(ns, metadata); err != nil { + UpdateOutcome(event, fmt.Errorf("failed to create namespace: %s. Err: %v", ns, err)) + } + if err := createPVC(pvcName, scName, pvcSize, ns); err != nil { + UpdateOutcome(event, fmt.Errorf("failed to create pvc: [%s] in ns: [%s]. Err: %v", pvcName, ns, err)) + } + if err := createDeployment(depName, ns, pvcName, ctx); err != nil { + UpdateOutcome(event, fmt.Errorf("failed to create deployment: %s. Err: %v", depName, err)) + } +} + +func createDeployment(depName string, ns string, pvcName string, ctx *[]*scheduler.Context) error { + request := make(map[v1.ResourceName]resource.Quantity, 0) + limit := make(map[v1.ResourceName]resource.Quantity, 0) + cpu, err := resource.ParseQuantity("50m") + if err != nil { + return fmt.Errorf("failed to parse cpu request size. Err: %v", err) + } + memory, err := resource.ParseQuantity("64Mi") + if err != nil { + return fmt.Errorf("failed to parse memory request size. Err: %v", err) + } + request["cpu"], request["memory"] = cpu, memory + + cpuLimit, err := resource.ParseQuantity("100m") + if err != nil { + return fmt.Errorf("failed to parse cpu limit size. Err: %v", err) + } + memLimit, err := resource.ParseQuantity("128Mi") + if err != nil { + return fmt.Errorf("failed to parse memory limit size. Err: %v", err) + } + limit["cpu"], limit["memory"] = cpuLimit, memLimit + deployment := getDeploymentObject(depName, ns, pvcName, request, limit) + deployment, err = apps.Instance().CreateDeployment(deployment, metav1.CreateOptions{}) + if err != nil { + return err + } + + (*ctx) = append(*ctx, &scheduler.Context{ + App: &spec.AppSpec{ + SpecList: []interface{}{deployment}, + }, + }) + return nil +} + +func getDeploymentObject(depName string, ns string, pvcName string, request, limit map[v1.ResourceName]resource.Quantity) *appsapi.Deployment { + var replica int32 = 1 + label := make(map[string]string, 0) + label["app"] = "fada-data-app" + volMounts := []v1.VolumeMount{{ + Name: "fada-data-vol", + MountPath: "/mnt/data"}, + } + volumes := []v1.Volume{{ + Name: "fada-data-vol", + VolumeSource: v1.VolumeSource{ + PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{ + ClaimName: pvcName, + }}}, + } + commands := []string{ + "sh", "-c", "sleep 3600", + } + + // containers spec + containers := []v1.Container{ + { + Name: "franzlaender", + Image: "ubuntu:latest", + Command: commands, + VolumeMounts: volMounts, + Resources: v1.ResourceRequirements{ + Requests: request, + Limits: limit, + }, + ImagePullPolicy: v1.PullIfNotPresent, + }, + } + return &appsapi.Deployment{ + ObjectMeta: meta_v1.ObjectMeta{ + Name: depName, + Namespace: ns, + }, + Spec: appsapi.DeploymentSpec{ + Replicas: &replica, + Selector: &metav1.LabelSelector{ + MatchLabels: label, + }, + Template: v1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: label, + }, + Spec: v1.PodSpec{ + RestartPolicy: "Always", + Containers: containers, + Volumes: volumes, + }, + }, + }, + } +} + +func createNameSpace(namespace string, label map[string]string) error { + nsSpec := &v1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: namespace, + Labels: label, + }, + } + _, err := k8sCore.CreateNamespace(nsSpec) + return err +} + +func createPVC(pvcName string, scName string, pvcSize string, ns string) error { + size, err := resource.ParseQuantity(pvcSize) + if err != nil { + return fmt.Errorf("failed to parse pvc size: %s", pvcSize) + } + pvcClaimSpec := k8s.MakePVC(size, ns, pvcName, scName) + _, err = k8sCore.CreatePersistentVolumeClaim(pvcClaimSpec) + return err +} + +func cleanupDeployment(ctx *scheduler.Context, wg *sync.WaitGroup, event *EventRecord) { + defer wg.Done() + defer ginkgo.GinkgoRecover() + var deployment *appsapi.Deployment + var depname, namespace string + if len(ctx.App.SpecList) > 0 { + deployment = ctx.App.SpecList[0].(*appsapi.Deployment) + depname = deployment.ObjectMeta.Name + namespace = deployment.ObjectMeta.Namespace + if err := apps.Instance().DeleteDeployment(depname, namespace); err != nil { + UpdateOutcome(event, fmt.Errorf( + "failed to delete deployment: %s. Err: %v", depname, err)) + } + if len(deployment.Spec.Template.Spec.Volumes) > 0 { + for _, vol := range deployment.Spec.Template.Spec.Volumes { + pvcName := vol.VolumeSource.PersistentVolumeClaim.ClaimName + if err := k8sCore.DeletePersistentVolumeClaim(pvcName, namespace); err != nil { + UpdateOutcome(event, err) + } + } + } + } + if err := k8sCore.DeleteNamespace(namespace); err != nil { + UpdateOutcome(event, err) + } +} + // CreateStorageClass method creates a storageclass using host's k8s clientset on host cluster func CreateVclusterStorageClass(scName string, opts ...storageClassOption) error { params := make(map[string]string) @@ -10992,11 +11603,11 @@ func CreateVclusterStorageClass(scName string, opts ...storageClassOption) error } // GetContextPVCs returns pvc from the given context -func GetContextPVCs(context *scheduler.Context) ([]*corev1.PersistentVolumeClaim, error) { - updatedPVCs := make([]*corev1.PersistentVolumeClaim, 0) +func GetContextPVCs(context *scheduler.Context) ([]*v1.PersistentVolumeClaim, error) { + updatedPVCs := make([]*v1.PersistentVolumeClaim, 0) for _, specObj := range context.App.SpecList { - if obj, ok := specObj.(*corev1.PersistentVolumeClaim); ok { + if obj, ok := specObj.(*v1.PersistentVolumeClaim); ok { pvc, err := k8sCore.GetPersistentVolumeClaim(obj.Name, obj.Namespace) if err != nil { return nil, err @@ -11251,4 +11862,4 @@ $('#pxtable tr td').each(function(){
-` +` \ No newline at end of file diff --git a/tests/unifiedPlatform/pds2/pds_basic_test.go b/tests/unifiedPlatform/pds2/pds_basic_test.go index dff53e264..b145b7608 100644 --- a/tests/unifiedPlatform/pds2/pds_basic_test.go +++ b/tests/unifiedPlatform/pds2/pds_basic_test.go @@ -42,7 +42,7 @@ var _ = BeforeSuite(func() { log.InfoD("Get Account ID") //TODO: Get the accountID - AccID = "acc:a84dcc32-d04d-488f-8627-3cb38e214e43" + AccID = "acc:ca0b0c67-35f9-4d41-83f6-73fd6faab110" err = platformUtils.InitUnifiedApiComponents(os.Getenv(EnvControlPlaneUrl), "") log.FailOnError(err, "error while initialising api components") @@ -60,20 +60,6 @@ var _ = BeforeSuite(func() { log.FailOnError(err, "error while initialising api components in ds utils") }) - steplog = "Dumping kubeconfigs file" - Step(steplog, func() { - log.InfoD(steplog) - kubeconfigs := os.Getenv("KUBECONFIGS") - if kubeconfigs != "" { - kubeconfigList := strings.Split(kubeconfigs, ",") - if len(kubeconfigList) < 2 { - log.FailOnError(fmt.Errorf("At least minimum two kubeconfigs required but has"), - "Failed to get k8s config path.At least minimum two kubeconfigs required") - } - DumpKubeconfigs(kubeconfigList) - } - }) - steplog = "Get Default Tenant" Step(steplog, func() { log.InfoD(steplog) @@ -110,27 +96,6 @@ var _ = BeforeSuite(func() { log.FailOnError(err, "Unable to Install pds on target cluster") }) - steplog = "Register Destination target Cluster" - Step(steplog, func() { - log.InfoD(steplog) - defer func() { - err := SetSourceKubeConfig() - log.FailOnError(err, "failed to switch context to source cluster") - }() - - err := SetDestinationKubeConfig() - log.FailOnError(err, "Failed to switched to destination cluster") - - WorkflowTargetClusterDestination.Project = &WorkflowProject - WorkflowTargetClusterDestination.KubeConfig = utilities.GetAndExpectStringEnvVar("DEST_KUBECONFIG") - log.Infof("Tenant ID [%s]", WorkflowTargetClusterDestination.Project.Platform.TenantId) - WorkflowTargetClusterDestination, err := WorkflowTargetClusterDestination.RegisterToControlPlane() - log.FailOnError(err, "Unable to register target cluster") - log.Infof("Destination Target cluster registered with uid - [%s]", WorkflowTargetCluster.ClusterUID) - err = WorkflowTargetClusterDestination.InstallPDSAppOnTC(WorkflowTargetCluster.ClusterUID) - log.FailOnError(err, "Unable to Install pds on destination target cluster") - }) - steplog = "Create Service Configuration, Resource and Storage Templates" Step(steplog, func() { log.InfoD(steplog) @@ -165,6 +130,41 @@ var _ = BeforeSuite(func() { }) if NewPdsParams.BackUpAndRestore.RunBkpAndRestrTest { + steplog = "Dumping kubeconfigs file" + Step(steplog, func() { + log.InfoD(steplog) + kubeconfigs := os.Getenv("KUBECONFIGS") + if kubeconfigs != "" { + kubeconfigList := strings.Split(kubeconfigs, ",") + if len(kubeconfigList) < 2 { + log.FailOnError(fmt.Errorf("At least minimum two kubeconfigs required but has"), + "Failed to get k8s config path.At least minimum two kubeconfigs required") + } + DumpKubeconfigs(kubeconfigList) + } + }) + + steplog = "Register Destination target Cluster" + Step(steplog, func() { + log.InfoD(steplog) + defer func() { + err := SetSourceKubeConfig() + log.FailOnError(err, "failed to switch context to source cluster") + }() + + err := SetDestinationKubeConfig() + log.FailOnError(err, "Failed to switched to destination cluster") + + WorkflowTargetClusterDestination.Project = &WorkflowProject + WorkflowTargetClusterDestination.KubeConfig = utilities.GetAndExpectStringEnvVar("DEST_KUBECONFIG") + log.Infof("Tenant ID [%s]", WorkflowTargetClusterDestination.Project.Platform.TenantId) + WorkflowTargetClusterDestination, err := WorkflowTargetClusterDestination.RegisterToControlPlane() + log.FailOnError(err, "Unable to register target cluster") + log.Infof("Destination Target cluster registered with uid - [%s]", WorkflowTargetCluster.ClusterUID) + err = WorkflowTargetClusterDestination.InstallPDSAppOnTC(WorkflowTargetCluster.ClusterUID) + log.FailOnError(err, "Unable to Install pds on destination target cluster") + }) + steplog = "Create Buckets" Step(steplog, func() { log.InfoD(steplog) @@ -220,7 +220,6 @@ var _ = BeforeSuite(func() { log.FailOnError(err, "Unable to associate Cluster to Project") log.Infof("Associated Resources - [%+v]", WorkflowProject.AssociatedResources) }) - } }) diff --git a/tests/unifiedPlatform/pds2/pds_dataservice_test.go b/tests/unifiedPlatform/pds2/pds_dataservice_test.go index 15625df96..d54d0e354 100644 --- a/tests/unifiedPlatform/pds2/pds_dataservice_test.go +++ b/tests/unifiedPlatform/pds2/pds_dataservice_test.go @@ -310,7 +310,7 @@ var _ = Describe("{ValidatePdsHealthIncaseofFailures}", func() { deployment, err = WorkflowDataService.DeployDataService(ds, ds.Image, ds.Version, PDS_DEFAULT_NAMESPACE) log.FailOnError(err, "Error while deploying ds") log.Infof("All deployments - [%+v]", WorkflowDataService.DataServiceDeployment) - WorkflowPDSRestore.SourceDeploymentConfigBeforeUpgrade = &deployment.Create.Config.DeploymentTopologies[0] + WorkflowPDSRestore.SourceDeploymentConfigBeforeUpgrade = &deployment.Create.Config.DataServiceDeploymentTopologies[0] }) steplog = "Restart PDS Agent Pods and Validate if it comes up" diff --git a/tests/unifiedPlatform/pds2/pds_restore_negative_test.go b/tests/unifiedPlatform/pds2/pds_restore_negative_test.go index b0336c03d..5e364b5a8 100644 --- a/tests/unifiedPlatform/pds2/pds_restore_negative_test.go +++ b/tests/unifiedPlatform/pds2/pds_restore_negative_test.go @@ -37,7 +37,7 @@ var _ = Describe("{RestartPdsAgentPodAndPerformBackupAndRestore}", func() { deployment, err = WorkflowDataService.DeployDataService(ds, ds.Image, ds.Version, PDS_DEFAULT_NAMESPACE) log.FailOnError(err, "Error while deploying ds") log.Infof("All deployments - [%+v]", WorkflowDataService.DataServiceDeployment) - WorkflowPDSRestore.SourceDeploymentConfigBeforeUpgrade = &deployment.Create.Config.DeploymentTopologies[0] + WorkflowPDSRestore.SourceDeploymentConfigBeforeUpgrade = &deployment.Create.Config.DataServiceDeploymentTopologies[0] }) steplog = "Create Adhoc backup config of the existing deployment" diff --git a/tests/unifiedPlatform/pds2/pds_restore_test.go b/tests/unifiedPlatform/pds2/pds_restore_test.go index f603a5c8c..b0e760a90 100644 --- a/tests/unifiedPlatform/pds2/pds_restore_test.go +++ b/tests/unifiedPlatform/pds2/pds_restore_test.go @@ -381,7 +381,7 @@ var _ = Describe("{UpgradeDataServiceImageAndScaleUpDsWithBackUpRestore}", func( deployment, err = WorkflowDataService.DeployDataService(ds, ds.OldImage, ds.OldVersion, PDS_DEFAULT_NAMESPACE) log.FailOnError(err, "Error while deploying ds") log.Infof("All deployments - [%+v]", WorkflowDataService.DataServiceDeployment) - WorkflowPDSRestore.SourceDeploymentConfigBeforeUpgrade = &deployment.Create.Config.DeploymentTopologies[0] + WorkflowPDSRestore.SourceDeploymentConfigBeforeUpgrade = &deployment.Create.Config.DataServiceDeploymentTopologies[0] }) Step("Create Adhoc backup config of the existing deployment", func() { diff --git a/vendor/github.com/evanphx/json-patch/v5/patch.go b/vendor/github.com/evanphx/json-patch/v5/patch.go index 117f2c00d..73ff2c515 100644 --- a/vendor/github.com/evanphx/json-patch/v5/patch.go +++ b/vendor/github.com/evanphx/json-patch/v5/patch.go @@ -180,7 +180,7 @@ func (n *partialDoc) UnmarshalJSON(data []byte) error { if t, err := d.Token(); err != nil { return err } else if t != startObject { - return &syntaxError{fmt.Sprintf("unexpected JSON token in document node: %s", t)} + return &syntaxError{fmt.Sprintf("unexpected JSON token in document node: %v", t)} } for d.More() { k, err := d.Token() @@ -454,7 +454,11 @@ func (o Operation) value() *lazyNode { // ValueInterface decodes the operation value into an interface. func (o Operation) ValueInterface() (interface{}, error) { - if obj, ok := o["value"]; ok && obj != nil { + if obj, ok := o["value"]; ok { + if obj == nil { + return nil, nil + } + var v interface{} err := json.Unmarshal(*obj, &v) @@ -816,6 +820,43 @@ func ensurePathExists(pd *container, path string, options *ApplyOptions) error { return nil } +func validateOperation(op Operation) error { + switch op.Kind() { + case "add", "replace": + if _, err := op.ValueInterface(); err != nil { + return errors.Wrapf(err, "failed to decode 'value'") + } + case "move", "copy": + if _, err := op.From(); err != nil { + return errors.Wrapf(err, "failed to decode 'from'") + } + case "remove", "test": + default: + return fmt.Errorf("unsupported operation") + } + + if _, err := op.Path(); err != nil { + return errors.Wrapf(err, "failed to decode 'path'") + } + + return nil +} + +func validatePatch(p Patch) error { + for _, op := range p { + if err := validateOperation(op); err != nil { + opData, infoErr := json.Marshal(op) + if infoErr != nil { + return errors.Wrapf(err, "invalid operation") + } + + return errors.Wrapf(err, "invalid operation %s", opData) + } + } + + return nil +} + func (p Patch) remove(doc *container, op Operation, options *ApplyOptions) error { path, err := op.Path() if err != nil { @@ -965,7 +1006,7 @@ func (p Patch) test(doc *container, op Operation, options *ApplyOptions) error { } if val == nil { - if op.value().raw == nil { + if op.value() == nil || op.value().raw == nil { return nil } return errors.Wrapf(ErrTestFailed, "testing value %s failed", path) @@ -1044,6 +1085,10 @@ func DecodePatch(buf []byte) (Patch, error) { return nil, err } + if err := validatePatch(p); err != nil { + return nil, err + } + return p, nil } diff --git a/vendor/github.com/go-sql-driver/mysql/AUTHORS b/vendor/github.com/go-sql-driver/mysql/AUTHORS index 50afa2c85..fb1478c3b 100644 --- a/vendor/github.com/go-sql-driver/mysql/AUTHORS +++ b/vendor/github.com/go-sql-driver/mysql/AUTHORS @@ -23,6 +23,7 @@ Asta Xie Bulat Gaifullin Caine Jette Carlos Nieto +Chris Kirkland Chris Moos Craig Wilson Daniel Montoya @@ -45,6 +46,7 @@ Ilia Cimpoes INADA Naoki Jacek Szwec James Harr +Janek Vedock Jeff Hodges Jeffrey Charles Jerome Meyer @@ -59,12 +61,14 @@ Kamil Dziedzic Kei Kamikawa Kevin Malachowski Kieron Woodhouse +Lance Tian Lennart Rudolph Leonardo YongUk Kim Linh Tran Tuan Lion Yang Luca Looz Lucas Liu +Lunny Xiao Luke Scott Maciej Zimnoch Michael Woolnough @@ -74,11 +78,14 @@ Olivier Mengué oscarzhao Paul Bonser Peter Schultz +Phil Porada Rebecca Chin Reed Allman Richard Wilkes Robert Russell Runrioter Wung +Samantha Frank +Santhosh Kumar Tekuri Sho Iizuka Sho Ikeda Shuode Li @@ -99,12 +106,14 @@ Xiuming Chen Xuehong Chan Zhenye Xie Zhixin Wen +Ziheng Lyu # Organizations Barracuda Networks, Inc. Counting Ltd. DigitalOcean Inc. +dyves labs AG Facebook Inc. GitHub Inc. Google Inc. diff --git a/vendor/github.com/go-sql-driver/mysql/CHANGELOG.md b/vendor/github.com/go-sql-driver/mysql/CHANGELOG.md index 72a738ed5..5166e4adb 100644 --- a/vendor/github.com/go-sql-driver/mysql/CHANGELOG.md +++ b/vendor/github.com/go-sql-driver/mysql/CHANGELOG.md @@ -1,3 +1,37 @@ +## Version 1.7.1 (2023-04-25) + +Changes: + + - bump actions/checkout@v3 and actions/setup-go@v3 (#1375) + - Add go1.20 and mariadb10.11 to the testing matrix (#1403) + - Increase default maxAllowedPacket size. (#1411) + +Bugfixes: + + - Use SET syntax as specified in the MySQL documentation (#1402) + + +## Version 1.7 (2022-11-29) + +Changes: + + - Drop support of Go 1.12 (#1211) + - Refactoring `(*textRows).readRow` in a more clear way (#1230) + - util: Reduce boundary check in escape functions. (#1316) + - enhancement for mysqlConn handleAuthResult (#1250) + +New Features: + + - support Is comparison on MySQLError (#1210) + - return unsigned in database type name when necessary (#1238) + - Add API to express like a --ssl-mode=PREFERRED MySQL client (#1370) + - Add SQLState to MySQLError (#1321) + +Bugfixes: + + - Fix parsing 0 year. (#1257) + + ## Version 1.6 (2021-04-01) Changes: diff --git a/vendor/github.com/go-sql-driver/mysql/README.md b/vendor/github.com/go-sql-driver/mysql/README.md index 0b13154fc..3b5d229aa 100644 --- a/vendor/github.com/go-sql-driver/mysql/README.md +++ b/vendor/github.com/go-sql-driver/mysql/README.md @@ -40,7 +40,7 @@ A MySQL-Driver for Go's [database/sql](https://golang.org/pkg/database/sql/) pac * Optional placeholder interpolation ## Requirements - * Go 1.10 or higher. We aim to support the 3 latest versions of Go. + * Go 1.13 or higher. We aim to support the 3 latest versions of Go. * MySQL (4.1+), MariaDB, Percona Server, Google CloudSQL or Sphinx (2.2.3+) --------------------------------------- @@ -85,7 +85,7 @@ db.SetMaxIdleConns(10) `db.SetMaxOpenConns()` is highly recommended to limit the number of connection used by the application. There is no recommended limit number because it depends on application and MySQL server. -`db.SetMaxIdleConns()` is recommended to be set same to (or greater than) `db.SetMaxOpenConns()`. When it is smaller than `SetMaxOpenConns()`, connections can be opened and closed very frequently than you expect. Idle connections can be closed by the `db.SetConnMaxLifetime()`. If you want to close idle connections more rapidly, you can use `db.SetConnMaxIdleTime()` since Go 1.15. +`db.SetMaxIdleConns()` is recommended to be set same to `db.SetMaxOpenConns()`. When it is smaller than `SetMaxOpenConns()`, connections can be opened and closed much more frequently than you expect. Idle connections can be closed by the `db.SetConnMaxLifetime()`. If you want to close idle connections more rapidly, you can use `db.SetConnMaxIdleTime()` since Go 1.15. ### DSN (Data Source Name) @@ -157,6 +157,17 @@ Default: false `allowCleartextPasswords=true` allows using the [cleartext client side plugin](https://dev.mysql.com/doc/en/cleartext-pluggable-authentication.html) if required by an account, such as one defined with the [PAM authentication plugin](http://dev.mysql.com/doc/en/pam-authentication-plugin.html). Sending passwords in clear text may be a security problem in some configurations. To avoid problems if there is any possibility that the password would be intercepted, clients should connect to MySQL Server using a method that protects the password. Possibilities include [TLS / SSL](#tls), IPsec, or a private network. + +##### `allowFallbackToPlaintext` + +``` +Type: bool +Valid Values: true, false +Default: false +``` + +`allowFallbackToPlaintext=true` acts like a `--ssl-mode=PREFERRED` MySQL client as described in [Command Options for Connecting to the Server](https://dev.mysql.com/doc/refman/5.7/en/connection-options.html#option_general_ssl-mode) + ##### `allowNativePasswords` ``` @@ -271,10 +282,10 @@ Please keep in mind, that param values must be [url.QueryEscape](https://golang. ##### `maxAllowedPacket` ``` Type: decimal number -Default: 4194304 +Default: 64*1024*1024 ``` -Max packet size allowed in bytes. The default value is 4 MiB and should be adjusted to match the server settings. `maxAllowedPacket=0` can be used to automatically fetch the `max_allowed_packet` variable from server *on every connection*. +Max packet size allowed in bytes. The default value is 64 MiB and should be adjusted to match the server settings. `maxAllowedPacket=0` can be used to automatically fetch the `max_allowed_packet` variable from server *on every connection*. ##### `multiStatements` @@ -454,7 +465,7 @@ user:password@/ The connection pool is managed by Go's database/sql package. For details on how to configure the size of the pool and how long connections stay in the pool see `*DB.SetMaxOpenConns`, `*DB.SetMaxIdleConns`, and `*DB.SetConnMaxLifetime` in the [database/sql documentation](https://golang.org/pkg/database/sql/). The read, write, and dial timeouts for each individual connection are configured with the DSN parameters [`readTimeout`](#readtimeout), [`writeTimeout`](#writetimeout), and [`timeout`](#timeout), respectively. ## `ColumnType` Support -This driver supports the [`ColumnType` interface](https://golang.org/pkg/database/sql/#ColumnType) introduced in Go 1.8, with the exception of [`ColumnType.Length()`](https://golang.org/pkg/database/sql/#ColumnType.Length), which is currently not supported. +This driver supports the [`ColumnType` interface](https://golang.org/pkg/database/sql/#ColumnType) introduced in Go 1.8, with the exception of [`ColumnType.Length()`](https://golang.org/pkg/database/sql/#ColumnType.Length), which is currently not supported. All Unsigned database type names will be returned `UNSIGNED ` with `INT`, `TINYINT`, `SMALLINT`, `BIGINT`. ## `context.Context` Support Go 1.8 added `database/sql` support for `context.Context`. This driver supports query timeouts and cancellation via contexts. diff --git a/vendor/github.com/go-sql-driver/mysql/atomic_bool.go b/vendor/github.com/go-sql-driver/mysql/atomic_bool.go new file mode 100644 index 000000000..1b7e19f3e --- /dev/null +++ b/vendor/github.com/go-sql-driver/mysql/atomic_bool.go @@ -0,0 +1,19 @@ +// Go MySQL Driver - A MySQL-Driver for Go's database/sql package. +// +// Copyright 2022 The Go-MySQL-Driver Authors. All rights reserved. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at http://mozilla.org/MPL/2.0/. +//go:build go1.19 +// +build go1.19 + +package mysql + +import "sync/atomic" + +/****************************************************************************** +* Sync utils * +******************************************************************************/ + +type atomicBool = atomic.Bool diff --git a/vendor/github.com/go-sql-driver/mysql/atomic_bool_go118.go b/vendor/github.com/go-sql-driver/mysql/atomic_bool_go118.go new file mode 100644 index 000000000..2e9a7f0b6 --- /dev/null +++ b/vendor/github.com/go-sql-driver/mysql/atomic_bool_go118.go @@ -0,0 +1,47 @@ +// Go MySQL Driver - A MySQL-Driver for Go's database/sql package. +// +// Copyright 2022 The Go-MySQL-Driver Authors. All rights reserved. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at http://mozilla.org/MPL/2.0/. +//go:build !go1.19 +// +build !go1.19 + +package mysql + +import "sync/atomic" + +/****************************************************************************** +* Sync utils * +******************************************************************************/ + +// atomicBool is an implementation of atomic.Bool for older version of Go. +// it is a wrapper around uint32 for usage as a boolean value with +// atomic access. +type atomicBool struct { + _ noCopy + value uint32 +} + +// Load returns whether the current boolean value is true +func (ab *atomicBool) Load() bool { + return atomic.LoadUint32(&ab.value) > 0 +} + +// Store sets the value of the bool regardless of the previous value +func (ab *atomicBool) Store(value bool) { + if value { + atomic.StoreUint32(&ab.value, 1) + } else { + atomic.StoreUint32(&ab.value, 0) + } +} + +// Swap sets the value of the bool and returns the old value. +func (ab *atomicBool) Swap(value bool) bool { + if value { + return atomic.SwapUint32(&ab.value, 1) > 0 + } + return atomic.SwapUint32(&ab.value, 0) > 0 +} diff --git a/vendor/github.com/go-sql-driver/mysql/auth.go b/vendor/github.com/go-sql-driver/mysql/auth.go index b2f19e8f0..1ff203e57 100644 --- a/vendor/github.com/go-sql-driver/mysql/auth.go +++ b/vendor/github.com/go-sql-driver/mysql/auth.go @@ -33,27 +33,26 @@ var ( // Note: The provided rsa.PublicKey instance is exclusively owned by the driver // after registering it and may not be modified. // -// data, err := ioutil.ReadFile("mykey.pem") -// if err != nil { -// log.Fatal(err) -// } +// data, err := ioutil.ReadFile("mykey.pem") +// if err != nil { +// log.Fatal(err) +// } // -// block, _ := pem.Decode(data) -// if block == nil || block.Type != "PUBLIC KEY" { -// log.Fatal("failed to decode PEM block containing public key") -// } +// block, _ := pem.Decode(data) +// if block == nil || block.Type != "PUBLIC KEY" { +// log.Fatal("failed to decode PEM block containing public key") +// } // -// pub, err := x509.ParsePKIXPublicKey(block.Bytes) -// if err != nil { -// log.Fatal(err) -// } -// -// if rsaPubKey, ok := pub.(*rsa.PublicKey); ok { -// mysql.RegisterServerPubKey("mykey", rsaPubKey) -// } else { -// log.Fatal("not a RSA public key") -// } +// pub, err := x509.ParsePKIXPublicKey(block.Bytes) +// if err != nil { +// log.Fatal(err) +// } // +// if rsaPubKey, ok := pub.(*rsa.PublicKey); ok { +// mysql.RegisterServerPubKey("mykey", rsaPubKey) +// } else { +// log.Fatal("not a RSA public key") +// } func RegisterServerPubKey(name string, pubKey *rsa.PublicKey) { serverPubKeyLock.Lock() if serverPubKeyRegistry == nil { @@ -274,7 +273,9 @@ func (mc *mysqlConn) auth(authData []byte, plugin string) ([]byte, error) { if len(mc.cfg.Passwd) == 0 { return []byte{0}, nil } - if mc.cfg.tls != nil || mc.cfg.Net == "unix" { + // unlike caching_sha2_password, sha256_password does not accept + // cleartext password on unix transport. + if mc.cfg.TLS != nil { // write cleartext auth packet return append([]byte(mc.cfg.Passwd), 0), nil } @@ -350,7 +351,7 @@ func (mc *mysqlConn) handleAuthResult(oldAuthData []byte, plugin string) error { } case cachingSha2PasswordPerformFullAuthentication: - if mc.cfg.tls != nil || mc.cfg.Net == "unix" { + if mc.cfg.TLS != nil || mc.cfg.Net == "unix" { // write cleartext auth packet err = mc.writeAuthSwitchPacket(append([]byte(mc.cfg.Passwd), 0)) if err != nil { @@ -365,13 +366,20 @@ func (mc *mysqlConn) handleAuthResult(oldAuthData []byte, plugin string) error { return err } data[4] = cachingSha2PasswordRequestPublicKey - mc.writePacket(data) + err = mc.writePacket(data) + if err != nil { + return err + } - // parse public key if data, err = mc.readPacket(); err != nil { return err } + if data[0] != iAuthMoreData { + return fmt.Errorf("unexpect resp from server for caching_sha2_password perform full authentication") + } + + // parse public key block, rest := pem.Decode(data[1:]) if block == nil { return fmt.Errorf("No Pem data found, data: %s", rest) @@ -404,6 +412,10 @@ func (mc *mysqlConn) handleAuthResult(oldAuthData []byte, plugin string) error { return nil // auth successful default: block, _ := pem.Decode(authData) + if block == nil { + return fmt.Errorf("no Pem data found, data: %s", authData) + } + pub, err := x509.ParsePKIXPublicKey(block.Bytes) if err != nil { return err diff --git a/vendor/github.com/go-sql-driver/mysql/collations.go b/vendor/github.com/go-sql-driver/mysql/collations.go index 326a9f7fa..295bfbe52 100644 --- a/vendor/github.com/go-sql-driver/mysql/collations.go +++ b/vendor/github.com/go-sql-driver/mysql/collations.go @@ -13,7 +13,8 @@ const binaryCollation = "binary" // A list of available collations mapped to the internal ID. // To update this map use the following MySQL query: -// SELECT COLLATION_NAME, ID FROM information_schema.COLLATIONS WHERE ID<256 ORDER BY ID +// +// SELECT COLLATION_NAME, ID FROM information_schema.COLLATIONS WHERE ID<256 ORDER BY ID // // Handshake packet have only 1 byte for collation_id. So we can't use collations with ID > 255. // diff --git a/vendor/github.com/go-sql-driver/mysql/conncheck.go b/vendor/github.com/go-sql-driver/mysql/conncheck.go index 024eb2858..0ea721720 100644 --- a/vendor/github.com/go-sql-driver/mysql/conncheck.go +++ b/vendor/github.com/go-sql-driver/mysql/conncheck.go @@ -6,6 +6,7 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this file, // You can obtain one at http://mozilla.org/MPL/2.0/. +//go:build linux || darwin || dragonfly || freebsd || netbsd || openbsd || solaris || illumos // +build linux darwin dragonfly freebsd netbsd openbsd solaris illumos package mysql diff --git a/vendor/github.com/go-sql-driver/mysql/conncheck_dummy.go b/vendor/github.com/go-sql-driver/mysql/conncheck_dummy.go index ea7fb607a..a56c138f2 100644 --- a/vendor/github.com/go-sql-driver/mysql/conncheck_dummy.go +++ b/vendor/github.com/go-sql-driver/mysql/conncheck_dummy.go @@ -6,6 +6,7 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this file, // You can obtain one at http://mozilla.org/MPL/2.0/. +//go:build !linux && !darwin && !dragonfly && !freebsd && !netbsd && !openbsd && !solaris && !illumos // +build !linux,!darwin,!dragonfly,!freebsd,!netbsd,!openbsd,!solaris,!illumos package mysql diff --git a/vendor/github.com/go-sql-driver/mysql/connection.go b/vendor/github.com/go-sql-driver/mysql/connection.go index 835f89729..947a883e3 100644 --- a/vendor/github.com/go-sql-driver/mysql/connection.go +++ b/vendor/github.com/go-sql-driver/mysql/connection.go @@ -71,10 +71,10 @@ func (mc *mysqlConn) handleParams() (err error) { cmdSet.Grow(4 + len(param) + 1 + len(val) + 30*(len(mc.cfg.Params)-1)) cmdSet.WriteString("SET ") } else { - cmdSet.WriteByte(',') + cmdSet.WriteString(", ") } cmdSet.WriteString(param) - cmdSet.WriteByte('=') + cmdSet.WriteString(" = ") cmdSet.WriteString(val) } } @@ -104,7 +104,7 @@ func (mc *mysqlConn) Begin() (driver.Tx, error) { } func (mc *mysqlConn) begin(readOnly bool) (driver.Tx, error) { - if mc.closed.IsSet() { + if mc.closed.Load() { errLog.Print(ErrInvalidConn) return nil, driver.ErrBadConn } @@ -123,7 +123,7 @@ func (mc *mysqlConn) begin(readOnly bool) (driver.Tx, error) { func (mc *mysqlConn) Close() (err error) { // Makes Close idempotent - if !mc.closed.IsSet() { + if !mc.closed.Load() { err = mc.writeCommandPacket(comQuit) } @@ -137,7 +137,7 @@ func (mc *mysqlConn) Close() (err error) { // is called before auth or on auth failure because MySQL will have already // closed the network connection. func (mc *mysqlConn) cleanup() { - if !mc.closed.TrySet(true) { + if mc.closed.Swap(true) { return } @@ -152,7 +152,7 @@ func (mc *mysqlConn) cleanup() { } func (mc *mysqlConn) error() error { - if mc.closed.IsSet() { + if mc.closed.Load() { if err := mc.canceled.Value(); err != nil { return err } @@ -162,7 +162,7 @@ func (mc *mysqlConn) error() error { } func (mc *mysqlConn) Prepare(query string) (driver.Stmt, error) { - if mc.closed.IsSet() { + if mc.closed.Load() { errLog.Print(ErrInvalidConn) return nil, driver.ErrBadConn } @@ -295,7 +295,7 @@ func (mc *mysqlConn) interpolateParams(query string, args []driver.Value) (strin } func (mc *mysqlConn) Exec(query string, args []driver.Value) (driver.Result, error) { - if mc.closed.IsSet() { + if mc.closed.Load() { errLog.Print(ErrInvalidConn) return nil, driver.ErrBadConn } @@ -356,7 +356,7 @@ func (mc *mysqlConn) Query(query string, args []driver.Value) (driver.Rows, erro } func (mc *mysqlConn) query(query string, args []driver.Value) (*textRows, error) { - if mc.closed.IsSet() { + if mc.closed.Load() { errLog.Print(ErrInvalidConn) return nil, driver.ErrBadConn } @@ -450,7 +450,7 @@ func (mc *mysqlConn) finish() { // Ping implements driver.Pinger interface func (mc *mysqlConn) Ping(ctx context.Context) (err error) { - if mc.closed.IsSet() { + if mc.closed.Load() { errLog.Print(ErrInvalidConn) return driver.ErrBadConn } @@ -469,7 +469,7 @@ func (mc *mysqlConn) Ping(ctx context.Context) (err error) { // BeginTx implements driver.ConnBeginTx interface func (mc *mysqlConn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) { - if mc.closed.IsSet() { + if mc.closed.Load() { return nil, driver.ErrBadConn } @@ -636,7 +636,7 @@ func (mc *mysqlConn) CheckNamedValue(nv *driver.NamedValue) (err error) { // ResetSession implements driver.SessionResetter. // (From Go 1.10) func (mc *mysqlConn) ResetSession(ctx context.Context) error { - if mc.closed.IsSet() { + if mc.closed.Load() { return driver.ErrBadConn } mc.reset = true @@ -646,5 +646,5 @@ func (mc *mysqlConn) ResetSession(ctx context.Context) error { // IsValid implements driver.Validator interface // (From Go 1.15) func (mc *mysqlConn) IsValid() bool { - return !mc.closed.IsSet() + return !mc.closed.Load() } diff --git a/vendor/github.com/go-sql-driver/mysql/const.go b/vendor/github.com/go-sql-driver/mysql/const.go index b1e6b85ef..64e2bced6 100644 --- a/vendor/github.com/go-sql-driver/mysql/const.go +++ b/vendor/github.com/go-sql-driver/mysql/const.go @@ -10,7 +10,7 @@ package mysql const ( defaultAuthPlugin = "mysql_native_password" - defaultMaxAllowedPacket = 4 << 20 // 4 MiB + defaultMaxAllowedPacket = 64 << 20 // 64 MiB. See https://github.com/go-sql-driver/mysql/issues/1355 minProtocolVersion = 10 maxPacketSize = 1<<24 - 1 timeFormat = "2006-01-02 15:04:05.999999" diff --git a/vendor/github.com/go-sql-driver/mysql/driver.go b/vendor/github.com/go-sql-driver/mysql/driver.go index c1bdf1199..ad7aec215 100644 --- a/vendor/github.com/go-sql-driver/mysql/driver.go +++ b/vendor/github.com/go-sql-driver/mysql/driver.go @@ -8,10 +8,10 @@ // // The driver should be used via the database/sql package: // -// import "database/sql" -// import _ "github.com/go-sql-driver/mysql" +// import "database/sql" +// import _ "github.com/go-sql-driver/mysql" // -// db, err := sql.Open("mysql", "user:password@/dbname") +// db, err := sql.Open("mysql", "user:password@/dbname") // // See https://github.com/go-sql-driver/mysql#usage for details package mysql diff --git a/vendor/github.com/go-sql-driver/mysql/dsn.go b/vendor/github.com/go-sql-driver/mysql/dsn.go index 93f3548cb..4b71aaab0 100644 --- a/vendor/github.com/go-sql-driver/mysql/dsn.go +++ b/vendor/github.com/go-sql-driver/mysql/dsn.go @@ -46,22 +46,23 @@ type Config struct { ServerPubKey string // Server public key name pubKey *rsa.PublicKey // Server public key TLSConfig string // TLS configuration name - tls *tls.Config // TLS configuration + TLS *tls.Config // TLS configuration, its priority is higher than TLSConfig Timeout time.Duration // Dial timeout ReadTimeout time.Duration // I/O read timeout WriteTimeout time.Duration // I/O write timeout - AllowAllFiles bool // Allow all files to be used with LOAD DATA LOCAL INFILE - AllowCleartextPasswords bool // Allows the cleartext client side plugin - AllowNativePasswords bool // Allows the native password authentication method - AllowOldPasswords bool // Allows the old insecure password method - CheckConnLiveness bool // Check connections for liveness before using them - ClientFoundRows bool // Return number of matching rows instead of rows changed - ColumnsWithAlias bool // Prepend table alias to column names - InterpolateParams bool // Interpolate placeholders into query string - MultiStatements bool // Allow multiple statements in one query - ParseTime bool // Parse time values to time.Time - RejectReadOnly bool // Reject read-only connections + AllowAllFiles bool // Allow all files to be used with LOAD DATA LOCAL INFILE + AllowCleartextPasswords bool // Allows the cleartext client side plugin + AllowFallbackToPlaintext bool // Allows fallback to unencrypted connection if server does not support TLS + AllowNativePasswords bool // Allows the native password authentication method + AllowOldPasswords bool // Allows the old insecure password method + CheckConnLiveness bool // Check connections for liveness before using them + ClientFoundRows bool // Return number of matching rows instead of rows changed + ColumnsWithAlias bool // Prepend table alias to column names + InterpolateParams bool // Interpolate placeholders into query string + MultiStatements bool // Allow multiple statements in one query + ParseTime bool // Parse time values to time.Time + RejectReadOnly bool // Reject read-only connections } // NewConfig creates a new Config and sets default values. @@ -77,8 +78,8 @@ func NewConfig() *Config { func (cfg *Config) Clone() *Config { cp := *cfg - if cp.tls != nil { - cp.tls = cfg.tls.Clone() + if cp.TLS != nil { + cp.TLS = cfg.TLS.Clone() } if len(cp.Params) > 0 { cp.Params = make(map[string]string, len(cfg.Params)) @@ -119,24 +120,29 @@ func (cfg *Config) normalize() error { cfg.Addr = ensureHavePort(cfg.Addr) } - switch cfg.TLSConfig { - case "false", "": - // don't set anything - case "true": - cfg.tls = &tls.Config{} - case "skip-verify", "preferred": - cfg.tls = &tls.Config{InsecureSkipVerify: true} - default: - cfg.tls = getTLSConfigClone(cfg.TLSConfig) - if cfg.tls == nil { - return errors.New("invalid value / unknown config name: " + cfg.TLSConfig) + if cfg.TLS == nil { + switch cfg.TLSConfig { + case "false", "": + // don't set anything + case "true": + cfg.TLS = &tls.Config{} + case "skip-verify": + cfg.TLS = &tls.Config{InsecureSkipVerify: true} + case "preferred": + cfg.TLS = &tls.Config{InsecureSkipVerify: true} + cfg.AllowFallbackToPlaintext = true + default: + cfg.TLS = getTLSConfigClone(cfg.TLSConfig) + if cfg.TLS == nil { + return errors.New("invalid value / unknown config name: " + cfg.TLSConfig) + } } } - if cfg.tls != nil && cfg.tls.ServerName == "" && !cfg.tls.InsecureSkipVerify { + if cfg.TLS != nil && cfg.TLS.ServerName == "" && !cfg.TLS.InsecureSkipVerify { host, _, err := net.SplitHostPort(cfg.Addr) if err == nil { - cfg.tls.ServerName = host + cfg.TLS.ServerName = host } } @@ -204,6 +210,10 @@ func (cfg *Config) FormatDSN() string { writeDSNParam(&buf, &hasParam, "allowCleartextPasswords", "true") } + if cfg.AllowFallbackToPlaintext { + writeDSNParam(&buf, &hasParam, "allowFallbackToPlaintext", "true") + } + if !cfg.AllowNativePasswords { writeDSNParam(&buf, &hasParam, "allowNativePasswords", "false") } @@ -391,6 +401,14 @@ func parseDSNParams(cfg *Config, params string) (err error) { return errors.New("invalid bool value: " + value) } + // Allow fallback to unencrypted connection if server does not support TLS + case "allowFallbackToPlaintext": + var isBool bool + cfg.AllowFallbackToPlaintext, isBool = readBool(value) + if !isBool { + return errors.New("invalid bool value: " + value) + } + // Use native password authentication case "allowNativePasswords": var isBool bool @@ -426,7 +444,6 @@ func parseDSNParams(cfg *Config, params string) (err error) { // Collation case "collation": cfg.Collation = value - break case "columnsWithAlias": var isBool bool diff --git a/vendor/github.com/go-sql-driver/mysql/errors.go b/vendor/github.com/go-sql-driver/mysql/errors.go index 760782ff2..ff9a8f088 100644 --- a/vendor/github.com/go-sql-driver/mysql/errors.go +++ b/vendor/github.com/go-sql-driver/mysql/errors.go @@ -27,7 +27,7 @@ var ( ErrOldProtocol = errors.New("MySQL server does not support required protocol 41+") ErrPktSync = errors.New("commands out of sync. You can't run this command now") ErrPktSyncMul = errors.New("commands out of sync. Did you run multiple statements at once?") - ErrPktTooLarge = errors.New("packet for query is too large. Try adjusting the 'max_allowed_packet' variable on the server") + ErrPktTooLarge = errors.New("packet for query is too large. Try adjusting the `Config.MaxAllowedPacket`") ErrBusyBuffer = errors.New("busy buffer") // errBadConnNoWrite is used for connection errors where nothing was sent to the database yet. @@ -56,10 +56,22 @@ func SetLogger(logger Logger) error { // MySQLError is an error type which represents a single MySQL error type MySQLError struct { - Number uint16 - Message string + Number uint16 + SQLState [5]byte + Message string } func (me *MySQLError) Error() string { + if me.SQLState != [5]byte{} { + return fmt.Sprintf("Error %d (%s): %s", me.Number, me.SQLState, me.Message) + } + return fmt.Sprintf("Error %d: %s", me.Number, me.Message) } + +func (me *MySQLError) Is(err error) bool { + if merr, ok := err.(*MySQLError); ok { + return merr.Number == me.Number + } + return false +} diff --git a/vendor/github.com/go-sql-driver/mysql/fields.go b/vendor/github.com/go-sql-driver/mysql/fields.go index ed6c7a37d..e0654a83d 100644 --- a/vendor/github.com/go-sql-driver/mysql/fields.go +++ b/vendor/github.com/go-sql-driver/mysql/fields.go @@ -41,6 +41,9 @@ func (mf *mysqlField) typeDatabaseName() string { case fieldTypeJSON: return "JSON" case fieldTypeLong: + if mf.flags&flagUnsigned != 0 { + return "UNSIGNED INT" + } return "INT" case fieldTypeLongBLOB: if mf.charSet != collations[binaryCollation] { @@ -48,6 +51,9 @@ func (mf *mysqlField) typeDatabaseName() string { } return "LONGBLOB" case fieldTypeLongLong: + if mf.flags&flagUnsigned != 0 { + return "UNSIGNED BIGINT" + } return "BIGINT" case fieldTypeMediumBLOB: if mf.charSet != collations[binaryCollation] { @@ -63,6 +69,9 @@ func (mf *mysqlField) typeDatabaseName() string { case fieldTypeSet: return "SET" case fieldTypeShort: + if mf.flags&flagUnsigned != 0 { + return "UNSIGNED SMALLINT" + } return "SMALLINT" case fieldTypeString: if mf.charSet == collations[binaryCollation] { @@ -74,6 +83,9 @@ func (mf *mysqlField) typeDatabaseName() string { case fieldTypeTimestamp: return "TIMESTAMP" case fieldTypeTiny: + if mf.flags&flagUnsigned != 0 { + return "UNSIGNED TINYINT" + } return "TINYINT" case fieldTypeTinyBLOB: if mf.charSet != collations[binaryCollation] { @@ -106,7 +118,7 @@ var ( scanTypeInt64 = reflect.TypeOf(int64(0)) scanTypeNullFloat = reflect.TypeOf(sql.NullFloat64{}) scanTypeNullInt = reflect.TypeOf(sql.NullInt64{}) - scanTypeNullTime = reflect.TypeOf(nullTime{}) + scanTypeNullTime = reflect.TypeOf(sql.NullTime{}) scanTypeUint8 = reflect.TypeOf(uint8(0)) scanTypeUint16 = reflect.TypeOf(uint16(0)) scanTypeUint32 = reflect.TypeOf(uint32(0)) diff --git a/vendor/github.com/go-sql-driver/mysql/fuzz.go b/vendor/github.com/go-sql-driver/mysql/fuzz.go index fa75adf6a..3a4ec25a9 100644 --- a/vendor/github.com/go-sql-driver/mysql/fuzz.go +++ b/vendor/github.com/go-sql-driver/mysql/fuzz.go @@ -6,6 +6,7 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this file, // You can obtain one at http://mozilla.org/MPL/2.0/. +//go:build gofuzz // +build gofuzz package mysql diff --git a/vendor/github.com/go-sql-driver/mysql/infile.go b/vendor/github.com/go-sql-driver/mysql/infile.go index 60effdfc2..3279dcffd 100644 --- a/vendor/github.com/go-sql-driver/mysql/infile.go +++ b/vendor/github.com/go-sql-driver/mysql/infile.go @@ -28,12 +28,11 @@ var ( // Alternatively you can allow the use of all local files with // the DSN parameter 'allowAllFiles=true' // -// filePath := "/home/gopher/data.csv" -// mysql.RegisterLocalFile(filePath) -// err := db.Exec("LOAD DATA LOCAL INFILE '" + filePath + "' INTO TABLE foo") -// if err != nil { -// ... -// +// filePath := "/home/gopher/data.csv" +// mysql.RegisterLocalFile(filePath) +// err := db.Exec("LOAD DATA LOCAL INFILE '" + filePath + "' INTO TABLE foo") +// if err != nil { +// ... func RegisterLocalFile(filePath string) { fileRegisterLock.Lock() // lazy map init @@ -58,15 +57,14 @@ func DeregisterLocalFile(filePath string) { // If the handler returns a io.ReadCloser Close() is called when the // request is finished. // -// mysql.RegisterReaderHandler("data", func() io.Reader { -// var csvReader io.Reader // Some Reader that returns CSV data -// ... // Open Reader here -// return csvReader -// }) -// err := db.Exec("LOAD DATA LOCAL INFILE 'Reader::data' INTO TABLE foo") -// if err != nil { -// ... -// +// mysql.RegisterReaderHandler("data", func() io.Reader { +// var csvReader io.Reader // Some Reader that returns CSV data +// ... // Open Reader here +// return csvReader +// }) +// err := db.Exec("LOAD DATA LOCAL INFILE 'Reader::data' INTO TABLE foo") +// if err != nil { +// ... func RegisterReaderHandler(name string, handler func() io.Reader) { readerRegisterLock.Lock() // lazy map init @@ -93,10 +91,12 @@ func deferredClose(err *error, closer io.Closer) { } } +const defaultPacketSize = 16 * 1024 // 16KB is small enough for disk readahead and large enough for TCP + func (mc *mysqlConn) handleInFileRequest(name string) (err error) { var rdr io.Reader var data []byte - packetSize := 16 * 1024 // 16KB is small enough for disk readahead and large enough for TCP + packetSize := defaultPacketSize if mc.maxWriteSize < packetSize { packetSize = mc.maxWriteSize } diff --git a/vendor/github.com/go-sql-driver/mysql/nulltime.go b/vendor/github.com/go-sql-driver/mysql/nulltime.go index 651723a96..36c8a42c5 100644 --- a/vendor/github.com/go-sql-driver/mysql/nulltime.go +++ b/vendor/github.com/go-sql-driver/mysql/nulltime.go @@ -9,11 +9,32 @@ package mysql import ( + "database/sql" "database/sql/driver" "fmt" "time" ) +// NullTime represents a time.Time that may be NULL. +// NullTime implements the Scanner interface so +// it can be used as a scan destination: +// +// var nt NullTime +// err := db.QueryRow("SELECT time FROM foo WHERE id=?", id).Scan(&nt) +// ... +// if nt.Valid { +// // use nt.Time +// } else { +// // NULL value +// } +// +// # This NullTime implementation is not driver-specific +// +// Deprecated: NullTime doesn't honor the loc DSN parameter. +// NullTime.Scan interprets a time as UTC, not the loc DSN parameter. +// Use sql.NullTime instead. +type NullTime sql.NullTime + // Scan implements the Scanner interface. // The value type must be time.Time or string / []byte (formatted time-string), // otherwise Scan fails. diff --git a/vendor/github.com/go-sql-driver/mysql/nulltime_go113.go b/vendor/github.com/go-sql-driver/mysql/nulltime_go113.go deleted file mode 100644 index 453b4b394..000000000 --- a/vendor/github.com/go-sql-driver/mysql/nulltime_go113.go +++ /dev/null @@ -1,40 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build go1.13 - -package mysql - -import ( - "database/sql" -) - -// NullTime represents a time.Time that may be NULL. -// NullTime implements the Scanner interface so -// it can be used as a scan destination: -// -// var nt NullTime -// err := db.QueryRow("SELECT time FROM foo WHERE id=?", id).Scan(&nt) -// ... -// if nt.Valid { -// // use nt.Time -// } else { -// // NULL value -// } -// -// This NullTime implementation is not driver-specific -// -// Deprecated: NullTime doesn't honor the loc DSN parameter. -// NullTime.Scan interprets a time as UTC, not the loc DSN parameter. -// Use sql.NullTime instead. -type NullTime sql.NullTime - -// for internal use. -// the mysql package uses sql.NullTime if it is available. -// if not, the package uses mysql.NullTime. -type nullTime = sql.NullTime // sql.NullTime is available diff --git a/vendor/github.com/go-sql-driver/mysql/nulltime_legacy.go b/vendor/github.com/go-sql-driver/mysql/nulltime_legacy.go deleted file mode 100644 index 9f7ae27a8..000000000 --- a/vendor/github.com/go-sql-driver/mysql/nulltime_legacy.go +++ /dev/null @@ -1,39 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build !go1.13 - -package mysql - -import ( - "time" -) - -// NullTime represents a time.Time that may be NULL. -// NullTime implements the Scanner interface so -// it can be used as a scan destination: -// -// var nt NullTime -// err := db.QueryRow("SELECT time FROM foo WHERE id=?", id).Scan(&nt) -// ... -// if nt.Valid { -// // use nt.Time -// } else { -// // NULL value -// } -// -// This NullTime implementation is not driver-specific -type NullTime struct { - Time time.Time - Valid bool // Valid is true if Time is not NULL -} - -// for internal use. -// the mysql package uses sql.NullTime if it is available. -// if not, the package uses mysql.NullTime. -type nullTime = NullTime // sql.NullTime is not available diff --git a/vendor/github.com/go-sql-driver/mysql/packets.go b/vendor/github.com/go-sql-driver/mysql/packets.go index 6664e5ae5..ee05c95a8 100644 --- a/vendor/github.com/go-sql-driver/mysql/packets.go +++ b/vendor/github.com/go-sql-driver/mysql/packets.go @@ -110,14 +110,13 @@ func (mc *mysqlConn) writePacket(data []byte) error { conn = mc.rawConn } var err error - // If this connection has a ReadTimeout which we've been setting on - // reads, reset it to its default value before we attempt a non-blocking - // read, otherwise the scheduler will just time us out before we can read - if mc.cfg.ReadTimeout != 0 { - err = conn.SetReadDeadline(time.Time{}) - } - if err == nil && mc.cfg.CheckConnLiveness { - err = connCheck(conn) + if mc.cfg.CheckConnLiveness { + if mc.cfg.ReadTimeout != 0 { + err = conn.SetReadDeadline(time.Now().Add(mc.cfg.ReadTimeout)) + } + if err == nil { + err = connCheck(conn) + } } if err != nil { errLog.Print("closing bad idle connection: ", err) @@ -223,9 +222,9 @@ func (mc *mysqlConn) readHandshakePacket() (data []byte, plugin string, err erro if mc.flags&clientProtocol41 == 0 { return nil, "", ErrOldProtocol } - if mc.flags&clientSSL == 0 && mc.cfg.tls != nil { - if mc.cfg.TLSConfig == "preferred" { - mc.cfg.tls = nil + if mc.flags&clientSSL == 0 && mc.cfg.TLS != nil { + if mc.cfg.AllowFallbackToPlaintext { + mc.cfg.TLS = nil } else { return nil, "", ErrNoTLS } @@ -293,7 +292,7 @@ func (mc *mysqlConn) writeHandshakeResponsePacket(authResp []byte, plugin string } // To enable TLS / SSL - if mc.cfg.tls != nil { + if mc.cfg.TLS != nil { clientFlags |= clientSSL } @@ -357,14 +356,14 @@ func (mc *mysqlConn) writeHandshakeResponsePacket(authResp []byte, plugin string // SSL Connection Request Packet // http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::SSLRequest - if mc.cfg.tls != nil { + if mc.cfg.TLS != nil { // Send TLS / SSL request packet if err := mc.writePacket(data[:(4+4+1+23)+4]); err != nil { return err } // Switch to TLS - tlsConn := tls.Client(mc.netConn, mc.cfg.tls) + tlsConn := tls.Client(mc.netConn, mc.cfg.TLS) if err := tlsConn.Handshake(); err != nil { return err } @@ -588,19 +587,20 @@ func (mc *mysqlConn) handleErrorPacket(data []byte) error { return driver.ErrBadConn } + me := &MySQLError{Number: errno} + pos := 3 // SQL State [optional: # + 5bytes string] if data[3] == 0x23 { - //sqlstate := string(data[4 : 4+5]) + copy(me.SQLState[:], data[4:4+5]) pos = 9 } // Error Message [string] - return &MySQLError{ - Number: errno, - Message: string(data[pos:]), - } + me.Message = string(data[pos:]) + + return me } func readStatus(b []byte) statusFlag { @@ -761,40 +761,40 @@ func (rows *textRows) readRow(dest []driver.Value) error { } // RowSet Packet - var n int - var isNull bool - pos := 0 + var ( + n int + isNull bool + pos int = 0 + ) for i := range dest { // Read bytes and convert to string dest[i], isNull, n, err = readLengthEncodedString(data[pos:]) pos += n - if err == nil { - if !isNull { - if !mc.parseTime { - continue - } else { - switch rows.rs.columns[i].fieldType { - case fieldTypeTimestamp, fieldTypeDateTime, - fieldTypeDate, fieldTypeNewDate: - dest[i], err = parseDateTime( - dest[i].([]byte), - mc.cfg.Loc, - ) - if err == nil { - continue - } - default: - continue - } - } - } else { - dest[i] = nil - continue + if err != nil { + return err + } + + if isNull { + dest[i] = nil + continue + } + + if !mc.parseTime { + continue + } + + // Parse time field + switch rows.rs.columns[i].fieldType { + case fieldTypeTimestamp, + fieldTypeDateTime, + fieldTypeDate, + fieldTypeNewDate: + if dest[i], err = parseDateTime(dest[i].([]byte), mc.cfg.Loc); err != nil { + return err } } - return err // err != nil } return nil diff --git a/vendor/github.com/go-sql-driver/mysql/statement.go b/vendor/github.com/go-sql-driver/mysql/statement.go index 18a3ae498..10ece8bd6 100644 --- a/vendor/github.com/go-sql-driver/mysql/statement.go +++ b/vendor/github.com/go-sql-driver/mysql/statement.go @@ -23,7 +23,7 @@ type mysqlStmt struct { } func (stmt *mysqlStmt) Close() error { - if stmt.mc == nil || stmt.mc.closed.IsSet() { + if stmt.mc == nil || stmt.mc.closed.Load() { // driver.Stmt.Close can be called more than once, thus this function // has to be idempotent. // See also Issue #450 and golang/go#16019. @@ -50,7 +50,7 @@ func (stmt *mysqlStmt) CheckNamedValue(nv *driver.NamedValue) (err error) { } func (stmt *mysqlStmt) Exec(args []driver.Value) (driver.Result, error) { - if stmt.mc.closed.IsSet() { + if stmt.mc.closed.Load() { errLog.Print(ErrInvalidConn) return nil, driver.ErrBadConn } @@ -98,7 +98,7 @@ func (stmt *mysqlStmt) Query(args []driver.Value) (driver.Rows, error) { } func (stmt *mysqlStmt) query(args []driver.Value) (*binaryRows, error) { - if stmt.mc.closed.IsSet() { + if stmt.mc.closed.Load() { errLog.Print(ErrInvalidConn) return nil, driver.ErrBadConn } @@ -157,7 +157,7 @@ func (c converter) ConvertValue(v interface{}) (driver.Value, error) { if driver.IsValue(sv) { return sv, nil } - // A value returend from the Valuer interface can be "a type handled by + // A value returned from the Valuer interface can be "a type handled by // a database driver's NamedValueChecker interface" so we should accept // uint64 here as well. if u, ok := sv.(uint64); ok { diff --git a/vendor/github.com/go-sql-driver/mysql/transaction.go b/vendor/github.com/go-sql-driver/mysql/transaction.go index 417d72793..4a4b61001 100644 --- a/vendor/github.com/go-sql-driver/mysql/transaction.go +++ b/vendor/github.com/go-sql-driver/mysql/transaction.go @@ -13,7 +13,7 @@ type mysqlTx struct { } func (tx *mysqlTx) Commit() (err error) { - if tx.mc == nil || tx.mc.closed.IsSet() { + if tx.mc == nil || tx.mc.closed.Load() { return ErrInvalidConn } err = tx.mc.exec("COMMIT") @@ -22,7 +22,7 @@ func (tx *mysqlTx) Commit() (err error) { } func (tx *mysqlTx) Rollback() (err error) { - if tx.mc == nil || tx.mc.closed.IsSet() { + if tx.mc == nil || tx.mc.closed.Load() { return ErrInvalidConn } err = tx.mc.exec("ROLLBACK") diff --git a/vendor/github.com/go-sql-driver/mysql/utils.go b/vendor/github.com/go-sql-driver/mysql/utils.go index d6545f5be..15dbd8d16 100644 --- a/vendor/github.com/go-sql-driver/mysql/utils.go +++ b/vendor/github.com/go-sql-driver/mysql/utils.go @@ -35,26 +35,25 @@ var ( // Note: The provided tls.Config is exclusively owned by the driver after // registering it. // -// rootCertPool := x509.NewCertPool() -// pem, err := ioutil.ReadFile("/path/ca-cert.pem") -// if err != nil { -// log.Fatal(err) -// } -// if ok := rootCertPool.AppendCertsFromPEM(pem); !ok { -// log.Fatal("Failed to append PEM.") -// } -// clientCert := make([]tls.Certificate, 0, 1) -// certs, err := tls.LoadX509KeyPair("/path/client-cert.pem", "/path/client-key.pem") -// if err != nil { -// log.Fatal(err) -// } -// clientCert = append(clientCert, certs) -// mysql.RegisterTLSConfig("custom", &tls.Config{ -// RootCAs: rootCertPool, -// Certificates: clientCert, -// }) -// db, err := sql.Open("mysql", "user@tcp(localhost:3306)/test?tls=custom") -// +// rootCertPool := x509.NewCertPool() +// pem, err := ioutil.ReadFile("/path/ca-cert.pem") +// if err != nil { +// log.Fatal(err) +// } +// if ok := rootCertPool.AppendCertsFromPEM(pem); !ok { +// log.Fatal("Failed to append PEM.") +// } +// clientCert := make([]tls.Certificate, 0, 1) +// certs, err := tls.LoadX509KeyPair("/path/client-cert.pem", "/path/client-key.pem") +// if err != nil { +// log.Fatal(err) +// } +// clientCert = append(clientCert, certs) +// mysql.RegisterTLSConfig("custom", &tls.Config{ +// RootCAs: rootCertPool, +// Certificates: clientCert, +// }) +// db, err := sql.Open("mysql", "user@tcp(localhost:3306)/test?tls=custom") func RegisterTLSConfig(key string, config *tls.Config) error { if _, isBool := readBool(key); isBool || strings.ToLower(key) == "skip-verify" || strings.ToLower(key) == "preferred" { return fmt.Errorf("key '%s' is reserved", key) @@ -118,10 +117,6 @@ func parseDateTime(b []byte, loc *time.Location) (time.Time, error) { if err != nil { return time.Time{}, err } - if year <= 0 { - year = 1 - } - if b[4] != '-' { return time.Time{}, fmt.Errorf("bad value for field: `%c`", b[4]) } @@ -130,9 +125,6 @@ func parseDateTime(b []byte, loc *time.Location) (time.Time, error) { if err != nil { return time.Time{}, err } - if m <= 0 { - m = 1 - } month := time.Month(m) if b[7] != '-' { @@ -143,9 +135,6 @@ func parseDateTime(b []byte, loc *time.Location) (time.Time, error) { if err != nil { return time.Time{}, err } - if day <= 0 { - day = 1 - } if len(b) == 10 { return time.Date(year, month, day, 0, 0, 0, 0, loc), nil } @@ -199,7 +188,7 @@ func parseByteYear(b []byte) (int, error) { return 0, err } year += v * n - n = n / 10 + n /= 10 } return year, nil } @@ -542,7 +531,7 @@ func stringToInt(b []byte) int { return val } -// returns the string read as a bytes slice, wheter the value is NULL, +// returns the string read as a bytes slice, whether the value is NULL, // the number of bytes read and an error, in case the string is longer than // the input slice func readLengthEncodedString(b []byte) ([]byte, bool, int, error) { @@ -652,32 +641,32 @@ func escapeBytesBackslash(buf, v []byte) []byte { for _, c := range v { switch c { case '\x00': - buf[pos] = '\\' buf[pos+1] = '0' + buf[pos] = '\\' pos += 2 case '\n': - buf[pos] = '\\' buf[pos+1] = 'n' + buf[pos] = '\\' pos += 2 case '\r': - buf[pos] = '\\' buf[pos+1] = 'r' + buf[pos] = '\\' pos += 2 case '\x1a': - buf[pos] = '\\' buf[pos+1] = 'Z' + buf[pos] = '\\' pos += 2 case '\'': - buf[pos] = '\\' buf[pos+1] = '\'' + buf[pos] = '\\' pos += 2 case '"': - buf[pos] = '\\' buf[pos+1] = '"' + buf[pos] = '\\' pos += 2 case '\\': - buf[pos] = '\\' buf[pos+1] = '\\' + buf[pos] = '\\' pos += 2 default: buf[pos] = c @@ -697,32 +686,32 @@ func escapeStringBackslash(buf []byte, v string) []byte { c := v[i] switch c { case '\x00': - buf[pos] = '\\' buf[pos+1] = '0' + buf[pos] = '\\' pos += 2 case '\n': - buf[pos] = '\\' buf[pos+1] = 'n' + buf[pos] = '\\' pos += 2 case '\r': - buf[pos] = '\\' buf[pos+1] = 'r' + buf[pos] = '\\' pos += 2 case '\x1a': - buf[pos] = '\\' buf[pos+1] = 'Z' + buf[pos] = '\\' pos += 2 case '\'': - buf[pos] = '\\' buf[pos+1] = '\'' + buf[pos] = '\\' pos += 2 case '"': - buf[pos] = '\\' buf[pos+1] = '"' + buf[pos] = '\\' pos += 2 case '\\': - buf[pos] = '\\' buf[pos+1] = '\\' + buf[pos] = '\\' pos += 2 default: buf[pos] = c @@ -744,8 +733,8 @@ func escapeBytesQuotes(buf, v []byte) []byte { for _, c := range v { if c == '\'' { - buf[pos] = '\'' buf[pos+1] = '\'' + buf[pos] = '\'' pos += 2 } else { buf[pos] = c @@ -764,8 +753,8 @@ func escapeStringQuotes(buf []byte, v string) []byte { for i := 0; i < len(v); i++ { c := v[i] if c == '\'' { - buf[pos] = '\'' buf[pos+1] = '\'' + buf[pos] = '\'' pos += 2 } else { buf[pos] = c @@ -790,39 +779,16 @@ type noCopy struct{} // Lock is a no-op used by -copylocks checker from `go vet`. func (*noCopy) Lock() {} -// atomicBool is a wrapper around uint32 for usage as a boolean value with -// atomic access. -type atomicBool struct { - _noCopy noCopy - value uint32 -} - -// IsSet returns whether the current boolean value is true -func (ab *atomicBool) IsSet() bool { - return atomic.LoadUint32(&ab.value) > 0 -} - -// Set sets the value of the bool regardless of the previous value -func (ab *atomicBool) Set(value bool) { - if value { - atomic.StoreUint32(&ab.value, 1) - } else { - atomic.StoreUint32(&ab.value, 0) - } -} - -// TrySet sets the value of the bool and returns whether the value changed -func (ab *atomicBool) TrySet(value bool) bool { - if value { - return atomic.SwapUint32(&ab.value, 1) == 0 - } - return atomic.SwapUint32(&ab.value, 0) > 0 -} +// Unlock is a no-op used by -copylocks checker from `go vet`. +// noCopy should implement sync.Locker from Go 1.11 +// https://github.com/golang/go/commit/c2eba53e7f80df21d51285879d51ab81bcfbf6bc +// https://github.com/golang/go/issues/26165 +func (*noCopy) Unlock() {} // atomicError is a wrapper for atomically accessed error values type atomicError struct { - _noCopy noCopy - value atomic.Value + _ noCopy + value atomic.Value } // Set sets the error value regardless of the previous value. diff --git a/vendor/github.com/jackc/pgconn/CHANGELOG.md b/vendor/github.com/jackc/pgconn/CHANGELOG.md index a37eecfe1..a3efb7f25 100644 --- a/vendor/github.com/jackc/pgconn/CHANGELOG.md +++ b/vendor/github.com/jackc/pgconn/CHANGELOG.md @@ -1,3 +1,15 @@ +# 1.12.1 (May 7, 2022) + +* Fix: setting krbspn and krbsrvname in connection string (sireax) +* Add support for Unix sockets on Windows (Eno Compton) +* Stop ignoring ErrorResponse during SCRAM auth (Rafi Shamim) + +# 1.12.0 (April 21, 2022) + +* Add pluggable GSSAPI support (Oliver Tan) +* Fix: Consider any "0A000" error a possible cached plan changed error due to locale +* Better match psql fallback behavior with multiple hosts + # 1.11.0 (February 7, 2022) * Support port in ip from LookupFunc to override config (James Hartig) diff --git a/vendor/github.com/jackc/pgconn/auth_scram.go b/vendor/github.com/jackc/pgconn/auth_scram.go index 6a143fcdc..d8d711163 100644 --- a/vendor/github.com/jackc/pgconn/auth_scram.go +++ b/vendor/github.com/jackc/pgconn/auth_scram.go @@ -78,12 +78,14 @@ func (c *PgConn) rxSASLContinue() (*pgproto3.AuthenticationSASLContinue, error) if err != nil { return nil, err } - saslContinue, ok := msg.(*pgproto3.AuthenticationSASLContinue) - if ok { - return saslContinue, nil + switch m := msg.(type) { + case *pgproto3.AuthenticationSASLContinue: + return m, nil + case *pgproto3.ErrorResponse: + return nil, ErrorResponseToPgError(m) } - return nil, errors.New("expected AuthenticationSASLContinue message but received unexpected message") + return nil, fmt.Errorf("expected AuthenticationSASLContinue message but received unexpected message %T", msg) } func (c *PgConn) rxSASLFinal() (*pgproto3.AuthenticationSASLFinal, error) { @@ -91,12 +93,14 @@ func (c *PgConn) rxSASLFinal() (*pgproto3.AuthenticationSASLFinal, error) { if err != nil { return nil, err } - saslFinal, ok := msg.(*pgproto3.AuthenticationSASLFinal) - if ok { - return saslFinal, nil + switch m := msg.(type) { + case *pgproto3.AuthenticationSASLFinal: + return m, nil + case *pgproto3.ErrorResponse: + return nil, ErrorResponseToPgError(m) } - return nil, errors.New("expected AuthenticationSASLFinal message but received unexpected message") + return nil, fmt.Errorf("expected AuthenticationSASLFinal message but received unexpected message %T", msg) } type scramClient struct { diff --git a/vendor/github.com/jackc/pgconn/config.go b/vendor/github.com/jackc/pgconn/config.go index 0eab23af9..e141a2f88 100644 --- a/vendor/github.com/jackc/pgconn/config.go +++ b/vendor/github.com/jackc/pgconn/config.go @@ -41,7 +41,9 @@ type Config struct { BuildFrontend BuildFrontendFunc RuntimeParams map[string]string // Run-time parameters to set on connection as session default values (e.g. search_path or application_name) - Fallbacks []*FallbackConfig + KerberosSrvName string + KerberosSpn string + Fallbacks []*FallbackConfig // ValidateConnect is called during a connection attempt after a successful authentication with the PostgreSQL server. // It can be used to validate that the server is acceptable. If this returns an error the connection is closed and the next @@ -98,10 +100,29 @@ type FallbackConfig struct { TLSConfig *tls.Config // nil disables TLS } +// isAbsolutePath checks if the provided value is an absolute path either +// beginning with a forward slash (as on Linux-based systems) or with a capital +// letter A-Z followed by a colon and a backslash, e.g., "C:\", (as on Windows). +func isAbsolutePath(path string) bool { + isWindowsPath := func(p string) bool { + if len(p) < 3 { + return false + } + drive := p[0] + colon := p[1] + backslash := p[2] + if drive >= 'A' && drive <= 'Z' && colon == ':' && backslash == '\\' { + return true + } + return false + } + return strings.HasPrefix(path, "/") || isWindowsPath(path) +} + // NetworkAddress converts a PostgreSQL host and port into network and address suitable for use with // net.Dial. func NetworkAddress(host string, port uint16) (network, address string) { - if strings.HasPrefix(host, "/") { + if isAbsolutePath(host) { network = "unix" address = filepath.Join(host, ".s.PGSQL.") + strconv.FormatInt(int64(port), 10) } else { @@ -176,8 +197,6 @@ func NetworkAddress(host string, port uint16) (network, address string) { // // Other known differences with libpq: // -// If a host name resolves into multiple addresses, libpq will try all addresses. pgconn will only try the first. -// // When multiple hosts are specified, libpq allows them to have different passwords set via the .pgpass file. pgconn // does not. // @@ -259,12 +278,22 @@ func ParseConfig(connString string) (*Config, error) { "sslkey": {}, "sslcert": {}, "sslrootcert": {}, + "krbspn": {}, + "krbsrvname": {}, "target_session_attrs": {}, "min_read_buffer_size": {}, "service": {}, "servicefile": {}, } + // Adding kerberos configuration + if _, present := settings["krbsrvname"]; present { + config.KerberosSrvName = settings["krbsrvname"] + } + if _, present := settings["krbspn"]; present { + config.KerberosSpn = settings["krbspn"] + } + for k, v := range settings { if _, present := notRuntimeParams[k]; present { continue diff --git a/vendor/github.com/jackc/pgconn/krb5.go b/vendor/github.com/jackc/pgconn/krb5.go new file mode 100644 index 000000000..f2dbe45a0 --- /dev/null +++ b/vendor/github.com/jackc/pgconn/krb5.go @@ -0,0 +1,94 @@ +package pgconn + +import ( + "errors" + "github.com/jackc/pgproto3/v2" +) + +// NewGSSFunc creates a GSS authentication provider, for use with +// RegisterGSSProvider. +type NewGSSFunc func() (GSS, error) + +var newGSS NewGSSFunc + +// RegisterGSSProvider registers a GSS authentication provider. For example, if +// you need to use Kerberos to authenticate with your server, add this to your +// main package: +// +// import "github.com/otan/gopgkrb5" +// +// func init() { +// pgconn.RegisterGSSProvider(func() (pgconn.GSS, error) { return gopgkrb5.NewGSS() }) +// } +func RegisterGSSProvider(newGSSArg NewGSSFunc) { + newGSS = newGSSArg +} + +// GSS provides GSSAPI authentication (e.g., Kerberos). +type GSS interface { + GetInitToken(host string, service string) ([]byte, error) + GetInitTokenFromSPN(spn string) ([]byte, error) + Continue(inToken []byte) (done bool, outToken []byte, err error) +} + +func (c *PgConn) gssAuth() error { + if newGSS == nil { + return errors.New("kerberos error: no GSSAPI provider registered, see https://github.com/otan/gopgkrb5") + } + cli, err := newGSS() + if err != nil { + return err + } + + var nextData []byte + if c.config.KerberosSpn != "" { + // Use the supplied SPN if provided. + nextData, err = cli.GetInitTokenFromSPN(c.config.KerberosSpn) + } else { + // Allow the kerberos service name to be overridden + service := "postgres" + if c.config.KerberosSrvName != "" { + service = c.config.KerberosSrvName + } + nextData, err = cli.GetInitToken(c.config.Host, service) + } + if err != nil { + return err + } + + for { + gssResponse := &pgproto3.GSSResponse{ + Data: nextData, + } + _, err = c.conn.Write(gssResponse.Encode(nil)) + if err != nil { + return err + } + resp, err := c.rxGSSContinue() + if err != nil { + return err + } + var done bool + done, nextData, err = cli.Continue(resp.Data) + if err != nil { + return err + } + if done { + break + } + } + return nil +} + +func (c *PgConn) rxGSSContinue() (*pgproto3.AuthenticationGSSContinue, error) { + msg, err := c.receiveMessage() + if err != nil { + return nil, err + } + gssContinue, ok := msg.(*pgproto3.AuthenticationGSSContinue) + if ok { + return gssContinue, nil + } + + return nil, errors.New("expected AuthenticationGSSContinue message but received unexpected message") +} diff --git a/vendor/github.com/jackc/pgconn/pgconn.go b/vendor/github.com/jackc/pgconn/pgconn.go index 7bf2f20ef..ef5b76fd3 100644 --- a/vendor/github.com/jackc/pgconn/pgconn.go +++ b/vendor/github.com/jackc/pgconn/pgconn.go @@ -99,7 +99,7 @@ type PgConn struct { } // Connect establishes a connection to a PostgreSQL server using the environment and connString (in URL or DSN format) -// to provide configuration. See documention for ParseConfig for details. ctx can be used to cancel a connect attempt. +// to provide configuration. See documentation for ParseConfig for details. ctx can be used to cancel a connect attempt. func Connect(ctx context.Context, connString string) (*PgConn, error) { config, err := ParseConfig(connString) if err != nil { @@ -154,9 +154,14 @@ func ConnectConfig(ctx context.Context, config *Config) (pgConn *PgConn, err err break } else if pgerr, ok := err.(*PgError); ok { err = &connectError{config: config, msg: "server error", err: pgerr} - ERRCODE_INVALID_PASSWORD := "28P01" // worng password - ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION := "28000" // db does not exist - if pgerr.Code == ERRCODE_INVALID_PASSWORD || pgerr.Code == ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION { + const ERRCODE_INVALID_PASSWORD = "28P01" // wrong password + const ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION = "28000" // wrong password or bad pg_hba.conf settings + const ERRCODE_INVALID_CATALOG_NAME = "3D000" // db does not exist + const ERRCODE_INSUFFICIENT_PRIVILEGE = "42501" // missing connect privilege + if pgerr.Code == ERRCODE_INVALID_PASSWORD || + pgerr.Code == ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION || + pgerr.Code == ERRCODE_INVALID_CATALOG_NAME || + pgerr.Code == ERRCODE_INSUFFICIENT_PRIVILEGE { break } } @@ -182,7 +187,7 @@ func expandWithIPs(ctx context.Context, lookupFn LookupFunc, fallbacks []*Fallba for _, fb := range fallbacks { // skip resolve for unix sockets - if strings.HasPrefix(fb.Host, "/") { + if isAbsolutePath(fb.Host) { configs = append(configs, &FallbackConfig{ Host: fb.Host, Port: fb.Port, @@ -317,7 +322,12 @@ func connect(ctx context.Context, config *Config, fallbackConfig *FallbackConfig pgConn.conn.Close() return nil, &connectError{config: config, msg: "failed SASL auth", err: err} } - + case *pgproto3.AuthenticationGSS: + err = pgConn.gssAuth() + if err != nil { + pgConn.conn.Close() + return nil, &connectError{config: config, msg: "failed GSS auth", err: err} + } case *pgproto3.ReadyForQuery: pgConn.status = connStatusIdle if config.ValidateConnect != nil { diff --git a/vendor/github.com/jackc/pgconn/stmtcache/lru.go b/vendor/github.com/jackc/pgconn/stmtcache/lru.go index 90fb76c2f..f0fb53b9c 100644 --- a/vendor/github.com/jackc/pgconn/stmtcache/lru.go +++ b/vendor/github.com/jackc/pgconn/stmtcache/lru.go @@ -102,10 +102,14 @@ func (c *LRU) StatementErrored(sql string, err error) { return } - isInvalidCachedPlanError := pgErr.Severity == "ERROR" && - pgErr.Code == "0A000" && - pgErr.Message == "cached plan must not change result type" - if isInvalidCachedPlanError { + // https://github.com/jackc/pgx/issues/1162 + // + // We used to look for the message "cached plan must not change result type". However, that message can be localized. + // Unfortunately, error code "0A000" - "FEATURE NOT SUPPORTED" is used for many different errors and the only way to + // tell the difference is by the message. But all that happens is we clear a statement that we otherwise wouldn't + // have so it should be safe. + possibleInvalidCachedPlanError := pgErr.Code == "0A000" + if possibleInvalidCachedPlanError { c.stmtsToClear = append(c.stmtsToClear, sql) } } diff --git a/vendor/github.com/jackc/pgproto3/v2/authentication_gss.go b/vendor/github.com/jackc/pgproto3/v2/authentication_gss.go new file mode 100644 index 000000000..5a3f3b1d5 --- /dev/null +++ b/vendor/github.com/jackc/pgproto3/v2/authentication_gss.go @@ -0,0 +1,58 @@ +package pgproto3 + +import ( + "encoding/binary" + "encoding/json" + "errors" + "github.com/jackc/pgio" +) + +type AuthenticationGSS struct{} + +func (a *AuthenticationGSS) Backend() {} + +func (a *AuthenticationGSS) AuthenticationResponse() {} + +func (a *AuthenticationGSS) Decode(src []byte) error { + if len(src) < 4 { + return errors.New("authentication message too short") + } + + authType := binary.BigEndian.Uint32(src) + + if authType != AuthTypeGSS { + return errors.New("bad auth type") + } + return nil +} + +func (a *AuthenticationGSS) Encode(dst []byte) []byte { + dst = append(dst, 'R') + dst = pgio.AppendInt32(dst, 4) + dst = pgio.AppendUint32(dst, AuthTypeGSS) + return dst +} + +func (a *AuthenticationGSS) MarshalJSON() ([]byte, error) { + return json.Marshal(struct { + Type string + Data []byte + }{ + Type: "AuthenticationGSS", + }) +} + +func (a *AuthenticationGSS) UnmarshalJSON(data []byte) error { + // Ignore null, like in the main JSON package. + if string(data) == "null" { + return nil + } + + var msg struct { + Type string + } + if err := json.Unmarshal(data, &msg); err != nil { + return err + } + return nil +} diff --git a/vendor/github.com/jackc/pgproto3/v2/authentication_gss_continue.go b/vendor/github.com/jackc/pgproto3/v2/authentication_gss_continue.go new file mode 100644 index 000000000..cf8b18345 --- /dev/null +++ b/vendor/github.com/jackc/pgproto3/v2/authentication_gss_continue.go @@ -0,0 +1,67 @@ +package pgproto3 + +import ( + "encoding/binary" + "encoding/json" + "errors" + "github.com/jackc/pgio" +) + +type AuthenticationGSSContinue struct { + Data []byte +} + +func (a *AuthenticationGSSContinue) Backend() {} + +func (a *AuthenticationGSSContinue) AuthenticationResponse() {} + +func (a *AuthenticationGSSContinue) Decode(src []byte) error { + if len(src) < 4 { + return errors.New("authentication message too short") + } + + authType := binary.BigEndian.Uint32(src) + + if authType != AuthTypeGSSCont { + return errors.New("bad auth type") + } + + a.Data = src[4:] + return nil +} + +func (a *AuthenticationGSSContinue) Encode(dst []byte) []byte { + dst = append(dst, 'R') + dst = pgio.AppendInt32(dst, int32(len(a.Data))+8) + dst = pgio.AppendUint32(dst, AuthTypeGSSCont) + dst = append(dst, a.Data...) + return dst +} + +func (a *AuthenticationGSSContinue) MarshalJSON() ([]byte, error) { + return json.Marshal(struct { + Type string + Data []byte + }{ + Type: "AuthenticationGSSContinue", + Data: a.Data, + }) +} + +func (a *AuthenticationGSSContinue) UnmarshalJSON(data []byte) error { + // Ignore null, like in the main JSON package. + if string(data) == "null" { + return nil + } + + var msg struct { + Type string + Data []byte + } + if err := json.Unmarshal(data, &msg); err != nil { + return err + } + + a.Data = msg.Data + return nil +} diff --git a/vendor/github.com/jackc/pgproto3/v2/backend.go b/vendor/github.com/jackc/pgproto3/v2/backend.go index 9c42ad02e..a48b66f13 100644 --- a/vendor/github.com/jackc/pgproto3/v2/backend.go +++ b/vendor/github.com/jackc/pgproto3/v2/backend.go @@ -30,11 +30,10 @@ type Backend struct { sync Sync terminate Terminate - bodyLen int - msgType byte - partialMsg bool - authType uint32 - + bodyLen int + msgType byte + partialMsg bool + authType uint32 } const ( @@ -147,6 +146,8 @@ func (b *Backend) Receive() (FrontendMessage, error) { msg = &SASLResponse{} case AuthTypeSASLFinal: msg = &SASLResponse{} + case AuthTypeGSS, AuthTypeGSSCont: + msg = &GSSResponse{} case AuthTypeCleartextPassword, AuthTypeMD5Password: fallthrough default: diff --git a/vendor/github.com/jackc/pgproto3/v2/copy_both_response.go b/vendor/github.com/jackc/pgproto3/v2/copy_both_response.go index fbd985d86..4a1c3a07b 100644 --- a/vendor/github.com/jackc/pgproto3/v2/copy_both_response.go +++ b/vendor/github.com/jackc/pgproto3/v2/copy_both_response.go @@ -48,7 +48,7 @@ func (src *CopyBothResponse) Encode(dst []byte) []byte { dst = append(dst, 'W') sp := len(dst) dst = pgio.AppendInt32(dst, -1) - + dst = append(dst, src.OverallFormat) dst = pgio.AppendUint16(dst, uint16(len(src.ColumnFormatCodes))) for _, fc := range src.ColumnFormatCodes { dst = pgio.AppendUint16(dst, fc) diff --git a/vendor/github.com/jackc/pgproto3/v2/frontend.go b/vendor/github.com/jackc/pgproto3/v2/frontend.go index c33dfb084..f15a3e047 100644 --- a/vendor/github.com/jackc/pgproto3/v2/frontend.go +++ b/vendor/github.com/jackc/pgproto3/v2/frontend.go @@ -16,6 +16,8 @@ type Frontend struct { authenticationOk AuthenticationOk authenticationCleartextPassword AuthenticationCleartextPassword authenticationMD5Password AuthenticationMD5Password + authenticationGSS AuthenticationGSS + authenticationGSSContinue AuthenticationGSSContinue authenticationSASL AuthenticationSASL authenticationSASLContinue AuthenticationSASLContinue authenticationSASLFinal AuthenticationSASLFinal @@ -178,9 +180,9 @@ func (f *Frontend) findAuthenticationMessageType(src []byte) (BackendMessage, er case AuthTypeSCMCreds: return nil, errors.New("AuthTypeSCMCreds is unimplemented") case AuthTypeGSS: - return nil, errors.New("AuthTypeGSS is unimplemented") + return &f.authenticationGSS, nil case AuthTypeGSSCont: - return nil, errors.New("AuthTypeGSSCont is unimplemented") + return &f.authenticationGSSContinue, nil case AuthTypeSSPI: return nil, errors.New("AuthTypeSSPI is unimplemented") case AuthTypeSASL: diff --git a/vendor/github.com/jackc/pgproto3/v2/gss_response.go b/vendor/github.com/jackc/pgproto3/v2/gss_response.go new file mode 100644 index 000000000..62da99c79 --- /dev/null +++ b/vendor/github.com/jackc/pgproto3/v2/gss_response.go @@ -0,0 +1,48 @@ +package pgproto3 + +import ( + "encoding/json" + "github.com/jackc/pgio" +) + +type GSSResponse struct { + Data []byte +} + +// Frontend identifies this message as sendable by a PostgreSQL frontend. +func (g *GSSResponse) Frontend() {} + +func (g *GSSResponse) Decode(data []byte) error { + g.Data = data + return nil +} + +func (g *GSSResponse) Encode(dst []byte) []byte { + dst = append(dst, 'p') + dst = pgio.AppendInt32(dst, int32(4+len(g.Data))) + dst = append(dst, g.Data...) + return dst +} + +// MarshalJSON implements encoding/json.Marshaler. +func (g *GSSResponse) MarshalJSON() ([]byte, error) { + return json.Marshal(struct { + Type string + Data []byte + }{ + Type: "GSSResponse", + Data: g.Data, + }) +} + +// UnmarshalJSON implements encoding/json.Unmarshaler. +func (g *GSSResponse) UnmarshalJSON(data []byte) error { + var msg struct { + Data []byte + } + if err := json.Unmarshal(data, &msg); err != nil { + return err + } + g.Data = msg.Data + return nil +} diff --git a/vendor/github.com/jackc/pgtype/CHANGELOG.md b/vendor/github.com/jackc/pgtype/CHANGELOG.md index 73126cf36..253f42c9b 100644 --- a/vendor/github.com/jackc/pgtype/CHANGELOG.md +++ b/vendor/github.com/jackc/pgtype/CHANGELOG.md @@ -1,3 +1,11 @@ +# 1.11.0 (April 21, 2022) + +* Add multirange for numeric, int4, and int8 (Vu) +* JSONBArray now supports json.RawMessage (Jens Emil Schulz Østergaard) +* Add RecordArray (WGH) +* Add UnmarshalJSON to pgtype.Int2 +* Hstore.Set accepts map[string]Text + # 1.10.0 (February 7, 2022) * Normalize UTC timestamps to comply with stdlib (Torkel Rogstad) diff --git a/vendor/github.com/jackc/pgtype/hstore.go b/vendor/github.com/jackc/pgtype/hstore.go index f46eeaf62..706a3964e 100644 --- a/vendor/github.com/jackc/pgtype/hstore.go +++ b/vendor/github.com/jackc/pgtype/hstore.go @@ -50,6 +50,8 @@ func (dst *Hstore) Set(src interface{}) error { } } *dst = Hstore{Map: m, Status: Present} + case map[string]Text: + *dst = Hstore{Map: value, Status: Present} default: return fmt.Errorf("cannot convert %v to Hstore", src) } diff --git a/vendor/github.com/jackc/pgtype/int2.go b/vendor/github.com/jackc/pgtype/int2.go index 3eb5aeb55..0775882ab 100644 --- a/vendor/github.com/jackc/pgtype/int2.go +++ b/vendor/github.com/jackc/pgtype/int2.go @@ -3,6 +3,7 @@ package pgtype import ( "database/sql/driver" "encoding/binary" + "encoding/json" "fmt" "math" "strconv" @@ -302,3 +303,19 @@ func (src Int2) MarshalJSON() ([]byte, error) { return nil, errBadStatus } + +func (dst *Int2) UnmarshalJSON(b []byte) error { + var n *int16 + err := json.Unmarshal(b, &n) + if err != nil { + return err + } + + if n == nil { + *dst = Int2{Status: Null} + } else { + *dst = Int2{Int: *n, Status: Present} + } + + return nil +} diff --git a/vendor/github.com/jackc/pgtype/int4_multirange.go b/vendor/github.com/jackc/pgtype/int4_multirange.go new file mode 100644 index 000000000..c3432ce63 --- /dev/null +++ b/vendor/github.com/jackc/pgtype/int4_multirange.go @@ -0,0 +1,239 @@ +package pgtype + +import ( + "database/sql/driver" + "encoding/binary" + "fmt" + + "github.com/jackc/pgio" +) + +type Int4multirange struct { + Ranges []Int4range + Status Status +} + +func (dst *Int4multirange) Set(src interface{}) error { + //untyped nil and typed nil interfaces are different + if src == nil { + *dst = Int4multirange{Status: Null} + return nil + } + + switch value := src.(type) { + case Int4multirange: + *dst = value + case *Int4multirange: + *dst = *value + case string: + return dst.DecodeText(nil, []byte(value)) + case []Int4range: + if value == nil { + *dst = Int4multirange{Status: Null} + } else if len(value) == 0 { + *dst = Int4multirange{Status: Present} + } else { + elements := make([]Int4range, len(value)) + for i := range value { + if err := elements[i].Set(value[i]); err != nil { + return err + } + } + *dst = Int4multirange{ + Ranges: elements, + Status: Present, + } + } + case []*Int4range: + if value == nil { + *dst = Int4multirange{Status: Null} + } else if len(value) == 0 { + *dst = Int4multirange{Status: Present} + } else { + elements := make([]Int4range, len(value)) + for i := range value { + if err := elements[i].Set(value[i]); err != nil { + return err + } + } + *dst = Int4multirange{ + Ranges: elements, + Status: Present, + } + } + default: + return fmt.Errorf("cannot convert %v to Int4multirange", src) + } + + return nil + +} + +func (dst Int4multirange) Get() interface{} { + switch dst.Status { + case Present: + return dst + case Null: + return nil + default: + return dst.Status + } +} + +func (src *Int4multirange) AssignTo(dst interface{}) error { + return fmt.Errorf("cannot assign %v to %T", src, dst) +} + +func (dst *Int4multirange) DecodeText(ci *ConnInfo, src []byte) error { + if src == nil { + *dst = Int4multirange{Status: Null} + return nil + } + + utmr, err := ParseUntypedTextMultirange(string(src)) + if err != nil { + return err + } + + var elements []Int4range + + if len(utmr.Elements) > 0 { + elements = make([]Int4range, len(utmr.Elements)) + + for i, s := range utmr.Elements { + var elem Int4range + + elemSrc := []byte(s) + + err = elem.DecodeText(ci, elemSrc) + if err != nil { + return err + } + + elements[i] = elem + } + } + + *dst = Int4multirange{Ranges: elements, Status: Present} + + return nil +} + +func (dst *Int4multirange) DecodeBinary(ci *ConnInfo, src []byte) error { + if src == nil { + *dst = Int4multirange{Status: Null} + return nil + } + + rp := 0 + + numElems := int(binary.BigEndian.Uint32(src[rp:])) + rp += 4 + + if numElems == 0 { + *dst = Int4multirange{Status: Present} + return nil + } + + elements := make([]Int4range, numElems) + + for i := range elements { + elemLen := int(int32(binary.BigEndian.Uint32(src[rp:]))) + rp += 4 + var elemSrc []byte + if elemLen >= 0 { + elemSrc = src[rp : rp+elemLen] + rp += elemLen + } + err := elements[i].DecodeBinary(ci, elemSrc) + if err != nil { + return err + } + } + + *dst = Int4multirange{Ranges: elements, Status: Present} + return nil +} + +func (src Int4multirange) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) { + switch src.Status { + case Null: + return nil, nil + case Undefined: + return nil, errUndefined + } + + buf = append(buf, '{') + + inElemBuf := make([]byte, 0, 32) + for i, elem := range src.Ranges { + if i > 0 { + buf = append(buf, ',') + } + + elemBuf, err := elem.EncodeText(ci, inElemBuf) + if err != nil { + return nil, err + } + if elemBuf == nil { + return nil, fmt.Errorf("multi-range does not allow null range") + } else { + buf = append(buf, string(elemBuf)...) + } + + } + + buf = append(buf, '}') + + return buf, nil +} + +func (src Int4multirange) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) { + switch src.Status { + case Null: + return nil, nil + case Undefined: + return nil, errUndefined + } + + buf = pgio.AppendInt32(buf, int32(len(src.Ranges))) + + for i := range src.Ranges { + sp := len(buf) + buf = pgio.AppendInt32(buf, -1) + + elemBuf, err := src.Ranges[i].EncodeBinary(ci, buf) + if err != nil { + return nil, err + } + if elemBuf != nil { + buf = elemBuf + pgio.SetInt32(buf[sp:], int32(len(buf[sp:])-4)) + } + } + + return buf, nil +} + +// Scan implements the database/sql Scanner interface. +func (dst *Int4multirange) Scan(src interface{}) error { + if src == nil { + return dst.DecodeText(nil, nil) + } + + switch src := src.(type) { + case string: + return dst.DecodeText(nil, []byte(src)) + case []byte: + srcCopy := make([]byte, len(src)) + copy(srcCopy, src) + return dst.DecodeText(nil, srcCopy) + } + + return fmt.Errorf("cannot scan %T", src) +} + +// Value implements the database/sql/driver Valuer interface. +func (src Int4multirange) Value() (driver.Value, error) { + return EncodeValueText(src) +} diff --git a/vendor/github.com/jackc/pgtype/int8_multirange.go b/vendor/github.com/jackc/pgtype/int8_multirange.go new file mode 100644 index 000000000..e0976427a --- /dev/null +++ b/vendor/github.com/jackc/pgtype/int8_multirange.go @@ -0,0 +1,239 @@ +package pgtype + +import ( + "database/sql/driver" + "encoding/binary" + "fmt" + + "github.com/jackc/pgio" +) + +type Int8multirange struct { + Ranges []Int8range + Status Status +} + +func (dst *Int8multirange) Set(src interface{}) error { + //untyped nil and typed nil interfaces are different + if src == nil { + *dst = Int8multirange{Status: Null} + return nil + } + + switch value := src.(type) { + case Int8multirange: + *dst = value + case *Int8multirange: + *dst = *value + case string: + return dst.DecodeText(nil, []byte(value)) + case []Int8range: + if value == nil { + *dst = Int8multirange{Status: Null} + } else if len(value) == 0 { + *dst = Int8multirange{Status: Present} + } else { + elements := make([]Int8range, len(value)) + for i := range value { + if err := elements[i].Set(value[i]); err != nil { + return err + } + } + *dst = Int8multirange{ + Ranges: elements, + Status: Present, + } + } + case []*Int8range: + if value == nil { + *dst = Int8multirange{Status: Null} + } else if len(value) == 0 { + *dst = Int8multirange{Status: Present} + } else { + elements := make([]Int8range, len(value)) + for i := range value { + if err := elements[i].Set(value[i]); err != nil { + return err + } + } + *dst = Int8multirange{ + Ranges: elements, + Status: Present, + } + } + default: + return fmt.Errorf("cannot convert %v to Int8multirange", src) + } + + return nil + +} + +func (dst Int8multirange) Get() interface{} { + switch dst.Status { + case Present: + return dst + case Null: + return nil + default: + return dst.Status + } +} + +func (src *Int8multirange) AssignTo(dst interface{}) error { + return fmt.Errorf("cannot assign %v to %T", src, dst) +} + +func (dst *Int8multirange) DecodeText(ci *ConnInfo, src []byte) error { + if src == nil { + *dst = Int8multirange{Status: Null} + return nil + } + + utmr, err := ParseUntypedTextMultirange(string(src)) + if err != nil { + return err + } + + var elements []Int8range + + if len(utmr.Elements) > 0 { + elements = make([]Int8range, len(utmr.Elements)) + + for i, s := range utmr.Elements { + var elem Int8range + + elemSrc := []byte(s) + + err = elem.DecodeText(ci, elemSrc) + if err != nil { + return err + } + + elements[i] = elem + } + } + + *dst = Int8multirange{Ranges: elements, Status: Present} + + return nil +} + +func (dst *Int8multirange) DecodeBinary(ci *ConnInfo, src []byte) error { + if src == nil { + *dst = Int8multirange{Status: Null} + return nil + } + + rp := 0 + + numElems := int(binary.BigEndian.Uint32(src[rp:])) + rp += 4 + + if numElems == 0 { + *dst = Int8multirange{Status: Present} + return nil + } + + elements := make([]Int8range, numElems) + + for i := range elements { + elemLen := int(int32(binary.BigEndian.Uint32(src[rp:]))) + rp += 4 + var elemSrc []byte + if elemLen >= 0 { + elemSrc = src[rp : rp+elemLen] + rp += elemLen + } + err := elements[i].DecodeBinary(ci, elemSrc) + if err != nil { + return err + } + } + + *dst = Int8multirange{Ranges: elements, Status: Present} + return nil +} + +func (src Int8multirange) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) { + switch src.Status { + case Null: + return nil, nil + case Undefined: + return nil, errUndefined + } + + buf = append(buf, '{') + + inElemBuf := make([]byte, 0, 32) + for i, elem := range src.Ranges { + if i > 0 { + buf = append(buf, ',') + } + + elemBuf, err := elem.EncodeText(ci, inElemBuf) + if err != nil { + return nil, err + } + if elemBuf == nil { + return nil, fmt.Errorf("multi-range does not allow null range") + } else { + buf = append(buf, string(elemBuf)...) + } + + } + + buf = append(buf, '}') + + return buf, nil +} + +func (src Int8multirange) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) { + switch src.Status { + case Null: + return nil, nil + case Undefined: + return nil, errUndefined + } + + buf = pgio.AppendInt32(buf, int32(len(src.Ranges))) + + for i := range src.Ranges { + sp := len(buf) + buf = pgio.AppendInt32(buf, -1) + + elemBuf, err := src.Ranges[i].EncodeBinary(ci, buf) + if err != nil { + return nil, err + } + if elemBuf != nil { + buf = elemBuf + pgio.SetInt32(buf[sp:], int32(len(buf[sp:])-4)) + } + } + + return buf, nil +} + +// Scan implements the database/sql Scanner interface. +func (dst *Int8multirange) Scan(src interface{}) error { + if src == nil { + return dst.DecodeText(nil, nil) + } + + switch src := src.(type) { + case string: + return dst.DecodeText(nil, []byte(src)) + case []byte: + srcCopy := make([]byte, len(src)) + copy(srcCopy, src) + return dst.DecodeText(nil, srcCopy) + } + + return fmt.Errorf("cannot scan %T", src) +} + +// Value implements the database/sql/driver Valuer interface. +func (src Int8multirange) Value() (driver.Value, error) { + return EncodeValueText(src) +} diff --git a/vendor/github.com/jackc/pgtype/jsonb_array.go b/vendor/github.com/jackc/pgtype/jsonb_array.go index c4b7cd3d8..e78ad3776 100644 --- a/vendor/github.com/jackc/pgtype/jsonb_array.go +++ b/vendor/github.com/jackc/pgtype/jsonb_array.go @@ -5,6 +5,7 @@ package pgtype import ( "database/sql/driver" "encoding/binary" + "encoding/json" "fmt" "reflect" @@ -72,6 +73,25 @@ func (dst *JSONBArray) Set(src interface{}) error { } } + case []json.RawMessage: + if value == nil { + *dst = JSONBArray{Status: Null} + } else if len(value) == 0 { + *dst = JSONBArray{Status: Present} + } else { + elements := make([]JSONB, len(value)) + for i := range value { + if err := elements[i].Set(value[i]); err != nil { + return err + } + } + *dst = JSONBArray{ + Elements: elements, + Dimensions: []ArrayDimension{{Length: int32(len(elements)), LowerBound: 1}}, + Status: Present, + } + } + case []JSONB: if value == nil { *dst = JSONBArray{Status: Null} @@ -214,6 +234,15 @@ func (src *JSONBArray) AssignTo(dst interface{}) error { } return nil + case *[]json.RawMessage: + *v = make([]json.RawMessage, len(src.Elements)) + for i := range src.Elements { + if err := src.Elements[i].AssignTo(&((*v)[i])); err != nil { + return err + } + } + return nil + } } diff --git a/vendor/github.com/jackc/pgtype/multirange.go b/vendor/github.com/jackc/pgtype/multirange.go new file mode 100644 index 000000000..beb11f702 --- /dev/null +++ b/vendor/github.com/jackc/pgtype/multirange.go @@ -0,0 +1,83 @@ +package pgtype + +import ( + "bytes" + "fmt" +) + +type UntypedTextMultirange struct { + Elements []string +} + +func ParseUntypedTextMultirange(src string) (*UntypedTextMultirange, error) { + utmr := &UntypedTextMultirange{} + utmr.Elements = make([]string, 0) + + buf := bytes.NewBufferString(src) + + skipWhitespace(buf) + + r, _, err := buf.ReadRune() + if err != nil { + return nil, fmt.Errorf("invalid array: %v", err) + } + + if r != '{' { + return nil, fmt.Errorf("invalid multirange, expected '{': %v", err) + } + +parseValueLoop: + for { + r, _, err = buf.ReadRune() + if err != nil { + return nil, fmt.Errorf("invalid multirange: %v", err) + } + + switch r { + case ',': // skip range separator + case '}': + break parseValueLoop + default: + buf.UnreadRune() + value, err := parseRange(buf) + if err != nil { + return nil, fmt.Errorf("invalid multirange value: %v", err) + } + utmr.Elements = append(utmr.Elements, value) + } + } + + skipWhitespace(buf) + + if buf.Len() > 0 { + return nil, fmt.Errorf("unexpected trailing data: %v", buf.String()) + } + + return utmr, nil + +} + +func parseRange(buf *bytes.Buffer) (string, error) { + + s := &bytes.Buffer{} + + boundSepRead := false + for { + r, _, err := buf.ReadRune() + if err != nil { + return "", err + } + + switch r { + case ',', '}': + if r == ',' && !boundSepRead { + boundSepRead = true + break + } + buf.UnreadRune() + return s.String(), nil + } + + s.WriteRune(r) + } +} diff --git a/vendor/github.com/jackc/pgtype/num_multirange.go b/vendor/github.com/jackc/pgtype/num_multirange.go new file mode 100644 index 000000000..cbabc8acb --- /dev/null +++ b/vendor/github.com/jackc/pgtype/num_multirange.go @@ -0,0 +1,239 @@ +package pgtype + +import ( + "database/sql/driver" + "encoding/binary" + "fmt" + + "github.com/jackc/pgio" +) + +type Nummultirange struct { + Ranges []Numrange + Status Status +} + +func (dst *Nummultirange) Set(src interface{}) error { + //untyped nil and typed nil interfaces are different + if src == nil { + *dst = Nummultirange{Status: Null} + return nil + } + + switch value := src.(type) { + case Nummultirange: + *dst = value + case *Nummultirange: + *dst = *value + case string: + return dst.DecodeText(nil, []byte(value)) + case []Numrange: + if value == nil { + *dst = Nummultirange{Status: Null} + } else if len(value) == 0 { + *dst = Nummultirange{Status: Present} + } else { + elements := make([]Numrange, len(value)) + for i := range value { + if err := elements[i].Set(value[i]); err != nil { + return err + } + } + *dst = Nummultirange{ + Ranges: elements, + Status: Present, + } + } + case []*Numrange: + if value == nil { + *dst = Nummultirange{Status: Null} + } else if len(value) == 0 { + *dst = Nummultirange{Status: Present} + } else { + elements := make([]Numrange, len(value)) + for i := range value { + if err := elements[i].Set(value[i]); err != nil { + return err + } + } + *dst = Nummultirange{ + Ranges: elements, + Status: Present, + } + } + default: + return fmt.Errorf("cannot convert %v to Nummultirange", src) + } + + return nil + +} + +func (dst Nummultirange) Get() interface{} { + switch dst.Status { + case Present: + return dst + case Null: + return nil + default: + return dst.Status + } +} + +func (src *Nummultirange) AssignTo(dst interface{}) error { + return fmt.Errorf("cannot assign %v to %T", src, dst) +} + +func (dst *Nummultirange) DecodeText(ci *ConnInfo, src []byte) error { + if src == nil { + *dst = Nummultirange{Status: Null} + return nil + } + + utmr, err := ParseUntypedTextMultirange(string(src)) + if err != nil { + return err + } + + var elements []Numrange + + if len(utmr.Elements) > 0 { + elements = make([]Numrange, len(utmr.Elements)) + + for i, s := range utmr.Elements { + var elem Numrange + + elemSrc := []byte(s) + + err = elem.DecodeText(ci, elemSrc) + if err != nil { + return err + } + + elements[i] = elem + } + } + + *dst = Nummultirange{Ranges: elements, Status: Present} + + return nil +} + +func (dst *Nummultirange) DecodeBinary(ci *ConnInfo, src []byte) error { + if src == nil { + *dst = Nummultirange{Status: Null} + return nil + } + + rp := 0 + + numElems := int(binary.BigEndian.Uint32(src[rp:])) + rp += 4 + + if numElems == 0 { + *dst = Nummultirange{Status: Present} + return nil + } + + elements := make([]Numrange, numElems) + + for i := range elements { + elemLen := int(int32(binary.BigEndian.Uint32(src[rp:]))) + rp += 4 + var elemSrc []byte + if elemLen >= 0 { + elemSrc = src[rp : rp+elemLen] + rp += elemLen + } + err := elements[i].DecodeBinary(ci, elemSrc) + if err != nil { + return err + } + } + + *dst = Nummultirange{Ranges: elements, Status: Present} + return nil +} + +func (src Nummultirange) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) { + switch src.Status { + case Null: + return nil, nil + case Undefined: + return nil, errUndefined + } + + buf = append(buf, '{') + + inElemBuf := make([]byte, 0, 32) + for i, elem := range src.Ranges { + if i > 0 { + buf = append(buf, ',') + } + + elemBuf, err := elem.EncodeText(ci, inElemBuf) + if err != nil { + return nil, err + } + if elemBuf == nil { + return nil, fmt.Errorf("multi-range does not allow null range") + } else { + buf = append(buf, string(elemBuf)...) + } + + } + + buf = append(buf, '}') + + return buf, nil +} + +func (src Nummultirange) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) { + switch src.Status { + case Null: + return nil, nil + case Undefined: + return nil, errUndefined + } + + buf = pgio.AppendInt32(buf, int32(len(src.Ranges))) + + for i := range src.Ranges { + sp := len(buf) + buf = pgio.AppendInt32(buf, -1) + + elemBuf, err := src.Ranges[i].EncodeBinary(ci, buf) + if err != nil { + return nil, err + } + if elemBuf != nil { + buf = elemBuf + pgio.SetInt32(buf[sp:], int32(len(buf[sp:])-4)) + } + } + + return buf, nil +} + +// Scan implements the database/sql Scanner interface. +func (dst *Nummultirange) Scan(src interface{}) error { + if src == nil { + return dst.DecodeText(nil, nil) + } + + switch src := src.(type) { + case string: + return dst.DecodeText(nil, []byte(src)) + case []byte: + srcCopy := make([]byte, len(src)) + copy(srcCopy, src) + return dst.DecodeText(nil, srcCopy) + } + + return fmt.Errorf("cannot scan %T", src) +} + +// Value implements the database/sql/driver Valuer interface. +func (src Nummultirange) Value() (driver.Value, error) { + return EncodeValueText(src) +} diff --git a/vendor/github.com/jackc/pgtype/pgtype.go b/vendor/github.com/jackc/pgtype/pgtype.go index 200fb5626..eba09fa59 100644 --- a/vendor/github.com/jackc/pgtype/pgtype.go +++ b/vendor/github.com/jackc/pgtype/pgtype.go @@ -74,12 +74,15 @@ const ( JSONBArrayOID = 3807 DaterangeOID = 3912 Int4rangeOID = 3904 + Int4multirangeOID = 4451 NumrangeOID = 3906 + NummultirangeOID = 4532 TsrangeOID = 3908 TsrangeArrayOID = 3909 TstzrangeOID = 3910 TstzrangeArrayOID = 3911 Int8rangeOID = 3926 + Int8multirangeOID = 4536 ) type Status byte @@ -288,8 +291,10 @@ func NewConnInfo() *ConnInfo { ci.RegisterDataType(DataType{Value: &Int2{}, Name: "int2", OID: Int2OID}) ci.RegisterDataType(DataType{Value: &Int4{}, Name: "int4", OID: Int4OID}) ci.RegisterDataType(DataType{Value: &Int4range{}, Name: "int4range", OID: Int4rangeOID}) + ci.RegisterDataType(DataType{Value: &Int4multirange{}, Name: "int4multirange", OID: Int4multirangeOID}) ci.RegisterDataType(DataType{Value: &Int8{}, Name: "int8", OID: Int8OID}) ci.RegisterDataType(DataType{Value: &Int8range{}, Name: "int8range", OID: Int8rangeOID}) + ci.RegisterDataType(DataType{Value: &Int8multirange{}, Name: "int8multirange", OID: Int8multirangeOID}) ci.RegisterDataType(DataType{Value: &Interval{}, Name: "interval", OID: IntervalOID}) ci.RegisterDataType(DataType{Value: &JSON{}, Name: "json", OID: JSONOID}) ci.RegisterDataType(DataType{Value: &JSONB{}, Name: "jsonb", OID: JSONBOID}) @@ -300,6 +305,7 @@ func NewConnInfo() *ConnInfo { ci.RegisterDataType(DataType{Value: &Name{}, Name: "name", OID: NameOID}) ci.RegisterDataType(DataType{Value: &Numeric{}, Name: "numeric", OID: NumericOID}) ci.RegisterDataType(DataType{Value: &Numrange{}, Name: "numrange", OID: NumrangeOID}) + ci.RegisterDataType(DataType{Value: &Nummultirange{}, Name: "nummultirange", OID: NummultirangeOID}) ci.RegisterDataType(DataType{Value: &OIDValue{}, Name: "oid", OID: OIDOID}) ci.RegisterDataType(DataType{Value: &Path{}, Name: "path", OID: PathOID}) ci.RegisterDataType(DataType{Value: &Point{}, Name: "point", OID: PointOID}) @@ -873,72 +879,75 @@ var nameValues map[string]Value func init() { nameValues = map[string]Value{ - "_aclitem": &ACLItemArray{}, - "_bool": &BoolArray{}, - "_bpchar": &BPCharArray{}, - "_bytea": &ByteaArray{}, - "_cidr": &CIDRArray{}, - "_date": &DateArray{}, - "_float4": &Float4Array{}, - "_float8": &Float8Array{}, - "_inet": &InetArray{}, - "_int2": &Int2Array{}, - "_int4": &Int4Array{}, - "_int8": &Int8Array{}, - "_numeric": &NumericArray{}, - "_text": &TextArray{}, - "_timestamp": &TimestampArray{}, - "_timestamptz": &TimestamptzArray{}, - "_uuid": &UUIDArray{}, - "_varchar": &VarcharArray{}, - "_jsonb": &JSONBArray{}, - "aclitem": &ACLItem{}, - "bit": &Bit{}, - "bool": &Bool{}, - "box": &Box{}, - "bpchar": &BPChar{}, - "bytea": &Bytea{}, - "char": &QChar{}, - "cid": &CID{}, - "cidr": &CIDR{}, - "circle": &Circle{}, - "date": &Date{}, - "daterange": &Daterange{}, - "float4": &Float4{}, - "float8": &Float8{}, - "hstore": &Hstore{}, - "inet": &Inet{}, - "int2": &Int2{}, - "int4": &Int4{}, - "int4range": &Int4range{}, - "int8": &Int8{}, - "int8range": &Int8range{}, - "interval": &Interval{}, - "json": &JSON{}, - "jsonb": &JSONB{}, - "line": &Line{}, - "lseg": &Lseg{}, - "macaddr": &Macaddr{}, - "name": &Name{}, - "numeric": &Numeric{}, - "numrange": &Numrange{}, - "oid": &OIDValue{}, - "path": &Path{}, - "point": &Point{}, - "polygon": &Polygon{}, - "record": &Record{}, - "text": &Text{}, - "tid": &TID{}, - "timestamp": &Timestamp{}, - "timestamptz": &Timestamptz{}, - "tsrange": &Tsrange{}, - "_tsrange": &TsrangeArray{}, - "tstzrange": &Tstzrange{}, - "_tstzrange": &TstzrangeArray{}, - "unknown": &Unknown{}, - "uuid": &UUID{}, - "varbit": &Varbit{}, - "varchar": &Varchar{}, - "xid": &XID{}, + "_aclitem": &ACLItemArray{}, + "_bool": &BoolArray{}, + "_bpchar": &BPCharArray{}, + "_bytea": &ByteaArray{}, + "_cidr": &CIDRArray{}, + "_date": &DateArray{}, + "_float4": &Float4Array{}, + "_float8": &Float8Array{}, + "_inet": &InetArray{}, + "_int2": &Int2Array{}, + "_int4": &Int4Array{}, + "_int8": &Int8Array{}, + "_numeric": &NumericArray{}, + "_text": &TextArray{}, + "_timestamp": &TimestampArray{}, + "_timestamptz": &TimestamptzArray{}, + "_uuid": &UUIDArray{}, + "_varchar": &VarcharArray{}, + "_jsonb": &JSONBArray{}, + "aclitem": &ACLItem{}, + "bit": &Bit{}, + "bool": &Bool{}, + "box": &Box{}, + "bpchar": &BPChar{}, + "bytea": &Bytea{}, + "char": &QChar{}, + "cid": &CID{}, + "cidr": &CIDR{}, + "circle": &Circle{}, + "date": &Date{}, + "daterange": &Daterange{}, + "float4": &Float4{}, + "float8": &Float8{}, + "hstore": &Hstore{}, + "inet": &Inet{}, + "int2": &Int2{}, + "int4": &Int4{}, + "int4range": &Int4range{}, + "int4multirange": &Int4multirange{}, + "int8": &Int8{}, + "int8range": &Int8range{}, + "int8multirange": &Int8multirange{}, + "interval": &Interval{}, + "json": &JSON{}, + "jsonb": &JSONB{}, + "line": &Line{}, + "lseg": &Lseg{}, + "macaddr": &Macaddr{}, + "name": &Name{}, + "numeric": &Numeric{}, + "numrange": &Numrange{}, + "nummultirange": &Nummultirange{}, + "oid": &OIDValue{}, + "path": &Path{}, + "point": &Point{}, + "polygon": &Polygon{}, + "record": &Record{}, + "text": &Text{}, + "tid": &TID{}, + "timestamp": &Timestamp{}, + "timestamptz": &Timestamptz{}, + "tsrange": &Tsrange{}, + "_tsrange": &TsrangeArray{}, + "tstzrange": &Tstzrange{}, + "_tstzrange": &TstzrangeArray{}, + "unknown": &Unknown{}, + "uuid": &UUID{}, + "varbit": &Varbit{}, + "varchar": &Varchar{}, + "xid": &XID{}, } } diff --git a/vendor/github.com/jackc/pgtype/record.go b/vendor/github.com/jackc/pgtype/record.go index 718c35702..5cf2c93ab 100644 --- a/vendor/github.com/jackc/pgtype/record.go +++ b/vendor/github.com/jackc/pgtype/record.go @@ -6,7 +6,7 @@ import ( ) // Record is the generic PostgreSQL record type such as is created with the -// "row" function. Record only implements BinaryEncoder and Value. The text +// "row" function. Record only implements BinaryDecoder and Value. The text // format output format from PostgreSQL does not include type information and is // therefore impossible to decode. No encoders are implemented because // PostgreSQL does not support input of generic records. diff --git a/vendor/github.com/jackc/pgtype/record_array.go b/vendor/github.com/jackc/pgtype/record_array.go new file mode 100644 index 000000000..2271717a5 --- /dev/null +++ b/vendor/github.com/jackc/pgtype/record_array.go @@ -0,0 +1,318 @@ +// Code generated by erb. DO NOT EDIT. + +package pgtype + +import ( + "encoding/binary" + "fmt" + "reflect" +) + +type RecordArray struct { + Elements []Record + Dimensions []ArrayDimension + Status Status +} + +func (dst *RecordArray) Set(src interface{}) error { + // untyped nil and typed nil interfaces are different + if src == nil { + *dst = RecordArray{Status: Null} + return nil + } + + if value, ok := src.(interface{ Get() interface{} }); ok { + value2 := value.Get() + if value2 != value { + return dst.Set(value2) + } + } + + // Attempt to match to select common types: + switch value := src.(type) { + + case [][]Value: + if value == nil { + *dst = RecordArray{Status: Null} + } else if len(value) == 0 { + *dst = RecordArray{Status: Present} + } else { + elements := make([]Record, len(value)) + for i := range value { + if err := elements[i].Set(value[i]); err != nil { + return err + } + } + *dst = RecordArray{ + Elements: elements, + Dimensions: []ArrayDimension{{Length: int32(len(elements)), LowerBound: 1}}, + Status: Present, + } + } + + case []Record: + if value == nil { + *dst = RecordArray{Status: Null} + } else if len(value) == 0 { + *dst = RecordArray{Status: Present} + } else { + *dst = RecordArray{ + Elements: value, + Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}}, + Status: Present, + } + } + default: + // Fallback to reflection if an optimised match was not found. + // The reflection is necessary for arrays and multidimensional slices, + // but it comes with a 20-50% performance penalty for large arrays/slices + reflectedValue := reflect.ValueOf(src) + if !reflectedValue.IsValid() || reflectedValue.IsZero() { + *dst = RecordArray{Status: Null} + return nil + } + + dimensions, elementsLength, ok := findDimensionsFromValue(reflectedValue, nil, 0) + if !ok { + return fmt.Errorf("cannot find dimensions of %v for RecordArray", src) + } + if elementsLength == 0 { + *dst = RecordArray{Status: Present} + return nil + } + if len(dimensions) == 0 { + if originalSrc, ok := underlyingSliceType(src); ok { + return dst.Set(originalSrc) + } + return fmt.Errorf("cannot convert %v to RecordArray", src) + } + + *dst = RecordArray{ + Elements: make([]Record, elementsLength), + Dimensions: dimensions, + Status: Present, + } + elementCount, err := dst.setRecursive(reflectedValue, 0, 0) + if err != nil { + // Maybe the target was one dimension too far, try again: + if len(dst.Dimensions) > 1 { + dst.Dimensions = dst.Dimensions[:len(dst.Dimensions)-1] + elementsLength = 0 + for _, dim := range dst.Dimensions { + if elementsLength == 0 { + elementsLength = int(dim.Length) + } else { + elementsLength *= int(dim.Length) + } + } + dst.Elements = make([]Record, elementsLength) + elementCount, err = dst.setRecursive(reflectedValue, 0, 0) + if err != nil { + return err + } + } else { + return err + } + } + if elementCount != len(dst.Elements) { + return fmt.Errorf("cannot convert %v to RecordArray, expected %d dst.Elements, but got %d instead", src, len(dst.Elements), elementCount) + } + } + + return nil +} + +func (dst *RecordArray) setRecursive(value reflect.Value, index, dimension int) (int, error) { + switch value.Kind() { + case reflect.Array: + fallthrough + case reflect.Slice: + if len(dst.Dimensions) == dimension { + break + } + + valueLen := value.Len() + if int32(valueLen) != dst.Dimensions[dimension].Length { + return 0, fmt.Errorf("multidimensional arrays must have array expressions with matching dimensions") + } + for i := 0; i < valueLen; i++ { + var err error + index, err = dst.setRecursive(value.Index(i), index, dimension+1) + if err != nil { + return 0, err + } + } + + return index, nil + } + if !value.CanInterface() { + return 0, fmt.Errorf("cannot convert all values to RecordArray") + } + if err := dst.Elements[index].Set(value.Interface()); err != nil { + return 0, fmt.Errorf("%v in RecordArray", err) + } + index++ + + return index, nil +} + +func (dst RecordArray) Get() interface{} { + switch dst.Status { + case Present: + return dst + case Null: + return nil + default: + return dst.Status + } +} + +func (src *RecordArray) AssignTo(dst interface{}) error { + switch src.Status { + case Present: + if len(src.Dimensions) <= 1 { + // Attempt to match to select common types: + switch v := dst.(type) { + + case *[][]Value: + *v = make([][]Value, len(src.Elements)) + for i := range src.Elements { + if err := src.Elements[i].AssignTo(&((*v)[i])); err != nil { + return err + } + } + return nil + + } + } + + // Try to convert to something AssignTo can use directly. + if nextDst, retry := GetAssignToDstType(dst); retry { + return src.AssignTo(nextDst) + } + + // Fallback to reflection if an optimised match was not found. + // The reflection is necessary for arrays and multidimensional slices, + // but it comes with a 20-50% performance penalty for large arrays/slices + value := reflect.ValueOf(dst) + if value.Kind() == reflect.Ptr { + value = value.Elem() + } + + switch value.Kind() { + case reflect.Array, reflect.Slice: + default: + return fmt.Errorf("cannot assign %T to %T", src, dst) + } + + if len(src.Elements) == 0 { + if value.Kind() == reflect.Slice { + value.Set(reflect.MakeSlice(value.Type(), 0, 0)) + return nil + } + } + + elementCount, err := src.assignToRecursive(value, 0, 0) + if err != nil { + return err + } + if elementCount != len(src.Elements) { + return fmt.Errorf("cannot assign %v, needed to assign %d elements, but only assigned %d", dst, len(src.Elements), elementCount) + } + + return nil + case Null: + return NullAssignTo(dst) + } + + return fmt.Errorf("cannot decode %#v into %T", src, dst) +} + +func (src *RecordArray) assignToRecursive(value reflect.Value, index, dimension int) (int, error) { + switch kind := value.Kind(); kind { + case reflect.Array: + fallthrough + case reflect.Slice: + if len(src.Dimensions) == dimension { + break + } + + length := int(src.Dimensions[dimension].Length) + if reflect.Array == kind { + typ := value.Type() + if typ.Len() != length { + return 0, fmt.Errorf("expected size %d array, but %s has size %d array", length, typ, typ.Len()) + } + value.Set(reflect.New(typ).Elem()) + } else { + value.Set(reflect.MakeSlice(value.Type(), length, length)) + } + + var err error + for i := 0; i < length; i++ { + index, err = src.assignToRecursive(value.Index(i), index, dimension+1) + if err != nil { + return 0, err + } + } + + return index, nil + } + if len(src.Dimensions) != dimension { + return 0, fmt.Errorf("incorrect dimensions, expected %d, found %d", len(src.Dimensions), dimension) + } + if !value.CanAddr() { + return 0, fmt.Errorf("cannot assign all values from RecordArray") + } + addr := value.Addr() + if !addr.CanInterface() { + return 0, fmt.Errorf("cannot assign all values from RecordArray") + } + if err := src.Elements[index].AssignTo(addr.Interface()); err != nil { + return 0, err + } + index++ + return index, nil +} + +func (dst *RecordArray) DecodeBinary(ci *ConnInfo, src []byte) error { + if src == nil { + *dst = RecordArray{Status: Null} + return nil + } + + var arrayHeader ArrayHeader + rp, err := arrayHeader.DecodeBinary(ci, src) + if err != nil { + return err + } + + if len(arrayHeader.Dimensions) == 0 { + *dst = RecordArray{Dimensions: arrayHeader.Dimensions, Status: Present} + return nil + } + + elementCount := arrayHeader.Dimensions[0].Length + for _, d := range arrayHeader.Dimensions[1:] { + elementCount *= d.Length + } + + elements := make([]Record, elementCount) + + for i := range elements { + elemLen := int(int32(binary.BigEndian.Uint32(src[rp:]))) + rp += 4 + var elemSrc []byte + if elemLen >= 0 { + elemSrc = src[rp : rp+elemLen] + rp += elemLen + } + err = elements[i].DecodeBinary(ci, elemSrc) + if err != nil { + return err + } + } + + *dst = RecordArray{Elements: elements, Dimensions: arrayHeader.Dimensions, Status: Present} + return nil +} diff --git a/vendor/github.com/jackc/pgtype/typed_array.go.erb b/vendor/github.com/jackc/pgtype/typed_array.go.erb index 5788626b4..e8433c043 100644 --- a/vendor/github.com/jackc/pgtype/typed_array.go.erb +++ b/vendor/github.com/jackc/pgtype/typed_array.go.erb @@ -1,5 +1,17 @@ // Code generated by erb. DO NOT EDIT. +<% + # defaults when not explicitly set on command line + + binary_format ||= "true" + text_format ||= "true" + + text_null ||= "NULL" + + encode_binary ||= binary_format + decode_binary ||= binary_format +%> + package pgtype import ( @@ -279,6 +291,7 @@ func (src *<%= pgtype_array_type %>) assignToRecursive(value reflect.Value, inde return index, nil } +<% if text_format == "true" %> func (dst *<%= pgtype_array_type %>) DecodeText(ci *ConnInfo, src []byte) error { if src == nil { *dst = <%= pgtype_array_type %>{Status: Null} @@ -314,8 +327,9 @@ func (dst *<%= pgtype_array_type %>) DecodeText(ci *ConnInfo, src []byte) error return nil } +<% end %> -<% if binary_format == "true" %> +<% if decode_binary == "true" %> func (dst *<%= pgtype_array_type %>) DecodeBinary(ci *ConnInfo, src []byte) error { if src == nil { *dst = <%= pgtype_array_type %>{Status: Null} @@ -359,6 +373,7 @@ func (dst *<%= pgtype_array_type %>) DecodeBinary(ci *ConnInfo, src []byte) erro } <% end %> +<% if text_format == "true" %> func (src <%= pgtype_array_type %>) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) { switch src.Status { case Null: @@ -415,8 +430,9 @@ func (src <%= pgtype_array_type %>) EncodeText(ci *ConnInfo, buf []byte) ([]byte return buf, nil } +<% end %> -<% if binary_format == "true" %> +<% if encode_binary == "true" %> func (src <%= pgtype_array_type %>) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) { switch src.Status { case Null: @@ -462,6 +478,7 @@ func (src <%= pgtype_array_type %>) EncodeText(ci *ConnInfo, buf []byte) ([]byte } <% end %> +<% if text_format == "true" %> // Scan implements the database/sql Scanner interface. func (dst *<%= pgtype_array_type %>) Scan(src interface{}) error { if src == nil { @@ -492,3 +509,4 @@ func (src <%= pgtype_array_type %>) Value() (driver.Value, error) { return string(buf), nil } +<% end %> diff --git a/vendor/github.com/jackc/pgtype/typed_array_gen.sh b/vendor/github.com/jackc/pgtype/typed_array_gen.sh index ea28be077..d922f1cbb 100644 --- a/vendor/github.com/jackc/pgtype/typed_array_gen.sh +++ b/vendor/github.com/jackc/pgtype/typed_array_gen.sh @@ -1,28 +1,30 @@ -erb pgtype_array_type=Int2Array pgtype_element_type=Int2 go_array_types=[]int16,[]*int16,[]uint16,[]*uint16,[]int32,[]*int32,[]uint32,[]*uint32,[]int64,[]*int64,[]uint64,[]*uint64,[]int,[]*int,[]uint,[]*uint element_type_name=int2 text_null=NULL binary_format=true typed_array.go.erb > int2_array.go -erb pgtype_array_type=Int4Array pgtype_element_type=Int4 go_array_types=[]int16,[]*int16,[]uint16,[]*uint16,[]int32,[]*int32,[]uint32,[]*uint32,[]int64,[]*int64,[]uint64,[]*uint64,[]int,[]*int,[]uint,[]*uint element_type_name=int4 text_null=NULL binary_format=true typed_array.go.erb > int4_array.go -erb pgtype_array_type=Int8Array pgtype_element_type=Int8 go_array_types=[]int16,[]*int16,[]uint16,[]*uint16,[]int32,[]*int32,[]uint32,[]*uint32,[]int64,[]*int64,[]uint64,[]*uint64,[]int,[]*int,[]uint,[]*uint element_type_name=int8 text_null=NULL binary_format=true typed_array.go.erb > int8_array.go -erb pgtype_array_type=BoolArray pgtype_element_type=Bool go_array_types=[]bool,[]*bool element_type_name=bool text_null=NULL binary_format=true typed_array.go.erb > bool_array.go -erb pgtype_array_type=DateArray pgtype_element_type=Date go_array_types=[]time.Time,[]*time.Time element_type_name=date text_null=NULL binary_format=true typed_array.go.erb > date_array.go -erb pgtype_array_type=TimestamptzArray pgtype_element_type=Timestamptz go_array_types=[]time.Time,[]*time.Time element_type_name=timestamptz text_null=NULL binary_format=true typed_array.go.erb > timestamptz_array.go -erb pgtype_array_type=TstzrangeArray pgtype_element_type=Tstzrange go_array_types=[]Tstzrange element_type_name=tstzrange text_null=NULL binary_format=true typed_array.go.erb > tstzrange_array.go -erb pgtype_array_type=TsrangeArray pgtype_element_type=Tsrange go_array_types=[]Tsrange element_type_name=tsrange text_null=NULL binary_format=true typed_array.go.erb > tsrange_array.go -erb pgtype_array_type=TimestampArray pgtype_element_type=Timestamp go_array_types=[]time.Time,[]*time.Time element_type_name=timestamp text_null=NULL binary_format=true typed_array.go.erb > timestamp_array.go -erb pgtype_array_type=Float4Array pgtype_element_type=Float4 go_array_types=[]float32,[]*float32 element_type_name=float4 text_null=NULL binary_format=true typed_array.go.erb > float4_array.go -erb pgtype_array_type=Float8Array pgtype_element_type=Float8 go_array_types=[]float64,[]*float64 element_type_name=float8 text_null=NULL binary_format=true typed_array.go.erb > float8_array.go -erb pgtype_array_type=InetArray pgtype_element_type=Inet go_array_types=[]*net.IPNet,[]net.IP,[]*net.IP element_type_name=inet text_null=NULL binary_format=true typed_array.go.erb > inet_array.go -erb pgtype_array_type=MacaddrArray pgtype_element_type=Macaddr go_array_types=[]net.HardwareAddr,[]*net.HardwareAddr element_type_name=macaddr text_null=NULL binary_format=true typed_array.go.erb > macaddr_array.go -erb pgtype_array_type=CIDRArray pgtype_element_type=CIDR go_array_types=[]*net.IPNet,[]net.IP,[]*net.IP element_type_name=cidr text_null=NULL binary_format=true typed_array.go.erb > cidr_array.go -erb pgtype_array_type=TextArray pgtype_element_type=Text go_array_types=[]string,[]*string element_type_name=text text_null=NULL binary_format=true typed_array.go.erb > text_array.go -erb pgtype_array_type=VarcharArray pgtype_element_type=Varchar go_array_types=[]string,[]*string element_type_name=varchar text_null=NULL binary_format=true typed_array.go.erb > varchar_array.go -erb pgtype_array_type=BPCharArray pgtype_element_type=BPChar go_array_types=[]string,[]*string element_type_name=bpchar text_null=NULL binary_format=true typed_array.go.erb > bpchar_array.go -erb pgtype_array_type=ByteaArray pgtype_element_type=Bytea go_array_types=[][]byte element_type_name=bytea text_null=NULL binary_format=true typed_array.go.erb > bytea_array.go -erb pgtype_array_type=ACLItemArray pgtype_element_type=ACLItem go_array_types=[]string,[]*string element_type_name=aclitem text_null=NULL binary_format=false typed_array.go.erb > aclitem_array.go -erb pgtype_array_type=HstoreArray pgtype_element_type=Hstore go_array_types=[]map[string]string element_type_name=hstore text_null=NULL binary_format=true typed_array.go.erb > hstore_array.go -erb pgtype_array_type=NumericArray pgtype_element_type=Numeric go_array_types=[]float32,[]*float32,[]float64,[]*float64,[]int64,[]*int64,[]uint64,[]*uint64 element_type_name=numeric text_null=NULL binary_format=true typed_array.go.erb > numeric_array.go -erb pgtype_array_type=UUIDArray pgtype_element_type=UUID go_array_types=[][16]byte,[][]byte,[]string,[]*string element_type_name=uuid text_null=NULL binary_format=true typed_array.go.erb > uuid_array.go -erb pgtype_array_type=JSONBArray pgtype_element_type=JSONB go_array_types=[]string,[][]byte element_type_name=jsonb text_null=NULL binary_format=true typed_array.go.erb > jsonb_array.go +erb pgtype_array_type=Int2Array pgtype_element_type=Int2 go_array_types=[]int16,[]*int16,[]uint16,[]*uint16,[]int32,[]*int32,[]uint32,[]*uint32,[]int64,[]*int64,[]uint64,[]*uint64,[]int,[]*int,[]uint,[]*uint element_type_name=int2 typed_array.go.erb > int2_array.go +erb pgtype_array_type=Int4Array pgtype_element_type=Int4 go_array_types=[]int16,[]*int16,[]uint16,[]*uint16,[]int32,[]*int32,[]uint32,[]*uint32,[]int64,[]*int64,[]uint64,[]*uint64,[]int,[]*int,[]uint,[]*uint element_type_name=int4 typed_array.go.erb > int4_array.go +erb pgtype_array_type=Int8Array pgtype_element_type=Int8 go_array_types=[]int16,[]*int16,[]uint16,[]*uint16,[]int32,[]*int32,[]uint32,[]*uint32,[]int64,[]*int64,[]uint64,[]*uint64,[]int,[]*int,[]uint,[]*uint element_type_name=int8 typed_array.go.erb > int8_array.go +erb pgtype_array_type=BoolArray pgtype_element_type=Bool go_array_types=[]bool,[]*bool element_type_name=bool typed_array.go.erb > bool_array.go +erb pgtype_array_type=DateArray pgtype_element_type=Date go_array_types=[]time.Time,[]*time.Time element_type_name=date typed_array.go.erb > date_array.go +erb pgtype_array_type=TimestamptzArray pgtype_element_type=Timestamptz go_array_types=[]time.Time,[]*time.Time element_type_name=timestamptz typed_array.go.erb > timestamptz_array.go +erb pgtype_array_type=TstzrangeArray pgtype_element_type=Tstzrange go_array_types=[]Tstzrange element_type_name=tstzrange typed_array.go.erb > tstzrange_array.go +erb pgtype_array_type=TsrangeArray pgtype_element_type=Tsrange go_array_types=[]Tsrange element_type_name=tsrange typed_array.go.erb > tsrange_array.go +erb pgtype_array_type=TimestampArray pgtype_element_type=Timestamp go_array_types=[]time.Time,[]*time.Time element_type_name=timestamp typed_array.go.erb > timestamp_array.go +erb pgtype_array_type=Float4Array pgtype_element_type=Float4 go_array_types=[]float32,[]*float32 element_type_name=float4 typed_array.go.erb > float4_array.go +erb pgtype_array_type=Float8Array pgtype_element_type=Float8 go_array_types=[]float64,[]*float64 element_type_name=float8 typed_array.go.erb > float8_array.go +erb pgtype_array_type=InetArray pgtype_element_type=Inet go_array_types=[]*net.IPNet,[]net.IP,[]*net.IP element_type_name=inet typed_array.go.erb > inet_array.go +erb pgtype_array_type=MacaddrArray pgtype_element_type=Macaddr go_array_types=[]net.HardwareAddr,[]*net.HardwareAddr element_type_name=macaddr typed_array.go.erb > macaddr_array.go +erb pgtype_array_type=CIDRArray pgtype_element_type=CIDR go_array_types=[]*net.IPNet,[]net.IP,[]*net.IP element_type_name=cidr typed_array.go.erb > cidr_array.go +erb pgtype_array_type=TextArray pgtype_element_type=Text go_array_types=[]string,[]*string element_type_name=text typed_array.go.erb > text_array.go +erb pgtype_array_type=VarcharArray pgtype_element_type=Varchar go_array_types=[]string,[]*string element_type_name=varchar typed_array.go.erb > varchar_array.go +erb pgtype_array_type=BPCharArray pgtype_element_type=BPChar go_array_types=[]string,[]*string element_type_name=bpchar typed_array.go.erb > bpchar_array.go +erb pgtype_array_type=ByteaArray pgtype_element_type=Bytea go_array_types=[][]byte element_type_name=bytea typed_array.go.erb > bytea_array.go +erb pgtype_array_type=ACLItemArray pgtype_element_type=ACLItem go_array_types=[]string,[]*string element_type_name=aclitem binary_format=false typed_array.go.erb > aclitem_array.go +erb pgtype_array_type=HstoreArray pgtype_element_type=Hstore go_array_types=[]map[string]string element_type_name=hstore typed_array.go.erb > hstore_array.go +erb pgtype_array_type=NumericArray pgtype_element_type=Numeric go_array_types=[]float32,[]*float32,[]float64,[]*float64,[]int64,[]*int64,[]uint64,[]*uint64 element_type_name=numeric typed_array.go.erb > numeric_array.go +erb pgtype_array_type=UUIDArray pgtype_element_type=UUID go_array_types=[][16]byte,[][]byte,[]string,[]*string element_type_name=uuid typed_array.go.erb > uuid_array.go +erb pgtype_array_type=JSONBArray pgtype_element_type=JSONB go_array_types=[]string,[][]byte,[]json.RawMessage element_type_name=jsonb typed_array.go.erb > jsonb_array.go # While the binary format is theoretically possible it is only practical to use the text format. -erb pgtype_array_type=EnumArray pgtype_element_type=GenericText go_array_types=[]string,[]*string text_null=NULL binary_format=false typed_array.go.erb > enum_array.go +erb pgtype_array_type=EnumArray pgtype_element_type=GenericText go_array_types=[]string,[]*string binary_format=false typed_array.go.erb > enum_array.go + +erb pgtype_array_type=RecordArray pgtype_element_type=Record go_array_types=[][]Value element_type_name=record text_null=NULL encode_binary=false text_format=false typed_array.go.erb > record_array.go goimports -w *_array.go diff --git a/vendor/github.com/jackc/pgtype/typed_multirange.go.erb b/vendor/github.com/jackc/pgtype/typed_multirange.go.erb new file mode 100644 index 000000000..84c8299fa --- /dev/null +++ b/vendor/github.com/jackc/pgtype/typed_multirange.go.erb @@ -0,0 +1,239 @@ +package pgtype + +import ( + "database/sql/driver" + "encoding/binary" + "fmt" + + "github.com/jackc/pgio" +) + +type <%= multirange_type %> struct { + Ranges []<%= range_type %> + Status Status +} + +func (dst *<%= multirange_type %>) Set(src interface{}) error { + //untyped nil and typed nil interfaces are different + if src == nil { + *dst = <%= multirange_type %>{Status: Null} + return nil + } + + switch value := src.(type) { + case <%= multirange_type %>: + *dst = value + case *<%= multirange_type %>: + *dst = *value + case string: + return dst.DecodeText(nil, []byte(value)) + case []<%= range_type %>: + if value == nil { + *dst = <%= multirange_type %>{Status: Null} + } else if len(value) == 0 { + *dst = <%= multirange_type %>{Status: Present} + } else { + elements := make([]<%= range_type %>, len(value)) + for i := range value { + if err := elements[i].Set(value[i]); err != nil { + return err + } + } + *dst = <%= multirange_type %>{ + Ranges: elements, + Status: Present, + } + } + case []*<%= range_type %>: + if value == nil { + *dst = <%= multirange_type %>{Status: Null} + } else if len(value) == 0 { + *dst = <%= multirange_type %>{Status: Present} + } else { + elements := make([]<%= range_type %>, len(value)) + for i := range value { + if err := elements[i].Set(value[i]); err != nil { + return err + } + } + *dst = <%= multirange_type %>{ + Ranges: elements, + Status: Present, + } + } + default: + return fmt.Errorf("cannot convert %v to <%= multirange_type %>", src) + } + + return nil + +} + +func (dst <%= multirange_type %>) Get() interface{} { + switch dst.Status { + case Present: + return dst + case Null: + return nil + default: + return dst.Status + } +} + +func (src *<%= multirange_type %>) AssignTo(dst interface{}) error { + return fmt.Errorf("cannot assign %v to %T", src, dst) +} + +func (dst *<%= multirange_type %>) DecodeText(ci *ConnInfo, src []byte) error { + if src == nil { + *dst = <%= multirange_type %>{Status: Null} + return nil + } + + utmr, err := ParseUntypedTextMultirange(string(src)) + if err != nil { + return err + } + + var elements []<%= range_type %> + + if len(utmr.Elements) > 0 { + elements = make([]<%= range_type %>, len(utmr.Elements)) + + for i, s := range utmr.Elements { + var elem <%= range_type %> + + elemSrc := []byte(s) + + err = elem.DecodeText(ci, elemSrc) + if err != nil { + return err + } + + elements[i] = elem + } + } + + *dst = <%= multirange_type %>{Ranges: elements, Status: Present} + + return nil +} + +func (dst *<%= multirange_type %>) DecodeBinary(ci *ConnInfo, src []byte) error { + if src == nil { + *dst = <%= multirange_type %>{Status: Null} + return nil + } + + rp := 0 + + numElems := int(binary.BigEndian.Uint32(src[rp:])) + rp += 4 + + if numElems == 0 { + *dst = <%= multirange_type %>{Status: Present} + return nil + } + + elements := make([]<%= range_type %>, numElems) + + for i := range elements { + elemLen := int(int32(binary.BigEndian.Uint32(src[rp:]))) + rp += 4 + var elemSrc []byte + if elemLen >= 0 { + elemSrc = src[rp : rp+elemLen] + rp += elemLen + } + err := elements[i].DecodeBinary(ci, elemSrc) + if err != nil { + return err + } + } + + *dst = <%= multirange_type %>{Ranges: elements, Status: Present} + return nil +} + +func (src <%= multirange_type %>) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) { + switch src.Status { + case Null: + return nil, nil + case Undefined: + return nil, errUndefined + } + + buf = append(buf, '{') + + inElemBuf := make([]byte, 0, 32) + for i, elem := range src.Ranges { + if i > 0 { + buf = append(buf, ',') + } + + elemBuf, err := elem.EncodeText(ci, inElemBuf) + if err != nil { + return nil, err + } + if elemBuf == nil { + return nil, fmt.Errorf("multi-range does not allow null range") + } else { + buf = append(buf, string(elemBuf)...) + } + + } + + buf = append(buf, '}') + + return buf, nil +} + +func (src <%= multirange_type %>) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) { + switch src.Status { + case Null: + return nil, nil + case Undefined: + return nil, errUndefined + } + + buf = pgio.AppendInt32(buf, int32(len(src.Ranges))) + + for i := range src.Ranges { + sp := len(buf) + buf = pgio.AppendInt32(buf, -1) + + elemBuf, err := src.Ranges[i].EncodeBinary(ci, buf) + if err != nil { + return nil, err + } + if elemBuf != nil { + buf = elemBuf + pgio.SetInt32(buf[sp:], int32(len(buf[sp:])-4)) + } + } + + return buf, nil +} + +// Scan implements the database/sql Scanner interface. +func (dst *<%= multirange_type %>) Scan(src interface{}) error { + if src == nil { + return dst.DecodeText(nil, nil) + } + + switch src := src.(type) { + case string: + return dst.DecodeText(nil, []byte(src)) + case []byte: + srcCopy := make([]byte, len(src)) + copy(srcCopy, src) + return dst.DecodeText(nil, srcCopy) + } + + return fmt.Errorf("cannot scan %T", src) +} + +// Value implements the database/sql/driver Valuer interface. +func (src <%= multirange_type %>) Value() (driver.Value, error) { + return EncodeValueText(src) +} diff --git a/vendor/github.com/jackc/pgtype/typed_multirange_gen.sh b/vendor/github.com/jackc/pgtype/typed_multirange_gen.sh new file mode 100644 index 000000000..610f40a1e --- /dev/null +++ b/vendor/github.com/jackc/pgtype/typed_multirange_gen.sh @@ -0,0 +1,8 @@ +erb range_type=Numrange multirange_type=Nummultirange typed_multirange.go.erb > num_multirange.go +erb range_type=Int4range multirange_type=Int4multirange typed_multirange.go.erb > int4_multirange.go +erb range_type=Int8range multirange_type=Int8multirange typed_multirange.go.erb > int8_multirange.go +# TODO +# erb range_type=Tsrange multirange_type=Tsmultirange typed_multirange.go.erb > ts_multirange.go +# erb range_type=Tstzrange multirange_type=Tstzmultirange typed_multirange.go.erb > tstz_multirange.go +# erb range_type=Daterange multirange_type=Datemultirange typed_multirange.go.erb > date_multirange.go +goimports -w *multirange.go \ No newline at end of file diff --git a/vendor/github.com/jackc/pgx/v4/CHANGELOG.md b/vendor/github.com/jackc/pgx/v4/CHANGELOG.md index 4dd93b30e..7bb69fe2a 100644 --- a/vendor/github.com/jackc/pgx/v4/CHANGELOG.md +++ b/vendor/github.com/jackc/pgx/v4/CHANGELOG.md @@ -1,3 +1,18 @@ +# 4.16.1 (May 7, 2022) + +* Upgrade pgconn to v1.12.1 +* Fix explicitly prepared statements with describe statement cache mode + +# 4.16.0 (April 21, 2022) + +* Upgrade pgconn to v1.12.0 +* Upgrade pgproto3 to v2.3.0 +* Upgrade pgtype to v1.11.0 +* Fix: Do not panic when context cancelled while getting statement from cache. +* Fix: Less memory pinning from old Rows. +* Fix: Support '\r' line ending when sanitizing SQL comment. +* Add pluggable GSSAPI support (Oliver Tan) + # 4.15.0 (February 7, 2022) * Upgrade to pgconn v1.11.0 diff --git a/vendor/github.com/jackc/pgx/v4/README.md b/vendor/github.com/jackc/pgx/v4/README.md index 110d4f02e..3bdaf93f4 100644 --- a/vendor/github.com/jackc/pgx/v4/README.md +++ b/vendor/github.com/jackc/pgx/v4/README.md @@ -98,26 +98,6 @@ There are three areas in particular where pgx can provide a significant performa perform nearly 3x the number of queries per second. 3. Batched queries - Multiple queries can be batched together to minimize network round trips. -## Comparison with Alternatives - -* [pq](http://godoc.org/github.com/lib/pq) -* [go-pg](https://github.com/go-pg/pg) - -For prepared queries with small sets of simple data types, all drivers will have have similar performance. However, if prepared statements aren't being explicitly used, pgx can have a significant performance advantage due to automatic statement preparation. -pgx also can perform better when using PostgreSQL-specific data types or query batching. See -[go_db_bench](https://github.com/jackc/go_db_bench) for some database driver benchmarks. - -### Compatibility with `database/sql` - -pq is exclusively used with `database/sql`. go-pg does not use `database/sql` at all. pgx supports `database/sql` as well as -its own interface. - -### Level of access, ORM - -go-pg is a PostgreSQL client and ORM. It includes many features that traditionally sit above the database driver, such as ORM, struct mapping, soft deletes, schema migrations, and sharding support. - -pgx is "closer to the metal" and such abstractions are beyond the scope of the pgx project, which first and foremost, aims to be a performant driver and toolkit. - ## Testing pgx tests naturally require a PostgreSQL database. It will connect to the database specified in the `PGX_TEST_DATABASE` environment @@ -201,3 +181,11 @@ pgerrcode contains constants for the PostgreSQL error codes. ### [github.com/georgysavva/scany](https://github.com/georgysavva/scany) Library for scanning data from a database into Go structs and more. + +### [https://github.com/otan/gopgkrb5](https://github.com/otan/gopgkrb5) + +Adds GSSAPI / Kerberos authentication support. + +### [https://github.com/vgarvardt/pgx-google-uuid](https://github.com/vgarvardt/pgx-google-uuid) + +Adds support for [`github.com/google/uuid`](https://github.com/google/uuid). diff --git a/vendor/github.com/jackc/pgx/v4/conn.go b/vendor/github.com/jackc/pgx/v4/conn.go index 102158ab5..9b620d27b 100644 --- a/vendor/github.com/jackc/pgx/v4/conn.go +++ b/vendor/github.com/jackc/pgx/v4/conn.go @@ -73,9 +73,8 @@ type Conn struct { connInfo *pgtype.ConnInfo - wbuf []byte - preallocatedRows []connRows - eqb extendedQueryBuilder + wbuf []byte + eqb extendedQueryBuilder } // Identifier a PostgreSQL identifier or name. Identifiers can be composed of @@ -366,30 +365,6 @@ func (c *Conn) Ping(ctx context.Context) error { return err } -func connInfoFromRows(rows Rows, err error) (map[string]uint32, error) { - if err != nil { - return nil, err - } - defer rows.Close() - - nameOIDs := make(map[string]uint32, 256) - for rows.Next() { - var oid uint32 - var name pgtype.Text - if err = rows.Scan(&oid, &name); err != nil { - return nil, err - } - - nameOIDs[name.String] = oid - } - - if err = rows.Err(); err != nil { - return nil, err - } - - return nameOIDs, err -} - // PgConn returns the underlying *pgconn.PgConn. This is an escape hatch method that allows lower level access to the // PostgreSQL connection than pgx exposes. // @@ -414,7 +389,8 @@ func (c *Conn) Exec(ctx context.Context, sql string, arguments ...interface{}) ( commandTag, err := c.exec(ctx, sql, arguments...) if err != nil { if c.shouldLog(LogLevelError) { - c.log(ctx, LogLevelError, "Exec", map[string]interface{}{"sql": sql, "args": logQueryArgs(arguments), "err": err}) + endTime := time.Now() + c.log(ctx, LogLevelError, "Exec", map[string]interface{}{"sql": sql, "args": logQueryArgs(arguments), "err": err, "time": endTime.Sub(startTime)}) } return commandTag, err } @@ -537,12 +513,7 @@ func (c *Conn) execPrepared(ctx context.Context, sd *pgconn.StatementDescription } func (c *Conn) getRows(ctx context.Context, sql string, args []interface{}) *connRows { - if len(c.preallocatedRows) == 0 { - c.preallocatedRows = make([]connRows, 64) - } - - r := &c.preallocatedRows[len(c.preallocatedRows)-1] - c.preallocatedRows = c.preallocatedRows[0 : len(c.preallocatedRows)-1] + r := &connRows{} r.ctx = ctx r.logger = c @@ -674,7 +645,7 @@ optionLoop: resultFormats = c.eqb.resultFormats } - if c.stmtcache != nil && c.stmtcache.Mode() == stmtcache.ModeDescribe { + if c.stmtcache != nil && c.stmtcache.Mode() == stmtcache.ModeDescribe && !ok { rows.resultReader = c.pgConn.ExecParams(ctx, sql, c.eqb.paramValues, sd.ParamOIDs, c.eqb.paramFormats, resultFormats) } else { rows.resultReader = c.pgConn.ExecPrepared(ctx, sd.Name, c.eqb.paramValues, c.eqb.paramFormats, resultFormats) @@ -797,8 +768,7 @@ func (c *Conn) SendBatch(ctx context.Context, b *Batch) BatchResults { var err error sd, err = stmtCache.Get(ctx, bi.query) if err != nil { - // the stmtCache was prefilled from distinctUnpreparedQueries above so we are guaranteed no errors - panic("BUG: unexpected error from stmtCache") + return &batchResults{ctx: ctx, conn: c, err: err} } } diff --git a/vendor/github.com/jackc/pgx/v4/internal/sanitize/sanitize.go b/vendor/github.com/jackc/pgx/v4/internal/sanitize/sanitize.go index 2dba3b810..a7a94e93e 100644 --- a/vendor/github.com/jackc/pgx/v4/internal/sanitize/sanitize.go +++ b/vendor/github.com/jackc/pgx/v4/internal/sanitize/sanitize.go @@ -246,7 +246,7 @@ func oneLineCommentState(l *sqlLexer) stateFn { case '\\': _, width = utf8.DecodeRuneInString(l.src[l.pos:]) l.pos += width - case '\n': + case '\n', '\r': return rawState case utf8.RuneError: if l.pos-l.start > 0 { diff --git a/vendor/github.com/jackc/pgx/v4/large_objects.go b/vendor/github.com/jackc/pgx/v4/large_objects.go index 5255a3b48..baa92b38b 100644 --- a/vendor/github.com/jackc/pgx/v4/large_objects.go +++ b/vendor/github.com/jackc/pgx/v4/large_objects.go @@ -108,13 +108,13 @@ func (o *LargeObject) Tell() (n int64, err error) { return n, err } -// Trunctes the large object to size. +// Truncate the large object to size. func (o *LargeObject) Truncate(size int64) (err error) { _, err = o.tx.Exec(o.ctx, "select lo_truncate64($1, $2)", o.fd, size) return err } -// Close closees the large object descriptor. +// Close the large object descriptor. func (o *LargeObject) Close() error { _, err := o.tx.Exec(o.ctx, "select lo_close($1)", o.fd) return err diff --git a/vendor/github.com/jackc/pgx/v4/tx.go b/vendor/github.com/jackc/pgx/v4/tx.go index 1971ed673..2914ada7d 100644 --- a/vendor/github.com/jackc/pgx/v4/tx.go +++ b/vendor/github.com/jackc/pgx/v4/tx.go @@ -192,7 +192,7 @@ func (tx *dbTx) Begin(ctx context.Context) (Tx, error) { return nil, err } - return &dbSavepoint{tx: tx, savepointNum: tx.savepointNum}, nil + return &dbSimulatedNestedTx{tx: tx, savepointNum: tx.savepointNum}, nil } func (tx *dbTx) BeginFunc(ctx context.Context, f func(Tx) error) (err error) { @@ -329,15 +329,15 @@ func (tx *dbTx) Conn() *Conn { return tx.conn } -// dbSavepoint represents a nested transaction implemented by a savepoint. -type dbSavepoint struct { +// dbSimulatedNestedTx represents a simulated nested transaction implemented by a savepoint. +type dbSimulatedNestedTx struct { tx Tx savepointNum int64 closed bool } // Begin starts a pseudo nested transaction implemented with a savepoint. -func (sp *dbSavepoint) Begin(ctx context.Context) (Tx, error) { +func (sp *dbSimulatedNestedTx) Begin(ctx context.Context) (Tx, error) { if sp.closed { return nil, ErrTxClosed } @@ -345,7 +345,7 @@ func (sp *dbSavepoint) Begin(ctx context.Context) (Tx, error) { return sp.tx.Begin(ctx) } -func (sp *dbSavepoint) BeginFunc(ctx context.Context, f func(Tx) error) (err error) { +func (sp *dbSimulatedNestedTx) BeginFunc(ctx context.Context, f func(Tx) error) (err error) { if sp.closed { return ErrTxClosed } @@ -354,7 +354,7 @@ func (sp *dbSavepoint) BeginFunc(ctx context.Context, f func(Tx) error) (err err } // Commit releases the savepoint essentially committing the pseudo nested transaction. -func (sp *dbSavepoint) Commit(ctx context.Context) error { +func (sp *dbSimulatedNestedTx) Commit(ctx context.Context) error { if sp.closed { return ErrTxClosed } @@ -367,7 +367,7 @@ func (sp *dbSavepoint) Commit(ctx context.Context) error { // Rollback rolls back to the savepoint essentially rolling back the pseudo nested transaction. Rollback will return // ErrTxClosed if the dbSavepoint is already closed, but is otherwise safe to call multiple times. Hence, a defer sp.Rollback() // is safe even if sp.Commit() will be called first in a non-error condition. -func (sp *dbSavepoint) Rollback(ctx context.Context) error { +func (sp *dbSimulatedNestedTx) Rollback(ctx context.Context) error { if sp.closed { return ErrTxClosed } @@ -378,7 +378,7 @@ func (sp *dbSavepoint) Rollback(ctx context.Context) error { } // Exec delegates to the underlying Tx -func (sp *dbSavepoint) Exec(ctx context.Context, sql string, arguments ...interface{}) (commandTag pgconn.CommandTag, err error) { +func (sp *dbSimulatedNestedTx) Exec(ctx context.Context, sql string, arguments ...interface{}) (commandTag pgconn.CommandTag, err error) { if sp.closed { return nil, ErrTxClosed } @@ -387,7 +387,7 @@ func (sp *dbSavepoint) Exec(ctx context.Context, sql string, arguments ...interf } // Prepare delegates to the underlying Tx -func (sp *dbSavepoint) Prepare(ctx context.Context, name, sql string) (*pgconn.StatementDescription, error) { +func (sp *dbSimulatedNestedTx) Prepare(ctx context.Context, name, sql string) (*pgconn.StatementDescription, error) { if sp.closed { return nil, ErrTxClosed } @@ -396,7 +396,7 @@ func (sp *dbSavepoint) Prepare(ctx context.Context, name, sql string) (*pgconn.S } // Query delegates to the underlying Tx -func (sp *dbSavepoint) Query(ctx context.Context, sql string, args ...interface{}) (Rows, error) { +func (sp *dbSimulatedNestedTx) Query(ctx context.Context, sql string, args ...interface{}) (Rows, error) { if sp.closed { // Because checking for errors can be deferred to the *Rows, build one with the error err := ErrTxClosed @@ -407,13 +407,13 @@ func (sp *dbSavepoint) Query(ctx context.Context, sql string, args ...interface{ } // QueryRow delegates to the underlying Tx -func (sp *dbSavepoint) QueryRow(ctx context.Context, sql string, args ...interface{}) Row { +func (sp *dbSimulatedNestedTx) QueryRow(ctx context.Context, sql string, args ...interface{}) Row { rows, _ := sp.Query(ctx, sql, args...) return (*connRow)(rows.(*connRows)) } // QueryFunc delegates to the underlying Tx. -func (sp *dbSavepoint) QueryFunc(ctx context.Context, sql string, args []interface{}, scans []interface{}, f func(QueryFuncRow) error) (pgconn.CommandTag, error) { +func (sp *dbSimulatedNestedTx) QueryFunc(ctx context.Context, sql string, args []interface{}, scans []interface{}, f func(QueryFuncRow) error) (pgconn.CommandTag, error) { if sp.closed { return nil, ErrTxClosed } @@ -422,7 +422,7 @@ func (sp *dbSavepoint) QueryFunc(ctx context.Context, sql string, args []interfa } // CopyFrom delegates to the underlying *Conn -func (sp *dbSavepoint) CopyFrom(ctx context.Context, tableName Identifier, columnNames []string, rowSrc CopyFromSource) (int64, error) { +func (sp *dbSimulatedNestedTx) CopyFrom(ctx context.Context, tableName Identifier, columnNames []string, rowSrc CopyFromSource) (int64, error) { if sp.closed { return 0, ErrTxClosed } @@ -431,7 +431,7 @@ func (sp *dbSavepoint) CopyFrom(ctx context.Context, tableName Identifier, colum } // SendBatch delegates to the underlying *Conn -func (sp *dbSavepoint) SendBatch(ctx context.Context, b *Batch) BatchResults { +func (sp *dbSimulatedNestedTx) SendBatch(ctx context.Context, b *Batch) BatchResults { if sp.closed { return &batchResults{err: ErrTxClosed} } @@ -439,10 +439,10 @@ func (sp *dbSavepoint) SendBatch(ctx context.Context, b *Batch) BatchResults { return sp.tx.SendBatch(ctx, b) } -func (sp *dbSavepoint) LargeObjects() LargeObjects { +func (sp *dbSimulatedNestedTx) LargeObjects() LargeObjects { return LargeObjects{tx: sp} } -func (sp *dbSavepoint) Conn() *Conn { +func (sp *dbSimulatedNestedTx) Conn() *Conn { return sp.tx.Conn() } diff --git a/vendor/github.com/libopenstorage/openstorage/api/api.go b/vendor/github.com/libopenstorage/openstorage/api/api.go index 996304cf5..fc6afa8f1 100644 --- a/vendor/github.com/libopenstorage/openstorage/api/api.go +++ b/vendor/github.com/libopenstorage/openstorage/api/api.go @@ -108,6 +108,7 @@ const ( SpecBackendPureBlock = "pure_block" SpecBackendPureFile = "pure_file" SpecPureFileExportRules = "pure_export_rules" + SpecPureNFSEnpoint = "pure_nfs_endpoint" SpecIoThrottleRdIOPS = "io_throttle_rd_iops" SpecIoThrottleWrIOPS = "io_throttle_wr_iops" SpecIoThrottleRdBW = "io_throttle_rd_bw" diff --git a/vendor/github.com/libopenstorage/openstorage/api/api.pb.go b/vendor/github.com/libopenstorage/openstorage/api/api.pb.go index 7635a9143..38ced6a44 100644 --- a/vendor/github.com/libopenstorage/openstorage/api/api.pb.go +++ b/vendor/github.com/libopenstorage/openstorage/api/api.pb.go @@ -2555,7 +2555,7 @@ func (x DiagsCollectionStatus_State) Number() protoreflect.EnumNumber { // Deprecated: Use DiagsCollectionStatus_State.Descriptor instead. func (DiagsCollectionStatus_State) EnumDescriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{210, 0} + return file_api_api_proto_rawDescGZIP(), []int{225, 0} } // Type is an enum that defines the type fo the trigger threshold @@ -2606,7 +2606,7 @@ func (x StorageRebalanceTriggerThreshold_Type) Number() protoreflect.EnumNumber // Deprecated: Use StorageRebalanceTriggerThreshold_Type.Descriptor instead. func (StorageRebalanceTriggerThreshold_Type) EnumDescriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{230, 0} + return file_api_api_proto_rawDescGZIP(), []int{245, 0} } // Metric is an enum that defines the metric to use for rebalance @@ -2655,7 +2655,7 @@ func (x StorageRebalanceTriggerThreshold_Metric) Number() protoreflect.EnumNumbe // Deprecated: Use StorageRebalanceTriggerThreshold_Metric.Descriptor instead. func (StorageRebalanceTriggerThreshold_Metric) EnumDescriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{230, 1} + return file_api_api_proto_rawDescGZIP(), []int{245, 1} } // Mode is an enum that defines the mode of the volume reorg job @@ -2666,6 +2666,8 @@ const ( SdkStorageRebalanceRequest_STORAGE_REBALANCE SdkStorageRebalanceRequest_Mode = 0 // VolumePlacementFix mode: scan all volumes for incorrect placement and fix them SdkStorageRebalanceRequest_VOLUME_PLACEMENT_FIX SdkStorageRebalanceRequest_Mode = 1 + // PoolDrain mode: drain all volumes & snapshots on the source pools (optionally to target pools) + SdkStorageRebalanceRequest_POOL_DRAIN SdkStorageRebalanceRequest_Mode = 2 ) // Enum value maps for SdkStorageRebalanceRequest_Mode. @@ -2673,10 +2675,12 @@ var ( SdkStorageRebalanceRequest_Mode_name = map[int32]string{ 0: "STORAGE_REBALANCE", 1: "VOLUME_PLACEMENT_FIX", + 2: "POOL_DRAIN", } SdkStorageRebalanceRequest_Mode_value = map[string]int32{ "STORAGE_REBALANCE": 0, "VOLUME_PLACEMENT_FIX": 1, + "POOL_DRAIN": 2, } ) @@ -2704,7 +2708,7 @@ func (x SdkStorageRebalanceRequest_Mode) Number() protoreflect.EnumNumber { // Deprecated: Use SdkStorageRebalanceRequest_Mode.Descriptor instead. func (SdkStorageRebalanceRequest_Mode) EnumDescriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{231, 0} + return file_api_api_proto_rawDescGZIP(), []int{246, 0} } // Type is an enum to indicate the type of work summary @@ -2761,7 +2765,7 @@ func (x StorageRebalanceWorkSummary_Type) Number() protoreflect.EnumNumber { // Deprecated: Use StorageRebalanceWorkSummary_Type.Descriptor instead. func (StorageRebalanceWorkSummary_Type) EnumDescriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{235, 0} + return file_api_api_proto_rawDescGZIP(), []int{250, 0} } // StorageRebalanceAction describes type of rebalance action @@ -2810,7 +2814,7 @@ func (x StorageRebalanceAudit_StorageRebalanceAction) Number() protoreflect.Enum // Deprecated: Use StorageRebalanceAudit_StorageRebalanceAction.Descriptor instead. func (StorageRebalanceAudit_StorageRebalanceAction) EnumDescriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{236, 0} + return file_api_api_proto_rawDescGZIP(), []int{251, 0} } // OperationStatus captures the various statuses of a storage pool operation @@ -2867,7 +2871,7 @@ func (x SdkStoragePool_OperationStatus) Number() protoreflect.EnumNumber { // Deprecated: Use SdkStoragePool_OperationStatus.Descriptor instead. func (SdkStoragePool_OperationStatus) EnumDescriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{250, 0} + return file_api_api_proto_rawDescGZIP(), []int{265, 0} } // OperationType defines the various operations that are performed on a storage pool @@ -2912,7 +2916,7 @@ func (x SdkStoragePool_OperationType) Number() protoreflect.EnumNumber { // Deprecated: Use SdkStoragePool_OperationType.Descriptor instead. func (SdkStoragePool_OperationType) EnumDescriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{250, 1} + return file_api_api_proto_rawDescGZIP(), []int{265, 1} } // Defines the operation types available to resize a storage pool @@ -2965,7 +2969,7 @@ func (x SdkStoragePool_ResizeOperationType) Number() protoreflect.EnumNumber { // Deprecated: Use SdkStoragePool_ResizeOperationType.Descriptor instead. func (SdkStoragePool_ResizeOperationType) EnumDescriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{250, 2} + return file_api_api_proto_rawDescGZIP(), []int{265, 2} } // FilesystemTrimStatus represents the status codes returned from @@ -3036,7 +3040,7 @@ func (x FilesystemTrim_FilesystemTrimStatus) Number() protoreflect.EnumNumber { // Deprecated: Use FilesystemTrim_FilesystemTrimStatus.Descriptor instead. func (FilesystemTrim_FilesystemTrimStatus) EnumDescriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{313, 0} + return file_api_api_proto_rawDescGZIP(), []int{328, 0} } // FilesystemCheckStatus represents the status codes returned from @@ -3106,7 +3110,7 @@ func (x FilesystemCheck_FilesystemCheckStatus) Number() protoreflect.EnumNumber // Deprecated: Use FilesystemCheck_FilesystemCheckStatus.Descriptor instead. func (FilesystemCheck_FilesystemCheckStatus) EnumDescriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{330, 0} + return file_api_api_proto_rawDescGZIP(), []int{345, 0} } type SdkServiceCapability_OpenStorageService_Type int32 @@ -3202,7 +3206,7 @@ func (x SdkServiceCapability_OpenStorageService_Type) Number() protoreflect.Enum // Deprecated: Use SdkServiceCapability_OpenStorageService_Type.Descriptor instead. func (SdkServiceCapability_OpenStorageService_Type) EnumDescriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{349, 0, 0} + return file_api_api_proto_rawDescGZIP(), []int{364, 0, 0} } // These values are constants that can be used by the @@ -3215,7 +3219,7 @@ const ( // SDK version major value of this specification SdkVersion_Major SdkVersion_Version = 0 // SDK version minor value of this specification - SdkVersion_Minor SdkVersion_Version = 176 + SdkVersion_Minor SdkVersion_Version = 182 // SDK version patch value of this specification SdkVersion_Patch SdkVersion_Version = 0 ) @@ -3225,13 +3229,13 @@ var ( SdkVersion_Version_name = map[int32]string{ 0: "MUST_HAVE_ZERO_VALUE", // Duplicate value: 0: "Major", - 176: "Minor", + 182: "Minor", // Duplicate value: 0: "Patch", } SdkVersion_Version_value = map[string]int32{ "MUST_HAVE_ZERO_VALUE": 0, "Major": 0, - "Minor": 176, + "Minor": 182, "Patch": 0, } ) @@ -3260,7 +3264,7 @@ func (x SdkVersion_Version) Number() protoreflect.EnumNumber { // Deprecated: Use SdkVersion_Version.Descriptor instead. func (SdkVersion_Version) EnumDescriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{350, 0} + return file_api_api_proto_rawDescGZIP(), []int{365, 0} } type CloudMigrate_OperationType int32 @@ -3315,7 +3319,7 @@ func (x CloudMigrate_OperationType) Number() protoreflect.EnumNumber { // Deprecated: Use CloudMigrate_OperationType.Descriptor instead. func (CloudMigrate_OperationType) EnumDescriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{352, 0} + return file_api_api_proto_rawDescGZIP(), []int{367, 0} } type CloudMigrate_Stage int32 @@ -3370,7 +3374,7 @@ func (x CloudMigrate_Stage) Number() protoreflect.EnumNumber { // Deprecated: Use CloudMigrate_Stage.Descriptor instead. func (CloudMigrate_Stage) EnumDescriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{352, 1} + return file_api_api_proto_rawDescGZIP(), []int{367, 1} } type CloudMigrate_Status int32 @@ -3431,7 +3435,7 @@ func (x CloudMigrate_Status) Number() protoreflect.EnumNumber { // Deprecated: Use CloudMigrate_Status.Descriptor instead. func (CloudMigrate_Status) EnumDescriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{352, 2} + return file_api_api_proto_rawDescGZIP(), []int{367, 2} } type ClusterPairMode_Mode int32 @@ -3483,7 +3487,7 @@ func (x ClusterPairMode_Mode) Number() protoreflect.EnumNumber { // Deprecated: Use ClusterPairMode_Mode.Descriptor instead. func (ClusterPairMode_Mode) EnumDescriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{366, 0} + return file_api_api_proto_rawDescGZIP(), []int{381, 0} } // This defines operator types used in a label matching rule @@ -3548,7 +3552,7 @@ func (x LabelSelectorRequirement_Operator) Number() protoreflect.EnumNumber { // Deprecated: Use LabelSelectorRequirement_Operator.Descriptor instead. func (LabelSelectorRequirement_Operator) EnumDescriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{394, 0} + return file_api_api_proto_rawDescGZIP(), []int{409, 0} } // VerifyChecksumStatus represents the status codes returned from @@ -3614,7 +3618,7 @@ func (x VerifyChecksum_VerifyChecksumStatus) Number() protoreflect.EnumNumber { // Deprecated: Use VerifyChecksum_VerifyChecksumStatus.Descriptor instead. func (VerifyChecksum_VerifyChecksumStatus) EnumDescriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{400, 0} + return file_api_api_proto_rawDescGZIP(), []int{415, 0} } // StorageResource groups properties of a storage device. @@ -3655,6 +3659,8 @@ type StorageResource struct { PoolMetadataDev bool `protobuf:"varint,15,opt,name=pool_metadata_dev,json=poolMetadataDev,proto3" json:"pool_metadata_dev,omitempty"` // Cloud drive type CloudDriveType string `protobuf:"bytes,16,opt,name=cloud_drive_type,json=cloudDriveType,proto3" json:"cloud_drive_type,omitempty"` + // volume spec that created this drive + VolumeSpec string `protobuf:"bytes,17,opt,name=volume_spec,json=volumeSpec,proto3" json:"volume_spec,omitempty"` } func (x *StorageResource) Reset() { @@ -3801,6 +3807,13 @@ func (x *StorageResource) GetCloudDriveType() string { return "" } +func (x *StorageResource) GetVolumeSpec() string { + if x != nil { + return x.VolumeSpec + } + return "" +} + // StoragePool groups different storage devices based on their CosType type StoragePool struct { state protoimpl.MessageState @@ -4727,6 +4740,7 @@ type PureFileSpec struct { ExportRules string `protobuf:"bytes,1,opt,name=export_rules,json=exportRules,proto3" json:"export_rules,omitempty"` FullVolName string `protobuf:"bytes,2,opt,name=full_vol_name,json=fullVolName,proto3" json:"full_vol_name,omitempty"` + NfsEndpoint string `protobuf:"bytes,3,opt,name=nfs_endpoint,json=nfsEndpoint,proto3" json:"nfs_endpoint,omitempty"` } func (x *PureFileSpec) Reset() { @@ -4775,6 +4789,13 @@ func (x *PureFileSpec) GetFullVolName() string { return "" } +func (x *PureFileSpec) GetNfsEndpoint() string { + if x != nil { + return x.NfsEndpoint + } + return "" +} + // ProxySpec defines how this volume will reflect an external data source. type ProxySpec struct { state protoimpl.MessageState @@ -18757,6 +18778,414 @@ func (*Job_CollectDiags) isJob_Job() {} func (*Job_Defrag) isJob_Job() {} +// Schedule is a generic schedule object that can encapsulate different +// types of scheduled jobs which follow the schedule framework of APIs +type Schedule struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ID of the schedule + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // StartTime is the scheduled time to start a run + // Valid formats: + // daily=HH:mm e.g. daily=19:15 + // weekly=weekday@HH:mm e.g. weekly=Sunday@19:15 + // monthly=dd@HH:mm e.g. monthly=22@19:15 + StartTime string `protobuf:"bytes,2,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` + // MaxDurationMinutes defines the time limit of one run in minutes + MaxDurationMinutes uint32 `protobuf:"varint,3,opt,name=max_duration_minutes,json=maxDurationMinutes,proto3" json:"max_duration_minutes,omitempty"` + // Type is the schedule type (type of scheduled tasks) + Type Job_Type `protobuf:"varint,4,opt,name=type,proto3,enum=openstorage.api.Job_Type" json:"type,omitempty"` + // Tasks is the tasks to be run in this schedule (must be of same job type) + Tasks []*Job `protobuf:"bytes,5,rep,name=tasks,proto3" json:"tasks,omitempty"` + // CreateTime is the time the schedule was created + CreateTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + // LastUpdateTime is the time the schedule was updated + LastUpdateTime *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=last_update_time,json=lastUpdateTime,proto3" json:"last_update_time,omitempty"` +} + +func (x *Schedule) Reset() { + *x = Schedule{} + if protoimpl.UnsafeEnabled { + mi := &file_api_api_proto_msgTypes[201] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Schedule) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Schedule) ProtoMessage() {} + +func (x *Schedule) ProtoReflect() protoreflect.Message { + mi := &file_api_api_proto_msgTypes[201] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Schedule.ProtoReflect.Descriptor instead. +func (*Schedule) Descriptor() ([]byte, []int) { + return file_api_api_proto_rawDescGZIP(), []int{201} +} + +func (x *Schedule) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Schedule) GetStartTime() string { + if x != nil { + return x.StartTime + } + return "" +} + +func (x *Schedule) GetMaxDurationMinutes() uint32 { + if x != nil { + return x.MaxDurationMinutes + } + return 0 +} + +func (x *Schedule) GetType() Job_Type { + if x != nil { + return x.Type + } + return Job_UNSPECIFIED_TYPE +} + +func (x *Schedule) GetTasks() []*Job { + if x != nil { + return x.Tasks + } + return nil +} + +func (x *Schedule) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *Schedule) GetLastUpdateTime() *timestamppb.Timestamp { + if x != nil { + return x.LastUpdateTime + } + return nil +} + +// Defines a request to inspect schedule +type SdkInspectScheduleRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ID of the schedule + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Type is schedule type + Type Job_Type `protobuf:"varint,2,opt,name=type,proto3,enum=openstorage.api.Job_Type" json:"type,omitempty"` +} + +func (x *SdkInspectScheduleRequest) Reset() { + *x = SdkInspectScheduleRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_api_proto_msgTypes[202] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SdkInspectScheduleRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SdkInspectScheduleRequest) ProtoMessage() {} + +func (x *SdkInspectScheduleRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_api_proto_msgTypes[202] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SdkInspectScheduleRequest.ProtoReflect.Descriptor instead. +func (*SdkInspectScheduleRequest) Descriptor() ([]byte, []int) { + return file_api_api_proto_rawDescGZIP(), []int{202} +} + +func (x *SdkInspectScheduleRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *SdkInspectScheduleRequest) GetType() Job_Type { + if x != nil { + return x.Type + } + return Job_UNSPECIFIED_TYPE +} + +// Defines a response of schedule information +type SdkInspectScheduleResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Schedule *Schedule `protobuf:"bytes,1,opt,name=schedule,proto3" json:"schedule,omitempty"` +} + +func (x *SdkInspectScheduleResponse) Reset() { + *x = SdkInspectScheduleResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_api_proto_msgTypes[203] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SdkInspectScheduleResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SdkInspectScheduleResponse) ProtoMessage() {} + +func (x *SdkInspectScheduleResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_api_proto_msgTypes[203] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SdkInspectScheduleResponse.ProtoReflect.Descriptor instead. +func (*SdkInspectScheduleResponse) Descriptor() ([]byte, []int) { + return file_api_api_proto_rawDescGZIP(), []int{203} +} + +func (x *SdkInspectScheduleResponse) GetSchedule() *Schedule { + if x != nil { + return x.Schedule + } + return nil +} + +// Defines a request to enumerate all schedules of a type +type SdkEnumerateSchedulesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Type is schedule type + Type Job_Type `protobuf:"varint,1,opt,name=type,proto3,enum=openstorage.api.Job_Type" json:"type,omitempty"` +} + +func (x *SdkEnumerateSchedulesRequest) Reset() { + *x = SdkEnumerateSchedulesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_api_proto_msgTypes[204] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SdkEnumerateSchedulesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SdkEnumerateSchedulesRequest) ProtoMessage() {} + +func (x *SdkEnumerateSchedulesRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_api_proto_msgTypes[204] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SdkEnumerateSchedulesRequest.ProtoReflect.Descriptor instead. +func (*SdkEnumerateSchedulesRequest) Descriptor() ([]byte, []int) { + return file_api_api_proto_rawDescGZIP(), []int{204} +} + +func (x *SdkEnumerateSchedulesRequest) GetType() Job_Type { + if x != nil { + return x.Type + } + return Job_UNSPECIFIED_TYPE +} + +// Defines a response containing list of schedules +type SdkEnumerateSchedulesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Schedules []*Schedule `protobuf:"bytes,1,rep,name=schedules,proto3" json:"schedules,omitempty"` +} + +func (x *SdkEnumerateSchedulesResponse) Reset() { + *x = SdkEnumerateSchedulesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_api_proto_msgTypes[205] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SdkEnumerateSchedulesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SdkEnumerateSchedulesResponse) ProtoMessage() {} + +func (x *SdkEnumerateSchedulesResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_api_proto_msgTypes[205] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SdkEnumerateSchedulesResponse.ProtoReflect.Descriptor instead. +func (*SdkEnumerateSchedulesResponse) Descriptor() ([]byte, []int) { + return file_api_api_proto_rawDescGZIP(), []int{205} +} + +func (x *SdkEnumerateSchedulesResponse) GetSchedules() []*Schedule { + if x != nil { + return x.Schedules + } + return nil +} + +// Defines a request to delete a schedule +type SdkDeleteScheduleRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ID of the schedule + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Type is schedule type + Type Job_Type `protobuf:"varint,2,opt,name=type,proto3,enum=openstorage.api.Job_Type" json:"type,omitempty"` +} + +func (x *SdkDeleteScheduleRequest) Reset() { + *x = SdkDeleteScheduleRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_api_proto_msgTypes[206] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SdkDeleteScheduleRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SdkDeleteScheduleRequest) ProtoMessage() {} + +func (x *SdkDeleteScheduleRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_api_proto_msgTypes[206] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SdkDeleteScheduleRequest.ProtoReflect.Descriptor instead. +func (*SdkDeleteScheduleRequest) Descriptor() ([]byte, []int) { + return file_api_api_proto_rawDescGZIP(), []int{206} +} + +func (x *SdkDeleteScheduleRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *SdkDeleteScheduleRequest) GetType() Job_Type { + if x != nil { + return x.Type + } + return Job_UNSPECIFIED_TYPE +} + +// Empty response +type SdkDeleteScheduleResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *SdkDeleteScheduleResponse) Reset() { + *x = SdkDeleteScheduleResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_api_proto_msgTypes[207] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SdkDeleteScheduleResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SdkDeleteScheduleResponse) ProtoMessage() {} + +func (x *SdkDeleteScheduleResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_api_proto_msgTypes[207] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SdkDeleteScheduleResponse.ProtoReflect.Descriptor instead. +func (*SdkDeleteScheduleResponse) Descriptor() ([]byte, []int) { + return file_api_api_proto_rawDescGZIP(), []int{207} +} + // Defines a response for an SDK request that spins up a new job // to perform the request type SdkJobResponse struct { @@ -18771,7 +19200,7 @@ type SdkJobResponse struct { func (x *SdkJobResponse) Reset() { *x = SdkJobResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[201] + mi := &file_api_api_proto_msgTypes[208] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18784,7 +19213,7 @@ func (x *SdkJobResponse) String() string { func (*SdkJobResponse) ProtoMessage() {} func (x *SdkJobResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[201] + mi := &file_api_api_proto_msgTypes[208] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18797,7 +19226,7 @@ func (x *SdkJobResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkJobResponse.ProtoReflect.Descriptor instead. func (*SdkJobResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{201} + return file_api_api_proto_rawDescGZIP(), []int{208} } func (x *SdkJobResponse) GetJob() *Job { @@ -18817,7 +19246,7 @@ type NodeDrainAttachmentOptions struct { func (x *NodeDrainAttachmentOptions) Reset() { *x = NodeDrainAttachmentOptions{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[202] + mi := &file_api_api_proto_msgTypes[209] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18830,7 +19259,7 @@ func (x *NodeDrainAttachmentOptions) String() string { func (*NodeDrainAttachmentOptions) ProtoMessage() {} func (x *NodeDrainAttachmentOptions) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[202] + mi := &file_api_api_proto_msgTypes[209] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18843,7 +19272,7 @@ func (x *NodeDrainAttachmentOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use NodeDrainAttachmentOptions.ProtoReflect.Descriptor instead. func (*NodeDrainAttachmentOptions) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{202} + return file_api_api_proto_rawDescGZIP(), []int{209} } // Defines a node drain volume attachments request @@ -18871,7 +19300,7 @@ type SdkNodeDrainAttachmentsRequest struct { func (x *SdkNodeDrainAttachmentsRequest) Reset() { *x = SdkNodeDrainAttachmentsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[203] + mi := &file_api_api_proto_msgTypes[210] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18884,7 +19313,7 @@ func (x *SdkNodeDrainAttachmentsRequest) String() string { func (*SdkNodeDrainAttachmentsRequest) ProtoMessage() {} func (x *SdkNodeDrainAttachmentsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[203] + mi := &file_api_api_proto_msgTypes[210] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18897,7 +19326,7 @@ func (x *SdkNodeDrainAttachmentsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkNodeDrainAttachmentsRequest.ProtoReflect.Descriptor instead. func (*SdkNodeDrainAttachmentsRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{203} + return file_api_api_proto_rawDescGZIP(), []int{210} } func (x *SdkNodeDrainAttachmentsRequest) GetNodeId() string { @@ -18954,7 +19383,7 @@ type NodeDrainAttachmentsJob struct { func (x *NodeDrainAttachmentsJob) Reset() { *x = NodeDrainAttachmentsJob{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[204] + mi := &file_api_api_proto_msgTypes[211] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18967,7 +19396,7 @@ func (x *NodeDrainAttachmentsJob) String() string { func (*NodeDrainAttachmentsJob) ProtoMessage() {} func (x *NodeDrainAttachmentsJob) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[204] + mi := &file_api_api_proto_msgTypes[211] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18980,7 +19409,7 @@ func (x *NodeDrainAttachmentsJob) ProtoReflect() protoreflect.Message { // Deprecated: Use NodeDrainAttachmentsJob.ProtoReflect.Descriptor instead. func (*NodeDrainAttachmentsJob) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{204} + return file_api_api_proto_rawDescGZIP(), []int{211} } func (x *NodeDrainAttachmentsJob) GetNodeId() string { @@ -19041,7 +19470,7 @@ type CloudDriveTransferJob struct { func (x *CloudDriveTransferJob) Reset() { *x = CloudDriveTransferJob{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[205] + mi := &file_api_api_proto_msgTypes[212] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19054,7 +19483,7 @@ func (x *CloudDriveTransferJob) String() string { func (*CloudDriveTransferJob) ProtoMessage() {} func (x *CloudDriveTransferJob) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[205] + mi := &file_api_api_proto_msgTypes[212] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19067,7 +19496,7 @@ func (x *CloudDriveTransferJob) ProtoReflect() protoreflect.Message { // Deprecated: Use CloudDriveTransferJob.ProtoReflect.Descriptor instead. func (*CloudDriveTransferJob) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{205} + return file_api_api_proto_rawDescGZIP(), []int{212} } func (x *CloudDriveTransferJob) GetSourceDrivesetId() string { @@ -19105,7 +19534,7 @@ type CollectDiagsJob struct { func (x *CollectDiagsJob) Reset() { *x = CollectDiagsJob{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[206] + mi := &file_api_api_proto_msgTypes[213] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19118,7 +19547,7 @@ func (x *CollectDiagsJob) String() string { func (*CollectDiagsJob) ProtoMessage() {} func (x *CollectDiagsJob) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[206] + mi := &file_api_api_proto_msgTypes[213] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19131,7 +19560,7 @@ func (x *CollectDiagsJob) ProtoReflect() protoreflect.Message { // Deprecated: Use CollectDiagsJob.ProtoReflect.Descriptor instead. func (*CollectDiagsJob) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{206} + return file_api_api_proto_rawDescGZIP(), []int{213} } func (x *CollectDiagsJob) GetRequest() *SdkDiagsCollectRequest { @@ -19154,8 +19583,8 @@ type DefragJob struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // MaxDurationHours defines the time limit in hours - MaxDurationHours float64 `protobuf:"fixed64,1,opt,name=max_duration_hours,json=maxDurationHours,proto3" json:"max_duration_hours,omitempty"` + // MaxDurationMinutes defines the time limit in minutes + MaxDurationMinutes uint32 `protobuf:"varint,1,opt,name=max_duration_minutes,json=maxDurationMinutes,proto3" json:"max_duration_minutes,omitempty"` // MaxNodesInParallel defines the maximum number of nodes running the defrag job in parallel MaxNodesInParallel uint32 `protobuf:"varint,2,opt,name=max_nodes_in_parallel,json=maxNodesInParallel,proto3" json:"max_nodes_in_parallel,omitempty"` // IncludeNodes is a list of node UUID: if provided, will only run the job on these nodes; @@ -19166,20 +19595,22 @@ type DefragJob struct { // if not provided, will run on all nodes // cannot coexist with IncludeNodes ExcludeNodes []string `protobuf:"bytes,4,rep,name=exclude_nodes,json=excludeNodes,proto3" json:"exclude_nodes,omitempty"` - // NodeSelector is a list of node label `key=value` pairs separated by comma, + // NodeSelector is a list of node label `key=value` pairs, // which selects the nodes to be run on for the job // can coexist with ExcludeNodes but cannot coexist with IncludeNodes - NodeSelector []string `protobuf:"bytes,5,rep,name=node_selector,json=nodeSelector,proto3" json:"node_selector,omitempty"` + NodeSelector []*LabelSelectorRequirement `protobuf:"bytes,5,rep,name=node_selector,json=nodeSelector,proto3" json:"node_selector,omitempty"` // CurrentRunningNodes stores the nodes on which the job is currently running CurrentRunningNodes []string `protobuf:"bytes,6,rep,name=current_running_nodes,json=currentRunningNodes,proto3" json:"current_running_nodes,omitempty"` // ScheduleId is the ID of the schedule which started this job ScheduleId string `protobuf:"bytes,7,opt,name=schedule_id,json=scheduleId,proto3" json:"schedule_id,omitempty"` + // ScheduleOneIterationOnly is true when the defragJob is run by a one-iteration-only schedule + ScheduleOneIterationOnly bool `protobuf:"varint,8,opt,name=schedule_one_iteration_only,json=scheduleOneIterationOnly,proto3" json:"schedule_one_iteration_only,omitempty"` } func (x *DefragJob) Reset() { *x = DefragJob{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[207] + mi := &file_api_api_proto_msgTypes[214] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19192,7 +19623,7 @@ func (x *DefragJob) String() string { func (*DefragJob) ProtoMessage() {} func (x *DefragJob) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[207] + mi := &file_api_api_proto_msgTypes[214] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19205,12 +19636,12 @@ func (x *DefragJob) ProtoReflect() protoreflect.Message { // Deprecated: Use DefragJob.ProtoReflect.Descriptor instead. func (*DefragJob) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{207} + return file_api_api_proto_rawDescGZIP(), []int{214} } -func (x *DefragJob) GetMaxDurationHours() float64 { +func (x *DefragJob) GetMaxDurationMinutes() uint32 { if x != nil { - return x.MaxDurationHours + return x.MaxDurationMinutes } return 0 } @@ -19236,7 +19667,7 @@ func (x *DefragJob) GetExcludeNodes() []string { return nil } -func (x *DefragJob) GetNodeSelector() []string { +func (x *DefragJob) GetNodeSelector() []*LabelSelectorRequirement { if x != nil { return x.NodeSelector } @@ -19257,6 +19688,13 @@ func (x *DefragJob) GetScheduleId() string { return "" } +func (x *DefragJob) GetScheduleOneIterationOnly() bool { + if x != nil { + return x.ScheduleOneIterationOnly + } + return false +} + // DefragNodeStatus describes the defragmentation status of a node type DefragNodeStatus struct { state protoimpl.MessageState @@ -19267,12 +19705,14 @@ type DefragNodeStatus struct { PoolStatus map[string]*DefragPoolStatus `protobuf:"bytes,1,rep,name=pool_status,json=poolStatus,proto3" json:"pool_status,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // RunningSchedule is the defrag schedule being run on the node RunningSchedule string `protobuf:"bytes,2,opt,name=running_schedule,json=runningSchedule,proto3" json:"running_schedule,omitempty"` + // LastUpdateTime is the time when DefragNodeStatus or any DefragPoolStatus was last updated on this node + LastUpdateTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=last_update_time,json=lastUpdateTime,proto3" json:"last_update_time,omitempty"` } func (x *DefragNodeStatus) Reset() { *x = DefragNodeStatus{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[208] + mi := &file_api_api_proto_msgTypes[215] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19285,7 +19725,7 @@ func (x *DefragNodeStatus) String() string { func (*DefragNodeStatus) ProtoMessage() {} func (x *DefragNodeStatus) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[208] + mi := &file_api_api_proto_msgTypes[215] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19298,7 +19738,7 @@ func (x *DefragNodeStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use DefragNodeStatus.ProtoReflect.Descriptor instead. func (*DefragNodeStatus) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{208} + return file_api_api_proto_rawDescGZIP(), []int{215} } func (x *DefragNodeStatus) GetPoolStatus() map[string]*DefragPoolStatus { @@ -19315,6 +19755,13 @@ func (x *DefragNodeStatus) GetRunningSchedule() string { return "" } +func (x *DefragNodeStatus) GetLastUpdateTime() *timestamppb.Timestamp { + if x != nil { + return x.LastUpdateTime + } + return nil +} + // DefragNodeStatus describes the defragmentation status of a pool type DefragPoolStatus struct { state protoimpl.MessageState @@ -19339,13 +19786,13 @@ type DefragPoolStatus struct { LastOffset int64 `protobuf:"varint,7,opt,name=last_offset,json=lastOffset,proto3" json:"last_offset,omitempty"` // ProgressPercentage describes the progress of the lastest defrag job (current or last run) on this pool // percentage = bytes completed / sum of file sizes - ProgressPercentage int32 `protobuf:"varint,8,opt,name=progress_percentage,json=progressPercentage,proto3" json:"progress_percentage,omitempty"` + ProgressPercentage uint32 `protobuf:"varint,8,opt,name=progress_percentage,json=progressPercentage,proto3" json:"progress_percentage,omitempty"` } func (x *DefragPoolStatus) Reset() { *x = DefragPoolStatus{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[209] + mi := &file_api_api_proto_msgTypes[216] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19358,7 +19805,7 @@ func (x *DefragPoolStatus) String() string { func (*DefragPoolStatus) ProtoMessage() {} func (x *DefragPoolStatus) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[209] + mi := &file_api_api_proto_msgTypes[216] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19371,7 +19818,7 @@ func (x *DefragPoolStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use DefragPoolStatus.ProtoReflect.Descriptor instead. func (*DefragPoolStatus) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{209} + return file_api_api_proto_rawDescGZIP(), []int{216} } func (x *DefragPoolStatus) GetNumIterations() uint32 { @@ -19423,13 +19870,415 @@ func (x *DefragPoolStatus) GetLastOffset() int64 { return 0 } -func (x *DefragPoolStatus) GetProgressPercentage() int32 { +func (x *DefragPoolStatus) GetProgressPercentage() uint32 { if x != nil { return x.ProgressPercentage } return 0 } +// Defines a request to create a defrag schedule +type SdkCreateDefragScheduleRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // DefragTask is the defragmentation task run by the schedule + DefragTask *DefragJob `protobuf:"bytes,1,opt,name=defrag_task,json=defragTask,proto3" json:"defrag_task,omitempty"` + // StartTime is the scheduled time to start a run + // Valid formats: + // daily=HH:mm e.g. daily=19:15 + // weekly=weekday@HH:mm e.g. weekly=Sunday@19:15 + // monthly=dd@HH:mm e.g. monthly=22@19:15 + StartTime string `protobuf:"bytes,2,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` +} + +func (x *SdkCreateDefragScheduleRequest) Reset() { + *x = SdkCreateDefragScheduleRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_api_proto_msgTypes[217] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SdkCreateDefragScheduleRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SdkCreateDefragScheduleRequest) ProtoMessage() {} + +func (x *SdkCreateDefragScheduleRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_api_proto_msgTypes[217] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SdkCreateDefragScheduleRequest.ProtoReflect.Descriptor instead. +func (*SdkCreateDefragScheduleRequest) Descriptor() ([]byte, []int) { + return file_api_api_proto_rawDescGZIP(), []int{217} +} + +func (x *SdkCreateDefragScheduleRequest) GetDefragTask() *DefragJob { + if x != nil { + return x.DefragTask + } + return nil +} + +func (x *SdkCreateDefragScheduleRequest) GetStartTime() string { + if x != nil { + return x.StartTime + } + return "" +} + +// Defines a response of defrag schedule creation +type SdkCreateDefragScheduleResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Schedule is the newly created schedule + Schedule *Schedule `protobuf:"bytes,1,opt,name=schedule,proto3" json:"schedule,omitempty"` +} + +func (x *SdkCreateDefragScheduleResponse) Reset() { + *x = SdkCreateDefragScheduleResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_api_proto_msgTypes[218] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SdkCreateDefragScheduleResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SdkCreateDefragScheduleResponse) ProtoMessage() {} + +func (x *SdkCreateDefragScheduleResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_api_proto_msgTypes[218] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SdkCreateDefragScheduleResponse.ProtoReflect.Descriptor instead. +func (*SdkCreateDefragScheduleResponse) Descriptor() ([]byte, []int) { + return file_api_api_proto_rawDescGZIP(), []int{218} +} + +func (x *SdkCreateDefragScheduleResponse) GetSchedule() *Schedule { + if x != nil { + return x.Schedule + } + return nil +} + +// Defines a request to clean up defrag schedules +type SdkCleanUpDefragSchedulesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *SdkCleanUpDefragSchedulesRequest) Reset() { + *x = SdkCleanUpDefragSchedulesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_api_proto_msgTypes[219] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SdkCleanUpDefragSchedulesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SdkCleanUpDefragSchedulesRequest) ProtoMessage() {} + +func (x *SdkCleanUpDefragSchedulesRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_api_proto_msgTypes[219] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SdkCleanUpDefragSchedulesRequest.ProtoReflect.Descriptor instead. +func (*SdkCleanUpDefragSchedulesRequest) Descriptor() ([]byte, []int) { + return file_api_api_proto_rawDescGZIP(), []int{219} +} + +// Defines a response of defrag schedules clean-up +type SdkCleanUpDefragSchedulesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *SdkCleanUpDefragSchedulesResponse) Reset() { + *x = SdkCleanUpDefragSchedulesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_api_proto_msgTypes[220] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SdkCleanUpDefragSchedulesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SdkCleanUpDefragSchedulesResponse) ProtoMessage() {} + +func (x *SdkCleanUpDefragSchedulesResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_api_proto_msgTypes[220] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SdkCleanUpDefragSchedulesResponse.ProtoReflect.Descriptor instead. +func (*SdkCleanUpDefragSchedulesResponse) Descriptor() ([]byte, []int) { + return file_api_api_proto_rawDescGZIP(), []int{220} +} + +// Defines a request to query defrag status of a node +type SdkGetDefragNodeStatusRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // NodeId is uuid of the node + NodeId string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` +} + +func (x *SdkGetDefragNodeStatusRequest) Reset() { + *x = SdkGetDefragNodeStatusRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_api_proto_msgTypes[221] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SdkGetDefragNodeStatusRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SdkGetDefragNodeStatusRequest) ProtoMessage() {} + +func (x *SdkGetDefragNodeStatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_api_proto_msgTypes[221] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SdkGetDefragNodeStatusRequest.ProtoReflect.Descriptor instead. +func (*SdkGetDefragNodeStatusRequest) Descriptor() ([]byte, []int) { + return file_api_api_proto_rawDescGZIP(), []int{221} +} + +func (x *SdkGetDefragNodeStatusRequest) GetNodeId() string { + if x != nil { + return x.NodeId + } + return "" +} + +// Defines a response of defrag node status +type SdkGetDefragNodeStatusResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // DefragNodeStatus stores the defrag status of the node + DefragNodeStatus *DefragNodeStatus `protobuf:"bytes,1,opt,name=defrag_node_status,json=defragNodeStatus,proto3" json:"defrag_node_status,omitempty"` + // DataIp is the IP address of this node + DataIp string `protobuf:"bytes,2,opt,name=data_ip,json=dataIp,proto3" json:"data_ip,omitempty"` + // SchedulerNodeName is name of the node in scheduler context + SchedulerNodeName string `protobuf:"bytes,3,opt,name=scheduler_node_name,json=schedulerNodeName,proto3" json:"scheduler_node_name,omitempty"` + // PoolUsage is a map with pool UUID as the key and pool usage percentage as the value + PoolUsage map[string]uint32 `protobuf:"bytes,4,rep,name=pool_usage,json=poolUsage,proto3" json:"pool_usage,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *SdkGetDefragNodeStatusResponse) Reset() { + *x = SdkGetDefragNodeStatusResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_api_proto_msgTypes[222] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SdkGetDefragNodeStatusResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SdkGetDefragNodeStatusResponse) ProtoMessage() {} + +func (x *SdkGetDefragNodeStatusResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_api_proto_msgTypes[222] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SdkGetDefragNodeStatusResponse.ProtoReflect.Descriptor instead. +func (*SdkGetDefragNodeStatusResponse) Descriptor() ([]byte, []int) { + return file_api_api_proto_rawDescGZIP(), []int{222} +} + +func (x *SdkGetDefragNodeStatusResponse) GetDefragNodeStatus() *DefragNodeStatus { + if x != nil { + return x.DefragNodeStatus + } + return nil +} + +func (x *SdkGetDefragNodeStatusResponse) GetDataIp() string { + if x != nil { + return x.DataIp + } + return "" +} + +func (x *SdkGetDefragNodeStatusResponse) GetSchedulerNodeName() string { + if x != nil { + return x.SchedulerNodeName + } + return "" +} + +func (x *SdkGetDefragNodeStatusResponse) GetPoolUsage() map[string]uint32 { + if x != nil { + return x.PoolUsage + } + return nil +} + +// Defines a request to get defrag status of the entire cluster +type SdkEnumerateDefragStatusRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *SdkEnumerateDefragStatusRequest) Reset() { + *x = SdkEnumerateDefragStatusRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_api_proto_msgTypes[223] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SdkEnumerateDefragStatusRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SdkEnumerateDefragStatusRequest) ProtoMessage() {} + +func (x *SdkEnumerateDefragStatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_api_proto_msgTypes[223] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SdkEnumerateDefragStatusRequest.ProtoReflect.Descriptor instead. +func (*SdkEnumerateDefragStatusRequest) Descriptor() ([]byte, []int) { + return file_api_api_proto_rawDescGZIP(), []int{223} +} + +// Defines a response of defrag status of the entire cluster +type SdkEnumerateDefragStatusResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Status is a map with node uuid as the key and defrag node status as the value + Status map[string]*SdkGetDefragNodeStatusResponse `protobuf:"bytes,1,rep,name=status,proto3" json:"status,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *SdkEnumerateDefragStatusResponse) Reset() { + *x = SdkEnumerateDefragStatusResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_api_proto_msgTypes[224] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SdkEnumerateDefragStatusResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SdkEnumerateDefragStatusResponse) ProtoMessage() {} + +func (x *SdkEnumerateDefragStatusResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_api_proto_msgTypes[224] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SdkEnumerateDefragStatusResponse.ProtoReflect.Descriptor instead. +func (*SdkEnumerateDefragStatusResponse) Descriptor() ([]byte, []int) { + return file_api_api_proto_rawDescGZIP(), []int{224} +} + +func (x *SdkEnumerateDefragStatusResponse) GetStatus() map[string]*SdkGetDefragNodeStatusResponse { + if x != nil { + return x.Status + } + return nil +} + type DiagsCollectionStatus struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -19446,7 +20295,7 @@ type DiagsCollectionStatus struct { func (x *DiagsCollectionStatus) Reset() { *x = DiagsCollectionStatus{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[210] + mi := &file_api_api_proto_msgTypes[225] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19459,7 +20308,7 @@ func (x *DiagsCollectionStatus) String() string { func (*DiagsCollectionStatus) ProtoMessage() {} func (x *DiagsCollectionStatus) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[210] + mi := &file_api_api_proto_msgTypes[225] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19472,7 +20321,7 @@ func (x *DiagsCollectionStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use DiagsCollectionStatus.ProtoReflect.Descriptor instead. func (*DiagsCollectionStatus) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{210} + return file_api_api_proto_rawDescGZIP(), []int{225} } func (x *DiagsCollectionStatus) GetNode() string { @@ -19525,7 +20374,7 @@ type SdkDiagsCollectRequest struct { func (x *SdkDiagsCollectRequest) Reset() { *x = SdkDiagsCollectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[211] + mi := &file_api_api_proto_msgTypes[226] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19538,7 +20387,7 @@ func (x *SdkDiagsCollectRequest) String() string { func (*SdkDiagsCollectRequest) ProtoMessage() {} func (x *SdkDiagsCollectRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[211] + mi := &file_api_api_proto_msgTypes[226] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19551,7 +20400,7 @@ func (x *SdkDiagsCollectRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkDiagsCollectRequest.ProtoReflect.Descriptor instead. func (*SdkDiagsCollectRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{211} + return file_api_api_proto_rawDescGZIP(), []int{226} } func (x *SdkDiagsCollectRequest) GetNode() *DiagsNodeSelector { @@ -19616,7 +20465,7 @@ type SdkDiagsCollectResponse struct { func (x *SdkDiagsCollectResponse) Reset() { *x = SdkDiagsCollectResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[212] + mi := &file_api_api_proto_msgTypes[227] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19629,7 +20478,7 @@ func (x *SdkDiagsCollectResponse) String() string { func (*SdkDiagsCollectResponse) ProtoMessage() {} func (x *SdkDiagsCollectResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[212] + mi := &file_api_api_proto_msgTypes[227] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19642,7 +20491,7 @@ func (x *SdkDiagsCollectResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkDiagsCollectResponse.ProtoReflect.Descriptor instead. func (*SdkDiagsCollectResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{212} + return file_api_api_proto_rawDescGZIP(), []int{227} } func (x *SdkDiagsCollectResponse) GetJob() *Job { @@ -19672,7 +20521,7 @@ type DiagsNodeSelector struct { func (x *DiagsNodeSelector) Reset() { *x = DiagsNodeSelector{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[213] + mi := &file_api_api_proto_msgTypes[228] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19685,7 +20534,7 @@ func (x *DiagsNodeSelector) String() string { func (*DiagsNodeSelector) ProtoMessage() {} func (x *DiagsNodeSelector) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[213] + mi := &file_api_api_proto_msgTypes[228] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19698,7 +20547,7 @@ func (x *DiagsNodeSelector) ProtoReflect() protoreflect.Message { // Deprecated: Use DiagsNodeSelector.ProtoReflect.Descriptor instead. func (*DiagsNodeSelector) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{213} + return file_api_api_proto_rawDescGZIP(), []int{228} } func (x *DiagsNodeSelector) GetNodeLabelSelector() []*LabelSelectorRequirement { @@ -19741,7 +20590,7 @@ type DiagsVolumeSelector struct { func (x *DiagsVolumeSelector) Reset() { *x = DiagsVolumeSelector{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[214] + mi := &file_api_api_proto_msgTypes[229] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19754,7 +20603,7 @@ func (x *DiagsVolumeSelector) String() string { func (*DiagsVolumeSelector) ProtoMessage() {} func (x *DiagsVolumeSelector) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[214] + mi := &file_api_api_proto_msgTypes[229] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19767,7 +20616,7 @@ func (x *DiagsVolumeSelector) ProtoReflect() protoreflect.Message { // Deprecated: Use DiagsVolumeSelector.ProtoReflect.Descriptor instead. func (*DiagsVolumeSelector) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{214} + return file_api_api_proto_rawDescGZIP(), []int{229} } func (x *DiagsVolumeSelector) GetVolumeLabelSelector() []*LabelSelectorRequirement { @@ -19797,7 +20646,7 @@ type SdkEnumerateJobsRequest struct { func (x *SdkEnumerateJobsRequest) Reset() { *x = SdkEnumerateJobsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[215] + mi := &file_api_api_proto_msgTypes[230] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19810,7 +20659,7 @@ func (x *SdkEnumerateJobsRequest) String() string { func (*SdkEnumerateJobsRequest) ProtoMessage() {} func (x *SdkEnumerateJobsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[215] + mi := &file_api_api_proto_msgTypes[230] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19823,7 +20672,7 @@ func (x *SdkEnumerateJobsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkEnumerateJobsRequest.ProtoReflect.Descriptor instead. func (*SdkEnumerateJobsRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{215} + return file_api_api_proto_rawDescGZIP(), []int{230} } func (x *SdkEnumerateJobsRequest) GetType() Job_Type { @@ -19846,7 +20695,7 @@ type SdkEnumerateJobsResponse struct { func (x *SdkEnumerateJobsResponse) Reset() { *x = SdkEnumerateJobsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[216] + mi := &file_api_api_proto_msgTypes[231] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19859,7 +20708,7 @@ func (x *SdkEnumerateJobsResponse) String() string { func (*SdkEnumerateJobsResponse) ProtoMessage() {} func (x *SdkEnumerateJobsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[216] + mi := &file_api_api_proto_msgTypes[231] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19872,7 +20721,7 @@ func (x *SdkEnumerateJobsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkEnumerateJobsResponse.ProtoReflect.Descriptor instead. func (*SdkEnumerateJobsResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{216} + return file_api_api_proto_rawDescGZIP(), []int{231} } func (x *SdkEnumerateJobsResponse) GetJobs() []*Job { @@ -19899,7 +20748,7 @@ type SdkUpdateJobRequest struct { func (x *SdkUpdateJobRequest) Reset() { *x = SdkUpdateJobRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[217] + mi := &file_api_api_proto_msgTypes[232] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19912,7 +20761,7 @@ func (x *SdkUpdateJobRequest) String() string { func (*SdkUpdateJobRequest) ProtoMessage() {} func (x *SdkUpdateJobRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[217] + mi := &file_api_api_proto_msgTypes[232] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19925,7 +20774,7 @@ func (x *SdkUpdateJobRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkUpdateJobRequest.ProtoReflect.Descriptor instead. func (*SdkUpdateJobRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{217} + return file_api_api_proto_rawDescGZIP(), []int{232} } func (x *SdkUpdateJobRequest) GetId() string { @@ -19959,7 +20808,7 @@ type SdkUpdateJobResponse struct { func (x *SdkUpdateJobResponse) Reset() { *x = SdkUpdateJobResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[218] + mi := &file_api_api_proto_msgTypes[233] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19972,7 +20821,7 @@ func (x *SdkUpdateJobResponse) String() string { func (*SdkUpdateJobResponse) ProtoMessage() {} func (x *SdkUpdateJobResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[218] + mi := &file_api_api_proto_msgTypes[233] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19985,7 +20834,7 @@ func (x *SdkUpdateJobResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkUpdateJobResponse.ProtoReflect.Descriptor instead. func (*SdkUpdateJobResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{218} + return file_api_api_proto_rawDescGZIP(), []int{233} } // Defines a request to get the status of an existing job @@ -20003,7 +20852,7 @@ type SdkGetJobStatusRequest struct { func (x *SdkGetJobStatusRequest) Reset() { *x = SdkGetJobStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[219] + mi := &file_api_api_proto_msgTypes[234] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20016,7 +20865,7 @@ func (x *SdkGetJobStatusRequest) String() string { func (*SdkGetJobStatusRequest) ProtoMessage() {} func (x *SdkGetJobStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[219] + mi := &file_api_api_proto_msgTypes[234] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20029,7 +20878,7 @@ func (x *SdkGetJobStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkGetJobStatusRequest.ProtoReflect.Descriptor instead. func (*SdkGetJobStatusRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{219} + return file_api_api_proto_rawDescGZIP(), []int{234} } func (x *SdkGetJobStatusRequest) GetId() string { @@ -20059,7 +20908,7 @@ type JobAudit struct { func (x *JobAudit) Reset() { *x = JobAudit{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[220] + mi := &file_api_api_proto_msgTypes[235] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20072,7 +20921,7 @@ func (x *JobAudit) String() string { func (*JobAudit) ProtoMessage() {} func (x *JobAudit) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[220] + mi := &file_api_api_proto_msgTypes[235] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20085,7 +20934,7 @@ func (x *JobAudit) ProtoReflect() protoreflect.Message { // Deprecated: Use JobAudit.ProtoReflect.Descriptor instead. func (*JobAudit) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{220} + return file_api_api_proto_rawDescGZIP(), []int{235} } func (x *JobAudit) GetSummary() []*JobWorkSummary { @@ -20111,7 +20960,7 @@ type JobWorkSummary struct { func (x *JobWorkSummary) Reset() { *x = JobWorkSummary{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[221] + mi := &file_api_api_proto_msgTypes[236] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20124,7 +20973,7 @@ func (x *JobWorkSummary) String() string { func (*JobWorkSummary) ProtoMessage() {} func (x *JobWorkSummary) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[221] + mi := &file_api_api_proto_msgTypes[236] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20137,7 +20986,7 @@ func (x *JobWorkSummary) ProtoReflect() protoreflect.Message { // Deprecated: Use JobWorkSummary.ProtoReflect.Descriptor instead. func (*JobWorkSummary) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{221} + return file_api_api_proto_rawDescGZIP(), []int{236} } func (m *JobWorkSummary) GetSummary() isJobWorkSummary_Summary { @@ -20182,7 +21031,7 @@ type JobSummary struct { func (x *JobSummary) Reset() { *x = JobSummary{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[222] + mi := &file_api_api_proto_msgTypes[237] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20195,7 +21044,7 @@ func (x *JobSummary) String() string { func (*JobSummary) ProtoMessage() {} func (x *JobSummary) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[222] + mi := &file_api_api_proto_msgTypes[237] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20208,7 +21057,7 @@ func (x *JobSummary) ProtoReflect() protoreflect.Message { // Deprecated: Use JobSummary.ProtoReflect.Descriptor instead. func (*JobSummary) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{222} + return file_api_api_proto_rawDescGZIP(), []int{237} } func (x *JobSummary) GetId() string { @@ -20247,7 +21096,7 @@ type SdkGetJobStatusResponse struct { func (x *SdkGetJobStatusResponse) Reset() { *x = SdkGetJobStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[223] + mi := &file_api_api_proto_msgTypes[238] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20260,7 +21109,7 @@ func (x *SdkGetJobStatusResponse) String() string { func (*SdkGetJobStatusResponse) ProtoMessage() {} func (x *SdkGetJobStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[223] + mi := &file_api_api_proto_msgTypes[238] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20273,7 +21122,7 @@ func (x *SdkGetJobStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkGetJobStatusResponse.ProtoReflect.Descriptor instead. func (*SdkGetJobStatusResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{223} + return file_api_api_proto_rawDescGZIP(), []int{238} } func (x *SdkGetJobStatusResponse) GetJob() *Job { @@ -20308,7 +21157,7 @@ type DrainAttachmentsSummary struct { func (x *DrainAttachmentsSummary) Reset() { *x = DrainAttachmentsSummary{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[224] + mi := &file_api_api_proto_msgTypes[239] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20321,7 +21170,7 @@ func (x *DrainAttachmentsSummary) String() string { func (*DrainAttachmentsSummary) ProtoMessage() {} func (x *DrainAttachmentsSummary) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[224] + mi := &file_api_api_proto_msgTypes[239] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20334,7 +21183,7 @@ func (x *DrainAttachmentsSummary) ProtoReflect() protoreflect.Message { // Deprecated: Use DrainAttachmentsSummary.ProtoReflect.Descriptor instead. func (*DrainAttachmentsSummary) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{224} + return file_api_api_proto_rawDescGZIP(), []int{239} } func (x *DrainAttachmentsSummary) GetNumVolumesTotal() uint64 { @@ -20372,7 +21221,7 @@ type SdkNodeCordonAttachmentsRequest struct { func (x *SdkNodeCordonAttachmentsRequest) Reset() { *x = SdkNodeCordonAttachmentsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[225] + mi := &file_api_api_proto_msgTypes[240] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20385,7 +21234,7 @@ func (x *SdkNodeCordonAttachmentsRequest) String() string { func (*SdkNodeCordonAttachmentsRequest) ProtoMessage() {} func (x *SdkNodeCordonAttachmentsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[225] + mi := &file_api_api_proto_msgTypes[240] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20398,7 +21247,7 @@ func (x *SdkNodeCordonAttachmentsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkNodeCordonAttachmentsRequest.ProtoReflect.Descriptor instead. func (*SdkNodeCordonAttachmentsRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{225} + return file_api_api_proto_rawDescGZIP(), []int{240} } func (x *SdkNodeCordonAttachmentsRequest) GetNodeId() string { @@ -20419,7 +21268,7 @@ type SdkNodeCordonAttachmentsResponse struct { func (x *SdkNodeCordonAttachmentsResponse) Reset() { *x = SdkNodeCordonAttachmentsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[226] + mi := &file_api_api_proto_msgTypes[241] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20432,7 +21281,7 @@ func (x *SdkNodeCordonAttachmentsResponse) String() string { func (*SdkNodeCordonAttachmentsResponse) ProtoMessage() {} func (x *SdkNodeCordonAttachmentsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[226] + mi := &file_api_api_proto_msgTypes[241] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20445,7 +21294,7 @@ func (x *SdkNodeCordonAttachmentsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkNodeCordonAttachmentsResponse.ProtoReflect.Descriptor instead. func (*SdkNodeCordonAttachmentsResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{226} + return file_api_api_proto_rawDescGZIP(), []int{241} } // SdkNodeUncordonAttachmentsRequest request for re-enabling volume @@ -20462,7 +21311,7 @@ type SdkNodeUncordonAttachmentsRequest struct { func (x *SdkNodeUncordonAttachmentsRequest) Reset() { *x = SdkNodeUncordonAttachmentsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[227] + mi := &file_api_api_proto_msgTypes[242] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20475,7 +21324,7 @@ func (x *SdkNodeUncordonAttachmentsRequest) String() string { func (*SdkNodeUncordonAttachmentsRequest) ProtoMessage() {} func (x *SdkNodeUncordonAttachmentsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[227] + mi := &file_api_api_proto_msgTypes[242] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20488,7 +21337,7 @@ func (x *SdkNodeUncordonAttachmentsRequest) ProtoReflect() protoreflect.Message // Deprecated: Use SdkNodeUncordonAttachmentsRequest.ProtoReflect.Descriptor instead. func (*SdkNodeUncordonAttachmentsRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{227} + return file_api_api_proto_rawDescGZIP(), []int{242} } func (x *SdkNodeUncordonAttachmentsRequest) GetNodeId() string { @@ -20509,7 +21358,7 @@ type SdkNodeUncordonAttachmentsResponse struct { func (x *SdkNodeUncordonAttachmentsResponse) Reset() { *x = SdkNodeUncordonAttachmentsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[228] + mi := &file_api_api_proto_msgTypes[243] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20522,7 +21371,7 @@ func (x *SdkNodeUncordonAttachmentsResponse) String() string { func (*SdkNodeUncordonAttachmentsResponse) ProtoMessage() {} func (x *SdkNodeUncordonAttachmentsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[228] + mi := &file_api_api_proto_msgTypes[243] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20535,7 +21384,7 @@ func (x *SdkNodeUncordonAttachmentsResponse) ProtoReflect() protoreflect.Message // Deprecated: Use SdkNodeUncordonAttachmentsResponse.ProtoReflect.Descriptor instead. func (*SdkNodeUncordonAttachmentsResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{228} + return file_api_api_proto_rawDescGZIP(), []int{243} } // Defines a request when inspect a storage pool @@ -20557,12 +21406,14 @@ type SdkStoragePoolResizeRequest struct { OperationType SdkStoragePool_ResizeOperationType `protobuf:"varint,3,opt,name=operation_type,json=operationType,proto3,enum=openstorage.api.SdkStoragePool_ResizeOperationType" json:"operation_type,omitempty"` // SkipWaitForCleanVolumes would skip the wait for all volumes on the pool to be clean before doing a resize SkipWaitForCleanVolumes bool `protobuf:"varint,4,opt,name=skip_wait_for_clean_volumes,json=skipWaitForCleanVolumes,proto3" json:"skip_wait_for_clean_volumes,omitempty"` + // ForceAddDrive would force pool expand with add drive for the storage pool + ForceAddDrive bool `protobuf:"varint,5,opt,name=force_add_drive,json=forceAddDrive,proto3" json:"force_add_drive,omitempty"` } func (x *SdkStoragePoolResizeRequest) Reset() { *x = SdkStoragePoolResizeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[229] + mi := &file_api_api_proto_msgTypes[244] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20575,7 +21426,7 @@ func (x *SdkStoragePoolResizeRequest) String() string { func (*SdkStoragePoolResizeRequest) ProtoMessage() {} func (x *SdkStoragePoolResizeRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[229] + mi := &file_api_api_proto_msgTypes[244] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20588,7 +21439,7 @@ func (x *SdkStoragePoolResizeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkStoragePoolResizeRequest.ProtoReflect.Descriptor instead. func (*SdkStoragePoolResizeRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{229} + return file_api_api_proto_rawDescGZIP(), []int{244} } func (x *SdkStoragePoolResizeRequest) GetUuid() string { @@ -20633,6 +21484,13 @@ func (x *SdkStoragePoolResizeRequest) GetSkipWaitForCleanVolumes() bool { return false } +func (x *SdkStoragePoolResizeRequest) GetForceAddDrive() bool { + if x != nil { + return x.ForceAddDrive + } + return false +} + type isSdkStoragePoolResizeRequest_ResizeFactor interface { isSdkStoragePoolResizeRequest_ResizeFactor() } @@ -20673,7 +21531,7 @@ type StorageRebalanceTriggerThreshold struct { func (x *StorageRebalanceTriggerThreshold) Reset() { *x = StorageRebalanceTriggerThreshold{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[230] + mi := &file_api_api_proto_msgTypes[245] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20686,7 +21544,7 @@ func (x *StorageRebalanceTriggerThreshold) String() string { func (*StorageRebalanceTriggerThreshold) ProtoMessage() {} func (x *StorageRebalanceTriggerThreshold) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[230] + mi := &file_api_api_proto_msgTypes[245] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20699,7 +21557,7 @@ func (x *StorageRebalanceTriggerThreshold) ProtoReflect() protoreflect.Message { // Deprecated: Use StorageRebalanceTriggerThreshold.ProtoReflect.Descriptor instead. func (*StorageRebalanceTriggerThreshold) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{230} + return file_api_api_proto_rawDescGZIP(), []int{245} } func (x *StorageRebalanceTriggerThreshold) GetType() StorageRebalanceTriggerThreshold_Type { @@ -20761,7 +21619,7 @@ type SdkStorageRebalanceRequest struct { func (x *SdkStorageRebalanceRequest) Reset() { *x = SdkStorageRebalanceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[231] + mi := &file_api_api_proto_msgTypes[246] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20774,7 +21632,7 @@ func (x *SdkStorageRebalanceRequest) String() string { func (*SdkStorageRebalanceRequest) ProtoMessage() {} func (x *SdkStorageRebalanceRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[231] + mi := &file_api_api_proto_msgTypes[246] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20787,7 +21645,7 @@ func (x *SdkStorageRebalanceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkStorageRebalanceRequest.ProtoReflect.Descriptor instead. func (*SdkStorageRebalanceRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{231} + return file_api_api_proto_rawDescGZIP(), []int{246} } func (x *SdkStorageRebalanceRequest) GetTriggerThresholds() []*StorageRebalanceTriggerThreshold { @@ -20856,7 +21714,7 @@ type SdkStorageRebalanceResponse struct { func (x *SdkStorageRebalanceResponse) Reset() { *x = SdkStorageRebalanceResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[232] + mi := &file_api_api_proto_msgTypes[247] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20869,7 +21727,7 @@ func (x *SdkStorageRebalanceResponse) String() string { func (*SdkStorageRebalanceResponse) ProtoMessage() {} func (x *SdkStorageRebalanceResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[232] + mi := &file_api_api_proto_msgTypes[247] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20882,7 +21740,7 @@ func (x *SdkStorageRebalanceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkStorageRebalanceResponse.ProtoReflect.Descriptor instead. func (*SdkStorageRebalanceResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{232} + return file_api_api_proto_rawDescGZIP(), []int{247} } func (x *SdkStorageRebalanceResponse) GetJob() *StorageRebalanceJob { @@ -20929,7 +21787,7 @@ type StorageRebalanceJob struct { func (x *StorageRebalanceJob) Reset() { *x = StorageRebalanceJob{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[233] + mi := &file_api_api_proto_msgTypes[248] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20942,7 +21800,7 @@ func (x *StorageRebalanceJob) String() string { func (*StorageRebalanceJob) ProtoMessage() {} func (x *StorageRebalanceJob) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[233] + mi := &file_api_api_proto_msgTypes[248] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20955,7 +21813,7 @@ func (x *StorageRebalanceJob) ProtoReflect() protoreflect.Message { // Deprecated: Use StorageRebalanceJob.ProtoReflect.Descriptor instead. func (*StorageRebalanceJob) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{233} + return file_api_api_proto_rawDescGZIP(), []int{248} } func (x *StorageRebalanceJob) GetId() string { @@ -21015,7 +21873,7 @@ type StorageRebalanceSummary struct { func (x *StorageRebalanceSummary) Reset() { *x = StorageRebalanceSummary{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[234] + mi := &file_api_api_proto_msgTypes[249] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21028,7 +21886,7 @@ func (x *StorageRebalanceSummary) String() string { func (*StorageRebalanceSummary) ProtoMessage() {} func (x *StorageRebalanceSummary) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[234] + mi := &file_api_api_proto_msgTypes[249] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21041,7 +21899,7 @@ func (x *StorageRebalanceSummary) ProtoReflect() protoreflect.Message { // Deprecated: Use StorageRebalanceSummary.ProtoReflect.Descriptor instead. func (*StorageRebalanceSummary) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{234} + return file_api_api_proto_rawDescGZIP(), []int{249} } func (x *StorageRebalanceSummary) GetTotalRunTimeSeconds() uint64 { @@ -21074,7 +21932,7 @@ type StorageRebalanceWorkSummary struct { func (x *StorageRebalanceWorkSummary) Reset() { *x = StorageRebalanceWorkSummary{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[235] + mi := &file_api_api_proto_msgTypes[250] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21087,7 +21945,7 @@ func (x *StorageRebalanceWorkSummary) String() string { func (*StorageRebalanceWorkSummary) ProtoMessage() {} func (x *StorageRebalanceWorkSummary) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[235] + mi := &file_api_api_proto_msgTypes[250] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21100,7 +21958,7 @@ func (x *StorageRebalanceWorkSummary) ProtoReflect() protoreflect.Message { // Deprecated: Use StorageRebalanceWorkSummary.ProtoReflect.Descriptor instead. func (*StorageRebalanceWorkSummary) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{235} + return file_api_api_proto_rawDescGZIP(), []int{250} } func (x *StorageRebalanceWorkSummary) GetType() StorageRebalanceWorkSummary_Type { @@ -21155,7 +22013,7 @@ type StorageRebalanceAudit struct { func (x *StorageRebalanceAudit) Reset() { *x = StorageRebalanceAudit{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[236] + mi := &file_api_api_proto_msgTypes[251] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21168,7 +22026,7 @@ func (x *StorageRebalanceAudit) String() string { func (*StorageRebalanceAudit) ProtoMessage() {} func (x *StorageRebalanceAudit) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[236] + mi := &file_api_api_proto_msgTypes[251] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21181,7 +22039,7 @@ func (x *StorageRebalanceAudit) ProtoReflect() protoreflect.Message { // Deprecated: Use StorageRebalanceAudit.ProtoReflect.Descriptor instead. func (*StorageRebalanceAudit) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{236} + return file_api_api_proto_rawDescGZIP(), []int{251} } func (x *StorageRebalanceAudit) GetVolumeId() string { @@ -21268,7 +22126,7 @@ type SdkUpdateRebalanceJobRequest struct { func (x *SdkUpdateRebalanceJobRequest) Reset() { *x = SdkUpdateRebalanceJobRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[237] + mi := &file_api_api_proto_msgTypes[252] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21281,7 +22139,7 @@ func (x *SdkUpdateRebalanceJobRequest) String() string { func (*SdkUpdateRebalanceJobRequest) ProtoMessage() {} func (x *SdkUpdateRebalanceJobRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[237] + mi := &file_api_api_proto_msgTypes[252] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21294,7 +22152,7 @@ func (x *SdkUpdateRebalanceJobRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkUpdateRebalanceJobRequest.ProtoReflect.Descriptor instead. func (*SdkUpdateRebalanceJobRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{237} + return file_api_api_proto_rawDescGZIP(), []int{252} } func (x *SdkUpdateRebalanceJobRequest) GetId() string { @@ -21320,7 +22178,7 @@ type SdkUpdateRebalanceJobResponse struct { func (x *SdkUpdateRebalanceJobResponse) Reset() { *x = SdkUpdateRebalanceJobResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[238] + mi := &file_api_api_proto_msgTypes[253] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21333,7 +22191,7 @@ func (x *SdkUpdateRebalanceJobResponse) String() string { func (*SdkUpdateRebalanceJobResponse) ProtoMessage() {} func (x *SdkUpdateRebalanceJobResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[238] + mi := &file_api_api_proto_msgTypes[253] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21346,7 +22204,7 @@ func (x *SdkUpdateRebalanceJobResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkUpdateRebalanceJobResponse.ProtoReflect.Descriptor instead. func (*SdkUpdateRebalanceJobResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{238} + return file_api_api_proto_rawDescGZIP(), []int{253} } type SdkGetRebalanceJobStatusRequest struct { @@ -21361,7 +22219,7 @@ type SdkGetRebalanceJobStatusRequest struct { func (x *SdkGetRebalanceJobStatusRequest) Reset() { *x = SdkGetRebalanceJobStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[239] + mi := &file_api_api_proto_msgTypes[254] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21374,7 +22232,7 @@ func (x *SdkGetRebalanceJobStatusRequest) String() string { func (*SdkGetRebalanceJobStatusRequest) ProtoMessage() {} func (x *SdkGetRebalanceJobStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[239] + mi := &file_api_api_proto_msgTypes[254] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21387,7 +22245,7 @@ func (x *SdkGetRebalanceJobStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkGetRebalanceJobStatusRequest.ProtoReflect.Descriptor instead. func (*SdkGetRebalanceJobStatusRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{239} + return file_api_api_proto_rawDescGZIP(), []int{254} } func (x *SdkGetRebalanceJobStatusRequest) GetId() string { @@ -21413,7 +22271,7 @@ type SdkGetRebalanceJobStatusResponse struct { func (x *SdkGetRebalanceJobStatusResponse) Reset() { *x = SdkGetRebalanceJobStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[240] + mi := &file_api_api_proto_msgTypes[255] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21426,7 +22284,7 @@ func (x *SdkGetRebalanceJobStatusResponse) String() string { func (*SdkGetRebalanceJobStatusResponse) ProtoMessage() {} func (x *SdkGetRebalanceJobStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[240] + mi := &file_api_api_proto_msgTypes[255] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21439,7 +22297,7 @@ func (x *SdkGetRebalanceJobStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkGetRebalanceJobStatusResponse.ProtoReflect.Descriptor instead. func (*SdkGetRebalanceJobStatusResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{240} + return file_api_api_proto_rawDescGZIP(), []int{255} } func (x *SdkGetRebalanceJobStatusResponse) GetJob() *StorageRebalanceJob { @@ -21472,7 +22330,7 @@ type SdkEnumerateRebalanceJobsRequest struct { func (x *SdkEnumerateRebalanceJobsRequest) Reset() { *x = SdkEnumerateRebalanceJobsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[241] + mi := &file_api_api_proto_msgTypes[256] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21485,7 +22343,7 @@ func (x *SdkEnumerateRebalanceJobsRequest) String() string { func (*SdkEnumerateRebalanceJobsRequest) ProtoMessage() {} func (x *SdkEnumerateRebalanceJobsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[241] + mi := &file_api_api_proto_msgTypes[256] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21498,7 +22356,7 @@ func (x *SdkEnumerateRebalanceJobsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkEnumerateRebalanceJobsRequest.ProtoReflect.Descriptor instead. func (*SdkEnumerateRebalanceJobsRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{241} + return file_api_api_proto_rawDescGZIP(), []int{256} } type SdkEnumerateRebalanceJobsResponse struct { @@ -21513,7 +22371,7 @@ type SdkEnumerateRebalanceJobsResponse struct { func (x *SdkEnumerateRebalanceJobsResponse) Reset() { *x = SdkEnumerateRebalanceJobsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[242] + mi := &file_api_api_proto_msgTypes[257] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21526,7 +22384,7 @@ func (x *SdkEnumerateRebalanceJobsResponse) String() string { func (*SdkEnumerateRebalanceJobsResponse) ProtoMessage() {} func (x *SdkEnumerateRebalanceJobsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[242] + mi := &file_api_api_proto_msgTypes[257] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21539,7 +22397,7 @@ func (x *SdkEnumerateRebalanceJobsResponse) ProtoReflect() protoreflect.Message // Deprecated: Use SdkEnumerateRebalanceJobsResponse.ProtoReflect.Descriptor instead. func (*SdkEnumerateRebalanceJobsResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{242} + return file_api_api_proto_rawDescGZIP(), []int{257} } func (x *SdkEnumerateRebalanceJobsResponse) GetJobs() []*StorageRebalanceJob { @@ -21562,7 +22420,7 @@ type RebalanceScheduleInfo struct { func (x *RebalanceScheduleInfo) Reset() { *x = RebalanceScheduleInfo{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[243] + mi := &file_api_api_proto_msgTypes[258] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21575,7 +22433,7 @@ func (x *RebalanceScheduleInfo) String() string { func (*RebalanceScheduleInfo) ProtoMessage() {} func (x *RebalanceScheduleInfo) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[243] + mi := &file_api_api_proto_msgTypes[258] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21588,7 +22446,7 @@ func (x *RebalanceScheduleInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use RebalanceScheduleInfo.ProtoReflect.Descriptor instead. func (*RebalanceScheduleInfo) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{243} + return file_api_api_proto_rawDescGZIP(), []int{258} } func (x *RebalanceScheduleInfo) GetSchedule() string { @@ -21624,7 +22482,7 @@ type SdkCreateRebalanceScheduleRequest struct { func (x *SdkCreateRebalanceScheduleRequest) Reset() { *x = SdkCreateRebalanceScheduleRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[244] + mi := &file_api_api_proto_msgTypes[259] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21637,7 +22495,7 @@ func (x *SdkCreateRebalanceScheduleRequest) String() string { func (*SdkCreateRebalanceScheduleRequest) ProtoMessage() {} func (x *SdkCreateRebalanceScheduleRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[244] + mi := &file_api_api_proto_msgTypes[259] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21650,7 +22508,7 @@ func (x *SdkCreateRebalanceScheduleRequest) ProtoReflect() protoreflect.Message // Deprecated: Use SdkCreateRebalanceScheduleRequest.ProtoReflect.Descriptor instead. func (*SdkCreateRebalanceScheduleRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{244} + return file_api_api_proto_rawDescGZIP(), []int{259} } func (x *SdkCreateRebalanceScheduleRequest) GetSchedule() string { @@ -21678,7 +22536,7 @@ type SdkCreateRebalanceScheduleResponse struct { func (x *SdkCreateRebalanceScheduleResponse) Reset() { *x = SdkCreateRebalanceScheduleResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[245] + mi := &file_api_api_proto_msgTypes[260] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21691,7 +22549,7 @@ func (x *SdkCreateRebalanceScheduleResponse) String() string { func (*SdkCreateRebalanceScheduleResponse) ProtoMessage() {} func (x *SdkCreateRebalanceScheduleResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[245] + mi := &file_api_api_proto_msgTypes[260] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21704,7 +22562,7 @@ func (x *SdkCreateRebalanceScheduleResponse) ProtoReflect() protoreflect.Message // Deprecated: Use SdkCreateRebalanceScheduleResponse.ProtoReflect.Descriptor instead. func (*SdkCreateRebalanceScheduleResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{245} + return file_api_api_proto_rawDescGZIP(), []int{260} } func (x *SdkCreateRebalanceScheduleResponse) GetScheduleInfo() *RebalanceScheduleInfo { @@ -21723,7 +22581,7 @@ type SdkGetRebalanceScheduleRequest struct { func (x *SdkGetRebalanceScheduleRequest) Reset() { *x = SdkGetRebalanceScheduleRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[246] + mi := &file_api_api_proto_msgTypes[261] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21736,7 +22594,7 @@ func (x *SdkGetRebalanceScheduleRequest) String() string { func (*SdkGetRebalanceScheduleRequest) ProtoMessage() {} func (x *SdkGetRebalanceScheduleRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[246] + mi := &file_api_api_proto_msgTypes[261] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21749,7 +22607,7 @@ func (x *SdkGetRebalanceScheduleRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkGetRebalanceScheduleRequest.ProtoReflect.Descriptor instead. func (*SdkGetRebalanceScheduleRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{246} + return file_api_api_proto_rawDescGZIP(), []int{261} } type SdkGetRebalanceScheduleResponse struct { @@ -21763,7 +22621,7 @@ type SdkGetRebalanceScheduleResponse struct { func (x *SdkGetRebalanceScheduleResponse) Reset() { *x = SdkGetRebalanceScheduleResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[247] + mi := &file_api_api_proto_msgTypes[262] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21776,7 +22634,7 @@ func (x *SdkGetRebalanceScheduleResponse) String() string { func (*SdkGetRebalanceScheduleResponse) ProtoMessage() {} func (x *SdkGetRebalanceScheduleResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[247] + mi := &file_api_api_proto_msgTypes[262] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21789,7 +22647,7 @@ func (x *SdkGetRebalanceScheduleResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkGetRebalanceScheduleResponse.ProtoReflect.Descriptor instead. func (*SdkGetRebalanceScheduleResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{247} + return file_api_api_proto_rawDescGZIP(), []int{262} } func (x *SdkGetRebalanceScheduleResponse) GetScheduleInfo() *RebalanceScheduleInfo { @@ -21808,7 +22666,7 @@ type SdkDeleteRebalanceScheduleRequest struct { func (x *SdkDeleteRebalanceScheduleRequest) Reset() { *x = SdkDeleteRebalanceScheduleRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[248] + mi := &file_api_api_proto_msgTypes[263] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21821,7 +22679,7 @@ func (x *SdkDeleteRebalanceScheduleRequest) String() string { func (*SdkDeleteRebalanceScheduleRequest) ProtoMessage() {} func (x *SdkDeleteRebalanceScheduleRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[248] + mi := &file_api_api_proto_msgTypes[263] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21834,7 +22692,7 @@ func (x *SdkDeleteRebalanceScheduleRequest) ProtoReflect() protoreflect.Message // Deprecated: Use SdkDeleteRebalanceScheduleRequest.ProtoReflect.Descriptor instead. func (*SdkDeleteRebalanceScheduleRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{248} + return file_api_api_proto_rawDescGZIP(), []int{263} } type SdkDeleteRebalanceScheduleResponse struct { @@ -21846,7 +22704,7 @@ type SdkDeleteRebalanceScheduleResponse struct { func (x *SdkDeleteRebalanceScheduleResponse) Reset() { *x = SdkDeleteRebalanceScheduleResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[249] + mi := &file_api_api_proto_msgTypes[264] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21859,7 +22717,7 @@ func (x *SdkDeleteRebalanceScheduleResponse) String() string { func (*SdkDeleteRebalanceScheduleResponse) ProtoMessage() {} func (x *SdkDeleteRebalanceScheduleResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[249] + mi := &file_api_api_proto_msgTypes[264] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21872,7 +22730,7 @@ func (x *SdkDeleteRebalanceScheduleResponse) ProtoReflect() protoreflect.Message // Deprecated: Use SdkDeleteRebalanceScheduleResponse.ProtoReflect.Descriptor instead. func (*SdkDeleteRebalanceScheduleResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{249} + return file_api_api_proto_rawDescGZIP(), []int{264} } type SdkStoragePool struct { @@ -21884,7 +22742,7 @@ type SdkStoragePool struct { func (x *SdkStoragePool) Reset() { *x = SdkStoragePool{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[250] + mi := &file_api_api_proto_msgTypes[265] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21897,7 +22755,7 @@ func (x *SdkStoragePool) String() string { func (*SdkStoragePool) ProtoMessage() {} func (x *SdkStoragePool) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[250] + mi := &file_api_api_proto_msgTypes[265] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21910,7 +22768,7 @@ func (x *SdkStoragePool) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkStoragePool.ProtoReflect.Descriptor instead. func (*SdkStoragePool) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{250} + return file_api_api_proto_rawDescGZIP(), []int{265} } // Defines a response when resizing a storage pool @@ -21923,7 +22781,7 @@ type SdkStoragePoolResizeResponse struct { func (x *SdkStoragePoolResizeResponse) Reset() { *x = SdkStoragePoolResizeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[251] + mi := &file_api_api_proto_msgTypes[266] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21936,7 +22794,7 @@ func (x *SdkStoragePoolResizeResponse) String() string { func (*SdkStoragePoolResizeResponse) ProtoMessage() {} func (x *SdkStoragePoolResizeResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[251] + mi := &file_api_api_proto_msgTypes[266] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21949,7 +22807,7 @@ func (x *SdkStoragePoolResizeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkStoragePoolResizeResponse.ProtoReflect.Descriptor instead. func (*SdkStoragePoolResizeResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{251} + return file_api_api_proto_rawDescGZIP(), []int{266} } // Defines a response when inspecting a node @@ -21965,7 +22823,7 @@ type SdkNodeInspectResponse struct { func (x *SdkNodeInspectResponse) Reset() { *x = SdkNodeInspectResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[252] + mi := &file_api_api_proto_msgTypes[267] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21978,7 +22836,7 @@ func (x *SdkNodeInspectResponse) String() string { func (*SdkNodeInspectResponse) ProtoMessage() {} func (x *SdkNodeInspectResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[252] + mi := &file_api_api_proto_msgTypes[267] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21991,7 +22849,7 @@ func (x *SdkNodeInspectResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkNodeInspectResponse.ProtoReflect.Descriptor instead. func (*SdkNodeInspectResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{252} + return file_api_api_proto_rawDescGZIP(), []int{267} } func (x *SdkNodeInspectResponse) GetNode() *StorageNode { @@ -22011,7 +22869,7 @@ type SdkNodeInspectCurrentRequest struct { func (x *SdkNodeInspectCurrentRequest) Reset() { *x = SdkNodeInspectCurrentRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[253] + mi := &file_api_api_proto_msgTypes[268] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22024,7 +22882,7 @@ func (x *SdkNodeInspectCurrentRequest) String() string { func (*SdkNodeInspectCurrentRequest) ProtoMessage() {} func (x *SdkNodeInspectCurrentRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[253] + mi := &file_api_api_proto_msgTypes[268] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22037,7 +22895,7 @@ func (x *SdkNodeInspectCurrentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkNodeInspectCurrentRequest.ProtoReflect.Descriptor instead. func (*SdkNodeInspectCurrentRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{253} + return file_api_api_proto_rawDescGZIP(), []int{268} } // Defines a response when inspecting a node @@ -22053,7 +22911,7 @@ type SdkNodeInspectCurrentResponse struct { func (x *SdkNodeInspectCurrentResponse) Reset() { *x = SdkNodeInspectCurrentResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[254] + mi := &file_api_api_proto_msgTypes[269] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22066,7 +22924,7 @@ func (x *SdkNodeInspectCurrentResponse) String() string { func (*SdkNodeInspectCurrentResponse) ProtoMessage() {} func (x *SdkNodeInspectCurrentResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[254] + mi := &file_api_api_proto_msgTypes[269] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22079,7 +22937,7 @@ func (x *SdkNodeInspectCurrentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkNodeInspectCurrentResponse.ProtoReflect.Descriptor instead. func (*SdkNodeInspectCurrentResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{254} + return file_api_api_proto_rawDescGZIP(), []int{269} } func (x *SdkNodeInspectCurrentResponse) GetNode() *StorageNode { @@ -22099,7 +22957,7 @@ type SdkNodeEnumerateRequest struct { func (x *SdkNodeEnumerateRequest) Reset() { *x = SdkNodeEnumerateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[255] + mi := &file_api_api_proto_msgTypes[270] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22112,7 +22970,7 @@ func (x *SdkNodeEnumerateRequest) String() string { func (*SdkNodeEnumerateRequest) ProtoMessage() {} func (x *SdkNodeEnumerateRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[255] + mi := &file_api_api_proto_msgTypes[270] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22125,7 +22983,7 @@ func (x *SdkNodeEnumerateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkNodeEnumerateRequest.ProtoReflect.Descriptor instead. func (*SdkNodeEnumerateRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{255} + return file_api_api_proto_rawDescGZIP(), []int{270} } // Defines a response with a list of node ids @@ -22141,7 +22999,7 @@ type SdkNodeEnumerateResponse struct { func (x *SdkNodeEnumerateResponse) Reset() { *x = SdkNodeEnumerateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[256] + mi := &file_api_api_proto_msgTypes[271] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22154,7 +23012,7 @@ func (x *SdkNodeEnumerateResponse) String() string { func (*SdkNodeEnumerateResponse) ProtoMessage() {} func (x *SdkNodeEnumerateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[256] + mi := &file_api_api_proto_msgTypes[271] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22167,7 +23025,7 @@ func (x *SdkNodeEnumerateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkNodeEnumerateResponse.ProtoReflect.Descriptor instead. func (*SdkNodeEnumerateResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{256} + return file_api_api_proto_rawDescGZIP(), []int{271} } func (x *SdkNodeEnumerateResponse) GetNodeIds() []string { @@ -22188,7 +23046,7 @@ type SdkNodeEnumerateWithFiltersRequest struct { func (x *SdkNodeEnumerateWithFiltersRequest) Reset() { *x = SdkNodeEnumerateWithFiltersRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[257] + mi := &file_api_api_proto_msgTypes[272] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22201,7 +23059,7 @@ func (x *SdkNodeEnumerateWithFiltersRequest) String() string { func (*SdkNodeEnumerateWithFiltersRequest) ProtoMessage() {} func (x *SdkNodeEnumerateWithFiltersRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[257] + mi := &file_api_api_proto_msgTypes[272] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22214,7 +23072,7 @@ func (x *SdkNodeEnumerateWithFiltersRequest) ProtoReflect() protoreflect.Message // Deprecated: Use SdkNodeEnumerateWithFiltersRequest.ProtoReflect.Descriptor instead. func (*SdkNodeEnumerateWithFiltersRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{257} + return file_api_api_proto_rawDescGZIP(), []int{272} } // Defines a response with a list of nodes @@ -22230,7 +23088,7 @@ type SdkNodeEnumerateWithFiltersResponse struct { func (x *SdkNodeEnumerateWithFiltersResponse) Reset() { *x = SdkNodeEnumerateWithFiltersResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[258] + mi := &file_api_api_proto_msgTypes[273] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22243,7 +23101,7 @@ func (x *SdkNodeEnumerateWithFiltersResponse) String() string { func (*SdkNodeEnumerateWithFiltersResponse) ProtoMessage() {} func (x *SdkNodeEnumerateWithFiltersResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[258] + mi := &file_api_api_proto_msgTypes[273] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22256,7 +23114,7 @@ func (x *SdkNodeEnumerateWithFiltersResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use SdkNodeEnumerateWithFiltersResponse.ProtoReflect.Descriptor instead. func (*SdkNodeEnumerateWithFiltersResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{258} + return file_api_api_proto_rawDescGZIP(), []int{273} } func (x *SdkNodeEnumerateWithFiltersResponse) GetNodes() []*StorageNode { @@ -22279,7 +23137,7 @@ type SdkObjectstoreInspectRequest struct { func (x *SdkObjectstoreInspectRequest) Reset() { *x = SdkObjectstoreInspectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[259] + mi := &file_api_api_proto_msgTypes[274] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22292,7 +23150,7 @@ func (x *SdkObjectstoreInspectRequest) String() string { func (*SdkObjectstoreInspectRequest) ProtoMessage() {} func (x *SdkObjectstoreInspectRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[259] + mi := &file_api_api_proto_msgTypes[274] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22305,7 +23163,7 @@ func (x *SdkObjectstoreInspectRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkObjectstoreInspectRequest.ProtoReflect.Descriptor instead. func (*SdkObjectstoreInspectRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{259} + return file_api_api_proto_rawDescGZIP(), []int{274} } func (x *SdkObjectstoreInspectRequest) GetObjectstoreId() string { @@ -22328,7 +23186,7 @@ type SdkObjectstoreInspectResponse struct { func (x *SdkObjectstoreInspectResponse) Reset() { *x = SdkObjectstoreInspectResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[260] + mi := &file_api_api_proto_msgTypes[275] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22341,7 +23199,7 @@ func (x *SdkObjectstoreInspectResponse) String() string { func (*SdkObjectstoreInspectResponse) ProtoMessage() {} func (x *SdkObjectstoreInspectResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[260] + mi := &file_api_api_proto_msgTypes[275] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22354,7 +23212,7 @@ func (x *SdkObjectstoreInspectResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkObjectstoreInspectResponse.ProtoReflect.Descriptor instead. func (*SdkObjectstoreInspectResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{260} + return file_api_api_proto_rawDescGZIP(), []int{275} } func (x *SdkObjectstoreInspectResponse) GetObjectstoreStatus() *ObjectstoreInfo { @@ -22377,7 +23235,7 @@ type SdkObjectstoreCreateRequest struct { func (x *SdkObjectstoreCreateRequest) Reset() { *x = SdkObjectstoreCreateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[261] + mi := &file_api_api_proto_msgTypes[276] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22390,7 +23248,7 @@ func (x *SdkObjectstoreCreateRequest) String() string { func (*SdkObjectstoreCreateRequest) ProtoMessage() {} func (x *SdkObjectstoreCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[261] + mi := &file_api_api_proto_msgTypes[276] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22403,7 +23261,7 @@ func (x *SdkObjectstoreCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkObjectstoreCreateRequest.ProtoReflect.Descriptor instead. func (*SdkObjectstoreCreateRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{261} + return file_api_api_proto_rawDescGZIP(), []int{276} } func (x *SdkObjectstoreCreateRequest) GetVolumeId() string { @@ -22427,7 +23285,7 @@ type SdkObjectstoreCreateResponse struct { func (x *SdkObjectstoreCreateResponse) Reset() { *x = SdkObjectstoreCreateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[262] + mi := &file_api_api_proto_msgTypes[277] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22440,7 +23298,7 @@ func (x *SdkObjectstoreCreateResponse) String() string { func (*SdkObjectstoreCreateResponse) ProtoMessage() {} func (x *SdkObjectstoreCreateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[262] + mi := &file_api_api_proto_msgTypes[277] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22453,7 +23311,7 @@ func (x *SdkObjectstoreCreateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkObjectstoreCreateResponse.ProtoReflect.Descriptor instead. func (*SdkObjectstoreCreateResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{262} + return file_api_api_proto_rawDescGZIP(), []int{277} } func (x *SdkObjectstoreCreateResponse) GetObjectstoreStatus() *ObjectstoreInfo { @@ -22476,7 +23334,7 @@ type SdkObjectstoreDeleteRequest struct { func (x *SdkObjectstoreDeleteRequest) Reset() { *x = SdkObjectstoreDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[263] + mi := &file_api_api_proto_msgTypes[278] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22489,7 +23347,7 @@ func (x *SdkObjectstoreDeleteRequest) String() string { func (*SdkObjectstoreDeleteRequest) ProtoMessage() {} func (x *SdkObjectstoreDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[263] + mi := &file_api_api_proto_msgTypes[278] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22502,7 +23360,7 @@ func (x *SdkObjectstoreDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkObjectstoreDeleteRequest.ProtoReflect.Descriptor instead. func (*SdkObjectstoreDeleteRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{263} + return file_api_api_proto_rawDescGZIP(), []int{278} } func (x *SdkObjectstoreDeleteRequest) GetObjectstoreId() string { @@ -22522,7 +23380,7 @@ type SdkObjectstoreDeleteResponse struct { func (x *SdkObjectstoreDeleteResponse) Reset() { *x = SdkObjectstoreDeleteResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[264] + mi := &file_api_api_proto_msgTypes[279] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22535,7 +23393,7 @@ func (x *SdkObjectstoreDeleteResponse) String() string { func (*SdkObjectstoreDeleteResponse) ProtoMessage() {} func (x *SdkObjectstoreDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[264] + mi := &file_api_api_proto_msgTypes[279] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22548,7 +23406,7 @@ func (x *SdkObjectstoreDeleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkObjectstoreDeleteResponse.ProtoReflect.Descriptor instead. func (*SdkObjectstoreDeleteResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{264} + return file_api_api_proto_rawDescGZIP(), []int{279} } // Defines a request to update an object store @@ -22566,7 +23424,7 @@ type SdkObjectstoreUpdateRequest struct { func (x *SdkObjectstoreUpdateRequest) Reset() { *x = SdkObjectstoreUpdateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[265] + mi := &file_api_api_proto_msgTypes[280] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22579,7 +23437,7 @@ func (x *SdkObjectstoreUpdateRequest) String() string { func (*SdkObjectstoreUpdateRequest) ProtoMessage() {} func (x *SdkObjectstoreUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[265] + mi := &file_api_api_proto_msgTypes[280] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22592,7 +23450,7 @@ func (x *SdkObjectstoreUpdateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkObjectstoreUpdateRequest.ProtoReflect.Descriptor instead. func (*SdkObjectstoreUpdateRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{265} + return file_api_api_proto_rawDescGZIP(), []int{280} } func (x *SdkObjectstoreUpdateRequest) GetObjectstoreId() string { @@ -22619,7 +23477,7 @@ type SdkObjectstoreUpdateResponse struct { func (x *SdkObjectstoreUpdateResponse) Reset() { *x = SdkObjectstoreUpdateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[266] + mi := &file_api_api_proto_msgTypes[281] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22632,7 +23490,7 @@ func (x *SdkObjectstoreUpdateResponse) String() string { func (*SdkObjectstoreUpdateResponse) ProtoMessage() {} func (x *SdkObjectstoreUpdateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[266] + mi := &file_api_api_proto_msgTypes[281] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22645,7 +23503,7 @@ func (x *SdkObjectstoreUpdateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkObjectstoreUpdateResponse.ProtoReflect.Descriptor instead. func (*SdkObjectstoreUpdateResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{266} + return file_api_api_proto_rawDescGZIP(), []int{281} } // Defines a request to create a backup of a volume to the cloud @@ -22681,7 +23539,7 @@ type SdkCloudBackupCreateRequest struct { func (x *SdkCloudBackupCreateRequest) Reset() { *x = SdkCloudBackupCreateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[267] + mi := &file_api_api_proto_msgTypes[282] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22694,7 +23552,7 @@ func (x *SdkCloudBackupCreateRequest) String() string { func (*SdkCloudBackupCreateRequest) ProtoMessage() {} func (x *SdkCloudBackupCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[267] + mi := &file_api_api_proto_msgTypes[282] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22707,7 +23565,7 @@ func (x *SdkCloudBackupCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupCreateRequest.ProtoReflect.Descriptor instead. func (*SdkCloudBackupCreateRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{267} + return file_api_api_proto_rawDescGZIP(), []int{282} } func (x *SdkCloudBackupCreateRequest) GetVolumeId() string { @@ -22779,7 +23637,7 @@ type SdkCloudBackupCreateResponse struct { func (x *SdkCloudBackupCreateResponse) Reset() { *x = SdkCloudBackupCreateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[268] + mi := &file_api_api_proto_msgTypes[283] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22792,7 +23650,7 @@ func (x *SdkCloudBackupCreateResponse) String() string { func (*SdkCloudBackupCreateResponse) ProtoMessage() {} func (x *SdkCloudBackupCreateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[268] + mi := &file_api_api_proto_msgTypes[283] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22805,7 +23663,7 @@ func (x *SdkCloudBackupCreateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupCreateResponse.ProtoReflect.Descriptor instead. func (*SdkCloudBackupCreateResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{268} + return file_api_api_proto_rawDescGZIP(), []int{283} } func (x *SdkCloudBackupCreateResponse) GetTaskId() string { @@ -22842,7 +23700,7 @@ type SdkCloudBackupGroupCreateRequest struct { func (x *SdkCloudBackupGroupCreateRequest) Reset() { *x = SdkCloudBackupGroupCreateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[269] + mi := &file_api_api_proto_msgTypes[284] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22855,7 +23713,7 @@ func (x *SdkCloudBackupGroupCreateRequest) String() string { func (*SdkCloudBackupGroupCreateRequest) ProtoMessage() {} func (x *SdkCloudBackupGroupCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[269] + mi := &file_api_api_proto_msgTypes[284] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22868,7 +23726,7 @@ func (x *SdkCloudBackupGroupCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupGroupCreateRequest.ProtoReflect.Descriptor instead. func (*SdkCloudBackupGroupCreateRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{269} + return file_api_api_proto_rawDescGZIP(), []int{284} } func (x *SdkCloudBackupGroupCreateRequest) GetGroupId() string { @@ -22928,7 +23786,7 @@ type SdkCloudBackupGroupCreateResponse struct { func (x *SdkCloudBackupGroupCreateResponse) Reset() { *x = SdkCloudBackupGroupCreateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[270] + mi := &file_api_api_proto_msgTypes[285] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22941,7 +23799,7 @@ func (x *SdkCloudBackupGroupCreateResponse) String() string { func (*SdkCloudBackupGroupCreateResponse) ProtoMessage() {} func (x *SdkCloudBackupGroupCreateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[270] + mi := &file_api_api_proto_msgTypes[285] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22954,7 +23812,7 @@ func (x *SdkCloudBackupGroupCreateResponse) ProtoReflect() protoreflect.Message // Deprecated: Use SdkCloudBackupGroupCreateResponse.ProtoReflect.Descriptor instead. func (*SdkCloudBackupGroupCreateResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{270} + return file_api_api_proto_rawDescGZIP(), []int{285} } func (x *SdkCloudBackupGroupCreateResponse) GetGroupCloudBackupId() string { @@ -22999,7 +23857,7 @@ type SdkCloudBackupRestoreRequest struct { func (x *SdkCloudBackupRestoreRequest) Reset() { *x = SdkCloudBackupRestoreRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[271] + mi := &file_api_api_proto_msgTypes[286] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23012,7 +23870,7 @@ func (x *SdkCloudBackupRestoreRequest) String() string { func (*SdkCloudBackupRestoreRequest) ProtoMessage() {} func (x *SdkCloudBackupRestoreRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[271] + mi := &file_api_api_proto_msgTypes[286] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23025,7 +23883,7 @@ func (x *SdkCloudBackupRestoreRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupRestoreRequest.ProtoReflect.Descriptor instead. func (*SdkCloudBackupRestoreRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{271} + return file_api_api_proto_rawDescGZIP(), []int{286} } func (x *SdkCloudBackupRestoreRequest) GetBackupId() string { @@ -23093,7 +23951,7 @@ type SdkCloudBackupRestoreResponse struct { func (x *SdkCloudBackupRestoreResponse) Reset() { *x = SdkCloudBackupRestoreResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[272] + mi := &file_api_api_proto_msgTypes[287] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23106,7 +23964,7 @@ func (x *SdkCloudBackupRestoreResponse) String() string { func (*SdkCloudBackupRestoreResponse) ProtoMessage() {} func (x *SdkCloudBackupRestoreResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[272] + mi := &file_api_api_proto_msgTypes[287] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23119,7 +23977,7 @@ func (x *SdkCloudBackupRestoreResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupRestoreResponse.ProtoReflect.Descriptor instead. func (*SdkCloudBackupRestoreResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{272} + return file_api_api_proto_rawDescGZIP(), []int{287} } func (x *SdkCloudBackupRestoreResponse) GetRestoreVolumeId() string { @@ -23157,7 +24015,7 @@ type SdkCloudBackupDeleteRequest struct { func (x *SdkCloudBackupDeleteRequest) Reset() { *x = SdkCloudBackupDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[273] + mi := &file_api_api_proto_msgTypes[288] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23170,7 +24028,7 @@ func (x *SdkCloudBackupDeleteRequest) String() string { func (*SdkCloudBackupDeleteRequest) ProtoMessage() {} func (x *SdkCloudBackupDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[273] + mi := &file_api_api_proto_msgTypes[288] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23183,7 +24041,7 @@ func (x *SdkCloudBackupDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupDeleteRequest.ProtoReflect.Descriptor instead. func (*SdkCloudBackupDeleteRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{273} + return file_api_api_proto_rawDescGZIP(), []int{288} } func (x *SdkCloudBackupDeleteRequest) GetBackupId() string { @@ -23224,7 +24082,7 @@ type SdkCloudBackupDeleteResponse struct { func (x *SdkCloudBackupDeleteResponse) Reset() { *x = SdkCloudBackupDeleteResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[274] + mi := &file_api_api_proto_msgTypes[289] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23237,7 +24095,7 @@ func (x *SdkCloudBackupDeleteResponse) String() string { func (*SdkCloudBackupDeleteResponse) ProtoMessage() {} func (x *SdkCloudBackupDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[274] + mi := &file_api_api_proto_msgTypes[289] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23250,7 +24108,7 @@ func (x *SdkCloudBackupDeleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupDeleteResponse.ProtoReflect.Descriptor instead. func (*SdkCloudBackupDeleteResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{274} + return file_api_api_proto_rawDescGZIP(), []int{289} } // Defines a request to delete all the backups stored by a cloud provider @@ -23269,7 +24127,7 @@ type SdkCloudBackupDeleteAllRequest struct { func (x *SdkCloudBackupDeleteAllRequest) Reset() { *x = SdkCloudBackupDeleteAllRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[275] + mi := &file_api_api_proto_msgTypes[290] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23282,7 +24140,7 @@ func (x *SdkCloudBackupDeleteAllRequest) String() string { func (*SdkCloudBackupDeleteAllRequest) ProtoMessage() {} func (x *SdkCloudBackupDeleteAllRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[275] + mi := &file_api_api_proto_msgTypes[290] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23295,7 +24153,7 @@ func (x *SdkCloudBackupDeleteAllRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupDeleteAllRequest.ProtoReflect.Descriptor instead. func (*SdkCloudBackupDeleteAllRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{275} + return file_api_api_proto_rawDescGZIP(), []int{290} } func (x *SdkCloudBackupDeleteAllRequest) GetSrcVolumeId() string { @@ -23322,7 +24180,7 @@ type SdkCloudBackupDeleteAllResponse struct { func (x *SdkCloudBackupDeleteAllResponse) Reset() { *x = SdkCloudBackupDeleteAllResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[276] + mi := &file_api_api_proto_msgTypes[291] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23335,7 +24193,7 @@ func (x *SdkCloudBackupDeleteAllResponse) String() string { func (*SdkCloudBackupDeleteAllResponse) ProtoMessage() {} func (x *SdkCloudBackupDeleteAllResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[276] + mi := &file_api_api_proto_msgTypes[291] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23348,7 +24206,7 @@ func (x *SdkCloudBackupDeleteAllResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupDeleteAllResponse.ProtoReflect.Descriptor instead. func (*SdkCloudBackupDeleteAllResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{276} + return file_api_api_proto_rawDescGZIP(), []int{291} } // Defines a request to list the backups stored by a cloud provider. @@ -23397,7 +24255,7 @@ type SdkCloudBackupEnumerateWithFiltersRequest struct { func (x *SdkCloudBackupEnumerateWithFiltersRequest) Reset() { *x = SdkCloudBackupEnumerateWithFiltersRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[277] + mi := &file_api_api_proto_msgTypes[292] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23410,7 +24268,7 @@ func (x *SdkCloudBackupEnumerateWithFiltersRequest) String() string { func (*SdkCloudBackupEnumerateWithFiltersRequest) ProtoMessage() {} func (x *SdkCloudBackupEnumerateWithFiltersRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[277] + mi := &file_api_api_proto_msgTypes[292] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23423,7 +24281,7 @@ func (x *SdkCloudBackupEnumerateWithFiltersRequest) ProtoReflect() protoreflect. // Deprecated: Use SdkCloudBackupEnumerateWithFiltersRequest.ProtoReflect.Descriptor instead. func (*SdkCloudBackupEnumerateWithFiltersRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{277} + return file_api_api_proto_rawDescGZIP(), []int{292} } func (x *SdkCloudBackupEnumerateWithFiltersRequest) GetSrcVolumeId() string { @@ -23525,7 +24383,7 @@ type SdkCloudBackupInfo struct { func (x *SdkCloudBackupInfo) Reset() { *x = SdkCloudBackupInfo{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[278] + mi := &file_api_api_proto_msgTypes[293] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23538,7 +24396,7 @@ func (x *SdkCloudBackupInfo) String() string { func (*SdkCloudBackupInfo) ProtoMessage() {} func (x *SdkCloudBackupInfo) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[278] + mi := &file_api_api_proto_msgTypes[293] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23551,7 +24409,7 @@ func (x *SdkCloudBackupInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupInfo.ProtoReflect.Descriptor instead. func (*SdkCloudBackupInfo) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{278} + return file_api_api_proto_rawDescGZIP(), []int{293} } func (x *SdkCloudBackupInfo) GetId() string { @@ -23625,7 +24483,7 @@ type SdkCloudBackupEnumerateWithFiltersResponse struct { func (x *SdkCloudBackupEnumerateWithFiltersResponse) Reset() { *x = SdkCloudBackupEnumerateWithFiltersResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[279] + mi := &file_api_api_proto_msgTypes[294] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23638,7 +24496,7 @@ func (x *SdkCloudBackupEnumerateWithFiltersResponse) String() string { func (*SdkCloudBackupEnumerateWithFiltersResponse) ProtoMessage() {} func (x *SdkCloudBackupEnumerateWithFiltersResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[279] + mi := &file_api_api_proto_msgTypes[294] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23651,7 +24509,7 @@ func (x *SdkCloudBackupEnumerateWithFiltersResponse) ProtoReflect() protoreflect // Deprecated: Use SdkCloudBackupEnumerateWithFiltersResponse.ProtoReflect.Descriptor instead. func (*SdkCloudBackupEnumerateWithFiltersResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{279} + return file_api_api_proto_rawDescGZIP(), []int{294} } func (x *SdkCloudBackupEnumerateWithFiltersResponse) GetBackups() []*SdkCloudBackupInfo { @@ -23706,7 +24564,7 @@ type SdkCloudBackupStatus struct { func (x *SdkCloudBackupStatus) Reset() { *x = SdkCloudBackupStatus{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[280] + mi := &file_api_api_proto_msgTypes[295] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23719,7 +24577,7 @@ func (x *SdkCloudBackupStatus) String() string { func (*SdkCloudBackupStatus) ProtoMessage() {} func (x *SdkCloudBackupStatus) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[280] + mi := &file_api_api_proto_msgTypes[295] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23732,7 +24590,7 @@ func (x *SdkCloudBackupStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupStatus.ProtoReflect.Descriptor instead. func (*SdkCloudBackupStatus) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{280} + return file_api_api_proto_rawDescGZIP(), []int{295} } func (x *SdkCloudBackupStatus) GetBackupId() string { @@ -23850,7 +24708,7 @@ type SdkCloudBackupStatusRequest struct { func (x *SdkCloudBackupStatusRequest) Reset() { *x = SdkCloudBackupStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[281] + mi := &file_api_api_proto_msgTypes[296] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23863,7 +24721,7 @@ func (x *SdkCloudBackupStatusRequest) String() string { func (*SdkCloudBackupStatusRequest) ProtoMessage() {} func (x *SdkCloudBackupStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[281] + mi := &file_api_api_proto_msgTypes[296] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23876,7 +24734,7 @@ func (x *SdkCloudBackupStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupStatusRequest.ProtoReflect.Descriptor instead. func (*SdkCloudBackupStatusRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{281} + return file_api_api_proto_rawDescGZIP(), []int{296} } func (x *SdkCloudBackupStatusRequest) GetVolumeId() string { @@ -23921,7 +24779,7 @@ type SdkCloudBackupStatusResponse struct { func (x *SdkCloudBackupStatusResponse) Reset() { *x = SdkCloudBackupStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[282] + mi := &file_api_api_proto_msgTypes[297] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23934,7 +24792,7 @@ func (x *SdkCloudBackupStatusResponse) String() string { func (*SdkCloudBackupStatusResponse) ProtoMessage() {} func (x *SdkCloudBackupStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[282] + mi := &file_api_api_proto_msgTypes[297] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23947,7 +24805,7 @@ func (x *SdkCloudBackupStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupStatusResponse.ProtoReflect.Descriptor instead. func (*SdkCloudBackupStatusResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{282} + return file_api_api_proto_rawDescGZIP(), []int{297} } func (x *SdkCloudBackupStatusResponse) GetStatuses() map[string]*SdkCloudBackupStatus { @@ -23972,7 +24830,7 @@ type SdkCloudBackupCatalogRequest struct { func (x *SdkCloudBackupCatalogRequest) Reset() { *x = SdkCloudBackupCatalogRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[283] + mi := &file_api_api_proto_msgTypes[298] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23985,7 +24843,7 @@ func (x *SdkCloudBackupCatalogRequest) String() string { func (*SdkCloudBackupCatalogRequest) ProtoMessage() {} func (x *SdkCloudBackupCatalogRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[283] + mi := &file_api_api_proto_msgTypes[298] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23998,7 +24856,7 @@ func (x *SdkCloudBackupCatalogRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupCatalogRequest.ProtoReflect.Descriptor instead. func (*SdkCloudBackupCatalogRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{283} + return file_api_api_proto_rawDescGZIP(), []int{298} } func (x *SdkCloudBackupCatalogRequest) GetBackupId() string { @@ -24028,7 +24886,7 @@ type SdkCloudBackupCatalogResponse struct { func (x *SdkCloudBackupCatalogResponse) Reset() { *x = SdkCloudBackupCatalogResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[284] + mi := &file_api_api_proto_msgTypes[299] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24041,7 +24899,7 @@ func (x *SdkCloudBackupCatalogResponse) String() string { func (*SdkCloudBackupCatalogResponse) ProtoMessage() {} func (x *SdkCloudBackupCatalogResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[284] + mi := &file_api_api_proto_msgTypes[299] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24054,7 +24912,7 @@ func (x *SdkCloudBackupCatalogResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupCatalogResponse.ProtoReflect.Descriptor instead. func (*SdkCloudBackupCatalogResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{284} + return file_api_api_proto_rawDescGZIP(), []int{299} } func (x *SdkCloudBackupCatalogResponse) GetContents() []string { @@ -24082,7 +24940,7 @@ type SdkCloudBackupHistoryItem struct { func (x *SdkCloudBackupHistoryItem) Reset() { *x = SdkCloudBackupHistoryItem{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[285] + mi := &file_api_api_proto_msgTypes[300] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24095,7 +24953,7 @@ func (x *SdkCloudBackupHistoryItem) String() string { func (*SdkCloudBackupHistoryItem) ProtoMessage() {} func (x *SdkCloudBackupHistoryItem) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[285] + mi := &file_api_api_proto_msgTypes[300] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24108,7 +24966,7 @@ func (x *SdkCloudBackupHistoryItem) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupHistoryItem.ProtoReflect.Descriptor instead. func (*SdkCloudBackupHistoryItem) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{285} + return file_api_api_proto_rawDescGZIP(), []int{300} } func (x *SdkCloudBackupHistoryItem) GetSrcVolumeId() string { @@ -24147,7 +25005,7 @@ type SdkCloudBackupHistoryRequest struct { func (x *SdkCloudBackupHistoryRequest) Reset() { *x = SdkCloudBackupHistoryRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[286] + mi := &file_api_api_proto_msgTypes[301] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24160,7 +25018,7 @@ func (x *SdkCloudBackupHistoryRequest) String() string { func (*SdkCloudBackupHistoryRequest) ProtoMessage() {} func (x *SdkCloudBackupHistoryRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[286] + mi := &file_api_api_proto_msgTypes[301] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24173,7 +25031,7 @@ func (x *SdkCloudBackupHistoryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupHistoryRequest.ProtoReflect.Descriptor instead. func (*SdkCloudBackupHistoryRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{286} + return file_api_api_proto_rawDescGZIP(), []int{301} } func (x *SdkCloudBackupHistoryRequest) GetSrcVolumeId() string { @@ -24196,7 +25054,7 @@ type SdkCloudBackupHistoryResponse struct { func (x *SdkCloudBackupHistoryResponse) Reset() { *x = SdkCloudBackupHistoryResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[287] + mi := &file_api_api_proto_msgTypes[302] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24209,7 +25067,7 @@ func (x *SdkCloudBackupHistoryResponse) String() string { func (*SdkCloudBackupHistoryResponse) ProtoMessage() {} func (x *SdkCloudBackupHistoryResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[287] + mi := &file_api_api_proto_msgTypes[302] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24222,7 +25080,7 @@ func (x *SdkCloudBackupHistoryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupHistoryResponse.ProtoReflect.Descriptor instead. func (*SdkCloudBackupHistoryResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{287} + return file_api_api_proto_rawDescGZIP(), []int{302} } func (x *SdkCloudBackupHistoryResponse) GetHistoryList() []*SdkCloudBackupHistoryItem { @@ -24249,7 +25107,7 @@ type SdkCloudBackupStateChangeRequest struct { func (x *SdkCloudBackupStateChangeRequest) Reset() { *x = SdkCloudBackupStateChangeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[288] + mi := &file_api_api_proto_msgTypes[303] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24262,7 +25120,7 @@ func (x *SdkCloudBackupStateChangeRequest) String() string { func (*SdkCloudBackupStateChangeRequest) ProtoMessage() {} func (x *SdkCloudBackupStateChangeRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[288] + mi := &file_api_api_proto_msgTypes[303] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24275,7 +25133,7 @@ func (x *SdkCloudBackupStateChangeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupStateChangeRequest.ProtoReflect.Descriptor instead. func (*SdkCloudBackupStateChangeRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{288} + return file_api_api_proto_rawDescGZIP(), []int{303} } func (x *SdkCloudBackupStateChangeRequest) GetTaskId() string { @@ -24302,7 +25160,7 @@ type SdkCloudBackupStateChangeResponse struct { func (x *SdkCloudBackupStateChangeResponse) Reset() { *x = SdkCloudBackupStateChangeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[289] + mi := &file_api_api_proto_msgTypes[304] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24315,7 +25173,7 @@ func (x *SdkCloudBackupStateChangeResponse) String() string { func (*SdkCloudBackupStateChangeResponse) ProtoMessage() {} func (x *SdkCloudBackupStateChangeResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[289] + mi := &file_api_api_proto_msgTypes[304] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24328,7 +25186,7 @@ func (x *SdkCloudBackupStateChangeResponse) ProtoReflect() protoreflect.Message // Deprecated: Use SdkCloudBackupStateChangeResponse.ProtoReflect.Descriptor instead. func (*SdkCloudBackupStateChangeResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{289} + return file_api_api_proto_rawDescGZIP(), []int{304} } // SdkCloudBackupScheduleInfo describes a schedule for volume backups to @@ -24362,7 +25220,7 @@ type SdkCloudBackupScheduleInfo struct { func (x *SdkCloudBackupScheduleInfo) Reset() { *x = SdkCloudBackupScheduleInfo{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[290] + mi := &file_api_api_proto_msgTypes[305] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24375,7 +25233,7 @@ func (x *SdkCloudBackupScheduleInfo) String() string { func (*SdkCloudBackupScheduleInfo) ProtoMessage() {} func (x *SdkCloudBackupScheduleInfo) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[290] + mi := &file_api_api_proto_msgTypes[305] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24388,7 +25246,7 @@ func (x *SdkCloudBackupScheduleInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupScheduleInfo.ProtoReflect.Descriptor instead. func (*SdkCloudBackupScheduleInfo) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{290} + return file_api_api_proto_rawDescGZIP(), []int{305} } func (x *SdkCloudBackupScheduleInfo) GetSrcVolumeId() string { @@ -24461,7 +25319,7 @@ type SdkCloudBackupSchedCreateRequest struct { func (x *SdkCloudBackupSchedCreateRequest) Reset() { *x = SdkCloudBackupSchedCreateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[291] + mi := &file_api_api_proto_msgTypes[306] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24474,7 +25332,7 @@ func (x *SdkCloudBackupSchedCreateRequest) String() string { func (*SdkCloudBackupSchedCreateRequest) ProtoMessage() {} func (x *SdkCloudBackupSchedCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[291] + mi := &file_api_api_proto_msgTypes[306] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24487,7 +25345,7 @@ func (x *SdkCloudBackupSchedCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupSchedCreateRequest.ProtoReflect.Descriptor instead. func (*SdkCloudBackupSchedCreateRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{291} + return file_api_api_proto_rawDescGZIP(), []int{306} } func (x *SdkCloudBackupSchedCreateRequest) GetCloudSchedInfo() *SdkCloudBackupScheduleInfo { @@ -24511,7 +25369,7 @@ type SdkCloudBackupSchedCreateResponse struct { func (x *SdkCloudBackupSchedCreateResponse) Reset() { *x = SdkCloudBackupSchedCreateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[292] + mi := &file_api_api_proto_msgTypes[307] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24524,7 +25382,7 @@ func (x *SdkCloudBackupSchedCreateResponse) String() string { func (*SdkCloudBackupSchedCreateResponse) ProtoMessage() {} func (x *SdkCloudBackupSchedCreateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[292] + mi := &file_api_api_proto_msgTypes[307] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24537,7 +25395,7 @@ func (x *SdkCloudBackupSchedCreateResponse) ProtoReflect() protoreflect.Message // Deprecated: Use SdkCloudBackupSchedCreateResponse.ProtoReflect.Descriptor instead. func (*SdkCloudBackupSchedCreateResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{292} + return file_api_api_proto_rawDescGZIP(), []int{307} } func (x *SdkCloudBackupSchedCreateResponse) GetBackupScheduleId() string { @@ -24562,7 +25420,7 @@ type SdkCloudBackupSchedUpdateRequest struct { func (x *SdkCloudBackupSchedUpdateRequest) Reset() { *x = SdkCloudBackupSchedUpdateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[293] + mi := &file_api_api_proto_msgTypes[308] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24575,7 +25433,7 @@ func (x *SdkCloudBackupSchedUpdateRequest) String() string { func (*SdkCloudBackupSchedUpdateRequest) ProtoMessage() {} func (x *SdkCloudBackupSchedUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[293] + mi := &file_api_api_proto_msgTypes[308] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24588,7 +25446,7 @@ func (x *SdkCloudBackupSchedUpdateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupSchedUpdateRequest.ProtoReflect.Descriptor instead. func (*SdkCloudBackupSchedUpdateRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{293} + return file_api_api_proto_rawDescGZIP(), []int{308} } func (x *SdkCloudBackupSchedUpdateRequest) GetCloudSchedInfo() *SdkCloudBackupScheduleInfo { @@ -24615,7 +25473,7 @@ type SdkCloudBackupSchedUpdateResponse struct { func (x *SdkCloudBackupSchedUpdateResponse) Reset() { *x = SdkCloudBackupSchedUpdateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[294] + mi := &file_api_api_proto_msgTypes[309] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24628,7 +25486,7 @@ func (x *SdkCloudBackupSchedUpdateResponse) String() string { func (*SdkCloudBackupSchedUpdateResponse) ProtoMessage() {} func (x *SdkCloudBackupSchedUpdateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[294] + mi := &file_api_api_proto_msgTypes[309] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24641,7 +25499,7 @@ func (x *SdkCloudBackupSchedUpdateResponse) ProtoReflect() protoreflect.Message // Deprecated: Use SdkCloudBackupSchedUpdateResponse.ProtoReflect.Descriptor instead. func (*SdkCloudBackupSchedUpdateResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{294} + return file_api_api_proto_rawDescGZIP(), []int{309} } // Defines a request to delete a backup schedule @@ -24657,7 +25515,7 @@ type SdkCloudBackupSchedDeleteRequest struct { func (x *SdkCloudBackupSchedDeleteRequest) Reset() { *x = SdkCloudBackupSchedDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[295] + mi := &file_api_api_proto_msgTypes[310] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24670,7 +25528,7 @@ func (x *SdkCloudBackupSchedDeleteRequest) String() string { func (*SdkCloudBackupSchedDeleteRequest) ProtoMessage() {} func (x *SdkCloudBackupSchedDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[295] + mi := &file_api_api_proto_msgTypes[310] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24683,7 +25541,7 @@ func (x *SdkCloudBackupSchedDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupSchedDeleteRequest.ProtoReflect.Descriptor instead. func (*SdkCloudBackupSchedDeleteRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{295} + return file_api_api_proto_rawDescGZIP(), []int{310} } func (x *SdkCloudBackupSchedDeleteRequest) GetBackupScheduleId() string { @@ -24703,7 +25561,7 @@ type SdkCloudBackupSchedDeleteResponse struct { func (x *SdkCloudBackupSchedDeleteResponse) Reset() { *x = SdkCloudBackupSchedDeleteResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[296] + mi := &file_api_api_proto_msgTypes[311] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24716,7 +25574,7 @@ func (x *SdkCloudBackupSchedDeleteResponse) String() string { func (*SdkCloudBackupSchedDeleteResponse) ProtoMessage() {} func (x *SdkCloudBackupSchedDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[296] + mi := &file_api_api_proto_msgTypes[311] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24729,7 +25587,7 @@ func (x *SdkCloudBackupSchedDeleteResponse) ProtoReflect() protoreflect.Message // Deprecated: Use SdkCloudBackupSchedDeleteResponse.ProtoReflect.Descriptor instead. func (*SdkCloudBackupSchedDeleteResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{296} + return file_api_api_proto_rawDescGZIP(), []int{311} } // Empty request @@ -24742,7 +25600,7 @@ type SdkCloudBackupSchedEnumerateRequest struct { func (x *SdkCloudBackupSchedEnumerateRequest) Reset() { *x = SdkCloudBackupSchedEnumerateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[297] + mi := &file_api_api_proto_msgTypes[312] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24755,7 +25613,7 @@ func (x *SdkCloudBackupSchedEnumerateRequest) String() string { func (*SdkCloudBackupSchedEnumerateRequest) ProtoMessage() {} func (x *SdkCloudBackupSchedEnumerateRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[297] + mi := &file_api_api_proto_msgTypes[312] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24768,7 +25626,7 @@ func (x *SdkCloudBackupSchedEnumerateRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use SdkCloudBackupSchedEnumerateRequest.ProtoReflect.Descriptor instead. func (*SdkCloudBackupSchedEnumerateRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{297} + return file_api_api_proto_rawDescGZIP(), []int{312} } // Defines a response containing a map listing the schedules for volume @@ -24785,7 +25643,7 @@ type SdkCloudBackupSchedEnumerateResponse struct { func (x *SdkCloudBackupSchedEnumerateResponse) Reset() { *x = SdkCloudBackupSchedEnumerateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[298] + mi := &file_api_api_proto_msgTypes[313] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24798,7 +25656,7 @@ func (x *SdkCloudBackupSchedEnumerateResponse) String() string { func (*SdkCloudBackupSchedEnumerateResponse) ProtoMessage() {} func (x *SdkCloudBackupSchedEnumerateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[298] + mi := &file_api_api_proto_msgTypes[313] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24811,7 +25669,7 @@ func (x *SdkCloudBackupSchedEnumerateResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use SdkCloudBackupSchedEnumerateResponse.ProtoReflect.Descriptor instead. func (*SdkCloudBackupSchedEnumerateResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{298} + return file_api_api_proto_rawDescGZIP(), []int{313} } func (x *SdkCloudBackupSchedEnumerateResponse) GetCloudSchedList() map[string]*SdkCloudBackupScheduleInfo { @@ -24838,7 +25696,7 @@ type SdkCloudBackupSizeRequest struct { func (x *SdkCloudBackupSizeRequest) Reset() { *x = SdkCloudBackupSizeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[299] + mi := &file_api_api_proto_msgTypes[314] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24851,7 +25709,7 @@ func (x *SdkCloudBackupSizeRequest) String() string { func (*SdkCloudBackupSizeRequest) ProtoMessage() {} func (x *SdkCloudBackupSizeRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[299] + mi := &file_api_api_proto_msgTypes[314] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24864,7 +25722,7 @@ func (x *SdkCloudBackupSizeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupSizeRequest.ProtoReflect.Descriptor instead. func (*SdkCloudBackupSizeRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{299} + return file_api_api_proto_rawDescGZIP(), []int{314} } func (x *SdkCloudBackupSizeRequest) GetBackupId() string { @@ -24900,7 +25758,7 @@ type SdkCloudBackupSizeResponse struct { func (x *SdkCloudBackupSizeResponse) Reset() { *x = SdkCloudBackupSizeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[300] + mi := &file_api_api_proto_msgTypes[315] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24913,7 +25771,7 @@ func (x *SdkCloudBackupSizeResponse) String() string { func (*SdkCloudBackupSizeResponse) ProtoMessage() {} func (x *SdkCloudBackupSizeResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[300] + mi := &file_api_api_proto_msgTypes[315] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24926,7 +25784,7 @@ func (x *SdkCloudBackupSizeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudBackupSizeResponse.ProtoReflect.Descriptor instead. func (*SdkCloudBackupSizeResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{300} + return file_api_api_proto_rawDescGZIP(), []int{315} } func (x *SdkCloudBackupSizeResponse) GetSize() uint64 { @@ -25021,7 +25879,7 @@ type SdkRule struct { func (x *SdkRule) Reset() { *x = SdkRule{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[301] + mi := &file_api_api_proto_msgTypes[316] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25034,7 +25892,7 @@ func (x *SdkRule) String() string { func (*SdkRule) ProtoMessage() {} func (x *SdkRule) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[301] + mi := &file_api_api_proto_msgTypes[316] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25047,7 +25905,7 @@ func (x *SdkRule) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkRule.ProtoReflect.Descriptor instead. func (*SdkRule) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{301} + return file_api_api_proto_rawDescGZIP(), []int{316} } func (x *SdkRule) GetServices() []string { @@ -25076,7 +25934,7 @@ type SdkRole struct { func (x *SdkRole) Reset() { *x = SdkRole{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[302] + mi := &file_api_api_proto_msgTypes[317] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25089,7 +25947,7 @@ func (x *SdkRole) String() string { func (*SdkRole) ProtoMessage() {} func (x *SdkRole) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[302] + mi := &file_api_api_proto_msgTypes[317] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25102,7 +25960,7 @@ func (x *SdkRole) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkRole.ProtoReflect.Descriptor instead. func (*SdkRole) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{302} + return file_api_api_proto_rawDescGZIP(), []int{317} } func (x *SdkRole) GetName() string { @@ -25132,7 +25990,7 @@ type SdkRoleCreateRequest struct { func (x *SdkRoleCreateRequest) Reset() { *x = SdkRoleCreateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[303] + mi := &file_api_api_proto_msgTypes[318] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25145,7 +26003,7 @@ func (x *SdkRoleCreateRequest) String() string { func (*SdkRoleCreateRequest) ProtoMessage() {} func (x *SdkRoleCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[303] + mi := &file_api_api_proto_msgTypes[318] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25158,7 +26016,7 @@ func (x *SdkRoleCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkRoleCreateRequest.ProtoReflect.Descriptor instead. func (*SdkRoleCreateRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{303} + return file_api_api_proto_rawDescGZIP(), []int{318} } func (x *SdkRoleCreateRequest) GetRole() *SdkRole { @@ -25181,7 +26039,7 @@ type SdkRoleCreateResponse struct { func (x *SdkRoleCreateResponse) Reset() { *x = SdkRoleCreateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[304] + mi := &file_api_api_proto_msgTypes[319] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25194,7 +26052,7 @@ func (x *SdkRoleCreateResponse) String() string { func (*SdkRoleCreateResponse) ProtoMessage() {} func (x *SdkRoleCreateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[304] + mi := &file_api_api_proto_msgTypes[319] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25207,7 +26065,7 @@ func (x *SdkRoleCreateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkRoleCreateResponse.ProtoReflect.Descriptor instead. func (*SdkRoleCreateResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{304} + return file_api_api_proto_rawDescGZIP(), []int{319} } func (x *SdkRoleCreateResponse) GetRole() *SdkRole { @@ -25227,7 +26085,7 @@ type SdkRoleEnumerateRequest struct { func (x *SdkRoleEnumerateRequest) Reset() { *x = SdkRoleEnumerateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[305] + mi := &file_api_api_proto_msgTypes[320] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25240,7 +26098,7 @@ func (x *SdkRoleEnumerateRequest) String() string { func (*SdkRoleEnumerateRequest) ProtoMessage() {} func (x *SdkRoleEnumerateRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[305] + mi := &file_api_api_proto_msgTypes[320] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25253,7 +26111,7 @@ func (x *SdkRoleEnumerateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkRoleEnumerateRequest.ProtoReflect.Descriptor instead. func (*SdkRoleEnumerateRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{305} + return file_api_api_proto_rawDescGZIP(), []int{320} } // Respose to enumerate all roles @@ -25269,7 +26127,7 @@ type SdkRoleEnumerateResponse struct { func (x *SdkRoleEnumerateResponse) Reset() { *x = SdkRoleEnumerateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[306] + mi := &file_api_api_proto_msgTypes[321] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25282,7 +26140,7 @@ func (x *SdkRoleEnumerateResponse) String() string { func (*SdkRoleEnumerateResponse) ProtoMessage() {} func (x *SdkRoleEnumerateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[306] + mi := &file_api_api_proto_msgTypes[321] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25295,7 +26153,7 @@ func (x *SdkRoleEnumerateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkRoleEnumerateResponse.ProtoReflect.Descriptor instead. func (*SdkRoleEnumerateResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{306} + return file_api_api_proto_rawDescGZIP(), []int{321} } func (x *SdkRoleEnumerateResponse) GetNames() []string { @@ -25318,7 +26176,7 @@ type SdkRoleInspectRequest struct { func (x *SdkRoleInspectRequest) Reset() { *x = SdkRoleInspectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[307] + mi := &file_api_api_proto_msgTypes[322] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25331,7 +26189,7 @@ func (x *SdkRoleInspectRequest) String() string { func (*SdkRoleInspectRequest) ProtoMessage() {} func (x *SdkRoleInspectRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[307] + mi := &file_api_api_proto_msgTypes[322] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25344,7 +26202,7 @@ func (x *SdkRoleInspectRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkRoleInspectRequest.ProtoReflect.Descriptor instead. func (*SdkRoleInspectRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{307} + return file_api_api_proto_rawDescGZIP(), []int{322} } func (x *SdkRoleInspectRequest) GetName() string { @@ -25367,7 +26225,7 @@ type SdkRoleInspectResponse struct { func (x *SdkRoleInspectResponse) Reset() { *x = SdkRoleInspectResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[308] + mi := &file_api_api_proto_msgTypes[323] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25380,7 +26238,7 @@ func (x *SdkRoleInspectResponse) String() string { func (*SdkRoleInspectResponse) ProtoMessage() {} func (x *SdkRoleInspectResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[308] + mi := &file_api_api_proto_msgTypes[323] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25393,7 +26251,7 @@ func (x *SdkRoleInspectResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkRoleInspectResponse.ProtoReflect.Descriptor instead. func (*SdkRoleInspectResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{308} + return file_api_api_proto_rawDescGZIP(), []int{323} } func (x *SdkRoleInspectResponse) GetRole() *SdkRole { @@ -25415,7 +26273,7 @@ type SdkRoleDeleteRequest struct { func (x *SdkRoleDeleteRequest) Reset() { *x = SdkRoleDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[309] + mi := &file_api_api_proto_msgTypes[324] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25428,7 +26286,7 @@ func (x *SdkRoleDeleteRequest) String() string { func (*SdkRoleDeleteRequest) ProtoMessage() {} func (x *SdkRoleDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[309] + mi := &file_api_api_proto_msgTypes[324] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25441,7 +26299,7 @@ func (x *SdkRoleDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkRoleDeleteRequest.ProtoReflect.Descriptor instead. func (*SdkRoleDeleteRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{309} + return file_api_api_proto_rawDescGZIP(), []int{324} } func (x *SdkRoleDeleteRequest) GetName() string { @@ -25461,7 +26319,7 @@ type SdkRoleDeleteResponse struct { func (x *SdkRoleDeleteResponse) Reset() { *x = SdkRoleDeleteResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[310] + mi := &file_api_api_proto_msgTypes[325] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25474,7 +26332,7 @@ func (x *SdkRoleDeleteResponse) String() string { func (*SdkRoleDeleteResponse) ProtoMessage() {} func (x *SdkRoleDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[310] + mi := &file_api_api_proto_msgTypes[325] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25487,7 +26345,7 @@ func (x *SdkRoleDeleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkRoleDeleteResponse.ProtoReflect.Descriptor instead. func (*SdkRoleDeleteResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{310} + return file_api_api_proto_rawDescGZIP(), []int{325} } // Defines a request to update an existing role @@ -25503,7 +26361,7 @@ type SdkRoleUpdateRequest struct { func (x *SdkRoleUpdateRequest) Reset() { *x = SdkRoleUpdateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[311] + mi := &file_api_api_proto_msgTypes[326] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25516,7 +26374,7 @@ func (x *SdkRoleUpdateRequest) String() string { func (*SdkRoleUpdateRequest) ProtoMessage() {} func (x *SdkRoleUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[311] + mi := &file_api_api_proto_msgTypes[326] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25529,7 +26387,7 @@ func (x *SdkRoleUpdateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkRoleUpdateRequest.ProtoReflect.Descriptor instead. func (*SdkRoleUpdateRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{311} + return file_api_api_proto_rawDescGZIP(), []int{326} } func (x *SdkRoleUpdateRequest) GetRole() *SdkRole { @@ -25552,7 +26410,7 @@ type SdkRoleUpdateResponse struct { func (x *SdkRoleUpdateResponse) Reset() { *x = SdkRoleUpdateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[312] + mi := &file_api_api_proto_msgTypes[327] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25565,7 +26423,7 @@ func (x *SdkRoleUpdateResponse) String() string { func (*SdkRoleUpdateResponse) ProtoMessage() {} func (x *SdkRoleUpdateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[312] + mi := &file_api_api_proto_msgTypes[327] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25578,7 +26436,7 @@ func (x *SdkRoleUpdateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkRoleUpdateResponse.ProtoReflect.Descriptor instead. func (*SdkRoleUpdateResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{312} + return file_api_api_proto_rawDescGZIP(), []int{327} } func (x *SdkRoleUpdateResponse) GetRole() *SdkRole { @@ -25597,7 +26455,7 @@ type FilesystemTrim struct { func (x *FilesystemTrim) Reset() { *x = FilesystemTrim{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[313] + mi := &file_api_api_proto_msgTypes[328] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25610,7 +26468,7 @@ func (x *FilesystemTrim) String() string { func (*FilesystemTrim) ProtoMessage() {} func (x *FilesystemTrim) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[313] + mi := &file_api_api_proto_msgTypes[328] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25623,7 +26481,7 @@ func (x *FilesystemTrim) ProtoReflect() protoreflect.Message { // Deprecated: Use FilesystemTrim.ProtoReflect.Descriptor instead. func (*FilesystemTrim) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{313} + return file_api_api_proto_rawDescGZIP(), []int{328} } // SdkFilesystemTrimStartRequest defines a request to start a background filesystem trim operation @@ -25641,7 +26499,7 @@ type SdkFilesystemTrimStartRequest struct { func (x *SdkFilesystemTrimStartRequest) Reset() { *x = SdkFilesystemTrimStartRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[314] + mi := &file_api_api_proto_msgTypes[329] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25654,7 +26512,7 @@ func (x *SdkFilesystemTrimStartRequest) String() string { func (*SdkFilesystemTrimStartRequest) ProtoMessage() {} func (x *SdkFilesystemTrimStartRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[314] + mi := &file_api_api_proto_msgTypes[329] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25667,7 +26525,7 @@ func (x *SdkFilesystemTrimStartRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkFilesystemTrimStartRequest.ProtoReflect.Descriptor instead. func (*SdkFilesystemTrimStartRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{314} + return file_api_api_proto_rawDescGZIP(), []int{329} } func (x *SdkFilesystemTrimStartRequest) GetVolumeId() string { @@ -25700,7 +26558,7 @@ type SdkFilesystemTrimStartResponse struct { func (x *SdkFilesystemTrimStartResponse) Reset() { *x = SdkFilesystemTrimStartResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[315] + mi := &file_api_api_proto_msgTypes[330] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25713,7 +26571,7 @@ func (x *SdkFilesystemTrimStartResponse) String() string { func (*SdkFilesystemTrimStartResponse) ProtoMessage() {} func (x *SdkFilesystemTrimStartResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[315] + mi := &file_api_api_proto_msgTypes[330] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25726,7 +26584,7 @@ func (x *SdkFilesystemTrimStartResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkFilesystemTrimStartResponse.ProtoReflect.Descriptor instead. func (*SdkFilesystemTrimStartResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{315} + return file_api_api_proto_rawDescGZIP(), []int{330} } func (x *SdkFilesystemTrimStartResponse) GetStatus() FilesystemTrim_FilesystemTrimStatus { @@ -25759,7 +26617,7 @@ type SdkFilesystemTrimStatusRequest struct { func (x *SdkFilesystemTrimStatusRequest) Reset() { *x = SdkFilesystemTrimStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[316] + mi := &file_api_api_proto_msgTypes[331] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25772,7 +26630,7 @@ func (x *SdkFilesystemTrimStatusRequest) String() string { func (*SdkFilesystemTrimStatusRequest) ProtoMessage() {} func (x *SdkFilesystemTrimStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[316] + mi := &file_api_api_proto_msgTypes[331] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25785,7 +26643,7 @@ func (x *SdkFilesystemTrimStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkFilesystemTrimStatusRequest.ProtoReflect.Descriptor instead. func (*SdkFilesystemTrimStatusRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{316} + return file_api_api_proto_rawDescGZIP(), []int{331} } func (x *SdkFilesystemTrimStatusRequest) GetVolumeId() string { @@ -25818,7 +26676,7 @@ type SdkFilesystemTrimStatusResponse struct { func (x *SdkFilesystemTrimStatusResponse) Reset() { *x = SdkFilesystemTrimStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[317] + mi := &file_api_api_proto_msgTypes[332] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25831,7 +26689,7 @@ func (x *SdkFilesystemTrimStatusResponse) String() string { func (*SdkFilesystemTrimStatusResponse) ProtoMessage() {} func (x *SdkFilesystemTrimStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[317] + mi := &file_api_api_proto_msgTypes[332] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25844,7 +26702,7 @@ func (x *SdkFilesystemTrimStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkFilesystemTrimStatusResponse.ProtoReflect.Descriptor instead. func (*SdkFilesystemTrimStatusResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{317} + return file_api_api_proto_rawDescGZIP(), []int{332} } func (x *SdkFilesystemTrimStatusResponse) GetStatus() FilesystemTrim_FilesystemTrimStatus { @@ -25871,7 +26729,7 @@ type SdkAutoFSTrimStatusRequest struct { func (x *SdkAutoFSTrimStatusRequest) Reset() { *x = SdkAutoFSTrimStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[318] + mi := &file_api_api_proto_msgTypes[333] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25884,7 +26742,7 @@ func (x *SdkAutoFSTrimStatusRequest) String() string { func (*SdkAutoFSTrimStatusRequest) ProtoMessage() {} func (x *SdkAutoFSTrimStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[318] + mi := &file_api_api_proto_msgTypes[333] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25897,7 +26755,7 @@ func (x *SdkAutoFSTrimStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkAutoFSTrimStatusRequest.ProtoReflect.Descriptor instead. func (*SdkAutoFSTrimStatusRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{318} + return file_api_api_proto_rawDescGZIP(), []int{333} } // SdkAutoFSTrimStatusResponse defines the response for a @@ -25916,7 +26774,7 @@ type SdkAutoFSTrimStatusResponse struct { func (x *SdkAutoFSTrimStatusResponse) Reset() { *x = SdkAutoFSTrimStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[319] + mi := &file_api_api_proto_msgTypes[334] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25929,7 +26787,7 @@ func (x *SdkAutoFSTrimStatusResponse) String() string { func (*SdkAutoFSTrimStatusResponse) ProtoMessage() {} func (x *SdkAutoFSTrimStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[319] + mi := &file_api_api_proto_msgTypes[334] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25942,7 +26800,7 @@ func (x *SdkAutoFSTrimStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkAutoFSTrimStatusResponse.ProtoReflect.Descriptor instead. func (*SdkAutoFSTrimStatusResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{319} + return file_api_api_proto_rawDescGZIP(), []int{334} } func (x *SdkAutoFSTrimStatusResponse) GetTrimStatus() map[string]FilesystemTrim_FilesystemTrimStatus { @@ -25969,7 +26827,7 @@ type SdkAutoFSTrimUsageRequest struct { func (x *SdkAutoFSTrimUsageRequest) Reset() { *x = SdkAutoFSTrimUsageRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[320] + mi := &file_api_api_proto_msgTypes[335] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25982,7 +26840,7 @@ func (x *SdkAutoFSTrimUsageRequest) String() string { func (*SdkAutoFSTrimUsageRequest) ProtoMessage() {} func (x *SdkAutoFSTrimUsageRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[320] + mi := &file_api_api_proto_msgTypes[335] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25995,7 +26853,7 @@ func (x *SdkAutoFSTrimUsageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkAutoFSTrimUsageRequest.ProtoReflect.Descriptor instead. func (*SdkAutoFSTrimUsageRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{320} + return file_api_api_proto_rawDescGZIP(), []int{335} } // SdkAutoFSTrimUsageResponse defines the response for a @@ -26014,7 +26872,7 @@ type SdkAutoFSTrimUsageResponse struct { func (x *SdkAutoFSTrimUsageResponse) Reset() { *x = SdkAutoFSTrimUsageResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[321] + mi := &file_api_api_proto_msgTypes[336] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26027,7 +26885,7 @@ func (x *SdkAutoFSTrimUsageResponse) String() string { func (*SdkAutoFSTrimUsageResponse) ProtoMessage() {} func (x *SdkAutoFSTrimUsageResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[321] + mi := &file_api_api_proto_msgTypes[336] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26040,7 +26898,7 @@ func (x *SdkAutoFSTrimUsageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkAutoFSTrimUsageResponse.ProtoReflect.Descriptor instead. func (*SdkAutoFSTrimUsageResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{321} + return file_api_api_proto_rawDescGZIP(), []int{336} } func (x *SdkAutoFSTrimUsageResponse) GetUsage() map[string]*FstrimVolumeUsageInfo { @@ -26073,7 +26931,7 @@ type SdkFilesystemTrimStopRequest struct { func (x *SdkFilesystemTrimStopRequest) Reset() { *x = SdkFilesystemTrimStopRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[322] + mi := &file_api_api_proto_msgTypes[337] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26086,7 +26944,7 @@ func (x *SdkFilesystemTrimStopRequest) String() string { func (*SdkFilesystemTrimStopRequest) ProtoMessage() {} func (x *SdkFilesystemTrimStopRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[322] + mi := &file_api_api_proto_msgTypes[337] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26099,7 +26957,7 @@ func (x *SdkFilesystemTrimStopRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkFilesystemTrimStopRequest.ProtoReflect.Descriptor instead. func (*SdkFilesystemTrimStopRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{322} + return file_api_api_proto_rawDescGZIP(), []int{337} } func (x *SdkFilesystemTrimStopRequest) GetVolumeId() string { @@ -26129,7 +26987,7 @@ type SdkVolumeBytesUsedResponse struct { func (x *SdkVolumeBytesUsedResponse) Reset() { *x = SdkVolumeBytesUsedResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[323] + mi := &file_api_api_proto_msgTypes[338] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26142,7 +27000,7 @@ func (x *SdkVolumeBytesUsedResponse) String() string { func (*SdkVolumeBytesUsedResponse) ProtoMessage() {} func (x *SdkVolumeBytesUsedResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[323] + mi := &file_api_api_proto_msgTypes[338] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26155,7 +27013,7 @@ func (x *SdkVolumeBytesUsedResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkVolumeBytesUsedResponse.ProtoReflect.Descriptor instead. func (*SdkVolumeBytesUsedResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{323} + return file_api_api_proto_rawDescGZIP(), []int{338} } func (x *SdkVolumeBytesUsedResponse) GetVolUtilInfo() *VolumeBytesUsedByNode { @@ -26181,7 +27039,7 @@ type SdkVolumeBytesUsedRequest struct { func (x *SdkVolumeBytesUsedRequest) Reset() { *x = SdkVolumeBytesUsedRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[324] + mi := &file_api_api_proto_msgTypes[339] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26194,7 +27052,7 @@ func (x *SdkVolumeBytesUsedRequest) String() string { func (*SdkVolumeBytesUsedRequest) ProtoMessage() {} func (x *SdkVolumeBytesUsedRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[324] + mi := &file_api_api_proto_msgTypes[339] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26207,7 +27065,7 @@ func (x *SdkVolumeBytesUsedRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkVolumeBytesUsedRequest.ProtoReflect.Descriptor instead. func (*SdkVolumeBytesUsedRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{324} + return file_api_api_proto_rawDescGZIP(), []int{339} } func (x *SdkVolumeBytesUsedRequest) GetNodeId() string { @@ -26234,7 +27092,7 @@ type SdkFilesystemTrimStopResponse struct { func (x *SdkFilesystemTrimStopResponse) Reset() { *x = SdkFilesystemTrimStopResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[325] + mi := &file_api_api_proto_msgTypes[340] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26247,7 +27105,7 @@ func (x *SdkFilesystemTrimStopResponse) String() string { func (*SdkFilesystemTrimStopResponse) ProtoMessage() {} func (x *SdkFilesystemTrimStopResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[325] + mi := &file_api_api_proto_msgTypes[340] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26260,7 +27118,7 @@ func (x *SdkFilesystemTrimStopResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkFilesystemTrimStopResponse.ProtoReflect.Descriptor instead. func (*SdkFilesystemTrimStopResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{325} + return file_api_api_proto_rawDescGZIP(), []int{340} } // SdkAutoFSTrimPushRequest defines the request to push a volume to autofstrim @@ -26277,7 +27135,7 @@ type SdkAutoFSTrimPushRequest struct { func (x *SdkAutoFSTrimPushRequest) Reset() { *x = SdkAutoFSTrimPushRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[326] + mi := &file_api_api_proto_msgTypes[341] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26290,7 +27148,7 @@ func (x *SdkAutoFSTrimPushRequest) String() string { func (*SdkAutoFSTrimPushRequest) ProtoMessage() {} func (x *SdkAutoFSTrimPushRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[326] + mi := &file_api_api_proto_msgTypes[341] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26303,7 +27161,7 @@ func (x *SdkAutoFSTrimPushRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkAutoFSTrimPushRequest.ProtoReflect.Descriptor instead. func (*SdkAutoFSTrimPushRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{326} + return file_api_api_proto_rawDescGZIP(), []int{341} } func (x *SdkAutoFSTrimPushRequest) GetVolumeId() string { @@ -26327,7 +27185,7 @@ type SdkAutoFSTrimPushResponse struct { func (x *SdkAutoFSTrimPushResponse) Reset() { *x = SdkAutoFSTrimPushResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[327] + mi := &file_api_api_proto_msgTypes[342] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26340,7 +27198,7 @@ func (x *SdkAutoFSTrimPushResponse) String() string { func (*SdkAutoFSTrimPushResponse) ProtoMessage() {} func (x *SdkAutoFSTrimPushResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[327] + mi := &file_api_api_proto_msgTypes[342] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26353,7 +27211,7 @@ func (x *SdkAutoFSTrimPushResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkAutoFSTrimPushResponse.ProtoReflect.Descriptor instead. func (*SdkAutoFSTrimPushResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{327} + return file_api_api_proto_rawDescGZIP(), []int{342} } func (x *SdkAutoFSTrimPushResponse) GetMessage() string { @@ -26377,7 +27235,7 @@ type SdkAutoFSTrimPopRequest struct { func (x *SdkAutoFSTrimPopRequest) Reset() { *x = SdkAutoFSTrimPopRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[328] + mi := &file_api_api_proto_msgTypes[343] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26390,7 +27248,7 @@ func (x *SdkAutoFSTrimPopRequest) String() string { func (*SdkAutoFSTrimPopRequest) ProtoMessage() {} func (x *SdkAutoFSTrimPopRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[328] + mi := &file_api_api_proto_msgTypes[343] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26403,7 +27261,7 @@ func (x *SdkAutoFSTrimPopRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkAutoFSTrimPopRequest.ProtoReflect.Descriptor instead. func (*SdkAutoFSTrimPopRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{328} + return file_api_api_proto_rawDescGZIP(), []int{343} } func (x *SdkAutoFSTrimPopRequest) GetVolumeId() string { @@ -26427,7 +27285,7 @@ type SdkAutoFSTrimPopResponse struct { func (x *SdkAutoFSTrimPopResponse) Reset() { *x = SdkAutoFSTrimPopResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[329] + mi := &file_api_api_proto_msgTypes[344] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26440,7 +27298,7 @@ func (x *SdkAutoFSTrimPopResponse) String() string { func (*SdkAutoFSTrimPopResponse) ProtoMessage() {} func (x *SdkAutoFSTrimPopResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[329] + mi := &file_api_api_proto_msgTypes[344] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26453,7 +27311,7 @@ func (x *SdkAutoFSTrimPopResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkAutoFSTrimPopResponse.ProtoReflect.Descriptor instead. func (*SdkAutoFSTrimPopResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{329} + return file_api_api_proto_rawDescGZIP(), []int{344} } func (x *SdkAutoFSTrimPopResponse) GetMessage() string { @@ -26472,7 +27330,7 @@ type FilesystemCheck struct { func (x *FilesystemCheck) Reset() { *x = FilesystemCheck{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[330] + mi := &file_api_api_proto_msgTypes[345] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26485,7 +27343,7 @@ func (x *FilesystemCheck) String() string { func (*FilesystemCheck) ProtoMessage() {} func (x *FilesystemCheck) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[330] + mi := &file_api_api_proto_msgTypes[345] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26498,7 +27356,7 @@ func (x *FilesystemCheck) ProtoReflect() protoreflect.Message { // Deprecated: Use FilesystemCheck.ProtoReflect.Descriptor instead. func (*FilesystemCheck) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{330} + return file_api_api_proto_rawDescGZIP(), []int{345} } // FilesystemCheckSnapInfo contains the volume snapshot info for @@ -26515,7 +27373,7 @@ type FilesystemCheckSnapInfo struct { func (x *FilesystemCheckSnapInfo) Reset() { *x = FilesystemCheckSnapInfo{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[331] + mi := &file_api_api_proto_msgTypes[346] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26528,7 +27386,7 @@ func (x *FilesystemCheckSnapInfo) String() string { func (*FilesystemCheckSnapInfo) ProtoMessage() {} func (x *FilesystemCheckSnapInfo) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[331] + mi := &file_api_api_proto_msgTypes[346] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26541,7 +27399,7 @@ func (x *FilesystemCheckSnapInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use FilesystemCheckSnapInfo.ProtoReflect.Descriptor instead. func (*FilesystemCheckSnapInfo) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{331} + return file_api_api_proto_rawDescGZIP(), []int{346} } func (x *FilesystemCheckSnapInfo) GetVolumeSnapshotName() string { @@ -26569,7 +27427,7 @@ type FilesystemCheckVolInfo struct { func (x *FilesystemCheckVolInfo) Reset() { *x = FilesystemCheckVolInfo{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[332] + mi := &file_api_api_proto_msgTypes[347] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26582,7 +27440,7 @@ func (x *FilesystemCheckVolInfo) String() string { func (*FilesystemCheckVolInfo) ProtoMessage() {} func (x *FilesystemCheckVolInfo) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[332] + mi := &file_api_api_proto_msgTypes[347] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26595,7 +27453,7 @@ func (x *FilesystemCheckVolInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use FilesystemCheckVolInfo.ProtoReflect.Descriptor instead. func (*FilesystemCheckVolInfo) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{332} + return file_api_api_proto_rawDescGZIP(), []int{347} } func (x *FilesystemCheckVolInfo) GetVolumeName() string { @@ -26635,7 +27493,7 @@ type SdkFilesystemCheckStartRequest struct { func (x *SdkFilesystemCheckStartRequest) Reset() { *x = SdkFilesystemCheckStartRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[333] + mi := &file_api_api_proto_msgTypes[348] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26648,7 +27506,7 @@ func (x *SdkFilesystemCheckStartRequest) String() string { func (*SdkFilesystemCheckStartRequest) ProtoMessage() {} func (x *SdkFilesystemCheckStartRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[333] + mi := &file_api_api_proto_msgTypes[348] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26661,7 +27519,7 @@ func (x *SdkFilesystemCheckStartRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkFilesystemCheckStartRequest.ProtoReflect.Descriptor instead. func (*SdkFilesystemCheckStartRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{333} + return file_api_api_proto_rawDescGZIP(), []int{348} } func (x *SdkFilesystemCheckStartRequest) GetVolumeId() string { @@ -26694,7 +27552,7 @@ type SdkFilesystemCheckStartResponse struct { func (x *SdkFilesystemCheckStartResponse) Reset() { *x = SdkFilesystemCheckStartResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[334] + mi := &file_api_api_proto_msgTypes[349] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26707,7 +27565,7 @@ func (x *SdkFilesystemCheckStartResponse) String() string { func (*SdkFilesystemCheckStartResponse) ProtoMessage() {} func (x *SdkFilesystemCheckStartResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[334] + mi := &file_api_api_proto_msgTypes[349] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26720,7 +27578,7 @@ func (x *SdkFilesystemCheckStartResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkFilesystemCheckStartResponse.ProtoReflect.Descriptor instead. func (*SdkFilesystemCheckStartResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{334} + return file_api_api_proto_rawDescGZIP(), []int{349} } func (x *SdkFilesystemCheckStartResponse) GetStatus() FilesystemCheck_FilesystemCheckStatus { @@ -26751,7 +27609,7 @@ type SdkFilesystemCheckStatusRequest struct { func (x *SdkFilesystemCheckStatusRequest) Reset() { *x = SdkFilesystemCheckStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[335] + mi := &file_api_api_proto_msgTypes[350] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26764,7 +27622,7 @@ func (x *SdkFilesystemCheckStatusRequest) String() string { func (*SdkFilesystemCheckStatusRequest) ProtoMessage() {} func (x *SdkFilesystemCheckStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[335] + mi := &file_api_api_proto_msgTypes[350] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26777,7 +27635,7 @@ func (x *SdkFilesystemCheckStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkFilesystemCheckStatusRequest.ProtoReflect.Descriptor instead. func (*SdkFilesystemCheckStatusRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{335} + return file_api_api_proto_rawDescGZIP(), []int{350} } func (x *SdkFilesystemCheckStatusRequest) GetVolumeId() string { @@ -26808,7 +27666,7 @@ type SdkFilesystemCheckStatusResponse struct { func (x *SdkFilesystemCheckStatusResponse) Reset() { *x = SdkFilesystemCheckStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[336] + mi := &file_api_api_proto_msgTypes[351] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26821,7 +27679,7 @@ func (x *SdkFilesystemCheckStatusResponse) String() string { func (*SdkFilesystemCheckStatusResponse) ProtoMessage() {} func (x *SdkFilesystemCheckStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[336] + mi := &file_api_api_proto_msgTypes[351] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26834,7 +27692,7 @@ func (x *SdkFilesystemCheckStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkFilesystemCheckStatusResponse.ProtoReflect.Descriptor instead. func (*SdkFilesystemCheckStatusResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{336} + return file_api_api_proto_rawDescGZIP(), []int{351} } func (x *SdkFilesystemCheckStatusResponse) GetStatus() FilesystemCheck_FilesystemCheckStatus { @@ -26879,7 +27737,7 @@ type SdkFilesystemCheckStopRequest struct { func (x *SdkFilesystemCheckStopRequest) Reset() { *x = SdkFilesystemCheckStopRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[337] + mi := &file_api_api_proto_msgTypes[352] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26892,7 +27750,7 @@ func (x *SdkFilesystemCheckStopRequest) String() string { func (*SdkFilesystemCheckStopRequest) ProtoMessage() {} func (x *SdkFilesystemCheckStopRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[337] + mi := &file_api_api_proto_msgTypes[352] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26905,7 +27763,7 @@ func (x *SdkFilesystemCheckStopRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkFilesystemCheckStopRequest.ProtoReflect.Descriptor instead. func (*SdkFilesystemCheckStopRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{337} + return file_api_api_proto_rawDescGZIP(), []int{352} } func (x *SdkFilesystemCheckStopRequest) GetVolumeId() string { @@ -26925,7 +27783,7 @@ type SdkFilesystemCheckStopResponse struct { func (x *SdkFilesystemCheckStopResponse) Reset() { *x = SdkFilesystemCheckStopResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[338] + mi := &file_api_api_proto_msgTypes[353] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26938,7 +27796,7 @@ func (x *SdkFilesystemCheckStopResponse) String() string { func (*SdkFilesystemCheckStopResponse) ProtoMessage() {} func (x *SdkFilesystemCheckStopResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[338] + mi := &file_api_api_proto_msgTypes[353] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26951,7 +27809,7 @@ func (x *SdkFilesystemCheckStopResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkFilesystemCheckStopResponse.ProtoReflect.Descriptor instead. func (*SdkFilesystemCheckStopResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{338} + return file_api_api_proto_rawDescGZIP(), []int{353} } // SdkFilesystemCheckListSnapshotsRequest defines a request to list @@ -26970,7 +27828,7 @@ type SdkFilesystemCheckListSnapshotsRequest struct { func (x *SdkFilesystemCheckListSnapshotsRequest) Reset() { *x = SdkFilesystemCheckListSnapshotsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[339] + mi := &file_api_api_proto_msgTypes[354] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26983,7 +27841,7 @@ func (x *SdkFilesystemCheckListSnapshotsRequest) String() string { func (*SdkFilesystemCheckListSnapshotsRequest) ProtoMessage() {} func (x *SdkFilesystemCheckListSnapshotsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[339] + mi := &file_api_api_proto_msgTypes[354] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26996,7 +27854,7 @@ func (x *SdkFilesystemCheckListSnapshotsRequest) ProtoReflect() protoreflect.Mes // Deprecated: Use SdkFilesystemCheckListSnapshotsRequest.ProtoReflect.Descriptor instead. func (*SdkFilesystemCheckListSnapshotsRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{339} + return file_api_api_proto_rawDescGZIP(), []int{354} } func (x *SdkFilesystemCheckListSnapshotsRequest) GetVolumeId() string { @@ -27027,7 +27885,7 @@ type SdkFilesystemCheckListSnapshotsResponse struct { func (x *SdkFilesystemCheckListSnapshotsResponse) Reset() { *x = SdkFilesystemCheckListSnapshotsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[340] + mi := &file_api_api_proto_msgTypes[355] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27040,7 +27898,7 @@ func (x *SdkFilesystemCheckListSnapshotsResponse) String() string { func (*SdkFilesystemCheckListSnapshotsResponse) ProtoMessage() {} func (x *SdkFilesystemCheckListSnapshotsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[340] + mi := &file_api_api_proto_msgTypes[355] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27053,7 +27911,7 @@ func (x *SdkFilesystemCheckListSnapshotsResponse) ProtoReflect() protoreflect.Me // Deprecated: Use SdkFilesystemCheckListSnapshotsResponse.ProtoReflect.Descriptor instead. func (*SdkFilesystemCheckListSnapshotsResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{340} + return file_api_api_proto_rawDescGZIP(), []int{355} } func (x *SdkFilesystemCheckListSnapshotsResponse) GetSnapshots() map[string]*FilesystemCheckSnapInfo { @@ -27079,7 +27937,7 @@ type SdkFilesystemCheckDeleteSnapshotsRequest struct { func (x *SdkFilesystemCheckDeleteSnapshotsRequest) Reset() { *x = SdkFilesystemCheckDeleteSnapshotsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[341] + mi := &file_api_api_proto_msgTypes[356] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27092,7 +27950,7 @@ func (x *SdkFilesystemCheckDeleteSnapshotsRequest) String() string { func (*SdkFilesystemCheckDeleteSnapshotsRequest) ProtoMessage() {} func (x *SdkFilesystemCheckDeleteSnapshotsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[341] + mi := &file_api_api_proto_msgTypes[356] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27105,7 +27963,7 @@ func (x *SdkFilesystemCheckDeleteSnapshotsRequest) ProtoReflect() protoreflect.M // Deprecated: Use SdkFilesystemCheckDeleteSnapshotsRequest.ProtoReflect.Descriptor instead. func (*SdkFilesystemCheckDeleteSnapshotsRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{341} + return file_api_api_proto_rawDescGZIP(), []int{356} } func (x *SdkFilesystemCheckDeleteSnapshotsRequest) GetVolumeId() string { @@ -27133,7 +27991,7 @@ type SdkFilesystemCheckDeleteSnapshotsResponse struct { func (x *SdkFilesystemCheckDeleteSnapshotsResponse) Reset() { *x = SdkFilesystemCheckDeleteSnapshotsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[342] + mi := &file_api_api_proto_msgTypes[357] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27146,7 +28004,7 @@ func (x *SdkFilesystemCheckDeleteSnapshotsResponse) String() string { func (*SdkFilesystemCheckDeleteSnapshotsResponse) ProtoMessage() {} func (x *SdkFilesystemCheckDeleteSnapshotsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[342] + mi := &file_api_api_proto_msgTypes[357] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27159,7 +28017,7 @@ func (x *SdkFilesystemCheckDeleteSnapshotsResponse) ProtoReflect() protoreflect. // Deprecated: Use SdkFilesystemCheckDeleteSnapshotsResponse.ProtoReflect.Descriptor instead. func (*SdkFilesystemCheckDeleteSnapshotsResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{342} + return file_api_api_proto_rawDescGZIP(), []int{357} } // SdkFilesystemCheckListVolumesRequest defines a request to list @@ -27176,7 +28034,7 @@ type SdkFilesystemCheckListVolumesRequest struct { func (x *SdkFilesystemCheckListVolumesRequest) Reset() { *x = SdkFilesystemCheckListVolumesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[343] + mi := &file_api_api_proto_msgTypes[358] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27189,7 +28047,7 @@ func (x *SdkFilesystemCheckListVolumesRequest) String() string { func (*SdkFilesystemCheckListVolumesRequest) ProtoMessage() {} func (x *SdkFilesystemCheckListVolumesRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[343] + mi := &file_api_api_proto_msgTypes[358] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27202,7 +28060,7 @@ func (x *SdkFilesystemCheckListVolumesRequest) ProtoReflect() protoreflect.Messa // Deprecated: Use SdkFilesystemCheckListVolumesRequest.ProtoReflect.Descriptor instead. func (*SdkFilesystemCheckListVolumesRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{343} + return file_api_api_proto_rawDescGZIP(), []int{358} } func (x *SdkFilesystemCheckListVolumesRequest) GetNodeId() string { @@ -27226,7 +28084,7 @@ type SdkFilesystemCheckListVolumesResponse struct { func (x *SdkFilesystemCheckListVolumesResponse) Reset() { *x = SdkFilesystemCheckListVolumesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[344] + mi := &file_api_api_proto_msgTypes[359] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27239,7 +28097,7 @@ func (x *SdkFilesystemCheckListVolumesResponse) String() string { func (*SdkFilesystemCheckListVolumesResponse) ProtoMessage() {} func (x *SdkFilesystemCheckListVolumesResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[344] + mi := &file_api_api_proto_msgTypes[359] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27252,7 +28110,7 @@ func (x *SdkFilesystemCheckListVolumesResponse) ProtoReflect() protoreflect.Mess // Deprecated: Use SdkFilesystemCheckListVolumesResponse.ProtoReflect.Descriptor instead. func (*SdkFilesystemCheckListVolumesResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{344} + return file_api_api_proto_rawDescGZIP(), []int{359} } func (x *SdkFilesystemCheckListVolumesResponse) GetVolumes() map[string]*FilesystemCheckVolInfo { @@ -27272,7 +28130,7 @@ type SdkIdentityCapabilitiesRequest struct { func (x *SdkIdentityCapabilitiesRequest) Reset() { *x = SdkIdentityCapabilitiesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[345] + mi := &file_api_api_proto_msgTypes[360] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27285,7 +28143,7 @@ func (x *SdkIdentityCapabilitiesRequest) String() string { func (*SdkIdentityCapabilitiesRequest) ProtoMessage() {} func (x *SdkIdentityCapabilitiesRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[345] + mi := &file_api_api_proto_msgTypes[360] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27298,7 +28156,7 @@ func (x *SdkIdentityCapabilitiesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkIdentityCapabilitiesRequest.ProtoReflect.Descriptor instead. func (*SdkIdentityCapabilitiesRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{345} + return file_api_api_proto_rawDescGZIP(), []int{360} } // Defines a response containing the capabilities of the cluster @@ -27314,7 +28172,7 @@ type SdkIdentityCapabilitiesResponse struct { func (x *SdkIdentityCapabilitiesResponse) Reset() { *x = SdkIdentityCapabilitiesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[346] + mi := &file_api_api_proto_msgTypes[361] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27327,7 +28185,7 @@ func (x *SdkIdentityCapabilitiesResponse) String() string { func (*SdkIdentityCapabilitiesResponse) ProtoMessage() {} func (x *SdkIdentityCapabilitiesResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[346] + mi := &file_api_api_proto_msgTypes[361] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27340,7 +28198,7 @@ func (x *SdkIdentityCapabilitiesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkIdentityCapabilitiesResponse.ProtoReflect.Descriptor instead. func (*SdkIdentityCapabilitiesResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{346} + return file_api_api_proto_rawDescGZIP(), []int{361} } func (x *SdkIdentityCapabilitiesResponse) GetCapabilities() []*SdkServiceCapability { @@ -27360,7 +28218,7 @@ type SdkIdentityVersionRequest struct { func (x *SdkIdentityVersionRequest) Reset() { *x = SdkIdentityVersionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[347] + mi := &file_api_api_proto_msgTypes[362] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27373,7 +28231,7 @@ func (x *SdkIdentityVersionRequest) String() string { func (*SdkIdentityVersionRequest) ProtoMessage() {} func (x *SdkIdentityVersionRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[347] + mi := &file_api_api_proto_msgTypes[362] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27386,7 +28244,7 @@ func (x *SdkIdentityVersionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkIdentityVersionRequest.ProtoReflect.Descriptor instead. func (*SdkIdentityVersionRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{347} + return file_api_api_proto_rawDescGZIP(), []int{362} } // Defines a response containing version information @@ -27404,7 +28262,7 @@ type SdkIdentityVersionResponse struct { func (x *SdkIdentityVersionResponse) Reset() { *x = SdkIdentityVersionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[348] + mi := &file_api_api_proto_msgTypes[363] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27417,7 +28275,7 @@ func (x *SdkIdentityVersionResponse) String() string { func (*SdkIdentityVersionResponse) ProtoMessage() {} func (x *SdkIdentityVersionResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[348] + mi := &file_api_api_proto_msgTypes[363] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27430,7 +28288,7 @@ func (x *SdkIdentityVersionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkIdentityVersionResponse.ProtoReflect.Descriptor instead. func (*SdkIdentityVersionResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{348} + return file_api_api_proto_rawDescGZIP(), []int{363} } func (x *SdkIdentityVersionResponse) GetSdkVersion() *SdkVersion { @@ -27464,7 +28322,7 @@ type SdkServiceCapability struct { func (x *SdkServiceCapability) Reset() { *x = SdkServiceCapability{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[349] + mi := &file_api_api_proto_msgTypes[364] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27477,7 +28335,7 @@ func (x *SdkServiceCapability) String() string { func (*SdkServiceCapability) ProtoMessage() {} func (x *SdkServiceCapability) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[349] + mi := &file_api_api_proto_msgTypes[364] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27490,7 +28348,7 @@ func (x *SdkServiceCapability) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkServiceCapability.ProtoReflect.Descriptor instead. func (*SdkServiceCapability) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{349} + return file_api_api_proto_rawDescGZIP(), []int{364} } func (m *SdkServiceCapability) GetType() isSdkServiceCapability_Type { @@ -27540,7 +28398,7 @@ type SdkVersion struct { func (x *SdkVersion) Reset() { *x = SdkVersion{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[350] + mi := &file_api_api_proto_msgTypes[365] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27553,7 +28411,7 @@ func (x *SdkVersion) String() string { func (*SdkVersion) ProtoMessage() {} func (x *SdkVersion) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[350] + mi := &file_api_api_proto_msgTypes[365] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27566,7 +28424,7 @@ func (x *SdkVersion) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkVersion.ProtoReflect.Descriptor instead. func (*SdkVersion) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{350} + return file_api_api_proto_rawDescGZIP(), []int{365} } func (x *SdkVersion) GetMajor() int32 { @@ -27614,7 +28472,7 @@ type StorageVersion struct { func (x *StorageVersion) Reset() { *x = StorageVersion{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[351] + mi := &file_api_api_proto_msgTypes[366] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27627,7 +28485,7 @@ func (x *StorageVersion) String() string { func (*StorageVersion) ProtoMessage() {} func (x *StorageVersion) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[351] + mi := &file_api_api_proto_msgTypes[366] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27640,7 +28498,7 @@ func (x *StorageVersion) ProtoReflect() protoreflect.Message { // Deprecated: Use StorageVersion.ProtoReflect.Descriptor instead. func (*StorageVersion) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{351} + return file_api_api_proto_rawDescGZIP(), []int{366} } func (x *StorageVersion) GetDriver() string { @@ -27673,7 +28531,7 @@ type CloudMigrate struct { func (x *CloudMigrate) Reset() { *x = CloudMigrate{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[352] + mi := &file_api_api_proto_msgTypes[367] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27686,7 +28544,7 @@ func (x *CloudMigrate) String() string { func (*CloudMigrate) ProtoMessage() {} func (x *CloudMigrate) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[352] + mi := &file_api_api_proto_msgTypes[367] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27699,7 +28557,7 @@ func (x *CloudMigrate) ProtoReflect() protoreflect.Message { // Deprecated: Use CloudMigrate.ProtoReflect.Descriptor instead. func (*CloudMigrate) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{352} + return file_api_api_proto_rawDescGZIP(), []int{367} } // Request to start a cloud migration @@ -27722,7 +28580,7 @@ type CloudMigrateStartRequest struct { func (x *CloudMigrateStartRequest) Reset() { *x = CloudMigrateStartRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[353] + mi := &file_api_api_proto_msgTypes[368] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27735,7 +28593,7 @@ func (x *CloudMigrateStartRequest) String() string { func (*CloudMigrateStartRequest) ProtoMessage() {} func (x *CloudMigrateStartRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[353] + mi := &file_api_api_proto_msgTypes[368] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27748,7 +28606,7 @@ func (x *CloudMigrateStartRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CloudMigrateStartRequest.ProtoReflect.Descriptor instead. func (*CloudMigrateStartRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{353} + return file_api_api_proto_rawDescGZIP(), []int{368} } func (x *CloudMigrateStartRequest) GetOperation() CloudMigrate_OperationType { @@ -27800,7 +28658,7 @@ type SdkCloudMigrateStartRequest struct { func (x *SdkCloudMigrateStartRequest) Reset() { *x = SdkCloudMigrateStartRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[354] + mi := &file_api_api_proto_msgTypes[369] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27813,7 +28671,7 @@ func (x *SdkCloudMigrateStartRequest) String() string { func (*SdkCloudMigrateStartRequest) ProtoMessage() {} func (x *SdkCloudMigrateStartRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[354] + mi := &file_api_api_proto_msgTypes[369] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27826,7 +28684,7 @@ func (x *SdkCloudMigrateStartRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudMigrateStartRequest.ProtoReflect.Descriptor instead. func (*SdkCloudMigrateStartRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{354} + return file_api_api_proto_rawDescGZIP(), []int{369} } func (x *SdkCloudMigrateStartRequest) GetClusterId() string { @@ -27909,7 +28767,7 @@ type CloudMigrateStartResponse struct { func (x *CloudMigrateStartResponse) Reset() { *x = CloudMigrateStartResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[355] + mi := &file_api_api_proto_msgTypes[370] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27922,7 +28780,7 @@ func (x *CloudMigrateStartResponse) String() string { func (*CloudMigrateStartResponse) ProtoMessage() {} func (x *CloudMigrateStartResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[355] + mi := &file_api_api_proto_msgTypes[370] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27935,7 +28793,7 @@ func (x *CloudMigrateStartResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CloudMigrateStartResponse.ProtoReflect.Descriptor instead. func (*CloudMigrateStartResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{355} + return file_api_api_proto_rawDescGZIP(), []int{370} } func (x *CloudMigrateStartResponse) GetTaskId() string { @@ -27958,7 +28816,7 @@ type SdkCloudMigrateStartResponse struct { func (x *SdkCloudMigrateStartResponse) Reset() { *x = SdkCloudMigrateStartResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[356] + mi := &file_api_api_proto_msgTypes[371] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27971,7 +28829,7 @@ func (x *SdkCloudMigrateStartResponse) String() string { func (*SdkCloudMigrateStartResponse) ProtoMessage() {} func (x *SdkCloudMigrateStartResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[356] + mi := &file_api_api_proto_msgTypes[371] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27984,7 +28842,7 @@ func (x *SdkCloudMigrateStartResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudMigrateStartResponse.ProtoReflect.Descriptor instead. func (*SdkCloudMigrateStartResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{356} + return file_api_api_proto_rawDescGZIP(), []int{371} } func (x *SdkCloudMigrateStartResponse) GetResult() *CloudMigrateStartResponse { @@ -28007,7 +28865,7 @@ type CloudMigrateCancelRequest struct { func (x *CloudMigrateCancelRequest) Reset() { *x = CloudMigrateCancelRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[357] + mi := &file_api_api_proto_msgTypes[372] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28020,7 +28878,7 @@ func (x *CloudMigrateCancelRequest) String() string { func (*CloudMigrateCancelRequest) ProtoMessage() {} func (x *CloudMigrateCancelRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[357] + mi := &file_api_api_proto_msgTypes[372] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28033,7 +28891,7 @@ func (x *CloudMigrateCancelRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CloudMigrateCancelRequest.ProtoReflect.Descriptor instead. func (*CloudMigrateCancelRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{357} + return file_api_api_proto_rawDescGZIP(), []int{372} } func (x *CloudMigrateCancelRequest) GetTaskId() string { @@ -28056,7 +28914,7 @@ type SdkCloudMigrateCancelRequest struct { func (x *SdkCloudMigrateCancelRequest) Reset() { *x = SdkCloudMigrateCancelRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[358] + mi := &file_api_api_proto_msgTypes[373] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28069,7 +28927,7 @@ func (x *SdkCloudMigrateCancelRequest) String() string { func (*SdkCloudMigrateCancelRequest) ProtoMessage() {} func (x *SdkCloudMigrateCancelRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[358] + mi := &file_api_api_proto_msgTypes[373] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28082,7 +28940,7 @@ func (x *SdkCloudMigrateCancelRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudMigrateCancelRequest.ProtoReflect.Descriptor instead. func (*SdkCloudMigrateCancelRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{358} + return file_api_api_proto_rawDescGZIP(), []int{373} } func (x *SdkCloudMigrateCancelRequest) GetRequest() *CloudMigrateCancelRequest { @@ -28102,7 +28960,7 @@ type SdkCloudMigrateCancelResponse struct { func (x *SdkCloudMigrateCancelResponse) Reset() { *x = SdkCloudMigrateCancelResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[359] + mi := &file_api_api_proto_msgTypes[374] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28115,7 +28973,7 @@ func (x *SdkCloudMigrateCancelResponse) String() string { func (*SdkCloudMigrateCancelResponse) ProtoMessage() {} func (x *SdkCloudMigrateCancelResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[359] + mi := &file_api_api_proto_msgTypes[374] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28128,7 +28986,7 @@ func (x *SdkCloudMigrateCancelResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudMigrateCancelResponse.ProtoReflect.Descriptor instead. func (*SdkCloudMigrateCancelResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{359} + return file_api_api_proto_rawDescGZIP(), []int{374} } type CloudMigrateInfo struct { @@ -28171,7 +29029,7 @@ type CloudMigrateInfo struct { func (x *CloudMigrateInfo) Reset() { *x = CloudMigrateInfo{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[360] + mi := &file_api_api_proto_msgTypes[375] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28184,7 +29042,7 @@ func (x *CloudMigrateInfo) String() string { func (*CloudMigrateInfo) ProtoMessage() {} func (x *CloudMigrateInfo) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[360] + mi := &file_api_api_proto_msgTypes[375] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28197,7 +29055,7 @@ func (x *CloudMigrateInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use CloudMigrateInfo.ProtoReflect.Descriptor instead. func (*CloudMigrateInfo) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{360} + return file_api_api_proto_rawDescGZIP(), []int{375} } func (x *CloudMigrateInfo) GetTaskId() string { @@ -28316,7 +29174,7 @@ type CloudMigrateInfoList struct { func (x *CloudMigrateInfoList) Reset() { *x = CloudMigrateInfoList{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[361] + mi := &file_api_api_proto_msgTypes[376] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28329,7 +29187,7 @@ func (x *CloudMigrateInfoList) String() string { func (*CloudMigrateInfoList) ProtoMessage() {} func (x *CloudMigrateInfoList) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[361] + mi := &file_api_api_proto_msgTypes[376] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28342,7 +29200,7 @@ func (x *CloudMigrateInfoList) ProtoReflect() protoreflect.Message { // Deprecated: Use CloudMigrateInfoList.ProtoReflect.Descriptor instead. func (*CloudMigrateInfoList) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{361} + return file_api_api_proto_rawDescGZIP(), []int{376} } func (x *CloudMigrateInfoList) GetList() []*CloudMigrateInfo { @@ -28366,7 +29224,7 @@ type SdkCloudMigrateStatusRequest struct { func (x *SdkCloudMigrateStatusRequest) Reset() { *x = SdkCloudMigrateStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[362] + mi := &file_api_api_proto_msgTypes[377] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28379,7 +29237,7 @@ func (x *SdkCloudMigrateStatusRequest) String() string { func (*SdkCloudMigrateStatusRequest) ProtoMessage() {} func (x *SdkCloudMigrateStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[362] + mi := &file_api_api_proto_msgTypes[377] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28392,7 +29250,7 @@ func (x *SdkCloudMigrateStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudMigrateStatusRequest.ProtoReflect.Descriptor instead. func (*SdkCloudMigrateStatusRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{362} + return file_api_api_proto_rawDescGZIP(), []int{377} } func (x *SdkCloudMigrateStatusRequest) GetRequest() *CloudMigrateStatusRequest { @@ -28417,7 +29275,7 @@ type CloudMigrateStatusRequest struct { func (x *CloudMigrateStatusRequest) Reset() { *x = CloudMigrateStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[363] + mi := &file_api_api_proto_msgTypes[378] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28430,7 +29288,7 @@ func (x *CloudMigrateStatusRequest) String() string { func (*CloudMigrateStatusRequest) ProtoMessage() {} func (x *CloudMigrateStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[363] + mi := &file_api_api_proto_msgTypes[378] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28443,7 +29301,7 @@ func (x *CloudMigrateStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CloudMigrateStatusRequest.ProtoReflect.Descriptor instead. func (*CloudMigrateStatusRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{363} + return file_api_api_proto_rawDescGZIP(), []int{378} } func (x *CloudMigrateStatusRequest) GetTaskId() string { @@ -28473,7 +29331,7 @@ type CloudMigrateStatusResponse struct { func (x *CloudMigrateStatusResponse) Reset() { *x = CloudMigrateStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[364] + mi := &file_api_api_proto_msgTypes[379] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28486,7 +29344,7 @@ func (x *CloudMigrateStatusResponse) String() string { func (*CloudMigrateStatusResponse) ProtoMessage() {} func (x *CloudMigrateStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[364] + mi := &file_api_api_proto_msgTypes[379] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28499,7 +29357,7 @@ func (x *CloudMigrateStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CloudMigrateStatusResponse.ProtoReflect.Descriptor instead. func (*CloudMigrateStatusResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{364} + return file_api_api_proto_rawDescGZIP(), []int{379} } func (x *CloudMigrateStatusResponse) GetInfo() map[string]*CloudMigrateInfoList { @@ -28522,7 +29380,7 @@ type SdkCloudMigrateStatusResponse struct { func (x *SdkCloudMigrateStatusResponse) Reset() { *x = SdkCloudMigrateStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[365] + mi := &file_api_api_proto_msgTypes[380] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28535,7 +29393,7 @@ func (x *SdkCloudMigrateStatusResponse) String() string { func (*SdkCloudMigrateStatusResponse) ProtoMessage() {} func (x *SdkCloudMigrateStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[365] + mi := &file_api_api_proto_msgTypes[380] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28548,7 +29406,7 @@ func (x *SdkCloudMigrateStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkCloudMigrateStatusResponse.ProtoReflect.Descriptor instead. func (*SdkCloudMigrateStatusResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{365} + return file_api_api_proto_rawDescGZIP(), []int{380} } func (x *SdkCloudMigrateStatusResponse) GetResult() *CloudMigrateStatusResponse { @@ -28567,7 +29425,7 @@ type ClusterPairMode struct { func (x *ClusterPairMode) Reset() { *x = ClusterPairMode{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[366] + mi := &file_api_api_proto_msgTypes[381] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28580,7 +29438,7 @@ func (x *ClusterPairMode) String() string { func (*ClusterPairMode) ProtoMessage() {} func (x *ClusterPairMode) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[366] + mi := &file_api_api_proto_msgTypes[381] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28593,7 +29451,7 @@ func (x *ClusterPairMode) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterPairMode.ProtoReflect.Descriptor instead. func (*ClusterPairMode) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{366} + return file_api_api_proto_rawDescGZIP(), []int{381} } // Used to send a request to create a cluster pair @@ -28620,7 +29478,7 @@ type ClusterPairCreateRequest struct { func (x *ClusterPairCreateRequest) Reset() { *x = ClusterPairCreateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[367] + mi := &file_api_api_proto_msgTypes[382] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28633,7 +29491,7 @@ func (x *ClusterPairCreateRequest) String() string { func (*ClusterPairCreateRequest) ProtoMessage() {} func (x *ClusterPairCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[367] + mi := &file_api_api_proto_msgTypes[382] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28646,7 +29504,7 @@ func (x *ClusterPairCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterPairCreateRequest.ProtoReflect.Descriptor instead. func (*ClusterPairCreateRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{367} + return file_api_api_proto_rawDescGZIP(), []int{382} } func (x *ClusterPairCreateRequest) GetRemoteClusterIp() string { @@ -28706,7 +29564,7 @@ type ClusterPairCreateResponse struct { func (x *ClusterPairCreateResponse) Reset() { *x = ClusterPairCreateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[368] + mi := &file_api_api_proto_msgTypes[383] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28719,7 +29577,7 @@ func (x *ClusterPairCreateResponse) String() string { func (*ClusterPairCreateResponse) ProtoMessage() {} func (x *ClusterPairCreateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[368] + mi := &file_api_api_proto_msgTypes[383] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28732,7 +29590,7 @@ func (x *ClusterPairCreateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterPairCreateResponse.ProtoReflect.Descriptor instead. func (*ClusterPairCreateResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{368} + return file_api_api_proto_rawDescGZIP(), []int{383} } func (x *ClusterPairCreateResponse) GetRemoteClusterId() string { @@ -28761,7 +29619,7 @@ type SdkClusterPairCreateRequest struct { func (x *SdkClusterPairCreateRequest) Reset() { *x = SdkClusterPairCreateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[369] + mi := &file_api_api_proto_msgTypes[384] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28774,7 +29632,7 @@ func (x *SdkClusterPairCreateRequest) String() string { func (*SdkClusterPairCreateRequest) ProtoMessage() {} func (x *SdkClusterPairCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[369] + mi := &file_api_api_proto_msgTypes[384] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28787,7 +29645,7 @@ func (x *SdkClusterPairCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkClusterPairCreateRequest.ProtoReflect.Descriptor instead. func (*SdkClusterPairCreateRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{369} + return file_api_api_proto_rawDescGZIP(), []int{384} } func (x *SdkClusterPairCreateRequest) GetRequest() *ClusterPairCreateRequest { @@ -28810,7 +29668,7 @@ type SdkClusterPairCreateResponse struct { func (x *SdkClusterPairCreateResponse) Reset() { *x = SdkClusterPairCreateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[370] + mi := &file_api_api_proto_msgTypes[385] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28823,7 +29681,7 @@ func (x *SdkClusterPairCreateResponse) String() string { func (*SdkClusterPairCreateResponse) ProtoMessage() {} func (x *SdkClusterPairCreateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[370] + mi := &file_api_api_proto_msgTypes[385] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28836,7 +29694,7 @@ func (x *SdkClusterPairCreateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkClusterPairCreateResponse.ProtoReflect.Descriptor instead. func (*SdkClusterPairCreateResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{370} + return file_api_api_proto_rawDescGZIP(), []int{385} } func (x *SdkClusterPairCreateResponse) GetResult() *ClusterPairCreateResponse { @@ -28866,7 +29724,7 @@ type ClusterPairProcessRequest struct { func (x *ClusterPairProcessRequest) Reset() { *x = ClusterPairProcessRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[371] + mi := &file_api_api_proto_msgTypes[386] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28879,7 +29737,7 @@ func (x *ClusterPairProcessRequest) String() string { func (*ClusterPairProcessRequest) ProtoMessage() {} func (x *ClusterPairProcessRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[371] + mi := &file_api_api_proto_msgTypes[386] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28892,7 +29750,7 @@ func (x *ClusterPairProcessRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterPairProcessRequest.ProtoReflect.Descriptor instead. func (*ClusterPairProcessRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{371} + return file_api_api_proto_rawDescGZIP(), []int{386} } func (x *ClusterPairProcessRequest) GetSourceClusterId() string { @@ -28943,7 +29801,7 @@ type ClusterPairProcessResponse struct { func (x *ClusterPairProcessResponse) Reset() { *x = ClusterPairProcessResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[372] + mi := &file_api_api_proto_msgTypes[387] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28956,7 +29814,7 @@ func (x *ClusterPairProcessResponse) String() string { func (*ClusterPairProcessResponse) ProtoMessage() {} func (x *ClusterPairProcessResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[372] + mi := &file_api_api_proto_msgTypes[387] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28969,7 +29827,7 @@ func (x *ClusterPairProcessResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterPairProcessResponse.ProtoReflect.Descriptor instead. func (*ClusterPairProcessResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{372} + return file_api_api_proto_rawDescGZIP(), []int{387} } func (x *ClusterPairProcessResponse) GetRemoteClusterId() string { @@ -29013,7 +29871,7 @@ type SdkClusterPairDeleteRequest struct { func (x *SdkClusterPairDeleteRequest) Reset() { *x = SdkClusterPairDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[373] + mi := &file_api_api_proto_msgTypes[388] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29026,7 +29884,7 @@ func (x *SdkClusterPairDeleteRequest) String() string { func (*SdkClusterPairDeleteRequest) ProtoMessage() {} func (x *SdkClusterPairDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[373] + mi := &file_api_api_proto_msgTypes[388] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29039,7 +29897,7 @@ func (x *SdkClusterPairDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkClusterPairDeleteRequest.ProtoReflect.Descriptor instead. func (*SdkClusterPairDeleteRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{373} + return file_api_api_proto_rawDescGZIP(), []int{388} } func (x *SdkClusterPairDeleteRequest) GetClusterId() string { @@ -29059,7 +29917,7 @@ type SdkClusterPairDeleteResponse struct { func (x *SdkClusterPairDeleteResponse) Reset() { *x = SdkClusterPairDeleteResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[374] + mi := &file_api_api_proto_msgTypes[389] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29072,7 +29930,7 @@ func (x *SdkClusterPairDeleteResponse) String() string { func (*SdkClusterPairDeleteResponse) ProtoMessage() {} func (x *SdkClusterPairDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[374] + mi := &file_api_api_proto_msgTypes[389] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29085,7 +29943,7 @@ func (x *SdkClusterPairDeleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkClusterPairDeleteResponse.ProtoReflect.Descriptor instead. func (*SdkClusterPairDeleteResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{374} + return file_api_api_proto_rawDescGZIP(), []int{389} } // Response to get the cluster token @@ -29101,7 +29959,7 @@ type ClusterPairTokenGetResponse struct { func (x *ClusterPairTokenGetResponse) Reset() { *x = ClusterPairTokenGetResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[375] + mi := &file_api_api_proto_msgTypes[390] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29114,7 +29972,7 @@ func (x *ClusterPairTokenGetResponse) String() string { func (*ClusterPairTokenGetResponse) ProtoMessage() {} func (x *ClusterPairTokenGetResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[375] + mi := &file_api_api_proto_msgTypes[390] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29127,7 +29985,7 @@ func (x *ClusterPairTokenGetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterPairTokenGetResponse.ProtoReflect.Descriptor instead. func (*ClusterPairTokenGetResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{375} + return file_api_api_proto_rawDescGZIP(), []int{390} } func (x *ClusterPairTokenGetResponse) GetToken() string { @@ -29147,7 +30005,7 @@ type SdkClusterPairGetTokenRequest struct { func (x *SdkClusterPairGetTokenRequest) Reset() { *x = SdkClusterPairGetTokenRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[376] + mi := &file_api_api_proto_msgTypes[391] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29160,7 +30018,7 @@ func (x *SdkClusterPairGetTokenRequest) String() string { func (*SdkClusterPairGetTokenRequest) ProtoMessage() {} func (x *SdkClusterPairGetTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[376] + mi := &file_api_api_proto_msgTypes[391] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29173,7 +30031,7 @@ func (x *SdkClusterPairGetTokenRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkClusterPairGetTokenRequest.ProtoReflect.Descriptor instead. func (*SdkClusterPairGetTokenRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{376} + return file_api_api_proto_rawDescGZIP(), []int{391} } // Defines a response for the token request @@ -29189,7 +30047,7 @@ type SdkClusterPairGetTokenResponse struct { func (x *SdkClusterPairGetTokenResponse) Reset() { *x = SdkClusterPairGetTokenResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[377] + mi := &file_api_api_proto_msgTypes[392] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29202,7 +30060,7 @@ func (x *SdkClusterPairGetTokenResponse) String() string { func (*SdkClusterPairGetTokenResponse) ProtoMessage() {} func (x *SdkClusterPairGetTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[377] + mi := &file_api_api_proto_msgTypes[392] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29215,7 +30073,7 @@ func (x *SdkClusterPairGetTokenResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkClusterPairGetTokenResponse.ProtoReflect.Descriptor instead. func (*SdkClusterPairGetTokenResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{377} + return file_api_api_proto_rawDescGZIP(), []int{392} } func (x *SdkClusterPairGetTokenResponse) GetResult() *ClusterPairTokenGetResponse { @@ -29235,7 +30093,7 @@ type SdkClusterPairResetTokenRequest struct { func (x *SdkClusterPairResetTokenRequest) Reset() { *x = SdkClusterPairResetTokenRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[378] + mi := &file_api_api_proto_msgTypes[393] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29248,7 +30106,7 @@ func (x *SdkClusterPairResetTokenRequest) String() string { func (*SdkClusterPairResetTokenRequest) ProtoMessage() {} func (x *SdkClusterPairResetTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[378] + mi := &file_api_api_proto_msgTypes[393] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29261,7 +30119,7 @@ func (x *SdkClusterPairResetTokenRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkClusterPairResetTokenRequest.ProtoReflect.Descriptor instead. func (*SdkClusterPairResetTokenRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{378} + return file_api_api_proto_rawDescGZIP(), []int{393} } // Defines a response for the token request @@ -29277,7 +30135,7 @@ type SdkClusterPairResetTokenResponse struct { func (x *SdkClusterPairResetTokenResponse) Reset() { *x = SdkClusterPairResetTokenResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[379] + mi := &file_api_api_proto_msgTypes[394] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29290,7 +30148,7 @@ func (x *SdkClusterPairResetTokenResponse) String() string { func (*SdkClusterPairResetTokenResponse) ProtoMessage() {} func (x *SdkClusterPairResetTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[379] + mi := &file_api_api_proto_msgTypes[394] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29303,7 +30161,7 @@ func (x *SdkClusterPairResetTokenResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkClusterPairResetTokenResponse.ProtoReflect.Descriptor instead. func (*SdkClusterPairResetTokenResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{379} + return file_api_api_proto_rawDescGZIP(), []int{394} } func (x *SdkClusterPairResetTokenResponse) GetResult() *ClusterPairTokenGetResponse { @@ -29341,7 +30199,7 @@ type ClusterPairInfo struct { func (x *ClusterPairInfo) Reset() { *x = ClusterPairInfo{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[380] + mi := &file_api_api_proto_msgTypes[395] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29354,7 +30212,7 @@ func (x *ClusterPairInfo) String() string { func (*ClusterPairInfo) ProtoMessage() {} func (x *ClusterPairInfo) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[380] + mi := &file_api_api_proto_msgTypes[395] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29367,7 +30225,7 @@ func (x *ClusterPairInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterPairInfo.ProtoReflect.Descriptor instead. func (*ClusterPairInfo) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{380} + return file_api_api_proto_rawDescGZIP(), []int{395} } func (x *ClusterPairInfo) GetId() string { @@ -29439,7 +30297,7 @@ type SdkClusterPairInspectRequest struct { func (x *SdkClusterPairInspectRequest) Reset() { *x = SdkClusterPairInspectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[381] + mi := &file_api_api_proto_msgTypes[396] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29452,7 +30310,7 @@ func (x *SdkClusterPairInspectRequest) String() string { func (*SdkClusterPairInspectRequest) ProtoMessage() {} func (x *SdkClusterPairInspectRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[381] + mi := &file_api_api_proto_msgTypes[396] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29465,7 +30323,7 @@ func (x *SdkClusterPairInspectRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkClusterPairInspectRequest.ProtoReflect.Descriptor instead. func (*SdkClusterPairInspectRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{381} + return file_api_api_proto_rawDescGZIP(), []int{396} } func (x *SdkClusterPairInspectRequest) GetId() string { @@ -29488,7 +30346,7 @@ type ClusterPairGetResponse struct { func (x *ClusterPairGetResponse) Reset() { *x = ClusterPairGetResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[382] + mi := &file_api_api_proto_msgTypes[397] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29501,7 +30359,7 @@ func (x *ClusterPairGetResponse) String() string { func (*ClusterPairGetResponse) ProtoMessage() {} func (x *ClusterPairGetResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[382] + mi := &file_api_api_proto_msgTypes[397] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29514,7 +30372,7 @@ func (x *ClusterPairGetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterPairGetResponse.ProtoReflect.Descriptor instead. func (*ClusterPairGetResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{382} + return file_api_api_proto_rawDescGZIP(), []int{397} } func (x *ClusterPairGetResponse) GetPairInfo() *ClusterPairInfo { @@ -29537,7 +30395,7 @@ type SdkClusterPairInspectResponse struct { func (x *SdkClusterPairInspectResponse) Reset() { *x = SdkClusterPairInspectResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[383] + mi := &file_api_api_proto_msgTypes[398] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29550,7 +30408,7 @@ func (x *SdkClusterPairInspectResponse) String() string { func (*SdkClusterPairInspectResponse) ProtoMessage() {} func (x *SdkClusterPairInspectResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[383] + mi := &file_api_api_proto_msgTypes[398] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29563,7 +30421,7 @@ func (x *SdkClusterPairInspectResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkClusterPairInspectResponse.ProtoReflect.Descriptor instead. func (*SdkClusterPairInspectResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{383} + return file_api_api_proto_rawDescGZIP(), []int{398} } func (x *SdkClusterPairInspectResponse) GetResult() *ClusterPairGetResponse { @@ -29583,7 +30441,7 @@ type SdkClusterPairEnumerateRequest struct { func (x *SdkClusterPairEnumerateRequest) Reset() { *x = SdkClusterPairEnumerateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[384] + mi := &file_api_api_proto_msgTypes[399] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29596,7 +30454,7 @@ func (x *SdkClusterPairEnumerateRequest) String() string { func (*SdkClusterPairEnumerateRequest) ProtoMessage() {} func (x *SdkClusterPairEnumerateRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[384] + mi := &file_api_api_proto_msgTypes[399] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29609,7 +30467,7 @@ func (x *SdkClusterPairEnumerateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkClusterPairEnumerateRequest.ProtoReflect.Descriptor instead. func (*SdkClusterPairEnumerateRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{384} + return file_api_api_proto_rawDescGZIP(), []int{399} } // Response to enumerate all the cluster pairs @@ -29627,7 +30485,7 @@ type ClusterPairsEnumerateResponse struct { func (x *ClusterPairsEnumerateResponse) Reset() { *x = ClusterPairsEnumerateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[385] + mi := &file_api_api_proto_msgTypes[400] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29640,7 +30498,7 @@ func (x *ClusterPairsEnumerateResponse) String() string { func (*ClusterPairsEnumerateResponse) ProtoMessage() {} func (x *ClusterPairsEnumerateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[385] + mi := &file_api_api_proto_msgTypes[400] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29653,7 +30511,7 @@ func (x *ClusterPairsEnumerateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterPairsEnumerateResponse.ProtoReflect.Descriptor instead. func (*ClusterPairsEnumerateResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{385} + return file_api_api_proto_rawDescGZIP(), []int{400} } func (x *ClusterPairsEnumerateResponse) GetDefaultId() string { @@ -29683,7 +30541,7 @@ type SdkClusterPairEnumerateResponse struct { func (x *SdkClusterPairEnumerateResponse) Reset() { *x = SdkClusterPairEnumerateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[386] + mi := &file_api_api_proto_msgTypes[401] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29696,7 +30554,7 @@ func (x *SdkClusterPairEnumerateResponse) String() string { func (*SdkClusterPairEnumerateResponse) ProtoMessage() {} func (x *SdkClusterPairEnumerateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[386] + mi := &file_api_api_proto_msgTypes[401] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29709,7 +30567,7 @@ func (x *SdkClusterPairEnumerateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkClusterPairEnumerateResponse.ProtoReflect.Descriptor instead. func (*SdkClusterPairEnumerateResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{386} + return file_api_api_proto_rawDescGZIP(), []int{401} } func (x *SdkClusterPairEnumerateResponse) GetResult() *ClusterPairsEnumerateResponse { @@ -29741,7 +30599,7 @@ type Catalog struct { func (x *Catalog) Reset() { *x = Catalog{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[387] + mi := &file_api_api_proto_msgTypes[402] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29754,7 +30612,7 @@ func (x *Catalog) String() string { func (*Catalog) ProtoMessage() {} func (x *Catalog) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[387] + mi := &file_api_api_proto_msgTypes[402] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29767,7 +30625,7 @@ func (x *Catalog) ProtoReflect() protoreflect.Message { // Deprecated: Use Catalog.ProtoReflect.Descriptor instead. func (*Catalog) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{387} + return file_api_api_proto_rawDescGZIP(), []int{402} } func (x *Catalog) GetName() string { @@ -29826,7 +30684,7 @@ type Report struct { func (x *Report) Reset() { *x = Report{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[388] + mi := &file_api_api_proto_msgTypes[403] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29839,7 +30697,7 @@ func (x *Report) String() string { func (*Report) ProtoMessage() {} func (x *Report) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[388] + mi := &file_api_api_proto_msgTypes[403] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29852,7 +30710,7 @@ func (x *Report) ProtoReflect() protoreflect.Message { // Deprecated: Use Report.ProtoReflect.Descriptor instead. func (*Report) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{388} + return file_api_api_proto_rawDescGZIP(), []int{403} } func (x *Report) GetDirectories() int64 { @@ -29883,7 +30741,7 @@ type CatalogResponse struct { func (x *CatalogResponse) Reset() { *x = CatalogResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[389] + mi := &file_api_api_proto_msgTypes[404] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29896,7 +30754,7 @@ func (x *CatalogResponse) String() string { func (*CatalogResponse) ProtoMessage() {} func (x *CatalogResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[389] + mi := &file_api_api_proto_msgTypes[404] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29909,7 +30767,7 @@ func (x *CatalogResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CatalogResponse.ProtoReflect.Descriptor instead. func (*CatalogResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{389} + return file_api_api_proto_rawDescGZIP(), []int{404} } func (x *CatalogResponse) GetRoot() *Catalog { @@ -29944,7 +30802,7 @@ type LocateResponse struct { func (x *LocateResponse) Reset() { *x = LocateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[390] + mi := &file_api_api_proto_msgTypes[405] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29957,7 +30815,7 @@ func (x *LocateResponse) String() string { func (*LocateResponse) ProtoMessage() {} func (x *LocateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[390] + mi := &file_api_api_proto_msgTypes[405] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29970,7 +30828,7 @@ func (x *LocateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LocateResponse.ProtoReflect.Descriptor instead. func (*LocateResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{390} + return file_api_api_proto_rawDescGZIP(), []int{405} } func (x *LocateResponse) GetMounts() map[string]string { @@ -30009,7 +30867,7 @@ type VolumePlacementStrategy struct { func (x *VolumePlacementStrategy) Reset() { *x = VolumePlacementStrategy{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[391] + mi := &file_api_api_proto_msgTypes[406] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30022,7 +30880,7 @@ func (x *VolumePlacementStrategy) String() string { func (*VolumePlacementStrategy) ProtoMessage() {} func (x *VolumePlacementStrategy) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[391] + mi := &file_api_api_proto_msgTypes[406] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30035,7 +30893,7 @@ func (x *VolumePlacementStrategy) ProtoReflect() protoreflect.Message { // Deprecated: Use VolumePlacementStrategy.ProtoReflect.Descriptor instead. func (*VolumePlacementStrategy) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{391} + return file_api_api_proto_rawDescGZIP(), []int{406} } func (x *VolumePlacementStrategy) GetReplicaAffinity() []*ReplicaPlacementSpec { @@ -30093,7 +30951,7 @@ type ReplicaPlacementSpec struct { func (x *ReplicaPlacementSpec) Reset() { *x = ReplicaPlacementSpec{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[392] + mi := &file_api_api_proto_msgTypes[407] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30106,7 +30964,7 @@ func (x *ReplicaPlacementSpec) String() string { func (*ReplicaPlacementSpec) ProtoMessage() {} func (x *ReplicaPlacementSpec) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[392] + mi := &file_api_api_proto_msgTypes[407] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30119,7 +30977,7 @@ func (x *ReplicaPlacementSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplicaPlacementSpec.ProtoReflect.Descriptor instead. func (*ReplicaPlacementSpec) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{392} + return file_api_api_proto_rawDescGZIP(), []int{407} } func (x *ReplicaPlacementSpec) GetWeight() int64 { @@ -30180,7 +31038,7 @@ type VolumePlacementSpec struct { func (x *VolumePlacementSpec) Reset() { *x = VolumePlacementSpec{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[393] + mi := &file_api_api_proto_msgTypes[408] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30193,7 +31051,7 @@ func (x *VolumePlacementSpec) String() string { func (*VolumePlacementSpec) ProtoMessage() {} func (x *VolumePlacementSpec) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[393] + mi := &file_api_api_proto_msgTypes[408] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30206,7 +31064,7 @@ func (x *VolumePlacementSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use VolumePlacementSpec.ProtoReflect.Descriptor instead. func (*VolumePlacementSpec) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{393} + return file_api_api_proto_rawDescGZIP(), []int{408} } func (x *VolumePlacementSpec) GetWeight() int64 { @@ -30259,7 +31117,7 @@ type LabelSelectorRequirement struct { func (x *LabelSelectorRequirement) Reset() { *x = LabelSelectorRequirement{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[394] + mi := &file_api_api_proto_msgTypes[409] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30272,7 +31130,7 @@ func (x *LabelSelectorRequirement) String() string { func (*LabelSelectorRequirement) ProtoMessage() {} func (x *LabelSelectorRequirement) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[394] + mi := &file_api_api_proto_msgTypes[409] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30285,7 +31143,7 @@ func (x *LabelSelectorRequirement) ProtoReflect() protoreflect.Message { // Deprecated: Use LabelSelectorRequirement.ProtoReflect.Descriptor instead. func (*LabelSelectorRequirement) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{394} + return file_api_api_proto_rawDescGZIP(), []int{409} } func (x *LabelSelectorRequirement) GetKey() string { @@ -30320,7 +31178,7 @@ type RestoreVolSnashotSchedule struct { func (x *RestoreVolSnashotSchedule) Reset() { *x = RestoreVolSnashotSchedule{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[395] + mi := &file_api_api_proto_msgTypes[410] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30333,7 +31191,7 @@ func (x *RestoreVolSnashotSchedule) String() string { func (*RestoreVolSnashotSchedule) ProtoMessage() {} func (x *RestoreVolSnashotSchedule) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[395] + mi := &file_api_api_proto_msgTypes[410] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30346,7 +31204,7 @@ func (x *RestoreVolSnashotSchedule) ProtoReflect() protoreflect.Message { // Deprecated: Use RestoreVolSnashotSchedule.ProtoReflect.Descriptor instead. func (*RestoreVolSnashotSchedule) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{395} + return file_api_api_proto_rawDescGZIP(), []int{410} } func (x *RestoreVolSnashotSchedule) GetSchedule() string { @@ -30367,7 +31225,7 @@ type RestoreVolStoragePolicy struct { func (x *RestoreVolStoragePolicy) Reset() { *x = RestoreVolStoragePolicy{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[396] + mi := &file_api_api_proto_msgTypes[411] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30380,7 +31238,7 @@ func (x *RestoreVolStoragePolicy) String() string { func (*RestoreVolStoragePolicy) ProtoMessage() {} func (x *RestoreVolStoragePolicy) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[396] + mi := &file_api_api_proto_msgTypes[411] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30393,7 +31251,7 @@ func (x *RestoreVolStoragePolicy) ProtoReflect() protoreflect.Message { // Deprecated: Use RestoreVolStoragePolicy.ProtoReflect.Descriptor instead. func (*RestoreVolStoragePolicy) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{396} + return file_api_api_proto_rawDescGZIP(), []int{411} } func (x *RestoreVolStoragePolicy) GetPolicy() string { @@ -30481,7 +31339,7 @@ type RestoreVolumeSpec struct { func (x *RestoreVolumeSpec) Reset() { *x = RestoreVolumeSpec{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[397] + mi := &file_api_api_proto_msgTypes[412] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30494,7 +31352,7 @@ func (x *RestoreVolumeSpec) String() string { func (*RestoreVolumeSpec) ProtoMessage() {} func (x *RestoreVolumeSpec) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[397] + mi := &file_api_api_proto_msgTypes[412] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30507,7 +31365,7 @@ func (x *RestoreVolumeSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use RestoreVolumeSpec.ProtoReflect.Descriptor instead. func (*RestoreVolumeSpec) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{397} + return file_api_api_proto_rawDescGZIP(), []int{412} } func (x *RestoreVolumeSpec) GetHaLevel() int64 { @@ -30744,7 +31602,7 @@ type SdkVolumeCatalogRequest struct { func (x *SdkVolumeCatalogRequest) Reset() { *x = SdkVolumeCatalogRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[398] + mi := &file_api_api_proto_msgTypes[413] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30757,7 +31615,7 @@ func (x *SdkVolumeCatalogRequest) String() string { func (*SdkVolumeCatalogRequest) ProtoMessage() {} func (x *SdkVolumeCatalogRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[398] + mi := &file_api_api_proto_msgTypes[413] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30770,7 +31628,7 @@ func (x *SdkVolumeCatalogRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkVolumeCatalogRequest.ProtoReflect.Descriptor instead. func (*SdkVolumeCatalogRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{398} + return file_api_api_proto_rawDescGZIP(), []int{413} } func (x *SdkVolumeCatalogRequest) GetVolumeId() string { @@ -30807,7 +31665,7 @@ type SdkVolumeCatalogResponse struct { func (x *SdkVolumeCatalogResponse) Reset() { *x = SdkVolumeCatalogResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[399] + mi := &file_api_api_proto_msgTypes[414] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30820,7 +31678,7 @@ func (x *SdkVolumeCatalogResponse) String() string { func (*SdkVolumeCatalogResponse) ProtoMessage() {} func (x *SdkVolumeCatalogResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[399] + mi := &file_api_api_proto_msgTypes[414] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30833,7 +31691,7 @@ func (x *SdkVolumeCatalogResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkVolumeCatalogResponse.ProtoReflect.Descriptor instead. func (*SdkVolumeCatalogResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{399} + return file_api_api_proto_rawDescGZIP(), []int{414} } func (x *SdkVolumeCatalogResponse) GetCatalog() *CatalogResponse { @@ -30852,7 +31710,7 @@ type VerifyChecksum struct { func (x *VerifyChecksum) Reset() { *x = VerifyChecksum{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[400] + mi := &file_api_api_proto_msgTypes[415] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30865,7 +31723,7 @@ func (x *VerifyChecksum) String() string { func (*VerifyChecksum) ProtoMessage() {} func (x *VerifyChecksum) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[400] + mi := &file_api_api_proto_msgTypes[415] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30878,7 +31736,7 @@ func (x *VerifyChecksum) ProtoReflect() protoreflect.Message { // Deprecated: Use VerifyChecksum.ProtoReflect.Descriptor instead. func (*VerifyChecksum) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{400} + return file_api_api_proto_rawDescGZIP(), []int{415} } // SdkVerifyChecksumStartRequest defines a request to start a background verify checksum operation @@ -30894,7 +31752,7 @@ type SdkVerifyChecksumStartRequest struct { func (x *SdkVerifyChecksumStartRequest) Reset() { *x = SdkVerifyChecksumStartRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[401] + mi := &file_api_api_proto_msgTypes[416] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30907,7 +31765,7 @@ func (x *SdkVerifyChecksumStartRequest) String() string { func (*SdkVerifyChecksumStartRequest) ProtoMessage() {} func (x *SdkVerifyChecksumStartRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[401] + mi := &file_api_api_proto_msgTypes[416] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30920,7 +31778,7 @@ func (x *SdkVerifyChecksumStartRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkVerifyChecksumStartRequest.ProtoReflect.Descriptor instead. func (*SdkVerifyChecksumStartRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{401} + return file_api_api_proto_rawDescGZIP(), []int{416} } func (x *SdkVerifyChecksumStartRequest) GetVolumeId() string { @@ -30946,7 +31804,7 @@ type SdkVerifyChecksumStartResponse struct { func (x *SdkVerifyChecksumStartResponse) Reset() { *x = SdkVerifyChecksumStartResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[402] + mi := &file_api_api_proto_msgTypes[417] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30959,7 +31817,7 @@ func (x *SdkVerifyChecksumStartResponse) String() string { func (*SdkVerifyChecksumStartResponse) ProtoMessage() {} func (x *SdkVerifyChecksumStartResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[402] + mi := &file_api_api_proto_msgTypes[417] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30972,7 +31830,7 @@ func (x *SdkVerifyChecksumStartResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkVerifyChecksumStartResponse.ProtoReflect.Descriptor instead. func (*SdkVerifyChecksumStartResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{402} + return file_api_api_proto_rawDescGZIP(), []int{417} } func (x *SdkVerifyChecksumStartResponse) GetStatus() VerifyChecksum_VerifyChecksumStatus { @@ -31003,7 +31861,7 @@ type SdkVerifyChecksumStatusRequest struct { func (x *SdkVerifyChecksumStatusRequest) Reset() { *x = SdkVerifyChecksumStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[403] + mi := &file_api_api_proto_msgTypes[418] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31016,7 +31874,7 @@ func (x *SdkVerifyChecksumStatusRequest) String() string { func (*SdkVerifyChecksumStatusRequest) ProtoMessage() {} func (x *SdkVerifyChecksumStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[403] + mi := &file_api_api_proto_msgTypes[418] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31029,7 +31887,7 @@ func (x *SdkVerifyChecksumStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkVerifyChecksumStatusRequest.ProtoReflect.Descriptor instead. func (*SdkVerifyChecksumStatusRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{403} + return file_api_api_proto_rawDescGZIP(), []int{418} } func (x *SdkVerifyChecksumStatusRequest) GetVolumeId() string { @@ -31055,7 +31913,7 @@ type SdkVerifyChecksumStatusResponse struct { func (x *SdkVerifyChecksumStatusResponse) Reset() { *x = SdkVerifyChecksumStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[404] + mi := &file_api_api_proto_msgTypes[419] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31068,7 +31926,7 @@ func (x *SdkVerifyChecksumStatusResponse) String() string { func (*SdkVerifyChecksumStatusResponse) ProtoMessage() {} func (x *SdkVerifyChecksumStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[404] + mi := &file_api_api_proto_msgTypes[419] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31081,7 +31939,7 @@ func (x *SdkVerifyChecksumStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkVerifyChecksumStatusResponse.ProtoReflect.Descriptor instead. func (*SdkVerifyChecksumStatusResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{404} + return file_api_api_proto_rawDescGZIP(), []int{419} } func (x *SdkVerifyChecksumStatusResponse) GetStatus() VerifyChecksum_VerifyChecksumStatus { @@ -31112,7 +31970,7 @@ type SdkVerifyChecksumStopRequest struct { func (x *SdkVerifyChecksumStopRequest) Reset() { *x = SdkVerifyChecksumStopRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[405] + mi := &file_api_api_proto_msgTypes[420] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31125,7 +31983,7 @@ func (x *SdkVerifyChecksumStopRequest) String() string { func (*SdkVerifyChecksumStopRequest) ProtoMessage() {} func (x *SdkVerifyChecksumStopRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[405] + mi := &file_api_api_proto_msgTypes[420] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31138,7 +31996,7 @@ func (x *SdkVerifyChecksumStopRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkVerifyChecksumStopRequest.ProtoReflect.Descriptor instead. func (*SdkVerifyChecksumStopRequest) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{405} + return file_api_api_proto_rawDescGZIP(), []int{420} } func (x *SdkVerifyChecksumStopRequest) GetVolumeId() string { @@ -31162,7 +32020,7 @@ type SdkVerifyChecksumStopResponse struct { func (x *SdkVerifyChecksumStopResponse) Reset() { *x = SdkVerifyChecksumStopResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[406] + mi := &file_api_api_proto_msgTypes[421] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31175,7 +32033,7 @@ func (x *SdkVerifyChecksumStopResponse) String() string { func (*SdkVerifyChecksumStopResponse) ProtoMessage() {} func (x *SdkVerifyChecksumStopResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[406] + mi := &file_api_api_proto_msgTypes[421] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31188,7 +32046,7 @@ func (x *SdkVerifyChecksumStopResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SdkVerifyChecksumStopResponse.ProtoReflect.Descriptor instead. func (*SdkVerifyChecksumStopResponse) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{406} + return file_api_api_proto_rawDescGZIP(), []int{421} } func (x *SdkVerifyChecksumStopResponse) GetMessage() string { @@ -31211,7 +32069,7 @@ type Ownership_PublicAccessControl struct { func (x *Ownership_PublicAccessControl) Reset() { *x = Ownership_PublicAccessControl{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[416] + mi := &file_api_api_proto_msgTypes[431] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31224,7 +32082,7 @@ func (x *Ownership_PublicAccessControl) String() string { func (*Ownership_PublicAccessControl) ProtoMessage() {} func (x *Ownership_PublicAccessControl) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[416] + mi := &file_api_api_proto_msgTypes[431] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31276,7 +32134,7 @@ type Ownership_AccessControl struct { func (x *Ownership_AccessControl) Reset() { *x = Ownership_AccessControl{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[417] + mi := &file_api_api_proto_msgTypes[432] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31289,7 +32147,7 @@ func (x *Ownership_AccessControl) String() string { func (*Ownership_AccessControl) ProtoMessage() {} func (x *Ownership_AccessControl) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[417] + mi := &file_api_api_proto_msgTypes[432] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31338,7 +32196,7 @@ type SdkServiceCapability_OpenStorageService struct { func (x *SdkServiceCapability_OpenStorageService) Reset() { *x = SdkServiceCapability_OpenStorageService{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[454] + mi := &file_api_api_proto_msgTypes[471] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31351,7 +32209,7 @@ func (x *SdkServiceCapability_OpenStorageService) String() string { func (*SdkServiceCapability_OpenStorageService) ProtoMessage() {} func (x *SdkServiceCapability_OpenStorageService) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[454] + mi := &file_api_api_proto_msgTypes[471] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31364,7 +32222,7 @@ func (x *SdkServiceCapability_OpenStorageService) ProtoReflect() protoreflect.Me // Deprecated: Use SdkServiceCapability_OpenStorageService.ProtoReflect.Descriptor instead. func (*SdkServiceCapability_OpenStorageService) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{349, 0} + return file_api_api_proto_rawDescGZIP(), []int{364, 0} } func (x *SdkServiceCapability_OpenStorageService) GetType() SdkServiceCapability_OpenStorageService_Type { @@ -31386,7 +32244,7 @@ type SdkCloudMigrateStartRequest_MigrateVolume struct { func (x *SdkCloudMigrateStartRequest_MigrateVolume) Reset() { *x = SdkCloudMigrateStartRequest_MigrateVolume{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[456] + mi := &file_api_api_proto_msgTypes[473] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31399,7 +32257,7 @@ func (x *SdkCloudMigrateStartRequest_MigrateVolume) String() string { func (*SdkCloudMigrateStartRequest_MigrateVolume) ProtoMessage() {} func (x *SdkCloudMigrateStartRequest_MigrateVolume) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[456] + mi := &file_api_api_proto_msgTypes[473] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31412,7 +32270,7 @@ func (x *SdkCloudMigrateStartRequest_MigrateVolume) ProtoReflect() protoreflect. // Deprecated: Use SdkCloudMigrateStartRequest_MigrateVolume.ProtoReflect.Descriptor instead. func (*SdkCloudMigrateStartRequest_MigrateVolume) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{354, 0} + return file_api_api_proto_rawDescGZIP(), []int{369, 0} } func (x *SdkCloudMigrateStartRequest_MigrateVolume) GetVolumeId() string { @@ -31434,7 +32292,7 @@ type SdkCloudMigrateStartRequest_MigrateVolumeGroup struct { func (x *SdkCloudMigrateStartRequest_MigrateVolumeGroup) Reset() { *x = SdkCloudMigrateStartRequest_MigrateVolumeGroup{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[457] + mi := &file_api_api_proto_msgTypes[474] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31447,7 +32305,7 @@ func (x *SdkCloudMigrateStartRequest_MigrateVolumeGroup) String() string { func (*SdkCloudMigrateStartRequest_MigrateVolumeGroup) ProtoMessage() {} func (x *SdkCloudMigrateStartRequest_MigrateVolumeGroup) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[457] + mi := &file_api_api_proto_msgTypes[474] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31460,7 +32318,7 @@ func (x *SdkCloudMigrateStartRequest_MigrateVolumeGroup) ProtoReflect() protoref // Deprecated: Use SdkCloudMigrateStartRequest_MigrateVolumeGroup.ProtoReflect.Descriptor instead. func (*SdkCloudMigrateStartRequest_MigrateVolumeGroup) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{354, 1} + return file_api_api_proto_rawDescGZIP(), []int{369, 1} } func (x *SdkCloudMigrateStartRequest_MigrateVolumeGroup) GetGroupId() string { @@ -31480,7 +32338,7 @@ type SdkCloudMigrateStartRequest_MigrateAllVolumes struct { func (x *SdkCloudMigrateStartRequest_MigrateAllVolumes) Reset() { *x = SdkCloudMigrateStartRequest_MigrateAllVolumes{} if protoimpl.UnsafeEnabled { - mi := &file_api_api_proto_msgTypes[458] + mi := &file_api_api_proto_msgTypes[475] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31493,7 +32351,7 @@ func (x *SdkCloudMigrateStartRequest_MigrateAllVolumes) String() string { func (*SdkCloudMigrateStartRequest_MigrateAllVolumes) ProtoMessage() {} func (x *SdkCloudMigrateStartRequest_MigrateAllVolumes) ProtoReflect() protoreflect.Message { - mi := &file_api_api_proto_msgTypes[458] + mi := &file_api_api_proto_msgTypes[475] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31506,7 +32364,7 @@ func (x *SdkCloudMigrateStartRequest_MigrateAllVolumes) ProtoReflect() protorefl // Deprecated: Use SdkCloudMigrateStartRequest_MigrateAllVolumes.ProtoReflect.Descriptor instead. func (*SdkCloudMigrateStartRequest_MigrateAllVolumes) Descriptor() ([]byte, []int) { - return file_api_api_proto_rawDescGZIP(), []int{354, 2} + return file_api_api_proto_rawDescGZIP(), []int{369, 2} } var File_api_api_proto protoreflect.FileDescriptor @@ -31518,7 +32376,7 @@ var file_api_api_proto_rawDesc = []byte{ 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0xf9, 0x03, 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x9a, 0x04, 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x36, 0x0a, 0x06, 0x6d, 0x65, 0x64, 0x69, 0x75, @@ -31549,704 +32407,542 @@ var file_api_api_proto_rawDesc = []byte{ 0x52, 0x0f, 0x70, 0x6f, 0x6f, 0x6c, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, 0x65, 0x76, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x44, 0x72, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0xb0, 0x03, 0x0a, 0x0b, - 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x49, - 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x44, 0x12, 0x2a, 0x0a, 0x03, 0x43, - 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x73, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x03, 0x43, 0x6f, 0x73, 0x12, 0x36, 0x0a, 0x06, 0x4d, 0x65, 0x64, 0x69, 0x75, - 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x4d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x52, 0x06, 0x4d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x12, - 0x1c, 0x0a, 0x09, 0x52, 0x61, 0x69, 0x64, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x52, 0x61, 0x69, 0x64, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1c, 0x0a, - 0x09, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x09, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x55, - 0x73, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x55, 0x73, 0x65, 0x64, 0x12, - 0x40, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x2e, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x4c, 0x0a, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x75, 0x64, 0x44, 0x72, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x22, 0xb0, 0x03, 0x0a, + 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x0e, 0x0a, 0x02, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x44, 0x12, 0x2a, 0x0a, 0x03, + 0x43, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x73, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x03, 0x43, 0x6f, 0x73, 0x12, 0x36, 0x0a, 0x06, 0x4d, 0x65, 0x64, 0x69, + 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x4d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x52, 0x06, 0x4d, 0x65, 0x64, 0x69, 0x75, 0x6d, + 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x61, 0x69, 0x64, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x52, 0x61, 0x69, 0x64, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1c, + 0x0a, 0x09, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x09, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x55, 0x73, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x55, 0x73, 0x65, 0x64, + 0x12, 0x40, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x2e, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x4c, 0x0a, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x96, 0x01, 0x0a, 0x11, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x54, 0x6f, 0x70, + 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x12, 0x46, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x72, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, + 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xba, 0x02, 0x0a, 0x14, 0x53, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x41, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, + 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x49, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x12, 0x47, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, + 0x6f, 0x6c, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x9a, 0x01, 0x0a, 0x13, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, + 0x67, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x96, - 0x01, 0x0a, 0x11, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x54, 0x6f, 0x70, 0x6f, - 0x6c, 0x6f, 0x67, 0x79, 0x12, 0x46, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, - 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, + 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0xc2, 0x02, 0x0a, 0x0d, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x6f, 0x63, + 0x61, 0x74, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x55, 0x0a, 0x0d, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x2e, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0c, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, + 0x38, 0x0a, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x09, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x2c, 0x0a, 0x05, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x76, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x1a, 0x3f, 0x0a, 0x11, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xba, 0x02, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x41, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2a, 0x0a, 0x14, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x64, 0x65, 0x65, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, + 0x65, 0x65, 0x70, 0x22, 0x34, 0x0a, 0x06, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x65, 0x65, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x65, 0x65, 0x64, 0x22, 0x17, 0x0a, 0x05, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x22, 0x61, 0x0a, 0x0a, 0x49, 0x6f, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, + 0x12, 0x19, 0x0a, 0x08, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x69, 0x6f, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x07, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x49, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x65, + 0x61, 0x72, 0x6c, 0x79, 0x5f, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x65, 0x61, 0x72, 0x6c, 0x79, 0x41, 0x63, 0x6b, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x5f, 0x69, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x49, 0x6f, 0x22, 0x34, 0x0a, 0x05, 0x58, 0x61, 0x74, 0x74, 0x72, 0x22, 0x2b, + 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x4f, 0x57, 0x5f, + 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4d, 0x41, 0x4e, 0x44, 0x10, 0x01, 0x22, 0x7d, 0x0a, 0x0a, 0x45, + 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x48, 0x0a, 0x0f, 0x65, 0x78, 0x70, + 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x70, + 0x6f, 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x4a, 0x0a, 0x0c, 0x4e, 0x46, + 0x53, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, + 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x73, + 0x75, 0x62, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, + 0x75, 0x62, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2e, 0x0a, 0x0b, 0x53, 0x33, 0x50, 0x72, 0x6f, 0x78, + 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x1e, 0x0a, 0x0c, 0x50, 0x58, 0x44, 0x50, 0x72, 0x6f, + 0x78, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x52, 0x0a, 0x0d, 0x50, 0x75, 0x72, 0x65, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x69, 0x61, + 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, + 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0d, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x76, + 0x6f, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, + 0x75, 0x6c, 0x6c, 0x56, 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x78, 0x0a, 0x0c, 0x50, 0x75, + 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x78, + 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x22, 0x0a, + 0x0d, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x6f, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x75, 0x6c, 0x6c, 0x56, 0x6f, 0x6c, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x66, 0x73, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x66, 0x73, 0x45, 0x6e, 0x64, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x22, 0xa6, 0x03, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x70, + 0x65, 0x63, 0x12, 0x45, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72, 0x6f, + 0x78, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x78, + 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6e, 0x66, 0x73, 0x5f, 0x73, 0x70, 0x65, + 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4e, 0x46, 0x53, 0x50, 0x72, 0x6f, + 0x78, 0x79, 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x6e, 0x66, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, + 0x35, 0x0a, 0x07, 0x73, 0x33, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x33, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x70, 0x65, 0x63, 0x52, 0x06, + 0x73, 0x33, 0x53, 0x70, 0x65, 0x63, 0x12, 0x38, 0x0a, 0x08, 0x70, 0x78, 0x64, 0x5f, 0x73, 0x70, + 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x58, 0x44, 0x50, 0x72, + 0x6f, 0x78, 0x79, 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x70, 0x78, 0x64, 0x53, 0x70, 0x65, 0x63, + 0x12, 0x46, 0x0a, 0x0f, 0x70, 0x75, 0x72, 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, + 0x70, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x75, 0x72, 0x65, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0d, 0x70, 0x75, 0x72, 0x65, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x12, 0x43, 0x0a, 0x0e, 0x70, 0x75, 0x72, 0x65, + 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x50, 0x75, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, + 0x0c, 0x70, 0x75, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x22, 0xf1, 0x01, + 0x0a, 0x13, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, + 0x76, 0x34, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x57, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x4f, 0x44, 0x45, + 0x50, 0x4f, 0x52, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, + 0x52, 0x49, 0x50, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x4c, 0x4f, 0x41, 0x44, 0x42, 0x41, 0x4c, + 0x41, 0x4e, 0x43, 0x45, 0x52, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, + 0x04, 0x22, 0x50, 0x0a, 0x18, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x46, 0x61, 0x69, + 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x22, 0x34, 0x0a, + 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x47, 0x47, 0x52, 0x45, + 0x53, 0x53, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x52, 0x4d, 0x41, + 0x4c, 0x10, 0x02, 0x22, 0x6c, 0x0a, 0x0c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, + 0x70, 0x65, 0x63, 0x12, 0x5c, 0x0a, 0x11, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x5f, + 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x2e, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x49, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, - 0x6f, 0x6f, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x12, 0x47, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, - 0x6c, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, + 0x72, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x10, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, + 0x79, 0x22, 0x90, 0x01, 0x0a, 0x0c, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x44, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0x9a, 0x01, 0x0a, 0x13, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, - 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0xc2, 0x02, 0x0a, 0x0d, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x55, 0x0a, 0x0d, 0x76, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x0c, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x38, - 0x0a, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x09, 0x6f, - 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x2c, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0xda, 0x02, 0x0a, 0x11, 0x46, 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, + 0x68, 0x52, 0x65, 0x70, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x64, 0x65, + 0x76, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x64, 0x65, 0x76, 0x49, + 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x08, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, + 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, + 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x6c, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x27, 0x0a, 0x0f, 0x65, + 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, + 0x76, 0x70, 0x61, 0x74, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x76, + 0x70, 0x61, 0x74, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x75, 0x75, 0x69, + 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x55, 0x75, 0x69, + 0x64, 0x22, 0xb4, 0x02, 0x0a, 0x0e, 0x46, 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x75, 0x70, 0x5f, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x73, 0x65, 0x74, 0x75, 0x70, 0x4f, 0x6e, 0x12, + 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x61, 0x73, 0x74, + 0x70, 0x61, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x52, + 0x65, 0x70, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x69, 0x72, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x05, 0x64, 0x69, 0x72, 0x74, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6f, 0x72, + 0x64, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, + 0x6f, 0x72, 0x64, 0x55, 0x75, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x6f, 0x72, 0x63, 0x65, + 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0d, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x18, + 0x0a, 0x07, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x22, 0xcc, 0x02, 0x0a, 0x0a, 0x53, 0x63, 0x61, + 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x41, 0x0a, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, + 0x72, 0x52, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x06, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x63, 0x61, + 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5f, 0x0a, 0x0b, 0x53, 0x63, + 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x43, 0x41, + 0x4e, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, + 0x12, 0x19, 0x0a, 0x15, 0x53, 0x43, 0x41, 0x4e, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, + 0x5f, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x55, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x53, + 0x43, 0x41, 0x4e, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x4f, 0x4e, 0x5f, 0x4e, + 0x45, 0x58, 0x54, 0x5f, 0x4d, 0x4f, 0x55, 0x4e, 0x54, 0x10, 0x02, 0x22, 0x5a, 0x0a, 0x0a, 0x53, + 0x63, 0x61, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x43, 0x41, + 0x4e, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, + 0x19, 0x0a, 0x15, 0x53, 0x43, 0x41, 0x4e, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, + 0x43, 0x41, 0x4e, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x43, + 0x41, 0x4e, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x43, 0x41, 0x4e, 0x5f, 0x52, + 0x45, 0x50, 0x41, 0x49, 0x52, 0x10, 0x02, 0x22, 0x96, 0x01, 0x0a, 0x0a, 0x49, 0x6f, 0x54, 0x68, + 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x69, + 0x6f, 0x70, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x49, + 0x6f, 0x70, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x6f, 0x70, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x77, 0x72, 0x69, 0x74, 0x65, 0x49, 0x6f, + 0x70, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x62, 0x77, 0x5f, 0x6d, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x72, 0x65, 0x61, 0x64, + 0x42, 0x77, 0x4d, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x5f, 0x62, 0x77, 0x5f, 0x6d, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0d, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0x77, 0x4d, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x22, 0xcd, 0x13, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, + 0x1c, 0x0a, 0x09, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x12, 0x12, 0x0a, + 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x69, 0x7a, + 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x46, 0x53, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x69, 0x7a, + 0x65, 0x12, 0x19, 0x0a, 0x08, 0x68, 0x61, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x07, 0x68, 0x61, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x2a, 0x0a, 0x03, + 0x63, 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x73, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x03, 0x63, 0x6f, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x69, 0x6f, 0x5f, 0x70, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, + 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x09, 0x69, 0x6f, 0x50, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x64, 0x75, 0x70, 0x65, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x65, 0x64, 0x75, 0x70, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x73, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x52, 0x0a, 0x0d, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, + 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x68, + 0x61, 0x72, 0x65, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, + 0x73, 0x65, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, + 0x65, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x61, + 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, + 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x12, 0x1e, 0x0a, + 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x12, 0x2b, 0x0a, + 0x11, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, + 0x61, 0x6c, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x69, 0x63, 0x6b, 0x79, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x06, 0x73, 0x74, 0x69, 0x63, 0x6b, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, - 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x5f, 0x69, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x76, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x49, 0x64, 0x73, 0x1a, 0x3f, 0x0a, 0x11, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2a, 0x0a, 0x14, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x64, 0x65, 0x65, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x65, - 0x65, 0x70, 0x22, 0x34, 0x0a, 0x06, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x65, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x73, 0x65, 0x65, 0x64, 0x22, 0x17, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x22, 0x61, 0x0a, 0x0a, 0x49, 0x6f, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, - 0x19, 0x0a, 0x08, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x69, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x49, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x61, - 0x72, 0x6c, 0x79, 0x5f, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x65, - 0x61, 0x72, 0x6c, 0x79, 0x41, 0x63, 0x6b, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x5f, 0x69, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x49, 0x6f, 0x22, 0x34, 0x0a, 0x05, 0x58, 0x61, 0x74, 0x74, 0x72, 0x22, 0x2b, 0x0a, - 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x4f, 0x57, 0x5f, 0x4f, - 0x4e, 0x5f, 0x44, 0x45, 0x4d, 0x41, 0x4e, 0x44, 0x10, 0x01, 0x22, 0x7d, 0x0a, 0x0a, 0x45, 0x78, - 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x48, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x6f, - 0x72, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x6f, - 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x4a, 0x0a, 0x0c, 0x4e, 0x46, 0x53, - 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x70, - 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x75, - 0x62, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, - 0x62, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2e, 0x0a, 0x0b, 0x53, 0x33, 0x50, 0x72, 0x6f, 0x78, 0x79, - 0x53, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x1e, 0x0a, 0x0c, 0x50, 0x58, 0x44, 0x50, 0x72, 0x6f, 0x78, - 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x52, 0x0a, 0x0d, 0x50, 0x75, 0x72, 0x65, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x69, - 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0d, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x6f, - 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x75, - 0x6c, 0x6c, 0x56, 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x55, 0x0a, 0x0c, 0x50, 0x75, 0x72, - 0x65, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x78, 0x70, - 0x6f, 0x72, 0x74, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0d, - 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x6f, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x75, 0x6c, 0x6c, 0x56, 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65, - 0x22, 0xa6, 0x03, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x45, - 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6e, 0x66, 0x73, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4e, 0x46, 0x53, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x70, - 0x65, 0x63, 0x52, 0x07, 0x6e, 0x66, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x35, 0x0a, 0x07, 0x73, - 0x33, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x33, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x70, 0x65, 0x63, 0x52, 0x06, 0x73, 0x33, 0x53, 0x70, - 0x65, 0x63, 0x12, 0x38, 0x0a, 0x08, 0x70, 0x78, 0x64, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x58, 0x44, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, - 0x70, 0x65, 0x63, 0x52, 0x07, 0x70, 0x78, 0x64, 0x53, 0x70, 0x65, 0x63, 0x12, 0x46, 0x0a, 0x0f, - 0x70, 0x75, 0x72, 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x75, 0x72, 0x65, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0d, 0x70, 0x75, 0x72, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x53, 0x70, 0x65, 0x63, 0x12, 0x43, 0x0a, 0x0e, 0x70, 0x75, 0x72, 0x65, 0x5f, 0x66, 0x69, 0x6c, - 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, - 0x75, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0c, 0x70, 0x75, 0x72, - 0x65, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x22, 0xf1, 0x01, 0x0a, 0x13, 0x53, 0x68, - 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x70, 0x65, - 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x65, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x22, 0x57, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x4f, 0x44, 0x45, 0x50, 0x4f, 0x52, 0x54, - 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x49, 0x50, 0x10, - 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x4c, 0x4f, 0x41, 0x44, 0x42, 0x41, 0x4c, 0x41, 0x4e, 0x43, 0x45, - 0x52, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x04, 0x22, 0x50, 0x0a, - 0x18, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, - 0x72, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x22, 0x34, 0x0a, 0x05, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x47, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x56, - 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, 0x02, 0x22, - 0x6c, 0x0a, 0x0c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x70, 0x65, 0x63, 0x12, - 0x5c, 0x0a, 0x11, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x61, - 0x74, 0x65, 0x67, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x68, 0x61, - 0x72, 0x65, 0x64, 0x76, 0x34, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x74, 0x72, - 0x61, 0x74, 0x65, 0x67, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x66, 0x61, 0x69, - 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x22, 0x90, 0x01, - 0x0a, 0x0c, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x44, - 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0xda, 0x02, 0x0a, 0x11, 0x46, 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, - 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x64, 0x65, 0x76, 0x49, 0x64, 0x12, 0x17, 0x0a, - 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, - 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x61, 0x73, 0x74, 0x70, - 0x61, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x6f, 0x72, - 0x74, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6d, - 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x6d, - 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x70, 0x61, 0x74, - 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x76, 0x70, 0x61, 0x74, 0x68, - 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x55, 0x75, 0x69, 0x64, 0x22, 0xb4, 0x02, - 0x0a, 0x0e, 0x46, 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x19, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x75, 0x70, 0x5f, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x73, 0x65, 0x74, 0x75, 0x70, 0x4f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x70, - 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x70, 0x72, - 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3e, - 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x46, 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x6c, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x14, - 0x0a, 0x05, 0x64, 0x69, 0x72, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x64, - 0x69, 0x72, 0x74, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x5f, 0x75, 0x75, - 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x55, - 0x75, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x66, 0x61, 0x69, - 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x66, 0x6f, 0x72, - 0x63, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, - 0x72, 0x62, 0x6f, 0x73, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, - 0x62, 0x6f, 0x73, 0x65, 0x22, 0xcc, 0x02, 0x0a, 0x0a, 0x53, 0x63, 0x61, 0x6e, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x12, 0x41, 0x0a, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x07, 0x74, - 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5f, 0x0a, 0x0b, 0x53, 0x63, 0x61, 0x6e, 0x54, 0x72, - 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x43, 0x41, 0x4e, 0x5f, 0x54, 0x52, - 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, - 0x53, 0x43, 0x41, 0x4e, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x4f, 0x4e, 0x5f, - 0x4d, 0x4f, 0x55, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x43, 0x41, 0x4e, 0x5f, - 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x4f, 0x4e, 0x5f, 0x4e, 0x45, 0x58, 0x54, 0x5f, - 0x4d, 0x4f, 0x55, 0x4e, 0x54, 0x10, 0x02, 0x22, 0x5a, 0x0a, 0x0a, 0x53, 0x63, 0x61, 0x6e, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x43, 0x41, 0x4e, 0x5f, 0x41, 0x43, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x53, - 0x43, 0x41, 0x4e, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x43, 0x41, 0x4e, 0x5f, - 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x43, 0x41, 0x4e, 0x5f, 0x41, - 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x43, 0x41, 0x4e, 0x5f, 0x52, 0x45, 0x50, 0x41, 0x49, - 0x52, 0x10, 0x02, 0x22, 0x96, 0x01, 0x0a, 0x0a, 0x49, 0x6f, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, - 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x69, 0x6f, 0x70, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x49, 0x6f, 0x70, 0x73, 0x12, - 0x1d, 0x0a, 0x0a, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x6f, 0x70, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x09, 0x77, 0x72, 0x69, 0x74, 0x65, 0x49, 0x6f, 0x70, 0x73, 0x12, 0x24, - 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x62, 0x77, 0x5f, 0x6d, 0x62, 0x79, 0x74, 0x65, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x72, 0x65, 0x61, 0x64, 0x42, 0x77, 0x4d, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x62, 0x77, - 0x5f, 0x6d, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x42, 0x77, 0x4d, 0x62, 0x79, 0x74, 0x65, 0x73, 0x22, 0xcd, 0x13, 0x0a, - 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1c, 0x0a, 0x09, 0x65, - 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, - 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x2f, 0x0a, - 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, + 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, + 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x12, 0x1e, 0x0a, + 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x63, 0x61, 0x73, 0x63, 0x61, 0x64, 0x65, 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x08, 0x63, 0x61, 0x73, 0x63, 0x61, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6a, 0x6f, 0x75, + 0x72, 0x6e, 0x61, 0x6c, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6a, 0x6f, 0x75, 0x72, + 0x6e, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x18, + 0x1a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x12, + 0x1f, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x18, 0x1b, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x71, 0x75, 0x65, 0x75, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, + 0x12, 0x39, 0x0a, 0x19, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, + 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x1c, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x16, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x55, 0x6e, 0x73, 0x75, 0x70, 0x70, + 0x6f, 0x72, 0x74, 0x65, 0x64, 0x46, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, + 0x6f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x6e, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x69, 0x6f, 0x5f, + 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x49, 0x6f, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x0a, 0x69, 0x6f, 0x53, + 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x57, 0x0a, 0x12, 0x70, 0x6c, 0x61, 0x63, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x1f, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x50, 0x6c, 0x61, 0x63, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x11, 0x70, + 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, + 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x18, 0x20, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x73, 0x68, 0x69, 0x70, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, 0x6e, + 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, + 0x70, 0x12, 0x3c, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, + 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, + 0x70, 0x65, 0x63, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, + 0x23, 0x0a, 0x0d, 0x66, 0x70, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x18, 0x23, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x66, 0x70, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x05, 0x78, 0x61, 0x74, 0x74, 0x72, 0x18, 0x24, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x58, 0x61, 0x74, 0x74, 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x05, 0x78, 0x61, 0x74, 0x74, 0x72, 0x12, 0x3c, 0x0a, 0x0b, 0x73, 0x63, 0x61, 0x6e, + 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x46, 0x53, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x19, 0x0a, - 0x08, 0x68, 0x61, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x07, 0x68, 0x61, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x2a, 0x0a, 0x03, 0x63, 0x6f, 0x73, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x03, 0x63, 0x6f, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x69, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6f, 0x50, 0x72, 0x6f, - 0x66, 0x69, 0x6c, 0x65, 0x52, 0x09, 0x69, 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x64, 0x65, 0x64, 0x75, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x64, 0x65, 0x64, 0x75, 0x70, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x10, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x76, 0x61, 0x6c, 0x12, 0x52, 0x0a, 0x0d, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x76, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, - 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, - 0x12, 0x3c, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x73, 0x65, 0x74, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, - 0x65, 0x74, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, 0x12, 0x2b, - 0x0a, 0x11, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x65, - 0x76, 0x65, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x61, 0x67, 0x67, 0x72, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x65, - 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, - 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x73, - 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, - 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, - 0x11, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x74, 0x69, 0x63, 0x6b, 0x79, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, - 0x69, 0x63, 0x6b, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x15, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x65, 0x6e, 0x66, 0x6f, - 0x72, 0x63, 0x65, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x63, - 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x73, - 0x63, 0x61, 0x64, 0x65, 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x61, 0x73, - 0x63, 0x61, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, - 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x12, - 0x1a, 0x0a, 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x18, 0x1a, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x12, 0x1f, 0x0a, 0x0b, 0x71, - 0x75, 0x65, 0x75, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0a, 0x71, 0x75, 0x65, 0x75, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x12, 0x39, 0x0a, 0x19, - 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, - 0x64, 0x5f, 0x66, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x16, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x55, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, - 0x64, 0x46, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x69, 0x73, - 0x63, 0x61, 0x72, 0x64, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6e, 0x6f, 0x64, 0x69, - 0x73, 0x63, 0x61, 0x72, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x69, 0x6f, 0x5f, 0x73, 0x74, 0x72, 0x61, - 0x74, 0x65, 0x67, 0x79, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6f, 0x53, - 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x0a, 0x69, 0x6f, 0x53, 0x74, 0x72, 0x61, 0x74, - 0x65, 0x67, 0x79, 0x12, 0x57, 0x0a, 0x12, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x11, 0x70, 0x6c, 0x61, 0x63, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x25, 0x0a, 0x0e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x20, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, - 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, - 0x69, 0x70, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x3c, 0x0a, - 0x0b, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x22, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, - 0x0a, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x23, 0x0a, 0x0d, 0x66, - 0x70, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x23, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0c, 0x66, 0x70, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x12, 0x32, 0x0a, 0x05, 0x78, 0x61, 0x74, 0x74, 0x72, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x58, 0x61, 0x74, 0x74, 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x78, - 0x61, 0x74, 0x74, 0x72, 0x12, 0x3c, 0x0a, 0x0b, 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x63, 0x61, 0x6e, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0a, 0x73, 0x63, 0x61, 0x6e, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x12, 0x42, 0x0a, 0x0d, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, - 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0c, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x53, 0x0a, 0x16, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, - 0x76, 0x34, 0x5f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x14, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x4d, - 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x70, - 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x39, 0x0a, 0x0a, - 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x70, 0x65, 0x63, 0x52, 0x09, 0x70, 0x72, - 0x6f, 0x78, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x58, 0x0a, 0x15, 0x73, 0x68, 0x61, 0x72, 0x65, - 0x64, 0x76, 0x34, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, - 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, - 0x34, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x13, 0x73, 0x68, - 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x70, 0x65, - 0x63, 0x12, 0x42, 0x0a, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, 0x73, 0x70, - 0x65, 0x63, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, - 0x64, 0x76, 0x34, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, - 0x34, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x66, 0x73, - 0x74, 0x72, 0x69, 0x6d, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x75, 0x74, 0x6f, - 0x46, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x12, 0x3c, 0x0a, 0x0b, 0x69, 0x6f, 0x5f, 0x74, 0x68, 0x72, - 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6f, - 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x0a, 0x69, 0x6f, 0x54, 0x68, 0x72, 0x6f, - 0x74, 0x74, 0x6c, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6f, - 0x66, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, - 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x12, 0x1c, - 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x61, 0x68, 0x65, 0x61, 0x64, 0x18, 0x2f, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x09, 0x72, 0x65, 0x61, 0x64, 0x61, 0x68, 0x65, 0x61, 0x64, 0x12, 0x57, 0x0a, 0x14, - 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x30, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x6f, 0x70, - 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x13, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x69, 0x6e, 0x73, 0x68, 0x61, 0x72, - 0x65, 0x18, 0x31, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x77, 0x69, 0x6e, 0x73, 0x68, 0x61, 0x72, - 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x66, 0x61, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x32, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x66, 0x61, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1b, 0x0a, - 0x09, 0x6e, 0x65, 0x61, 0x72, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x33, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x6e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x71, 0x0a, 0x1e, 0x6e, 0x65, - 0x61, 0x72, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x34, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, - 0x52, 0x1b, 0x6e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x2a, 0x0a, - 0x11, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x5f, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x35, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, - 0x75, 0x6d, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x68, 0x65, - 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x18, 0x36, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x1a, 0x3f, 0x0a, 0x11, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe9, 0x11, 0x0a, - 0x10, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x12, 0x14, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x48, - 0x00, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1b, 0x0a, 0x08, 0x68, 0x61, 0x5f, 0x6c, 0x65, - 0x76, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x07, 0x68, 0x61, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x12, 0x2c, 0x0a, 0x03, 0x63, 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x48, 0x02, 0x52, 0x03, 0x63, - 0x6f, 0x73, 0x12, 0x3b, 0x0a, 0x0a, 0x69, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x48, 0x03, 0x52, 0x09, 0x69, 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, - 0x18, 0x0a, 0x06, 0x64, 0x65, 0x64, 0x75, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x48, - 0x04, 0x52, 0x06, 0x64, 0x65, 0x64, 0x75, 0x70, 0x65, 0x12, 0x2d, 0x0a, 0x11, 0x73, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x0d, 0x48, 0x05, 0x52, 0x10, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, - 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x48, 0x06, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, - 0x65, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x73, 0x65, - 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x53, 0x65, 0x74, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, - 0x12, 0x20, 0x0a, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x18, 0x0f, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x07, 0x52, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, - 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x11, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x73, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x48, 0x08, 0x52, - 0x10, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x65, 0x12, 0x16, 0x0a, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0d, - 0x48, 0x09, 0x52, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x06, 0x73, 0x74, 0x69, - 0x63, 0x6b, 0x79, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x48, 0x0a, 0x52, 0x06, 0x73, 0x74, 0x69, - 0x63, 0x6b, 0x79, 0x12, 0x2e, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x13, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x48, 0x0b, 0x52, 0x05, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x12, 0x1a, 0x0a, 0x07, 0x6a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x18, 0x17, - 0x20, 0x01, 0x28, 0x08, 0x48, 0x0c, 0x52, 0x07, 0x6a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x12, - 0x1c, 0x0a, 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x18, 0x18, 0x20, 0x01, 0x28, - 0x08, 0x48, 0x0d, 0x52, 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x12, 0x21, 0x0a, - 0x0b, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x18, 0x19, 0x20, 0x01, - 0x28, 0x0d, 0x48, 0x0e, 0x52, 0x0a, 0x71, 0x75, 0x65, 0x75, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, - 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x18, 0x1a, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, - 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x1e, 0x0a, 0x09, 0x6e, 0x6f, - 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x08, 0x48, 0x0f, 0x52, - 0x09, 0x6e, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x69, 0x6f, - 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x49, 0x6f, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x0a, 0x69, 0x6f, - 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x3e, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x6f, - 0x72, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x53, 0x63, 0x61, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0a, 0x73, 0x63, 0x61, 0x6e, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x42, 0x0a, 0x0d, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x48, 0x10, 0x52, 0x0a, 0x65, 0x78, - 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1c, 0x0a, 0x08, 0x66, 0x61, 0x73, 0x74, - 0x70, 0x61, 0x74, 0x68, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x08, 0x48, 0x11, 0x52, 0x08, 0x66, 0x61, - 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x12, 0x34, 0x0a, 0x05, 0x78, 0x61, 0x74, 0x74, 0x72, 0x18, - 0x1f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x58, 0x61, 0x74, 0x74, 0x72, 0x2e, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x48, 0x12, 0x52, 0x05, 0x78, 0x61, 0x74, 0x74, 0x72, 0x12, 0x3e, 0x0a, 0x0b, - 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x20, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x48, 0x13, - 0x52, 0x0a, 0x73, 0x63, 0x61, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x45, 0x0a, 0x0e, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x21, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x48, 0x14, 0x52, 0x0c, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x53, - 0x70, 0x65, 0x63, 0x12, 0x56, 0x0a, 0x17, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x22, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x48, 0x15, 0x52, 0x14, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x4d, - 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0b, 0x70, - 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x23, 0x20, 0x01, 0x28, 0x08, - 0x48, 0x16, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x3b, - 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x24, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x70, 0x65, 0x63, 0x48, 0x17, - 0x52, 0x09, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x5a, 0x0a, 0x15, 0x73, + 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0c, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x53, 0x0a, 0x16, 0x73, 0x68, + 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x6f, 0x75, + 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x14, 0x73, 0x68, 0x61, 0x72, 0x65, + 0x64, 0x76, 0x34, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x28, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x12, 0x39, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x29, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x70, 0x65, 0x63, + 0x52, 0x09, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x58, 0x0a, 0x15, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, - 0x73, 0x70, 0x65, 0x63, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, + 0x73, 0x70, 0x65, 0x63, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, - 0x48, 0x18, 0x52, 0x13, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x44, 0x0a, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x65, - 0x64, 0x76, 0x34, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, + 0x52, 0x13, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x42, 0x0a, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, + 0x34, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0c, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x75, 0x74, + 0x6f, 0x5f, 0x66, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, + 0x61, 0x75, 0x74, 0x6f, 0x46, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x12, 0x3c, 0x0a, 0x0b, 0x69, 0x6f, + 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x49, 0x6f, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x0a, 0x69, 0x6f, + 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x18, 0x2e, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0e, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x43, 0x68, 0x75, 0x6e, + 0x6b, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x61, 0x68, 0x65, 0x61, 0x64, 0x18, + 0x2f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x61, 0x64, 0x61, 0x68, 0x65, 0x61, 0x64, + 0x12, 0x57, 0x0a, 0x14, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x5f, 0x72, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x30, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x70, 0x65, 0x63, 0x48, 0x19, 0x52, - 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x70, 0x65, 0x63, 0x12, 0x21, 0x0a, - 0x0b, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x66, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x18, 0x27, 0x20, 0x01, - 0x28, 0x08, 0x48, 0x1a, 0x52, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x46, 0x73, 0x74, 0x72, 0x69, 0x6d, - 0x12, 0x3e, 0x0a, 0x0b, 0x69, 0x6f, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x18, - 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6f, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, - 0x6c, 0x65, 0x48, 0x1b, 0x52, 0x0a, 0x69, 0x6f, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, - 0x12, 0x1e, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x61, 0x68, 0x65, 0x61, 0x64, 0x18, 0x29, 0x20, - 0x01, 0x28, 0x08, 0x48, 0x1c, 0x52, 0x09, 0x72, 0x65, 0x61, 0x64, 0x61, 0x68, 0x65, 0x61, 0x64, - 0x12, 0x1c, 0x0a, 0x08, 0x77, 0x69, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x2a, 0x20, 0x01, - 0x28, 0x08, 0x48, 0x1d, 0x52, 0x08, 0x77, 0x69, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x12, 0x73, + 0x2e, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x13, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x69, 0x6e, + 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x31, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x77, 0x69, 0x6e, + 0x73, 0x68, 0x61, 0x72, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x66, 0x61, 0x5f, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x32, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0f, 0x66, 0x61, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x65, 0x61, 0x72, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x33, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x71, 0x0a, 0x1e, 0x6e, 0x65, 0x61, 0x72, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, - 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x18, 0x34, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x61, - 0x74, 0x65, 0x67, 0x79, 0x48, 0x1e, 0x52, 0x1b, 0x6e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, - 0x65, 0x67, 0x79, 0x12, 0x22, 0x0a, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, - 0x65, 0x64, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x08, 0x48, 0x1f, 0x52, 0x0b, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x42, 0x0a, 0x0a, 0x08, 0x73, 0x69, 0x7a, 0x65, 0x5f, - 0x6f, 0x70, 0x74, 0x42, 0x0e, 0x0a, 0x0c, 0x68, 0x61, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, - 0x6f, 0x70, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6f, 0x73, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x10, - 0x0a, 0x0e, 0x69, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6f, 0x70, 0x74, - 0x42, 0x0c, 0x0a, 0x0a, 0x64, 0x65, 0x64, 0x75, 0x70, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x17, - 0x0a, 0x15, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x76, 0x61, 0x6c, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x65, - 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x10, 0x0a, 0x0e, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, - 0x61, 0x73, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x17, 0x0a, 0x15, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6f, 0x70, 0x74, - 0x42, 0x0b, 0x0a, 0x09, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x0c, 0x0a, - 0x0a, 0x73, 0x74, 0x69, 0x63, 0x6b, 0x79, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x0d, 0x0a, 0x0b, 0x6a, 0x6f, 0x75, 0x72, - 0x6e, 0x61, 0x6c, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x0e, 0x0a, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, - 0x64, 0x76, 0x34, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x71, 0x75, 0x65, 0x75, 0x65, - 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x0f, 0x0a, 0x0d, 0x6e, 0x6f, - 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x65, - 0x78, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x0e, - 0x0a, 0x0c, 0x66, 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x0b, - 0x0a, 0x09, 0x78, 0x61, 0x74, 0x74, 0x72, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x73, - 0x63, 0x61, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x0b, - 0x0a, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x14, 0x0a, 0x12, 0x73, - 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, - 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x10, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x73, 0x70, - 0x65, 0x63, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x1b, 0x0a, 0x19, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, - 0x76, 0x34, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, - 0x6f, 0x70, 0x74, 0x42, 0x13, 0x0a, 0x11, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, - 0x73, 0x70, 0x65, 0x63, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x61, 0x75, 0x74, 0x6f, - 0x5f, 0x66, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x69, - 0x6f, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x0f, - 0x0a, 0x0d, 0x72, 0x65, 0x61, 0x64, 0x61, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x42, - 0x0e, 0x0a, 0x0c, 0x77, 0x69, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x42, - 0x24, 0x0a, 0x22, 0x6e, 0x65, 0x61, 0x72, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x72, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, - 0x79, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, - 0x6d, 0x6d, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x22, 0xc5, 0x14, 0x0a, 0x10, 0x56, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x14, 0x0a, - 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x04, 0x73, - 0x69, 0x7a, 0x65, 0x12, 0x1b, 0x0a, 0x08, 0x68, 0x61, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x07, 0x68, 0x61, 0x4c, 0x65, 0x76, 0x65, 0x6c, - 0x12, 0x2c, 0x0a, 0x03, 0x63, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x43, 0x6f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x48, 0x02, 0x52, 0x03, 0x63, 0x6f, 0x73, 0x12, 0x3b, - 0x0a, 0x0a, 0x69, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x48, 0x03, - 0x52, 0x09, 0x69, 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x06, 0x64, - 0x65, 0x64, 0x75, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x48, 0x04, 0x52, 0x06, 0x64, - 0x65, 0x64, 0x75, 0x70, 0x65, 0x12, 0x2d, 0x0a, 0x11, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, - 0x48, 0x05, 0x52, 0x10, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x76, 0x61, 0x6c, 0x12, 0x58, 0x0a, 0x0d, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x0c, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x18, - 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x48, 0x06, - 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, - 0x72, 0x61, 0x73, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x48, 0x07, 0x52, 0x0a, 0x70, 0x61, - 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x11, 0x73, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x08, 0x52, 0x10, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x09, 0x52, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x12, - 0x18, 0x0a, 0x06, 0x73, 0x74, 0x69, 0x63, 0x6b, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x48, - 0x0a, 0x52, 0x06, 0x73, 0x74, 0x69, 0x63, 0x6b, 0x79, 0x12, 0x2e, 0x0a, 0x05, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x48, 0x0b, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1a, 0x0a, 0x07, 0x6a, 0x6f, 0x75, - 0x72, 0x6e, 0x61, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x48, 0x0c, 0x52, 0x07, 0x6a, 0x6f, - 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, - 0x34, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x48, 0x0d, 0x52, 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, - 0x64, 0x76, 0x34, 0x12, 0x21, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x64, 0x65, 0x70, - 0x74, 0x68, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x0e, 0x52, 0x0a, 0x71, 0x75, 0x65, 0x75, - 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x12, 0x1e, 0x0a, 0x09, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x65, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x48, 0x0f, 0x52, 0x09, 0x65, 0x6e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x12, 0x2d, 0x0a, 0x11, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x13, 0x20, 0x01, 0x28, - 0x0d, 0x48, 0x10, 0x52, 0x10, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x4f, 0x0a, 0x0d, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4f, 0x70, 0x52, 0x0c, 0x73, 0x69, 0x7a, 0x65, 0x4f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x56, 0x0a, 0x11, 0x68, 0x61, 0x5f, 0x6c, 0x65, 0x76, - 0x65, 0x6c, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x33, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4f, 0x70, 0x52, 0x0f, 0x68, - 0x61, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x51, - 0x0a, 0x0e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x18, 0x34, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, - 0x70, 0x65, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x4f, 0x70, 0x52, 0x0d, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x12, 0x68, 0x0a, 0x1a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, - 0x35, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, - 0x65, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4f, - 0x70, 0x52, 0x18, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x76, 0x61, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x09, 0x6e, - 0x6f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x18, 0x36, 0x20, 0x01, 0x28, 0x08, 0x48, 0x11, - 0x52, 0x09, 0x6e, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x69, - 0x6f, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x37, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x49, 0x6f, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x0a, 0x69, - 0x6f, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x3e, 0x0a, 0x0b, 0x65, 0x78, 0x70, - 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x38, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x48, 0x12, 0x52, 0x0a, 0x65, - 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x3e, 0x0a, 0x0b, 0x73, 0x63, 0x61, - 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x39, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, + 0x74, 0x65, 0x67, 0x79, 0x52, 0x1b, 0x6e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, + 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x5f, 0x63, 0x6c, + 0x6f, 0x6e, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x35, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, + 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x18, 0x36, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x1a, + 0x3f, 0x0a, 0x11, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xe9, 0x11, 0x0a, 0x10, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1b, 0x0a, 0x08, 0x68, + 0x61, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, + 0x07, 0x68, 0x61, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x2c, 0x0a, 0x03, 0x63, 0x6f, 0x73, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x48, + 0x02, 0x52, 0x03, 0x63, 0x6f, 0x73, 0x12, 0x3b, 0x0a, 0x0a, 0x69, 0x6f, 0x5f, 0x70, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6f, 0x50, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x48, 0x03, 0x52, 0x09, 0x69, 0x6f, 0x50, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x06, 0x64, 0x65, 0x64, 0x75, 0x70, 0x65, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x08, 0x48, 0x04, 0x52, 0x06, 0x64, 0x65, 0x64, 0x75, 0x70, 0x65, 0x12, 0x2d, 0x0a, + 0x11, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, + 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x05, 0x52, 0x10, 0x73, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x06, + 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x48, 0x06, 0x52, 0x06, + 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x53, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, + 0x73, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x48, 0x07, 0x52, 0x0a, 0x70, 0x61, 0x73, 0x73, + 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x11, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x08, 0x52, 0x10, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x11, + 0x20, 0x01, 0x28, 0x0d, 0x48, 0x09, 0x52, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x18, 0x0a, + 0x06, 0x73, 0x74, 0x69, 0x63, 0x6b, 0x79, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x48, 0x0a, 0x52, + 0x06, 0x73, 0x74, 0x69, 0x63, 0x6b, 0x79, 0x12, 0x2e, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x48, 0x0b, + 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1a, 0x0a, 0x07, 0x6a, 0x6f, 0x75, 0x72, 0x6e, + 0x61, 0x6c, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x48, 0x0c, 0x52, 0x07, 0x6a, 0x6f, 0x75, 0x72, + 0x6e, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x18, + 0x18, 0x20, 0x01, 0x28, 0x08, 0x48, 0x0d, 0x52, 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, + 0x34, 0x12, 0x21, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, + 0x18, 0x19, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x0e, 0x52, 0x0a, 0x71, 0x75, 0x65, 0x75, 0x65, 0x44, + 0x65, 0x70, 0x74, 0x68, 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, + 0x70, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, + 0x68, 0x69, 0x70, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x1e, + 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x18, 0x1b, 0x20, 0x01, 0x28, + 0x08, 0x48, 0x0f, 0x52, 0x09, 0x6e, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x12, 0x3c, + 0x0a, 0x0b, 0x69, 0x6f, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x1c, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6f, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, + 0x52, 0x0a, 0x69, 0x6f, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x3e, 0x0a, 0x0b, + 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x1d, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x48, 0x10, + 0x52, 0x0a, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1c, 0x0a, 0x08, + 0x66, 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x08, 0x48, 0x11, + 0x52, 0x08, 0x66, 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x12, 0x34, 0x0a, 0x05, 0x78, 0x61, + 0x74, 0x74, 0x72, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x58, 0x61, 0x74, 0x74, + 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x12, 0x52, 0x05, 0x78, 0x61, 0x74, 0x74, 0x72, + 0x12, 0x3e, 0x0a, 0x0b, 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, + 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x48, 0x13, 0x52, 0x0a, 0x73, 0x63, 0x61, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x12, 0x45, 0x0a, 0x0e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x70, + 0x65, 0x63, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x14, 0x52, 0x0c, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x4f, 0x70, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x56, 0x0a, 0x17, 0x73, 0x68, 0x61, 0x72, 0x65, + 0x64, 0x76, 0x34, 0x5f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x70, + 0x65, 0x63, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x15, 0x52, 0x14, 0x73, 0x68, 0x61, 0x72, 0x65, + 0x64, 0x76, 0x34, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, + 0x21, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x23, + 0x20, 0x01, 0x28, 0x08, 0x48, 0x16, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x57, 0x72, 0x69, + 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x73, 0x70, 0x65, 0x63, + 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x70, + 0x65, 0x63, 0x48, 0x17, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, + 0x5a, 0x0a, 0x15, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x48, 0x13, 0x52, 0x0a, 0x73, - 0x63, 0x61, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x45, 0x0a, 0x0e, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x3a, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x48, 0x14, 0x52, 0x0c, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x53, 0x70, 0x65, 0x63, - 0x12, 0x56, 0x0a, 0x17, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x3b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x48, 0x15, 0x52, 0x14, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x4d, 0x6f, 0x75, 0x6e, - 0x74, 0x4f, 0x70, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x78, - 0x79, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x08, 0x48, 0x16, 0x52, - 0x0a, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x70, - 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x70, 0x65, 0x63, 0x48, 0x17, 0x52, 0x09, 0x70, - 0x72, 0x6f, 0x78, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1c, 0x0a, 0x08, 0x66, 0x61, 0x73, 0x74, - 0x70, 0x61, 0x74, 0x68, 0x18, 0x3e, 0x20, 0x01, 0x28, 0x08, 0x48, 0x18, 0x52, 0x08, 0x66, 0x61, - 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x12, 0x5a, 0x0a, 0x15, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, - 0x76, 0x34, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, - 0x3f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x48, 0x19, 0x52, 0x13, 0x73, - 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x70, - 0x65, 0x63, 0x12, 0x44, 0x0a, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, 0x73, - 0x70, 0x65, 0x63, 0x18, 0x40, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x68, 0x61, 0x72, - 0x65, 0x64, 0x76, 0x34, 0x53, 0x70, 0x65, 0x63, 0x48, 0x1a, 0x52, 0x0c, 0x73, 0x68, 0x61, 0x72, - 0x65, 0x64, 0x76, 0x34, 0x53, 0x70, 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0b, 0x61, 0x75, 0x74, 0x6f, - 0x5f, 0x66, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x18, 0x41, 0x20, 0x01, 0x28, 0x08, 0x48, 0x1b, 0x52, - 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x46, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x12, 0x3e, 0x0a, 0x0b, 0x69, - 0x6f, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x18, 0x42, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x49, 0x6f, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x48, 0x1c, 0x52, - 0x0a, 0x69, 0x6f, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x12, 0x1e, 0x0a, 0x09, 0x72, - 0x65, 0x61, 0x64, 0x61, 0x68, 0x65, 0x61, 0x64, 0x18, 0x43, 0x20, 0x01, 0x28, 0x08, 0x48, 0x1d, - 0x52, 0x09, 0x72, 0x65, 0x61, 0x64, 0x61, 0x68, 0x65, 0x61, 0x64, 0x12, 0x1c, 0x0a, 0x08, 0x77, - 0x69, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x44, 0x20, 0x01, 0x28, 0x08, 0x48, 0x1e, 0x52, - 0x08, 0x77, 0x69, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x1a, 0x3f, 0x0a, 0x11, 0x56, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2f, 0x0a, 0x08, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x4f, 0x70, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x10, - 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x10, 0x01, 0x12, 0x0b, - 0x0a, 0x07, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x10, 0x02, 0x42, 0x0a, 0x0a, 0x08, 0x73, + 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x53, 0x70, 0x65, 0x63, 0x48, 0x18, 0x52, 0x13, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x44, 0x0a, 0x0d, 0x73, + 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x26, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x70, 0x65, + 0x63, 0x48, 0x19, 0x52, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x70, 0x65, + 0x63, 0x12, 0x21, 0x0a, 0x0b, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x66, 0x73, 0x74, 0x72, 0x69, 0x6d, + 0x18, 0x27, 0x20, 0x01, 0x28, 0x08, 0x48, 0x1a, 0x52, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x46, 0x73, + 0x74, 0x72, 0x69, 0x6d, 0x12, 0x3e, 0x0a, 0x0b, 0x69, 0x6f, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, + 0x74, 0x6c, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6f, 0x54, 0x68, + 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x48, 0x1b, 0x52, 0x0a, 0x69, 0x6f, 0x54, 0x68, 0x72, 0x6f, + 0x74, 0x74, 0x6c, 0x65, 0x12, 0x1e, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x61, 0x68, 0x65, 0x61, + 0x64, 0x18, 0x29, 0x20, 0x01, 0x28, 0x08, 0x48, 0x1c, 0x52, 0x09, 0x72, 0x65, 0x61, 0x64, 0x61, + 0x68, 0x65, 0x61, 0x64, 0x12, 0x1c, 0x0a, 0x08, 0x77, 0x69, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, + 0x18, 0x2a, 0x20, 0x01, 0x28, 0x08, 0x48, 0x1d, 0x52, 0x08, 0x77, 0x69, 0x6e, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x12, 0x73, 0x0a, 0x1e, 0x6e, 0x65, 0x61, 0x72, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, + 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x61, + 0x74, 0x65, 0x67, 0x79, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4e, 0x65, 0x61, + 0x72, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x48, 0x1e, 0x52, 0x1b, 0x6e, 0x65, 0x61, 0x72, + 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x22, 0x0a, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x08, 0x48, 0x1f, 0x52, 0x0b, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x42, 0x0a, 0x0a, 0x08, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x0e, 0x0a, 0x0c, 0x68, 0x61, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6f, 0x73, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x10, 0x0a, 0x0e, 0x69, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, @@ -32262,1688 +32958,1911 @@ var file_api_api_proto_rawDesc = []byte{ 0x6a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x0e, 0x0a, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x0f, - 0x0a, 0x0d, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x42, - 0x17, 0x0a, 0x15, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, - 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x0f, 0x0a, 0x0d, 0x6e, 0x6f, 0x64, 0x69, - 0x73, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x65, 0x78, 0x70, - 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x11, 0x0a, 0x0f, - 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x6f, 0x70, 0x74, 0x42, - 0x0b, 0x0a, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x14, 0x0a, 0x12, - 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, - 0x70, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x10, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x73, - 0x70, 0x65, 0x63, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x0e, 0x0a, 0x0c, 0x66, 0x61, 0x73, 0x74, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x1b, 0x0a, 0x19, 0x73, 0x68, 0x61, 0x72, 0x65, - 0x64, 0x76, 0x34, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, - 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x13, 0x0a, 0x11, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, - 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x61, 0x75, 0x74, - 0x6f, 0x5f, 0x66, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x11, 0x0a, 0x0f, - 0x69, 0x6f, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x42, - 0x0f, 0x0a, 0x0d, 0x72, 0x65, 0x61, 0x64, 0x61, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x70, 0x74, - 0x42, 0x0e, 0x0a, 0x0c, 0x77, 0x69, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x6f, 0x70, 0x74, - 0x22, 0x51, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6e, - 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x75, 0x75, 0x69, - 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x70, 0x6f, 0x6f, 0x6c, 0x55, 0x75, - 0x69, 0x64, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x02, 0x69, 0x64, 0x22, 0xab, 0x01, 0x0a, 0x0f, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x70, 0x12, 0x57, 0x0a, 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x70, - 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x0c, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x1a, 0x3f, 0x0a, 0x11, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0xb5, 0x05, 0x0a, 0x09, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, - 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x04, 0x61, 0x63, 0x6c, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x2e, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x04, 0x61, - 0x63, 0x6c, 0x73, 0x1a, 0x50, 0x0a, 0x13, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x39, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, - 0x73, 0x68, 0x69, 0x70, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x1a, 0xd3, 0x03, 0x0a, 0x0d, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x4c, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x0a, 0x0d, 0x6e, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x42, + 0x11, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x6f, + 0x70, 0x74, 0x42, 0x0e, 0x0a, 0x0c, 0x66, 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x6f, + 0x70, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x78, 0x61, 0x74, 0x74, 0x72, 0x5f, 0x6f, 0x70, 0x74, 0x42, + 0x11, 0x0a, 0x0f, 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x6f, + 0x70, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x42, + 0x14, 0x0a, 0x12, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x10, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x78, + 0x79, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x1b, 0x0a, 0x19, 0x73, 0x68, + 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x73, + 0x70, 0x65, 0x63, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x13, 0x0a, 0x11, 0x73, 0x68, 0x61, 0x72, 0x65, + 0x64, 0x76, 0x34, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x11, 0x0a, 0x0f, + 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x66, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x5f, 0x6f, 0x70, 0x74, 0x42, + 0x11, 0x0a, 0x0f, 0x69, 0x6f, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x5f, 0x6f, + 0x70, 0x74, 0x42, 0x0f, 0x0a, 0x0d, 0x72, 0x65, 0x61, 0x64, 0x61, 0x68, 0x65, 0x61, 0x64, 0x5f, + 0x6f, 0x70, 0x74, 0x42, 0x0e, 0x0a, 0x0c, 0x77, 0x69, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, + 0x6f, 0x70, 0x74, 0x42, 0x24, 0x0a, 0x22, 0x6e, 0x65, 0x61, 0x72, 0x5f, 0x73, 0x79, 0x6e, 0x63, + 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x72, + 0x61, 0x74, 0x65, 0x67, 0x79, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x22, 0xc5, 0x14, 0x0a, + 0x10, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x12, 0x14, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x48, + 0x00, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1b, 0x0a, 0x08, 0x68, 0x61, 0x5f, 0x6c, 0x65, + 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x07, 0x68, 0x61, 0x4c, + 0x65, 0x76, 0x65, 0x6c, 0x12, 0x2c, 0x0a, 0x03, 0x63, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x48, 0x02, 0x52, 0x03, 0x63, + 0x6f, 0x73, 0x12, 0x3b, 0x0a, 0x0a, 0x69, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x48, 0x03, 0x52, 0x09, 0x69, 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, + 0x18, 0x0a, 0x06, 0x64, 0x65, 0x64, 0x75, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x48, + 0x04, 0x52, 0x06, 0x64, 0x65, 0x64, 0x75, 0x70, 0x65, 0x12, 0x2d, 0x0a, 0x11, 0x73, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0d, 0x48, 0x05, 0x52, 0x10, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x58, 0x0a, 0x0d, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x12, 0x18, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x08, 0x48, 0x06, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x12, 0x3c, 0x0a, 0x0b, + 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, 0x52, 0x0a, + 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x0a, 0x70, 0x61, + 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x48, 0x07, + 0x52, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x11, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x48, 0x08, 0x52, 0x10, 0x73, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x05, 0x73, + 0x63, 0x61, 0x6c, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x09, 0x52, 0x05, 0x73, 0x63, + 0x61, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x06, 0x73, 0x74, 0x69, 0x63, 0x6b, 0x79, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x08, 0x48, 0x0a, 0x52, 0x06, 0x73, 0x74, 0x69, 0x63, 0x6b, 0x79, 0x12, 0x2e, 0x0a, + 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x48, 0x0b, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1a, 0x0a, + 0x07, 0x6a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x48, 0x0c, + 0x52, 0x07, 0x6a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x08, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x64, 0x76, 0x34, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x48, 0x0d, 0x52, 0x08, 0x73, + 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x12, 0x21, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x75, 0x65, + 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x0e, 0x52, 0x0a, + 0x71, 0x75, 0x65, 0x75, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x12, 0x1e, 0x0a, 0x09, 0x65, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x48, 0x0f, 0x52, + 0x09, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x12, 0x2d, 0x0a, 0x11, 0x61, 0x67, + 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, + 0x13, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x10, 0x52, 0x10, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x4f, 0x0a, 0x0d, 0x73, 0x69, 0x7a, + 0x65, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4f, 0x70, 0x52, 0x0c, 0x73, 0x69, + 0x7a, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x56, 0x0a, 0x11, 0x68, 0x61, + 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, + 0x33, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, + 0x65, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4f, + 0x70, 0x52, 0x0f, 0x68, 0x61, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x6f, 0x72, 0x12, 0x51, 0x0a, 0x0e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5f, 0x6f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x6f, 0x72, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x4f, 0x70, 0x52, 0x0d, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x68, 0x0a, 0x1a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x18, 0x35, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x4f, 0x70, 0x52, 0x18, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, + 0x1e, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x18, 0x36, 0x20, 0x01, + 0x28, 0x08, 0x48, 0x11, 0x52, 0x09, 0x6e, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x12, + 0x3c, 0x0a, 0x0b, 0x69, 0x6f, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x37, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6f, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, + 0x79, 0x52, 0x0a, 0x69, 0x6f, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x3e, 0x0a, + 0x0b, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x38, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x48, + 0x12, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x3e, 0x0a, + 0x0b, 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x39, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x48, + 0x13, 0x52, 0x0a, 0x73, 0x63, 0x61, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x45, 0x0a, + 0x0e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, + 0x3a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x14, 0x52, 0x0c, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, + 0x53, 0x70, 0x65, 0x63, 0x12, 0x56, 0x0a, 0x17, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, + 0x5f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, + 0x3b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x15, 0x52, 0x14, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, + 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0b, + 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x3c, 0x20, 0x01, 0x28, + 0x08, 0x48, 0x16, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, + 0x3b, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x3d, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x70, 0x65, 0x63, 0x48, + 0x17, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1c, 0x0a, 0x08, + 0x66, 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x18, 0x3e, 0x20, 0x01, 0x28, 0x08, 0x48, 0x18, + 0x52, 0x08, 0x66, 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x12, 0x5a, 0x0a, 0x15, 0x73, 0x68, + 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x73, + 0x70, 0x65, 0x63, 0x18, 0x3f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x68, 0x61, 0x72, + 0x65, 0x64, 0x76, 0x34, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x48, + 0x19, 0x52, 0x13, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x44, 0x0a, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, + 0x76, 0x34, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x40, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x70, 0x65, 0x63, 0x48, 0x1a, 0x52, 0x0c, + 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x70, 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0b, + 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x66, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x18, 0x41, 0x20, 0x01, 0x28, + 0x08, 0x48, 0x1b, 0x52, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x46, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x12, + 0x3e, 0x0a, 0x0b, 0x69, 0x6f, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x18, 0x42, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6f, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, + 0x65, 0x48, 0x1c, 0x52, 0x0a, 0x69, 0x6f, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x12, + 0x1e, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x61, 0x68, 0x65, 0x61, 0x64, 0x18, 0x43, 0x20, 0x01, + 0x28, 0x08, 0x48, 0x1d, 0x52, 0x09, 0x72, 0x65, 0x61, 0x64, 0x61, 0x68, 0x65, 0x61, 0x64, 0x12, + 0x1c, 0x0a, 0x08, 0x77, 0x69, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x44, 0x20, 0x01, 0x28, + 0x08, 0x48, 0x1e, 0x52, 0x08, 0x77, 0x69, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x1a, 0x3f, 0x0a, + 0x11, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2f, + 0x0a, 0x08, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4f, 0x70, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x71, + 0x75, 0x61, 0x6c, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, + 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x10, 0x02, 0x42, + 0x0a, 0x0a, 0x08, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x0e, 0x0a, 0x0c, 0x68, + 0x61, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x63, + 0x6f, 0x73, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x10, 0x0a, 0x0e, 0x69, 0x6f, 0x5f, 0x70, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x64, 0x65, 0x64, 0x75, + 0x70, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x17, 0x0a, 0x15, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x5f, 0x6f, 0x70, 0x74, 0x42, + 0x0c, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x10, 0x0a, + 0x0e, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x42, + 0x17, 0x0a, 0x15, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x73, 0x63, 0x61, 0x6c, + 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x73, 0x74, 0x69, 0x63, 0x6b, 0x79, 0x5f, + 0x6f, 0x70, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6f, 0x70, 0x74, + 0x42, 0x0d, 0x0a, 0x0b, 0x6a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x6f, 0x70, 0x74, 0x42, + 0x0e, 0x0a, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, 0x6f, 0x70, 0x74, 0x42, + 0x11, 0x0a, 0x0f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x5f, 0x6f, + 0x70, 0x74, 0x42, 0x0f, 0x0a, 0x0d, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, + 0x6f, 0x70, 0x74, 0x42, 0x17, 0x0a, 0x15, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x0f, 0x0a, 0x0d, + 0x6e, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x11, 0x0a, + 0x0f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x6f, 0x70, 0x74, + 0x42, 0x11, 0x0a, 0x0f, 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, + 0x6f, 0x70, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, + 0x42, 0x14, 0x0a, 0x12, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x10, 0x0a, 0x0e, 0x70, 0x72, 0x6f, + 0x78, 0x79, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x0e, 0x0a, 0x0c, 0x66, + 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x1b, 0x0a, 0x19, 0x73, + 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, + 0x73, 0x70, 0x65, 0x63, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x13, 0x0a, 0x11, 0x73, 0x68, 0x61, 0x72, + 0x65, 0x64, 0x76, 0x34, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x11, 0x0a, + 0x0f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x66, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x5f, 0x6f, 0x70, 0x74, + 0x42, 0x11, 0x0a, 0x0f, 0x69, 0x6f, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x5f, + 0x6f, 0x70, 0x74, 0x42, 0x0f, 0x0a, 0x0d, 0x72, 0x65, 0x61, 0x64, 0x61, 0x68, 0x65, 0x61, 0x64, + 0x5f, 0x6f, 0x70, 0x74, 0x42, 0x0e, 0x0a, 0x0c, 0x77, 0x69, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, + 0x5f, 0x6f, 0x70, 0x74, 0x22, 0x51, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, + 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x6f, 0x6f, 0x6c, + 0x5f, 0x75, 0x75, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x70, 0x6f, + 0x6f, 0x6c, 0x55, 0x75, 0x69, 0x64, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0xab, 0x01, 0x0a, 0x0f, 0x52, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x70, 0x12, 0x57, 0x0a, 0x0d, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x4d, 0x61, 0x70, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x1a, 0x3f, 0x0a, 0x11, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb5, 0x05, 0x0a, 0x09, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, + 0x68, 0x69, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x04, 0x61, 0x63, 0x6c, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x61, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6f, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x6f, + 0x6c, 0x52, 0x04, 0x61, 0x63, 0x6c, 0x73, 0x1a, 0x50, 0x0a, 0x13, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x39, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, - 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, - 0x74, 0x6f, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x61, - 0x62, 0x6f, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x46, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, - 0x73, 0x68, 0x69, 0x70, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x1a, 0x60, 0x0a, 0x0b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x1a, 0xd3, 0x03, 0x0a, 0x0d, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x4c, 0x0a, 0x06, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, + 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x61, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, + 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x3b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x2e, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x12, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, 0x6e, 0x65, - 0x72, 0x73, 0x68, 0x69, 0x70, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2c, 0x0a, 0x0a, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x65, 0x61, - 0x64, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x57, 0x72, 0x69, 0x74, 0x65, 0x10, 0x01, 0x12, 0x09, - 0x0a, 0x05, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x10, 0x02, 0x22, 0xdf, 0x0d, 0x0a, 0x06, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x12, - 0x38, 0x0a, 0x07, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, - 0x52, 0x07, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x30, 0x0a, 0x05, 0x63, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x73, - 0x70, 0x65, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x14, 0x0a, 0x05, - 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x75, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x53, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x35, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x74, - 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x4f, 0x6e, 0x12, 0x43, 0x0a, 0x0e, 0x61, 0x74, 0x74, 0x61, - 0x63, 0x68, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, - 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, - 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2c, - 0x0a, 0x12, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x65, 0x63, 0x75, - 0x72, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x0b, - 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x11, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x50, 0x61, 0x74, 0x68, 0x12, 0x48, 0x0a, - 0x0b, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x12, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x2e, 0x41, 0x74, 0x74, 0x61, - 0x63, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x61, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3e, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x61, + 0x62, 0x6f, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x63, + 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x46, 0x0a, 0x06, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, + 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x06, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x1a, 0x60, 0x0a, 0x0b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, + 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x12, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x62, + 0x6f, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, 0x73, 0x12, 0x45, 0x0a, 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x70, - 0x52, 0x0c, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x12, 0x4a, 0x0a, 0x10, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, - 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x73, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x52, - 0x0f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x73, - 0x12, 0x2c, 0x0a, 0x12, 0x66, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x66, 0x73, - 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x3b, - 0x0a, 0x0b, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x18, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x64, - 0x65, 0x74, 0x61, 0x63, 0x68, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x64, 0x65, - 0x74, 0x61, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x08, 0x66, 0x70, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x61, 0x73, - 0x74, 0x70, 0x61, 0x74, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x08, 0x66, 0x70, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3e, 0x0a, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x63, - 0x61, 0x6e, 0x5f, 0x66, 0x69, 0x78, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x2c, 0x0a, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, + 0x04, 0x52, 0x65, 0x61, 0x64, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x10, 0x02, 0x22, 0xdf, 0x0d, + 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x05, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x61, 0x64, 0x6f, + 0x6e, 0x6c, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x6f, + 0x6e, 0x6c, 0x79, 0x12, 0x38, 0x0a, 0x07, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x6f, 0x63, + 0x61, 0x74, 0x6f, 0x72, 0x52, 0x07, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x30, 0x0a, + 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x63, - 0x61, 0x6e, 0x46, 0x69, 0x78, 0x12, 0x51, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x63, - 0x61, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x48, 0x65, 0x61, 0x6c, - 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x63, - 0x61, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x42, 0x0a, 0x0d, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0c, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x53, 0x0a, 0x16, - 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, - 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x14, 0x73, 0x68, 0x61, - 0x72, 0x65, 0x64, 0x76, 0x34, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x48, 0x0a, 0x12, 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x6f, 0x5f, - 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x12, + 0x2f, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x49, 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x10, 0x64, 0x65, 0x72, 0x69, 0x76, - 0x65, 0x64, 0x49, 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, - 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x73, 0x68, 0x63, 0x61, 0x6e, 0x18, 0x20, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0a, 0x69, 0x6e, 0x54, 0x72, 0x61, 0x73, 0x68, 0x63, 0x61, 0x6e, 0x1a, 0x3d, 0x0a, 0x0f, - 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa4, 0x03, 0x0a, 0x05, - 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x64, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x72, 0x65, 0x61, 0x64, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x72, - 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, 0x65, - 0x61, 0x64, 0x4d, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, 0x65, 0x61, 0x64, 0x42, 0x79, - 0x74, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x72, 0x69, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x06, 0x77, 0x72, 0x69, 0x74, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x4d, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, - 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6f, 0x5f, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x69, 0x6f, - 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x13, 0x0a, 0x05, 0x69, 0x6f, 0x5f, 0x6d, - 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x69, 0x6f, 0x4d, 0x73, 0x12, 0x1d, 0x0a, - 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x09, 0x62, 0x79, 0x74, 0x65, 0x73, 0x55, 0x73, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x5f, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x4d, 0x73, 0x12, 0x1a, 0x0a, - 0x08, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x08, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x69, 0x73, - 0x63, 0x61, 0x72, 0x64, 0x5f, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x64, - 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x4d, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x63, - 0x61, 0x72, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0c, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x23, 0x0a, - 0x0d, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x11, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x55, - 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x63, 0x6c, - 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x42, 0x79, 0x74, 0x65, - 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x42, - 0x79, 0x74, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xe4, 0x01, 0x0a, 0x0b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x75, 0x75, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6f, 0x6c, 0x55, 0x75, 0x69, 0x64, - 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, - 0x73, 0x69, 0x76, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x6c, 0x6f, - 0x63, 0x61, 0x6c, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x22, 0x54, 0x0a, 0x11, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x42, 0x79, 0x4e, 0x6f, 0x64, - 0x65, 0x12, 0x3f, 0x0a, 0x0c, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x75, 0x73, 0x61, 0x67, - 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x73, 0x61, - 0x67, 0x65, 0x22, 0x4f, 0x0a, 0x0f, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x42, 0x79, 0x74, 0x65, - 0x73, 0x55, 0x73, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, - 0x74, 0x65, 0x73, 0x22, 0x6f, 0x0a, 0x15, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x42, 0x79, 0x74, - 0x65, 0x73, 0x55, 0x73, 0x65, 0x64, 0x42, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, - 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, - 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x5f, 0x75, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x55, 0x73, 0x65, 0x64, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x55, - 0x73, 0x61, 0x67, 0x65, 0x22, 0xbf, 0x01, 0x0a, 0x15, 0x46, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1f, - 0x0a, 0x0b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x1f, 0x0a, 0x0b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x69, 0x7a, 0x65, - 0x12, 0x19, 0x0a, 0x08, 0x64, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x07, 0x64, 0x75, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x70, - 0x78, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x70, - 0x78, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, - 0x6d, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x66, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x11, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x41, 0x75, 0x74, 0x6f, - 0x46, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x22, 0x34, 0x0a, 0x13, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x65, - 0x64, 0x52, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x75, 0x72, 0x67, 0x65, 0x12, 0x1d, 0x0a, - 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x75, 0x72, 0x67, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x50, 0x75, 0x72, 0x67, 0x65, 0x64, 0x22, 0xd4, 0x01, 0x0a, - 0x10, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, - 0x65, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, - 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, - 0x68, 0x69, 0x70, 0x22, 0xbd, 0x03, 0x0a, 0x05, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, - 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, - 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x6c, 0x65, 0x72, - 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x61, 0x6c, - 0x65, 0x72, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, + 0x12, 0x14, 0x0a, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, + 0x63, 0x61, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x63, 0x61, 0x6e, 0x12, + 0x2f, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x46, 0x53, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x12, 0x35, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, + 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x4f, 0x6e, 0x12, 0x43, 0x0a, 0x0e, + 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x0d, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, + 0x74, 0x68, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x5f, 0x64, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, + 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, + 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, + 0x11, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x50, 0x61, 0x74, + 0x68, 0x12, 0x48, 0x0a, 0x0b, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x66, 0x6f, + 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x2e, + 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3e, 0x0a, 0x0c, 0x72, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, 0x52, 0x0b, + 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, 0x73, 0x12, 0x45, 0x0a, 0x0d, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x14, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x4d, 0x61, 0x70, 0x52, 0x0c, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x15, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x4a, 0x0a, 0x10, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x73, 0x18, 0x16, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x75, + 0x6d, 0x65, 0x72, 0x52, 0x0f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x75, + 0x6d, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x66, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x69, 0x7a, + 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x10, 0x66, 0x73, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, + 0x65, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x3b, 0x0a, 0x0b, 0x64, 0x65, 0x74, 0x61, 0x63, 0x68, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1f, 0x0a, 0x0b, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x08, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, + 0x52, 0x0a, 0x64, 0x65, 0x74, 0x61, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x08, + 0x66, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x65, 0x61, 0x72, - 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x65, - 0x64, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, - 0x74, 0x74, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x74, 0x61, - 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x54, - 0x61, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x66, 0x69, 0x72, 0x73, - 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x53, - 0x65, 0x65, 0x6e, 0x22, 0x85, 0x01, 0x0a, 0x11, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, - 0x73, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x70, 0x61, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x4e, 0x0a, 0x12, 0x53, - 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x70, 0x61, - 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, - 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x8f, 0x02, 0x0a, 0x0f, - 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x4b, 0x0a, 0x11, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x76, - 0x65, 0x72, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x6d, 0x69, 0x6e, - 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0a, - 0x69, 0x73, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x48, 0x00, 0x52, 0x09, 0x69, 0x73, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x65, 0x64, 0x12, 0x41, 0x0a, - 0x09, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x54, 0x69, 0x6d, 0x65, - 0x53, 0x70, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x70, 0x61, 0x6e, - 0x12, 0x44, 0x0a, 0x0a, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x70, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x53, 0x70, 0x61, 0x6e, 0x42, 0x05, 0x0a, 0x03, 0x6f, 0x70, 0x74, 0x22, 0x60, 0x0a, - 0x1a, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x42, 0x0a, 0x0d, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x2e, 0x46, 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, + 0x08, 0x66, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3e, 0x0a, 0x0d, 0x6c, 0x61, 0x73, + 0x74, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x69, 0x78, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, + 0x73, 0x74, 0x53, 0x63, 0x61, 0x6e, 0x46, 0x69, 0x78, 0x12, 0x51, 0x0a, 0x10, 0x6c, 0x61, 0x73, + 0x74, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x1c, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0e, 0x6c, 0x61, + 0x73, 0x74, 0x53, 0x63, 0x61, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x42, 0x0a, 0x0d, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x1d, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x0c, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x53, 0x0a, 0x16, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x14, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x48, 0x0a, 0x12, 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, + 0x5f, 0x69, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x10, 0x64, + 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x49, 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, + 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x73, 0x68, 0x63, 0x61, 0x6e, 0x18, 0x20, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x6e, 0x54, 0x72, 0x61, 0x73, 0x68, 0x63, 0x61, 0x6e, + 0x1a, 0x3d, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0xa4, 0x03, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x61, + 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x72, 0x65, 0x61, 0x64, 0x73, 0x12, + 0x17, 0x0a, 0x07, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x64, + 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, 0x65, + 0x61, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x77, 0x72, 0x69, 0x74, 0x65, 0x73, 0x12, + 0x19, 0x0a, 0x08, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x07, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0a, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x69, + 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0a, 0x69, 0x6f, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x13, 0x0a, 0x05, + 0x69, 0x6f, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x69, 0x6f, 0x4d, + 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x62, 0x79, 0x74, 0x65, 0x73, 0x55, 0x73, 0x65, 0x64, + 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x5f, 0x6d, 0x73, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x4d, + 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x08, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x12, 0x1d, 0x0a, + 0x0a, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x09, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x4d, 0x73, 0x12, 0x23, 0x0a, 0x0d, + 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x11, 0x43, 0x61, 0x70, 0x61, 0x63, + 0x69, 0x74, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x27, 0x0a, 0x0f, + 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, + 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, + 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xe4, 0x01, 0x0a, 0x0b, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, + 0x75, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6f, 0x6c, + 0x55, 0x75, 0x69, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, + 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x65, + 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1f, 0x0a, + 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x30, + 0x0a, 0x14, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x73, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x22, 0x54, 0x0a, 0x11, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x42, + 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x3f, 0x0a, 0x0c, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, + 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x22, 0x4f, 0x0a, 0x0f, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x42, 0x79, 0x74, 0x65, 0x73, 0x55, 0x73, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, + 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x6f, 0x0a, 0x15, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x55, 0x73, 0x65, 0x64, 0x42, 0x79, 0x4e, 0x6f, 0x64, 0x65, + 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x09, 0x76, 0x6f, 0x6c, + 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x55, 0x73, 0x65, 0x64, 0x52, 0x08, + 0x76, 0x6f, 0x6c, 0x55, 0x73, 0x61, 0x67, 0x65, 0x22, 0xbf, 0x01, 0x0a, 0x15, 0x46, 0x73, 0x74, + 0x72, 0x69, 0x6d, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x1f, 0x0a, 0x0b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x64, 0x75, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x19, 0x0a, 0x08, 0x70, 0x78, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x07, 0x70, 0x78, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x65, + 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x66, 0x73, 0x74, 0x72, 0x69, + 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, + 0x41, 0x75, 0x74, 0x6f, 0x46, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x22, 0x34, 0x0a, 0x13, 0x52, 0x65, + 0x6c, 0x61, 0x78, 0x65, 0x64, 0x52, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x75, 0x72, 0x67, + 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x75, 0x72, 0x67, 0x65, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x50, 0x75, 0x72, 0x67, 0x65, 0x64, + 0x22, 0xd4, 0x01, 0x0a, 0x10, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x06, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x6c, + 0x6c, 0x6f, 0x77, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x38, 0x0a, + 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x09, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x22, 0xbd, 0x03, 0x0a, 0x05, 0x41, 0x6c, 0x65, 0x72, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x39, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x1d, 0x0a, 0x0a, + 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x09, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, + 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, + 0x12, 0x39, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, - 0x7c, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x41, 0x6c, 0x65, 0x72, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x42, 0x0a, 0x0d, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, - 0x0a, 0x0a, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x54, 0x79, 0x70, 0x65, 0x22, 0x9e, 0x01, - 0x0a, 0x18, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x49, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x42, 0x0a, 0x0d, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, - 0x0a, 0x0a, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, - 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x22, 0xdd, - 0x02, 0x0a, 0x0e, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x12, 0x5d, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, + 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, + 0x6c, 0x65, 0x61, 0x72, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x6c, + 0x65, 0x61, 0x72, 0x65, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x6e, 0x69, 0x71, 0x75, + 0x65, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x6e, 0x69, + 0x71, 0x75, 0x65, 0x54, 0x61, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x0a, + 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x66, 0x69, + 0x72, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x22, 0x85, 0x01, 0x0a, 0x11, 0x53, 0x64, 0x6b, 0x41, + 0x6c, 0x65, 0x72, 0x74, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x70, 0x61, 0x6e, 0x12, 0x39, 0x0a, + 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, + 0x4e, 0x0a, 0x12, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x53, 0x70, 0x61, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, + 0x8f, 0x02, 0x0a, 0x0f, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a, 0x11, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x76, 0x65, 0x72, + 0x69, 0x74, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x11, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x12, 0x54, 0x0a, 0x10, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x54, 0x79, 0x70, 0x65, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x57, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x69, 0x64, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0f, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, - 0x34, 0x0a, 0x04, 0x6f, 0x70, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x04, 0x6f, 0x70, 0x74, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x61, - 0x0a, 0x24, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, - 0x72, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, - 0x73, 0x22, 0x57, 0x0a, 0x25, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x45, 0x6e, - 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x6c, - 0x65, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x6c, 0x65, - 0x72, 0x74, 0x52, 0x06, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x22, 0x53, 0x0a, 0x16, 0x53, 0x64, - 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x2e, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, + 0x0f, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x1f, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x65, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x69, 0x73, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x65, + 0x64, 0x12, 0x41, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, + 0x54, 0x69, 0x6d, 0x65, 0x53, 0x70, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x08, 0x74, 0x69, 0x6d, 0x65, + 0x53, 0x70, 0x61, 0x6e, 0x12, 0x44, 0x0a, 0x0a, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x73, 0x70, + 0x61, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x6c, + 0x65, 0x72, 0x74, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x70, 0x61, 0x6e, 0x48, 0x00, 0x52, + 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x70, 0x61, 0x6e, 0x42, 0x05, 0x0a, 0x03, 0x6f, 0x70, + 0x74, 0x22, 0x60, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, + 0x42, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x22, 0x7c, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, + 0x41, 0x6c, 0x65, 0x72, 0x74, 0x54, 0x79, 0x70, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x42, + 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x22, 0x9e, 0x01, 0x0a, 0x18, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x42, + 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x49, 0x64, 0x22, 0xdd, 0x02, 0x0a, 0x0e, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x5d, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, + 0x00, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x12, 0x54, 0x0a, 0x10, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x61, 0x6c, 0x65, 0x72, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x57, 0x0a, 0x11, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, - 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, - 0x19, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x0a, 0x06, 0x41, 0x6c, - 0x65, 0x72, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x05, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x52, 0x05, 0x61, 0x6c, 0x65, - 0x72, 0x74, 0x22, 0xcc, 0x02, 0x0a, 0x0f, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, - 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, - 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x29, 0x0a, - 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, - 0x6e, 0x22, 0xb1, 0x01, 0x0a, 0x13, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x07, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x07, 0x6c, 0x6f, 0x63, 0x61, - 0x74, 0x6f, 0x72, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, - 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x26, 0x0a, 0x0e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x70, 0x0a, - 0x14, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x0f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x12, 0x34, 0x0a, 0x04, 0x6f, 0x70, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x6f, 0x70, 0x74, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x22, 0x61, 0x0a, 0x24, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x45, + 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x71, 0x75, + 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, + 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, + 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0x57, 0x0a, 0x25, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, + 0x74, 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, + 0x0a, 0x06, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, - 0x0e, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0xc9, 0x01, 0x0a, 0x11, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x06, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x06, 0x61, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x12, 0x38, 0x0a, 0x05, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x52, 0x05, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x22, 0xbf, 0x02, 0x0a, 0x10, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x38, 0x0a, 0x07, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, - 0x72, 0x52, 0x07, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x70, - 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x3a, 0x0a, 0x06, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8e, 0x01, - 0x0a, 0x11, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x06, 0x76, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x48, 0x0a, 0x0f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0e, - 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x94, - 0x01, 0x0a, 0x11, 0x53, 0x6e, 0x61, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x38, 0x0a, 0x07, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x6f, - 0x63, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x07, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1a, - 0x0a, 0x08, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x6f, - 0x5f, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6e, 0x6f, - 0x52, 0x65, 0x74, 0x72, 0x79, 0x22, 0x71, 0x0a, 0x12, 0x53, 0x6e, 0x61, 0x70, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x16, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x52, 0x14, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x74, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x35, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x22, 0xad, - 0x01, 0x0a, 0x0e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, - 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, - 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x1d, 0x0a, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x22, 0xcf, - 0x01, 0x0a, 0x14, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x72, 0x76, 0x5f, 0x63, - 0x6d, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x72, 0x76, 0x43, 0x6d, 0x64, - 0x12, 0x5d, 0x0a, 0x0e, 0x73, 0x72, 0x76, 0x5f, 0x63, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x53, 0x72, 0x76, 0x43, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0c, 0x73, 0x72, 0x76, 0x43, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, - 0x3f, 0x0a, 0x11, 0x53, 0x72, 0x76, 0x43, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0xc4, 0x01, 0x0a, 0x1d, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x52, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0x39, 0x0a, 0x0b, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x95, 0x01, 0x0a, 0x15, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x2c, 0x0a, 0x13, 0x76, 0x6f, 0x6c, 0x5f, 0x73, 0x72, 0x76, 0x5f, 0x72, 0x73, 0x70, - 0x5f, 0x6f, 0x62, 0x6a, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, - 0x76, 0x6f, 0x6c, 0x53, 0x72, 0x76, 0x52, 0x73, 0x70, 0x4f, 0x62, 0x6a, 0x43, 0x6e, 0x74, 0x12, - 0x4e, 0x0a, 0x0b, 0x76, 0x6f, 0x6c, 0x5f, 0x73, 0x72, 0x76, 0x5f, 0x72, 0x73, 0x70, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x76, 0x6f, 0x6c, 0x53, 0x72, 0x76, 0x52, 0x73, 0x70, 0x22, - 0x64, 0x0a, 0x12, 0x47, 0x72, 0x61, 0x70, 0x68, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x3a, 0x0a, 0x04, 0x6b, 0x69, 0x6e, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x44, - 0x72, 0x69, 0x76, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x27, 0x0a, 0x0f, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x96, - 0x01, 0x0a, 0x0d, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x48, 0x0a, 0x08, 0x52, 0x65, 0x71, 0x65, 0x73, 0x74, 0x4b, 0x56, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x52, 0x65, 0x71, 0x65, 0x73, 0x74, 0x4b, 0x56, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x08, 0x52, 0x65, 0x71, 0x65, 0x73, 0x74, 0x4b, 0x56, 0x1a, 0x3b, 0x0a, 0x0d, 0x52, 0x65, - 0x71, 0x65, 0x73, 0x74, 0x4b, 0x56, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7a, 0x0a, 0x0e, 0x41, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x44, 0x0a, - 0x0d, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x52, 0x0d, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x22, 0xfb, 0x01, 0x0a, 0x16, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, - 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4b, - 0x0a, 0x06, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, + 0x2e, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x52, 0x06, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x22, 0x53, + 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, + 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, + 0x6c, 0x65, 0x72, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, + 0x69, 0x65, 0x73, 0x22, 0x19, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, + 0x0a, 0x06, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x05, 0x61, 0x6c, 0x65, 0x72, + 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x52, + 0x05, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x22, 0xcc, 0x02, 0x0a, 0x0f, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x1b, + 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, + 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, + 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, + 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x73, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x64, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, + 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, + 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x22, 0xb1, 0x01, 0x0a, 0x13, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, + 0x07, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x06, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x6f, 0x6e, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x6e, 0x46, - 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x07, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, + 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x26, 0x0a, 0x0e, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x70, 0x0a, 0x14, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x0f, 0x76, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x52, 0x0e, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0xc9, 0x01, 0x0a, 0x11, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x06, 0x61, 0x74, 0x74, + 0x61, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x06, 0x61, + 0x74, 0x74, 0x61, 0x63, 0x68, 0x12, 0x38, 0x0a, 0x05, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x05, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1f, + 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x22, + 0xbf, 0x02, 0x0a, 0x10, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x07, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x6f, + 0x63, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x07, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2f, + 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, + 0x3a, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x07, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0xe9, 0x01, 0x0a, 0x17, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, - 0x09, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x37, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x1a, 0x61, 0x0a, 0x0e, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x39, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x6e, 0x61, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdc, 0x08, - 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, - 0x03, 0x63, 0x70, 0x75, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, - 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x15, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x08, 0x63, 0x70, 0x75, 0x43, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, - 0x6d, 0x65, 0x6d, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x08, 0x6d, 0x65, 0x6d, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x65, 0x6d, - 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x65, 0x6d, - 0x55, 0x73, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x65, 0x6d, 0x5f, 0x66, 0x72, 0x65, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x46, 0x72, 0x65, 0x65, 0x12, - 0x19, 0x0a, 0x08, 0x61, 0x76, 0x67, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x07, 0x61, 0x76, 0x67, 0x4c, 0x6f, 0x61, 0x64, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3d, 0x0a, 0x05, 0x64, - 0x69, 0x73, 0x6b, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x05, 0x64, 0x69, 0x73, 0x6b, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x70, 0x6f, - 0x6f, 0x6c, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x05, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x12, 0x17, - 0x0a, 0x07, 0x6d, 0x67, 0x6d, 0x74, 0x5f, 0x69, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x6d, 0x67, 0x6d, 0x74, 0x49, 0x70, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x61, 0x74, 0x61, 0x5f, - 0x69, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x61, 0x74, 0x61, 0x49, 0x70, - 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4d, 0x0a, 0x0b, - 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x2e, - 0x4e, 0x6f, 0x64, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x73, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, - 0x6c, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x06, 0x48, - 0x57, 0x54, 0x79, 0x70, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x48, 0x61, - 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x48, 0x57, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x54, 0x0a, 0x0f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x51, 0x0a, 0x12, 0x73, 0x63, 0x68, 0x65, - 0x64, 0x75, 0x6c, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x18, 0x14, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, - 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x11, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, - 0x6c, 0x65, 0x72, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x6e, - 0x6f, 0x6e, 0x5f, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6e, 0x6f, 0x6e, 0x51, 0x75, 0x6f, 0x72, 0x75, - 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x1a, 0x5a, - 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x6b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x36, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4e, 0x6f, - 0x64, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x61, 0x0a, 0x0e, 0x53, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0f, 0x0a, 0x0b, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, - 0x55, 0x4e, 0x53, 0x45, 0x43, 0x55, 0x52, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x53, - 0x45, 0x43, 0x55, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x22, 0x0a, 0x1e, 0x53, 0x45, 0x43, 0x55, - 0x52, 0x45, 0x44, 0x5f, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x5f, 0x53, 0x45, 0x43, 0x55, 0x52, 0x49, - 0x54, 0x59, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x41, 0x4c, 0x10, 0x03, 0x22, 0x65, 0x0a, 0x0e, - 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2f, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, + 0x01, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x65, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x52, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x48, 0x0a, 0x0f, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x52, 0x0e, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x94, 0x01, 0x0a, 0x11, 0x53, 0x6e, 0x61, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x38, 0x0a, 0x07, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x07, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x12, 0x19, + 0x0a, 0x08, 0x6e, 0x6f, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x6e, 0x6f, 0x52, 0x65, 0x74, 0x72, 0x79, 0x22, 0x71, 0x0a, 0x12, 0x53, 0x6e, 0x61, + 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x5b, 0x0a, 0x16, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x14, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x74, 0x0a, 0x0a, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x35, 0x0a, 0x07, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x22, 0xad, 0x01, 0x0a, 0x0e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, + 0x73, 0x75, 0x6d, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, + 0x64, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x79, + 0x70, 0x65, 0x22, 0xcf, 0x01, 0x0a, 0x14, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x73, + 0x72, 0x76, 0x5f, 0x63, 0x6d, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x72, + 0x76, 0x43, 0x6d, 0x64, 0x12, 0x5d, 0x0a, 0x0e, 0x73, 0x72, 0x76, 0x5f, 0x63, 0x6d, 0x64, 0x5f, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x53, 0x72, 0x76, 0x43, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x72, 0x76, 0x43, 0x6d, 0x64, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x1a, 0x3f, 0x0a, 0x11, 0x53, 0x72, 0x76, 0x43, 0x6d, 0x64, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc4, 0x01, 0x0a, 0x1d, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x52, 0x0a, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x1a, 0x39, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x95, 0x01, 0x0a, 0x15, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x13, 0x76, 0x6f, 0x6c, 0x5f, 0x73, 0x72, 0x76, + 0x5f, 0x72, 0x73, 0x70, 0x5f, 0x6f, 0x62, 0x6a, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0f, 0x76, 0x6f, 0x6c, 0x53, 0x72, 0x76, 0x52, 0x73, 0x70, 0x4f, 0x62, 0x6a, + 0x43, 0x6e, 0x74, 0x12, 0x4e, 0x0a, 0x0b, 0x76, 0x6f, 0x6c, 0x5f, 0x73, 0x72, 0x76, 0x5f, 0x72, + 0x73, 0x70, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x76, 0x6f, 0x6c, 0x53, 0x72, 0x76, + 0x52, 0x73, 0x70, 0x22, 0x64, 0x0a, 0x12, 0x47, 0x72, 0x61, 0x70, 0x68, 0x44, 0x72, 0x69, 0x76, + 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x3a, 0x0a, + 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x72, + 0x61, 0x70, 0x68, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x27, 0x0a, 0x0f, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x96, 0x01, 0x0a, 0x0d, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x08, 0x52, 0x65, 0x71, 0x65, 0x73, 0x74, 0x4b, 0x56, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x71, 0x65, 0x73, 0x74, 0x4b, 0x56, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x52, 0x65, 0x71, 0x65, 0x73, 0x74, 0x4b, 0x56, 0x1a, 0x3b, + 0x0a, 0x0d, 0x52, 0x65, 0x71, 0x65, 0x73, 0x74, 0x4b, 0x56, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7a, 0x0a, 0x0e, 0x41, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x22, 0x0a, + 0x0c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x44, 0x0a, 0x0d, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0d, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xfb, 0x01, 0x0a, 0x16, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x53, 0x6e, 0x61, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x4b, 0x0a, 0x06, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, + 0x1d, 0x0a, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x12, 0x2a, + 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x6f, 0x6e, 0x5f, 0x66, 0x61, 0x69, 0x6c, + 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x64, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x4f, 0x6e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe9, 0x01, 0x0a, 0x17, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, + 0x6e, 0x61, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x55, 0x0a, 0x09, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x6e, 0x61, 0x70, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x73, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x1a, 0x61, + 0x0a, 0x0e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0xdc, 0x08, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, + 0x63, 0x70, 0x75, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x73, + 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x63, 0x70, 0x75, 0x43, 0x6f, 0x72, 0x65, 0x73, + 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x19, 0x0a, + 0x08, 0x6d, 0x65, 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x07, 0x6d, 0x65, 0x6d, 0x55, 0x73, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x65, 0x6d, 0x5f, + 0x66, 0x72, 0x65, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x46, + 0x72, 0x65, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x76, 0x67, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x61, 0x76, 0x67, 0x4c, 0x6f, 0x61, 0x64, 0x12, 0x2f, + 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x22, 0xc7, 0x01, 0x0a, 0x13, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, - 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, - 0x75, 0x73, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, - 0x64, 0x65, 0x52, 0x19, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x42, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x33, 0x0a, - 0x14, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x49, 0x64, 0x22, 0x89, 0x01, 0x0a, 0x13, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, - 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, - 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0b, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x16, - 0x0a, 0x14, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7f, 0x0a, 0x18, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x47, 0x72, 0x61, 0x6e, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, - 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x86, 0x01, 0x0a, 0x19, 0x42, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x49, 0x64, 0x12, 0x4a, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x73, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, - 0x22, 0x57, 0x0a, 0x19, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, - 0x09, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x1c, 0x0a, 0x1a, 0x42, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x69, 0x0a, 0x17, 0x42, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, - 0x65, 0x79, 0x22, 0x6d, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x52, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x22, 0x24, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x0a, 0x24, 0x53, 0x64, 0x6b, 0x4f, 0x70, - 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, - 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x75, 0x0a, 0x25, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x10, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x22, 0x38, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, - 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, - 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x22, 0x6f, 0x0a, 0x23, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x52, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x22, 0x37, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, 0x22, 0x53, 0x64, - 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x6d, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x3d, 0x0a, 0x05, 0x64, 0x69, 0x73, 0x6b, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x44, 0x69, 0x73, + 0x6b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x64, 0x69, 0x73, 0x6b, 0x73, 0x12, 0x32, + 0x0a, 0x05, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x52, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, - 0x24, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x0a, 0x25, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, - 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x53, 0x65, 0x74, - 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x22, 0x28, 0x0a, 0x26, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x0a, 0x22, - 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x25, 0x0a, 0x23, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x0a, 0x29, 0x53, 0x64, 0x6b, - 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x76, 0x0a, 0x2a, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, - 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, - 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x6d, - 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x4b, 0x0a, 0x0f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0e, 0x73, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x21, 0x0a, - 0x1f, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x6d, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x0f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, - 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, - 0x0e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, - 0x21, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x23, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x64, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x53, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x6e, 0x75, 0x6d, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, - 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x22, 0x35, 0x0a, - 0x1f, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x05, 0x70, 0x6f, 0x6f, + 0x6c, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x6d, 0x67, 0x6d, 0x74, 0x5f, 0x69, 0x70, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x67, 0x6d, 0x74, 0x49, 0x70, 0x12, 0x17, 0x0a, 0x07, 0x64, + 0x61, 0x74, 0x61, 0x5f, 0x69, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x61, + 0x74, 0x61, 0x49, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x4d, 0x0a, 0x0b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, + 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4e, + 0x6f, 0x64, 0x65, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, + 0x2e, 0x0a, 0x13, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x73, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x35, 0x0a, 0x06, 0x48, 0x57, 0x54, 0x79, 0x70, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x48, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, + 0x48, 0x57, 0x54, 0x79, 0x70, 0x65, 0x12, 0x54, 0x0a, 0x0f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, + 0x74, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x53, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0e, 0x73, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x51, 0x0a, 0x12, + 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, + 0x67, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x72, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x11, 0x73, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x12, + 0x2a, 0x0a, 0x11, 0x6e, 0x6f, 0x6e, 0x5f, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6e, 0x6f, 0x6e, 0x51, + 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x17, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x1a, 0x5a, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x6b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, + 0x0a, 0x0f, 0x4e, 0x6f, 0x64, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x61, 0x0a, + 0x0e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x0d, 0x0a, 0x09, 0x55, 0x4e, 0x53, 0x45, 0x43, 0x55, 0x52, 0x45, 0x44, 0x10, 0x01, 0x12, + 0x0b, 0x0a, 0x07, 0x53, 0x45, 0x43, 0x55, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x22, 0x0a, 0x1e, + 0x53, 0x45, 0x43, 0x55, 0x52, 0x45, 0x44, 0x5f, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x5f, 0x53, 0x45, + 0x43, 0x55, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x41, 0x4c, 0x10, 0x03, + 0x22, 0x65, 0x0a, 0x0e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xc7, 0x01, 0x0a, 0x13, 0x42, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x65, + 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, + 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x6e, 0x6f, 0x6e, 0x79, + 0x6d, 0x6f, 0x75, 0x73, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x6e, 0x6f, + 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x19, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, + 0x73, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, + 0x65, 0x22, 0x33, 0x0a, 0x14, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x22, 0x89, 0x01, 0x0a, 0x13, 0x42, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, + 0x0a, 0x09, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, + 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, + 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, + 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x42, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x22, 0x16, 0x0a, 0x14, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7f, 0x0a, 0x18, 0x42, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x86, 0x01, 0x0a, 0x19, + 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x4a, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x73, 0x22, 0x57, 0x0a, 0x19, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, + 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x1d, + 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x1c, 0x0a, + 0x1a, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x69, 0x0a, 0x17, 0x42, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x22, 0x6d, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, + 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x24, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x0a, 0x24, 0x53, + 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x22, 0x75, 0x0a, 0x25, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x6e, 0x75, 0x6d, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x10, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0f, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x22, 0x38, 0x0a, 0x22, 0x53, 0x64, + 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x5e, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x06, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x22, 0x34, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x21, 0x0a, 0x1f, 0x53, 0x64, - 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4c, 0x0a, - 0x1e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x12, - 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x68, - 0x6f, 0x75, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x22, 0x80, 0x01, 0x0a, 0x1f, + 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6f, 0x0a, 0x23, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x73, 0x70, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x37, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x24, + 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6d, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x22, 0x24, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x0a, 0x25, 0x53, 0x64, 0x6b, + 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x28, 0x0a, 0x26, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, + 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x53, 0x65, + 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x24, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x25, 0x0a, 0x23, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, + 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x0a, + 0x29, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x73, 0x70, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x76, 0x0a, 0x2a, 0x53, 0x64, + 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x52, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x22, 0x6d, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x0f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x12, - 0x31, 0x0a, 0x03, 0x64, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6f, + 0x79, 0x52, 0x0e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x22, 0x21, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6d, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x0f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x52, 0x0e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x22, 0x21, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x6e, 0x75, 0x6d, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x64, 0x0a, 0x22, 0x53, + 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, + 0x73, 0x22, 0x35, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x5e, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x73, + 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x06, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x65, 0x65, 0x6b, 0x64, 0x61, 0x79, 0x52, 0x03, 0x64, - 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x68, 0x6f, 0x75, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x22, 0x60, - 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x4d, 0x6f, 0x6e, 0x74, 0x68, - 0x6c, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x03, 0x64, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x68, 0x6f, 0x75, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x69, 0x6e, 0x75, - 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, - 0x22, 0x3d, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x50, 0x65, 0x72, - 0x69, 0x6f, 0x64, 0x69, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, - 0xfc, 0x02, 0x0a, 0x19, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x16, 0x0a, - 0x06, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x72, - 0x65, 0x74, 0x61, 0x69, 0x6e, 0x12, 0x48, 0x0a, 0x05, 0x64, 0x61, 0x69, 0x6c, 0x79, 0x18, 0xc8, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x52, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x34, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x21, + 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x4c, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x44, 0x61, + 0x69, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x68, 0x6f, 0x75, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x22, + 0x80, 0x01, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x57, 0x65, 0x65, + 0x6b, 0x6c, 0x79, 0x12, 0x31, 0x0a, 0x03, 0x64, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x65, 0x65, 0x6b, 0x64, 0x61, + 0x79, 0x52, 0x03, 0x64, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x68, 0x6f, 0x75, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x22, 0x60, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x4d, + 0x6f, 0x6e, 0x74, 0x68, 0x6c, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x61, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x03, 0x64, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x75, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x68, 0x6f, 0x75, 0x72, 0x12, 0x16, 0x0a, 0x06, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x22, 0x3d, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, + 0x6c, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x73, 0x22, 0xfc, 0x02, 0x0a, 0x19, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, - 0x6c, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x48, 0x00, 0x52, 0x05, 0x64, 0x61, 0x69, 0x6c, 0x79, 0x12, - 0x4b, 0x0a, 0x06, 0x77, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x18, 0xc9, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x57, 0x65, 0x65, 0x6b, - 0x6c, 0x79, 0x48, 0x00, 0x52, 0x06, 0x77, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x12, 0x4e, 0x0a, 0x07, - 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x6c, 0x79, 0x18, 0xca, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, + 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x06, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6e, 0x12, 0x48, 0x0a, 0x05, 0x64, 0x61, 0x69, + 0x6c, 0x79, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x74, + 0x65, 0x72, 0x76, 0x61, 0x6c, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x48, 0x00, 0x52, 0x05, 0x64, 0x61, + 0x69, 0x6c, 0x79, 0x12, 0x4b, 0x0a, 0x06, 0x77, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x18, 0xc9, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, + 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x48, 0x00, 0x52, 0x06, 0x77, 0x65, 0x65, 0x6b, 0x6c, 0x79, + 0x12, 0x4e, 0x0a, 0x07, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x6c, 0x79, 0x18, 0xca, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x4d, 0x6f, + 0x6e, 0x74, 0x68, 0x6c, 0x79, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x6c, 0x79, + 0x12, 0x51, 0x0a, 0x08, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x18, 0xcb, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x50, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x48, 0x00, 0x52, 0x08, 0x70, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x69, 0x63, 0x42, 0x0d, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x22, 0x71, 0x0a, 0x11, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x6c, - 0x79, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x6c, 0x79, 0x12, 0x51, 0x0a, 0x08, - 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x18, 0xcb, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x50, 0x65, 0x72, 0x69, 0x6f, - 0x64, 0x69, 0x63, 0x48, 0x00, 0x52, 0x08, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x42, - 0x0d, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x71, - 0x0a, 0x11, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x73, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x09, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, - 0x73, 0x22, 0x81, 0x05, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x25, 0x0a, 0x0e, - 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x4b, 0x65, 0x79, 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, - 0x69, 0x70, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x1b, 0x0a, - 0x09, 0x75, 0x73, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x75, 0x73, 0x65, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x61, - 0x6d, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, - 0x69, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x33, 0x5f, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x33, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, - 0x61, 0x73, 0x73, 0x12, 0x52, 0x0a, 0x0e, 0x61, 0x77, 0x73, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x41, 0x77, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x61, 0x77, 0x73, 0x43, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x58, 0x0a, 0x10, 0x61, 0x7a, 0x75, 0x72, 0x65, - 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x18, 0xc9, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x43, 0x72, 0x65, + 0x63, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x09, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x81, 0x05, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, + 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x73, 0x68, 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, 0x6e, + 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, + 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x75, 0x73, 0x65, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x1d, + 0x0a, 0x0a, 0x69, 0x61, 0x6d, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x69, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x28, 0x0a, + 0x10, 0x73, 0x33, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x33, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x52, 0x0a, 0x0e, 0x61, 0x77, 0x73, 0x5f, 0x63, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x77, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x61, 0x77, + 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x58, 0x0a, 0x10, 0x61, + 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x18, + 0xc9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x7a, 0x75, 0x72, + 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x5b, 0x0a, 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, + 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x18, 0xca, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, - 0x52, 0x0f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x12, 0x5b, 0x0a, 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x18, 0xca, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x64, 0x6b, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x10, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x52, - 0x0a, 0x0e, 0x6e, 0x66, 0x73, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x18, 0xcb, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x66, 0x73, - 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x48, 0x00, 0x52, 0x0d, 0x6e, 0x66, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x42, 0x11, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x42, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x52, 0x10, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x12, 0x52, 0x0a, 0x0e, 0x6e, 0x66, 0x73, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x18, 0xcb, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, + 0x6b, 0x4e, 0x66, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x6e, 0x66, 0x73, 0x43, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x42, 0x11, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x42, 0x0a, 0x1b, 0x53, 0x64, 0x6b, + 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x22, 0x8d, 0x01, + 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, + 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, + 0x64, 0x12, 0x4a, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x22, 0x1d, 0x0a, + 0x1b, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x90, 0x02, 0x0a, + 0x17, 0x53, 0x64, 0x6b, 0x41, 0x77, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x69, + 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x73, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0a, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x73, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x64, + 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x73, 0x74, 0x79, 0x6c, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, + 0x50, 0x61, 0x74, 0x68, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x53, 0x69, 0x64, 0x65, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0x5f, 0x0a, 0x19, 0x53, 0x64, 0x6b, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4b, 0x65, 0x79, + 0x22, 0x56, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, + 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, + 0x08, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x6a, 0x73, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x22, 0x94, 0x01, 0x0a, 0x17, 0x53, 0x64, 0x6b, + 0x4e, 0x66, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, + 0x73, 0x75, 0x62, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x73, 0x75, 0x62, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x5f, 0x6f, 0x70, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, + 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, + 0x9c, 0x02, 0x0a, 0x18, 0x53, 0x64, 0x6b, 0x41, 0x77, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x65, + 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, + 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, + 0x1f, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x73, 0x6c, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x73, 0x6c, + 0x12, 0x2c, 0x0a, 0x12, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x64, 0x69, + 0x73, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x28, + 0x0a, 0x10, 0x73, 0x33, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, + 0x73, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x33, 0x53, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x53, 0x69, 0x64, 0x65, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3f, + 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, + 0x3c, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, + 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0x95, 0x01, + 0x0a, 0x18, 0x53, 0x64, 0x6b, 0x4e, 0x66, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1d, 0x0a, + 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x73, 0x12, 0x27, 0x0a, 0x0f, + 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0x1f, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x47, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x73, 0x22, + 0x42, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, + 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x49, 0x64, 0x22, 0xdb, 0x04, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x22, 0x8d, 0x01, 0x0a, 0x1a, 0x53, 0x64, - 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x4a, 0x0a, - 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x09, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x22, 0x1d, 0x0a, 0x1b, 0x53, 0x64, 0x6b, - 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x90, 0x02, 0x0a, 0x17, 0x53, 0x64, 0x6b, - 0x41, 0x77, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, 0x65, - 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4b, - 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x16, - 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x5f, 0x73, 0x73, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x69, 0x73, - 0x61, 0x62, 0x6c, 0x65, 0x53, 0x73, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x64, 0x69, 0x73, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x10, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, - 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, - 0x73, 0x69, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x69, 0x64, - 0x65, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5f, 0x0a, 0x19, 0x53, - 0x64, 0x6b, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x22, 0x56, 0x0a, 0x1a, - 0x53, 0x64, 0x6b, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x73, 0x6f, - 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x73, 0x6f, - 0x6e, 0x4b, 0x65, 0x79, 0x22, 0x94, 0x01, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x4e, 0x66, 0x73, 0x43, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x50, - 0x61, 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, - 0x74, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x69, 0x6d, - 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0x9c, 0x02, 0x0a, 0x18, - 0x53, 0x64, 0x6b, 0x41, 0x77, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x64, - 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x73, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0a, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x73, 0x6c, 0x12, 0x2c, 0x0a, 0x12, - 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x73, 0x74, 0x79, - 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x50, 0x61, 0x74, 0x68, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x33, - 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x33, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, - 0x6c, 0x61, 0x73, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x73, - 0x69, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x69, 0x64, 0x65, - 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3f, 0x0a, 0x1a, 0x53, 0x64, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, + 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, + 0x73, 0x68, 0x69, 0x70, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, + 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x08, 0x75, 0x73, 0x65, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x1d, 0x0a, 0x0a, + 0x69, 0x61, 0x6d, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x09, 0x69, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x53, 0x0a, 0x0e, 0x61, + 0x77, 0x73, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x18, 0xc8, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x77, 0x73, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, + 0x00, 0x52, 0x0d, 0x61, 0x77, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x12, 0x59, 0x0a, 0x10, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x18, 0xc9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3c, 0x0a, 0x1b, 0x53, - 0x64, 0x6b, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0x95, 0x01, 0x0a, 0x18, 0x53, 0x64, - 0x6b, 0x4e, 0x66, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x19, - 0x0a, 0x08, 0x73, 0x75, 0x62, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x73, 0x75, 0x62, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, - 0x73, 0x22, 0x1f, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x47, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x73, 0x22, 0x42, 0x0a, 0x1b, 0x53, - 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x70, - 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x22, - 0xdb, 0x04, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, - 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x75, - 0x73, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x75, 0x73, 0x65, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x61, 0x6d, 0x5f, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x61, - 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x53, 0x0a, 0x0e, 0x61, 0x77, 0x73, 0x5f, 0x63, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x77, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x61, - 0x77, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x59, 0x0a, 0x10, - 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x18, 0xc9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x7a, 0x75, - 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x43, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x5c, 0x0a, 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x18, 0xca, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x48, 0x00, 0x52, 0x10, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x53, 0x0a, 0x0e, 0x6e, 0x66, 0x73, 0x5f, 0x63, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x18, 0xcb, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x66, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x6e, 0x66, 0x73, - 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x42, 0x11, 0x0a, 0x0f, 0x63, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x41, 0x0a, - 0x1a, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, - 0x22, 0x1d, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x43, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x7a, 0x75, 0x72, + 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x5c, 0x0a, 0x11, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x18, 0xca, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x47, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x10, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x53, 0x0a, 0x0e, 0x6e, 0x66, 0x73, + 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x18, 0xcb, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x66, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, + 0x0d, 0x6e, 0x66, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x42, 0x11, + 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x22, 0x41, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x49, 0x64, 0x22, 0x1f, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x0a, 0x24, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, - 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x49, 0x64, 0x22, 0x27, 0x0a, 0x25, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9b, 0x01, 0x0a, 0x16, - 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1a, 0x0a, - 0x08, 0x66, 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x66, 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x22, 0xba, 0x02, 0x0a, 0x15, 0x53, 0x64, - 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, - 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, - 0x41, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x61, 0x6c, 0x49, 0x64, 0x22, 0x1d, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x43, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x22, 0x1f, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x0a, 0x24, 0x53, 0x64, 0x6b, + 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x22, 0x27, 0x0a, 0x25, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x9b, 0x01, 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x74, 0x74, + 0x61, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x22, 0xba, 0x02, + 0x0a, 0x15, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4d, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x70, 0x61, + 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x50, + 0x61, 0x74, 0x68, 0x12, 0x41, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x60, 0x0a, 0x0e, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, + 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x64, 0x72, 0x69, 0x76, 0x65, + 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x40, 0x0a, 0x12, 0x44, 0x72, 0x69, 0x76, + 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x64, + 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x92, 0x01, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x55, 0x6e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x2a, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x64, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x4b, 0x0a, 0x23, + 0x6e, 0x6f, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x5f, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, 0x6e, 0x6f, 0x44, 0x65, 0x6c, + 0x61, 0x79, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6e, 0x67, + 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, 0xbf, 0x02, 0x0a, 0x17, 0x53, 0x64, + 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x6e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x61, 0x74, + 0x68, 0x12, 0x42, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x6e, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x62, 0x0a, 0x0e, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x5f, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x6e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x64, 0x72, 0x69, 0x76, + 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x40, 0x0a, 0x12, 0x44, 0x72, 0x69, + 0x76, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x1a, 0x0a, 0x18, 0x53, + 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x6e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9d, 0x02, 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, + 0x41, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x60, 0x0a, 0x0e, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x12, 0x61, 0x0a, 0x0e, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x40, 0x0a, 0x12, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x92, 0x01, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x6e, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x11, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x74, - 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, - 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x4b, 0x0a, 0x23, 0x6e, 0x6f, 0x5f, 0x64, - 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x65, - 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, 0x6e, 0x6f, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x65, - 0x66, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x75, 0x6e, - 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, 0xbf, 0x02, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x55, 0x6e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x42, 0x0a, - 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x6e, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x62, 0x0a, 0x0e, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x6e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x40, 0x0a, 0x12, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x1a, 0x0a, 0x18, 0x53, 0x64, 0x6b, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x6e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x9d, 0x02, 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3a, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, + 0x61, 0x74, 0x68, 0x22, 0x7e, 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x14, 0x0a, + 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, + 0x72, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x75, 0x6e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x62, + 0x65, 0x66, 0x6f, 0x72, 0x65, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x13, 0x75, 0x6e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x65, 0x66, 0x6f, 0x72, + 0x65, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x22, 0x9d, 0x02, 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x4f, 0x70, + 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x61, 0x0a, 0x0e, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x40, 0x0a, 0x12, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0x3a, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, - 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x22, - 0x7e, 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, - 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, - 0x32, 0x0a, 0x15, 0x75, 0x6e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x62, 0x65, 0x66, 0x6f, 0x72, - 0x65, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, - 0x75, 0x6e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x74, - 0x61, 0x63, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x22, - 0x9d, 0x02, 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x65, 0x74, - 0x61, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, + 0x02, 0x38, 0x01, 0x22, 0x19, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xe5, + 0x01, 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, + 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x4b, + 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x36, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x22, 0xf8, + 0x01, 0x0a, 0x15, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6c, 0x6f, 0x6e, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x69, 0x0a, 0x11, 0x61, 0x64, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x64, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x10, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x43, 0x0a, 0x15, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x35, 0x0a, 0x16, 0x53, 0x64, 0x6b, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, + 0x22, 0x35, 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x61, 0x0a, 0x0e, 0x64, 0x72, - 0x69, 0x76, 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x65, - 0x74, 0x61, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x72, 0x69, 0x76, - 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, - 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x40, 0x0a, - 0x12, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x22, 0x19, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x77, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, + 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, + 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x07, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe9, 0x01, 0x0a, 0x18, + 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x52, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4d, 0x0a, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf5, 0x02, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x57, 0x69, 0x74, 0x68, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x57, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, + 0x73, 0x70, 0x65, 0x63, 0x74, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x38, 0x0a, 0x09, 0x6f, + 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x2c, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x12, 0x3f, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x73, + 0x70, 0x65, 0x63, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x19, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, - 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xe5, 0x01, 0x0a, 0x16, 0x53, - 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x70, 0x65, - 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x4b, 0x0a, 0x06, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x6a, 0x0a, 0x23, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x70, + 0x65, 0x63, 0x74, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x52, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x22, 0xf4, 0x01, 0x0a, 0x16, + 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x49, 0x64, 0x12, 0x4b, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x12, 0x35, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0x36, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, - 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x22, 0xf8, 0x01, 0x0a, 0x15, 0x53, - 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x69, 0x0a, 0x11, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x3c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6c, 0x6f, 0x6e, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, - 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x1a, 0x43, 0x0a, 0x15, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x35, 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x22, 0x35, 0x0a, 0x16, - 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x38, 0x01, 0x22, 0x19, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5b, 0x0a, + 0x15, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x49, 0x64, 0x22, 0x19, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x77, - 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, - 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe9, 0x01, 0x0a, 0x18, 0x53, 0x64, 0x6b, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x06, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4d, 0x0a, 0x06, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0xf5, 0x02, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x57, - 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, - 0x74, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x73, 0x68, 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, 0x6e, - 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, - 0x70, 0x12, 0x2c, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, - 0x3f, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x65, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x5f, 0x63, 0x75, 0x6d, 0x75, 0x6c, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6e, 0x6f, 0x74, + 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x22, 0x46, 0x0a, 0x16, 0x53, 0x64, + 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x73, 0x22, 0x3c, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, + 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, + 0x22, 0x74, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, + 0x61, 0x63, 0x69, 0x74, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x52, 0x0a, 0x13, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x5f, 0x75, + 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x11, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x55, 0x73, 0x61, + 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x1b, 0x0a, 0x19, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x22, 0x3b, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x73, + 0x22, 0xb8, 0x02, 0x0a, 0x24, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x6e, + 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x59, 0x0a, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x73, 0x68, 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, + 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, + 0x69, 0x70, 0x12, 0x2c, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6a, 0x0a, 0x23, 0x53, - 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x57, - 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, - 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, - 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x22, 0xf4, 0x01, 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, - 0x4b, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x46, 0x0a, 0x25, 0x53, + 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, + 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x49, 0x64, 0x73, 0x22, 0xe1, 0x01, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x53, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x35, 0x0a, 0x04, - 0x73, 0x70, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x04, 0x73, - 0x70, 0x65, 0x63, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x19, - 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5b, 0x0a, 0x15, 0x53, 0x64, 0x6b, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, - 0x25, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x5f, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x43, 0x75, 0x6d, 0x75, - 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x22, 0x46, 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2c, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x22, 0x3c, - 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x63, - 0x69, 0x74, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x22, 0x74, 0x0a, 0x1e, - 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, - 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, - 0x0a, 0x13, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, - 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x61, - 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x11, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x22, 0x1b, 0x0a, 0x19, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, - 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x3b, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x6e, 0x75, 0x6d, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, - 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x22, 0xb8, 0x02, 0x0a, - 0x24, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x59, 0x0a, 0x06, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, - 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, - 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, - 0x68, 0x69, 0x70, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x2c, - 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x39, 0x0a, 0x0b, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x46, 0x0a, 0x25, 0x53, 0x64, 0x6b, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, - 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x22, - 0xe1, 0x01, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x53, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0x42, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x22, 0x5f, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x22, 0x22, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, 0x0a, 0x21, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x42, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x22, 0x5f, 0x0a, 0x1f, 0x53, + 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, + 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x22, 0x22, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x22, 0x54, - 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x73, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x11, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x49, 0x64, 0x73, 0x22, 0xe9, 0x01, 0x0a, 0x2c, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x40, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x49, 0x64, 0x12, 0x61, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, - 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0x5f, 0x0a, 0x2d, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, - 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x73, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, - 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, - 0x73, 0x22, 0x7d, 0x0a, 0x26, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x17, 0x73, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x22, 0x29, 0x0a, 0x27, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6c, 0x0a, 0x0f, 0x53, - 0x64, 0x6b, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, - 0x0a, 0x0c, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0b, - 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x6e, 0x0a, 0x10, 0x53, 0x64, 0x6b, - 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, - 0x0c, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x57, - 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0b, - 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x9e, 0x01, 0x0a, 0x15, 0x53, 0x64, - 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x57, - 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, - 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5d, 0x0a, 0x16, 0x53, 0x64, - 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x06, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x0a, 0x1f, 0x53, 0x64, 0x6b, + 0x49, 0x64, 0x22, 0x54, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x73, 0x22, 0xe9, 0x01, 0x0a, 0x2c, 0x53, 0x64, 0x6b, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x45, 0x6e, + 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x61, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5f, 0x0a, 0x2d, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x11, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x49, 0x64, 0x73, 0x22, 0x7d, 0x0a, 0x26, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x17, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, 0x73, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x22, 0x29, 0x0a, 0x27, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x6c, 0x0a, 0x0f, 0x53, 0x64, 0x6b, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x0c, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x48, 0x00, 0x52, 0x0b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, + 0x0c, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x6e, 0x0a, + 0x10, 0x53, 0x64, 0x6b, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x4c, 0x0a, 0x0c, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x48, 0x00, 0x52, 0x0b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, + 0x0c, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x9e, 0x01, + 0x0a, 0x15, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x57, 0x61, 0x74, 0x63, 0x68, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5d, + 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x57, 0x61, 0x74, 0x63, 0x68, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x52, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x0a, + 0x1f, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x73, + 0x61, 0x67, 0x65, 0x42, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x22, 0x72, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x42, - 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, - 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, - 0x6f, 0x64, 0x65, 0x49, 0x64, 0x22, 0x72, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x42, 0x79, 0x4e, 0x6f, 0x64, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x11, 0x76, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x73, 0x61, - 0x67, 0x65, 0x42, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x0f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x3c, 0x0a, 0x21, 0x53, 0x64, 0x6b, - 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x65, 0x64, 0x52, 0x65, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x50, 0x75, 0x72, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, - 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x22, 0x62, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x4e, 0x6f, - 0x64, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x65, 0x64, 0x52, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x50, 0x75, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x52, 0x65, 0x6c, 0x61, 0x78, 0x65, 0x64, 0x52, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x75, - 0x72, 0x67, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x23, 0x0a, 0x21, 0x53, - 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, - 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x56, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, - 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x50, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x49, 0x6e, 0x73, 0x70, - 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6c, + 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, + 0x11, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, + 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x42, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x0f, 0x76, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x3c, 0x0a, + 0x21, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x65, 0x64, 0x52, + 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x75, 0x72, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x22, 0x62, 0x0a, 0x22, 0x53, + 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x65, 0x64, 0x52, 0x65, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x75, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x65, 0x64, 0x52, 0x65, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x50, 0x75, 0x72, 0x67, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, + 0x23, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x56, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x50, 0x0a, 0x1e, + 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, + 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, + 0x0a, 0x13, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6e, + 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x51, + 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0x22, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, + 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6e, 0x0a, 0x1f, 0x53, 0x64, - 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x49, 0x6e, - 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, - 0x13, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, - 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x51, 0x0a, 0x1f, 0x53, 0x64, - 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x41, 0x63, - 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, - 0x13, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x22, 0x0a, - 0x20, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x53, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x0a, 0x1f, - 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, - 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x5d, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x73, - 0x70, 0x65, 0x63, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x30, - 0x0a, 0x15, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, - 0x22, 0x9a, 0x06, 0x0a, 0x03, 0x4a, 0x6f, 0x62, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, 0x62, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, 0x22, 0x53, 0x64, + 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x44, 0x65, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x21, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, + 0x73, 0x70, 0x65, 0x63, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x22, 0x5d, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x22, 0x30, 0x0a, 0x15, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x73, + 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, + 0x64, 0x65, 0x49, 0x64, 0x22, 0x9a, 0x06, 0x0a, 0x03, 0x4a, 0x6f, 0x62, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, + 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2d, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, + 0x6f, 0x62, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x58, 0x0a, + 0x11, 0x64, 0x72, 0x61, 0x69, 0x6e, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x18, 0x90, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4e, 0x6f, 0x64, 0x65, + 0x44, 0x72, 0x61, 0x69, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x4a, 0x6f, 0x62, 0x48, 0x00, 0x52, 0x10, 0x64, 0x72, 0x61, 0x69, 0x6e, 0x41, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x5a, 0x0a, 0x13, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x64, 0x72, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x18, 0x91, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x72, 0x69, + 0x76, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x48, 0x00, 0x52, + 0x12, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x64, 0x72, 0x69, 0x76, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x66, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x64, + 0x69, 0x61, 0x67, 0x73, 0x18, 0x92, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, + 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x44, 0x69, 0x61, 0x67, 0x73, 0x4a, 0x6f, 0x62, 0x48, 0x00, 0x52, + 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x44, 0x69, 0x61, 0x67, 0x73, 0x12, 0x35, 0x0a, + 0x06, 0x64, 0x65, 0x66, 0x72, 0x61, 0x67, 0x18, 0x93, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x4a, 0x6f, 0x62, 0x48, 0x00, 0x52, 0x06, 0x64, 0x65, + 0x66, 0x72, 0x61, 0x67, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x44, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x76, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x12, + 0x15, 0x0a, 0x11, 0x44, 0x52, 0x41, 0x49, 0x4e, 0x5f, 0x41, 0x54, 0x54, 0x41, 0x43, 0x48, 0x4d, + 0x45, 0x4e, 0x54, 0x53, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x5f, + 0x44, 0x52, 0x49, 0x56, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x45, 0x52, 0x10, 0x03, + 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x4f, 0x4c, 0x4c, 0x45, 0x43, 0x54, 0x5f, 0x44, 0x49, 0x41, 0x47, + 0x53, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x46, 0x52, 0x41, 0x47, 0x10, 0x05, 0x22, + 0x69, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, + 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, + 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x4f, 0x4e, + 0x45, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x41, 0x55, 0x53, 0x45, 0x44, 0x10, 0x04, 0x12, + 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x05, 0x12, 0x0a, + 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x06, 0x42, 0x05, 0x0a, 0x03, 0x6a, 0x6f, + 0x62, 0x22, 0xc9, 0x02, 0x0a, 0x08, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x30, 0x0a, + 0x14, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x6d, 0x61, 0x78, + 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 0x12, + 0x2d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x4a, 0x6f, 0x62, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2a, + 0x0a, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x4a, 0x6f, 0x62, 0x52, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x5f, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x6c, + 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x5a, 0x0a, + 0x19, 0x53, 0x64, 0x6b, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, 0x62, 0x2e, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x58, 0x0a, 0x11, 0x64, 0x72, 0x61, - 0x69, 0x6e, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x90, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x72, 0x61, 0x69, - 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4a, 0x6f, 0x62, 0x48, - 0x00, 0x52, 0x10, 0x64, 0x72, 0x61, 0x69, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x12, 0x5a, 0x0a, 0x13, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x64, 0x72, 0x69, 0x76, - 0x65, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x18, 0x91, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x72, 0x69, 0x76, 0x65, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x64, 0x72, 0x69, 0x76, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, - 0x48, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x64, 0x69, 0x61, 0x67, 0x73, - 0x18, 0x92, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, - 0x74, 0x44, 0x69, 0x61, 0x67, 0x73, 0x4a, 0x6f, 0x62, 0x48, 0x00, 0x52, 0x0c, 0x63, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x44, 0x69, 0x61, 0x67, 0x73, 0x12, 0x35, 0x0a, 0x06, 0x64, 0x65, 0x66, - 0x72, 0x61, 0x67, 0x18, 0x93, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x66, - 0x72, 0x61, 0x67, 0x4a, 0x6f, 0x62, 0x48, 0x00, 0x52, 0x06, 0x64, 0x65, 0x66, 0x72, 0x61, 0x67, - 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x44, 0x0a, - 0x10, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x22, 0x76, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, - 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x44, - 0x52, 0x41, 0x49, 0x4e, 0x5f, 0x41, 0x54, 0x54, 0x41, 0x43, 0x48, 0x4d, 0x45, 0x4e, 0x54, 0x53, - 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x5f, 0x44, 0x52, 0x49, 0x56, - 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x45, 0x52, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, - 0x43, 0x4f, 0x4c, 0x4c, 0x45, 0x43, 0x54, 0x5f, 0x44, 0x49, 0x41, 0x47, 0x53, 0x10, 0x04, 0x12, - 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x46, 0x52, 0x41, 0x47, 0x10, 0x05, 0x22, 0x69, 0x0a, 0x05, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, - 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x4e, 0x4e, - 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x4f, 0x4e, 0x45, 0x10, 0x03, 0x12, - 0x0a, 0x0a, 0x06, 0x50, 0x41, 0x55, 0x53, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x43, - 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, - 0x49, 0x4c, 0x45, 0x44, 0x10, 0x06, 0x42, 0x05, 0x0a, 0x03, 0x6a, 0x6f, 0x62, 0x22, 0x38, 0x0a, - 0x0e, 0x53, 0x64, 0x6b, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x26, 0x0a, 0x03, 0x6a, 0x6f, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, + 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x53, 0x0a, 0x1a, 0x53, 0x64, 0x6b, + 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x52, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x22, 0x4d, + 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, - 0x6f, 0x62, 0x52, 0x03, 0x6a, 0x6f, 0x62, 0x22, 0x1c, 0x0a, 0x1a, 0x4e, 0x6f, 0x64, 0x65, 0x44, - 0x72, 0x61, 0x69, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xbd, 0x01, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, - 0x65, 0x44, 0x72, 0x61, 0x69, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, - 0x64, 0x12, 0x45, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x6f, 0x6e, 0x6c, 0x79, - 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0c, 0x6f, 0x6e, 0x6c, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x12, 0x16, 0x0a, - 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, - 0x73, 0x73, 0x75, 0x65, 0x72, 0x22, 0xb6, 0x02, 0x0a, 0x17, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x72, - 0x61, 0x69, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4a, 0x6f, - 0x62, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x4f, 0x0a, 0x0a, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, + 0x6f, 0x62, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x58, 0x0a, + 0x1d, 0x53, 0x64, 0x6b, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, + 0x0a, 0x09, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x09, 0x73, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x59, 0x0a, 0x18, 0x53, 0x64, 0x6b, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, 0x62, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x22, 0x1b, 0x0a, 0x19, 0x53, 0x64, 0x6b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x38, 0x0a, 0x0e, 0x53, 0x64, 0x6b, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x26, 0x0a, 0x03, 0x6a, 0x6f, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x72, 0x61, 0x69, 0x6e, 0x41, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, - 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, - 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x03, 0x6a, 0x6f, 0x62, 0x22, 0x1c, 0x0a, 0x1a, 0x4e, 0x6f, 0x64, + 0x65, 0x44, 0x72, 0x61, 0x69, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xbd, 0x01, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x4e, + 0x6f, 0x64, 0x65, 0x44, 0x72, 0x61, 0x69, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, + 0x65, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x6f, 0x6e, + 0x6c, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0c, 0x6f, 0x6e, 0x6c, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x12, + 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x22, 0xb6, 0x02, 0x0a, 0x17, 0x4e, 0x6f, 0x64, 0x65, + 0x44, 0x72, 0x61, 0x69, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x4a, 0x6f, 0x62, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x4f, 0x0a, 0x0a, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x72, 0x61, 0x69, 0x6e, 0x41, + 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x3b, 0x0a, + 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, - 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x95, - 0x01, 0x0a, 0x15, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x72, 0x69, 0x76, 0x65, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x66, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x72, 0x69, 0x76, - 0x65, 0x73, 0x65, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x17, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x98, 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x6c, 0x6c, 0x65, - 0x63, 0x74, 0x44, 0x69, 0x61, 0x67, 0x73, 0x4a, 0x6f, 0x62, 0x12, 0x41, 0x0a, 0x07, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, - 0x6b, 0x44, 0x69, 0x61, 0x67, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, - 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, - 0x73, 0x22, 0xb0, 0x02, 0x0a, 0x09, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x4a, 0x6f, 0x62, 0x12, - 0x2c, 0x0a, 0x12, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x68, 0x6f, 0x75, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x6d, 0x61, 0x78, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x6f, 0x75, 0x72, 0x73, 0x12, 0x31, 0x0a, - 0x15, 0x6d, 0x61, 0x78, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x69, 0x6e, 0x5f, 0x70, 0x61, - 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x6d, 0x61, - 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x49, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, - 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6e, 0x6f, 0x64, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x78, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x6f, - 0x64, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0c, 0x6e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, - 0x32, 0x0a, 0x15, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x69, - 0x6e, 0x67, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x4e, 0x6f, - 0x64, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, - 0x6c, 0x65, 0x49, 0x64, 0x22, 0xf3, 0x01, 0x0a, 0x10, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x4e, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x10, 0x6c, 0x61, + 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x22, 0x95, 0x01, 0x0a, 0x15, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x72, 0x69, 0x76, 0x65, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x72, + 0x69, 0x76, 0x65, 0x73, 0x65, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x17, 0x64, 0x65, 0x73, 0x74, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x64, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x98, 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x44, 0x69, 0x61, 0x67, 0x73, 0x4a, 0x6f, 0x62, 0x12, 0x41, 0x0a, 0x07, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x53, 0x64, 0x6b, 0x44, 0x69, 0x61, 0x67, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x42, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x65, 0x73, 0x22, 0x9e, 0x03, 0x0a, 0x09, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x4a, 0x6f, + 0x62, 0x12, 0x30, 0x0a, 0x14, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x12, 0x6d, 0x61, 0x78, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x15, 0x6d, 0x61, 0x78, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x73, + 0x5f, 0x69, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x49, 0x6e, 0x50, 0x61, + 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, + 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, + 0x12, 0x4e, 0x0a, 0x0d, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x0c, 0x6e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x12, 0x32, 0x0a, 0x15, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x6e, + 0x69, 0x6e, 0x67, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x13, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x4e, + 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x1b, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x5f, 0x6f, 0x6e, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x6e, 0x65, 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0xb9, 0x02, 0x0a, 0x10, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x52, 0x0a, 0x0b, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, @@ -33952,250 +34871,428 @@ var file_api_api_proto_rawDesc = []byte{ 0x79, 0x52, 0x0a, 0x70, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, - 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x1a, 0x60, 0x0a, 0x0f, 0x50, 0x6f, 0x6f, 0x6c, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x37, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, + 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x44, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, + 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, + 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0x60, + 0x0a, 0x0f, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x50, 0x6f, 0x6f, 0x6c, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xfc, 0x02, 0x0a, 0x10, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x50, 0x6f, 0x6f, 0x6c, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x5f, 0x69, 0x74, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6e, + 0x75, 0x6d, 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, + 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6c, 0x61, + 0x73, 0x74, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x42, 0x0a, 0x0f, 0x6c, 0x61, 0x73, + 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, + 0x6c, 0x61, 0x73, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x48, 0x0a, + 0x12, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x5f, + 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, + 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x2f, + 0x0a, 0x13, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x70, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x22, + 0x7c, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x72, + 0x61, 0x67, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x64, 0x65, 0x66, 0x72, 0x61, 0x67, 0x5f, 0x74, 0x61, 0x73, 0x6b, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x4a, + 0x6f, 0x62, 0x52, 0x0a, 0x64, 0x65, 0x66, 0x72, 0x61, 0x67, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x58, 0x0a, + 0x1f, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, + 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x35, 0x0a, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x08, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x22, 0x22, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x43, 0x6c, + 0x65, 0x61, 0x6e, 0x55, 0x70, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x23, 0x0a, 0x21, 0x53, + 0x64, 0x6b, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x55, 0x70, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x38, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, + 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x22, 0xd7, 0x02, 0x0a, 0x1e, 0x53, + 0x64, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, + 0x12, 0x64, 0x65, 0x66, 0x72, 0x61, 0x67, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x66, 0x72, + 0x61, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x10, 0x64, 0x65, + 0x66, 0x72, 0x61, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x17, + 0x0a, 0x07, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x64, 0x61, 0x74, 0x61, 0x49, 0x70, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4e, + 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5d, 0x0a, 0x0a, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, + 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, + 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x6f, 0x6f, + 0x6c, 0x55, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x70, 0x6f, 0x6f, + 0x6c, 0x55, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x3c, 0x0a, 0x0e, 0x50, 0x6f, 0x6f, 0x6c, 0x55, 0x73, + 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x21, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x45, 0x6e, 0x75, 0x6d, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xe5, 0x01, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x45, + 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x64, 0x6b, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x72, 0x61, + 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x1a, 0x6a, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x45, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x72, + 0x61, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0xd3, 0x01, 0x0a, 0x15, 0x44, 0x69, 0x61, 0x67, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x6f, 0x64, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x42, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, - 0x65, 0x66, 0x72, 0x61, 0x67, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfc, 0x02, 0x0a, 0x10, 0x44, - 0x65, 0x66, 0x72, 0x61, 0x67, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x25, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x5f, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x49, 0x74, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, - 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, - 0x12, 0x21, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x12, 0x42, 0x0a, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x48, 0x0a, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x5f, - 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x10, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x5f, - 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6c, 0x61, - 0x73, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x2f, 0x0a, 0x13, 0x70, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, - 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x22, 0xd3, 0x01, 0x0a, 0x15, 0x44, 0x69, - 0x61, 0x67, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x42, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x73, 0x43, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x48, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0f, - 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, - 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x4f, 0x4e, - 0x45, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x22, - 0x9c, 0x02, 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x44, 0x69, 0x61, 0x67, 0x73, 0x43, 0x6f, 0x6c, 0x6c, - 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x04, 0x6e, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x73, - 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x04, 0x6e, 0x6f, - 0x64, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x73, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4f, - 0x6e, 0x6c, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x74, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4d, 0x69, 0x6e, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x6c, 0x69, 0x76, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6c, 0x69, - 0x76, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x41, - 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x44, 0x69, 0x61, 0x67, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x03, 0x6a, 0x6f, 0x62, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x03, 0x6a, 0x6f, - 0x62, 0x22, 0x9b, 0x01, 0x0a, 0x11, 0x44, 0x69, 0x61, 0x67, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x53, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x59, 0x0a, 0x13, 0x6e, 0x6f, 0x64, 0x65, 0x5f, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x11, 0x6e, 0x6f, 0x64, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x73, 0x12, 0x10, 0x0a, - 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, - 0x93, 0x01, 0x0a, 0x13, 0x44, 0x69, 0x61, 0x67, 0x73, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x5d, 0x0a, 0x15, 0x76, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x13, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x76, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x49, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x45, 0x6e, 0x75, 0x6d, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, + 0x69, 0x61, 0x67, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x48, 0x0a, 0x05, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, + 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, + 0x08, 0x0a, 0x04, 0x44, 0x4f, 0x4e, 0x45, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, + 0x4c, 0x45, 0x44, 0x10, 0x04, 0x22, 0x9c, 0x02, 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x44, 0x69, 0x61, + 0x67, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x36, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x4a, 0x6f, 0x62, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, - 0x44, 0x0a, 0x18, 0x53, 0x64, 0x6b, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4a, - 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x6a, - 0x6f, 0x62, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, 0x62, 0x52, - 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x13, 0x53, 0x64, 0x6b, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2d, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, - 0x62, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, - 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x16, - 0x0a, 0x14, 0x53, 0x64, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x57, 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x47, 0x65, 0x74, - 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x4a, 0x6f, 0x62, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, - 0x45, 0x0a, 0x08, 0x4a, 0x6f, 0x62, 0x41, 0x75, 0x64, 0x69, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x73, - 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, + 0x2e, 0x44, 0x69, 0x61, 0x67, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x73, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x06, + 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, + 0x75, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, + 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x6d, 0x69, 0x6e, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x4d, 0x69, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x76, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x04, 0x6c, 0x69, 0x76, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, + 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x41, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x44, 0x69, 0x61, 0x67, 0x73, + 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x26, 0x0a, 0x03, 0x6a, 0x6f, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, - 0x6f, 0x62, 0x57, 0x6f, 0x72, 0x6b, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x07, 0x73, - 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x83, 0x01, 0x0a, 0x0e, 0x4a, 0x6f, 0x62, 0x57, 0x6f, - 0x72, 0x6b, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x66, 0x0a, 0x19, 0x64, 0x72, 0x61, - 0x69, 0x6e, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x73, - 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, - 0x72, 0x61, 0x69, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x53, - 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x48, 0x00, 0x52, 0x17, 0x64, 0x72, 0x61, 0x69, 0x6e, 0x41, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x79, 0x42, 0x09, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x98, 0x01, 0x0a, - 0x0a, 0x4a, 0x6f, 0x62, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, - 0x46, 0x0a, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, 0x62, 0x57, 0x6f, 0x72, - 0x6b, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x75, - 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x22, 0x78, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x47, 0x65, - 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x26, 0x0a, 0x03, 0x6a, 0x6f, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x6f, 0x62, 0x52, 0x03, 0x6a, 0x6f, 0x62, 0x22, 0x9b, 0x01, 0x0a, 0x11, 0x44, 0x69, 0x61, 0x67, + 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x59, 0x0a, + 0x13, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x11, 0x6e, 0x6f, 0x64, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x6f, 0x64, 0x65, + 0x49, 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x93, 0x01, 0x0a, 0x13, 0x44, 0x69, 0x61, 0x67, 0x73, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x5d, 0x0a, + 0x15, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x73, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x13, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1d, 0x0a, 0x0a, + 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x17, 0x53, + 0x64, 0x6b, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, 0x62, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x44, 0x0a, 0x18, 0x53, 0x64, 0x6b, 0x45, 0x6e, 0x75, 0x6d, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x28, 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x03, 0x6a, 0x6f, 0x62, 0x12, 0x35, 0x0a, 0x07, 0x73, 0x75, - 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, - 0x62, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x79, 0x22, 0x9f, 0x01, 0x0a, 0x17, 0x44, 0x72, 0x61, 0x69, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x2a, 0x0a, - 0x11, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6e, 0x75, 0x6d, 0x56, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x75, 0x6d, - 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x5f, 0x64, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0e, 0x6e, 0x75, 0x6d, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x44, - 0x6f, 0x6e, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x73, 0x5f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x11, 0x6e, 0x75, 0x6d, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x50, 0x65, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x6f, - 0x72, 0x64, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x22, - 0x22, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x72, 0x64, 0x6f, 0x6e, - 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x3c, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x55, 0x6e, - 0x63, 0x6f, 0x72, 0x64, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, - 0x64, 0x22, 0x24, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x55, 0x6e, 0x63, 0x6f, - 0x72, 0x64, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x96, 0x02, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x53, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x04, 0x73, - 0x69, 0x7a, 0x65, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x04, 0x73, 0x69, - 0x7a, 0x65, 0x12, 0x21, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, - 0x18, 0xc9, 0x01, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, - 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x5a, 0x0a, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, + 0x69, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x13, + 0x53, 0x64, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, 0x62, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x53, 0x64, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x57, 0x0a, 0x16, + 0x53, 0x64, 0x6b, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, 0x62, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x45, 0x0a, 0x08, 0x4a, 0x6f, 0x62, 0x41, 0x75, 0x64, 0x69, + 0x74, 0x12, 0x39, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, 0x62, 0x57, 0x6f, 0x72, 0x6b, 0x53, 0x75, 0x6d, 0x6d, + 0x61, 0x72, 0x79, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x83, 0x01, 0x0a, + 0x0e, 0x4a, 0x6f, 0x62, 0x57, 0x6f, 0x72, 0x6b, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, + 0x66, 0x0a, 0x19, 0x64, 0x72, 0x61, 0x69, 0x6e, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x72, 0x61, 0x69, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x48, 0x00, 0x52, 0x17, + 0x64, 0x72, 0x61, 0x69, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x42, 0x09, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, + 0x72, 0x79, 0x22, 0x98, 0x01, 0x0a, 0x0a, 0x4a, 0x6f, 0x62, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, + 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x46, 0x0a, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x73, 0x75, + 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x2e, 0x52, - 0x65, 0x73, 0x69, 0x7a, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x0d, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x3c, 0x0a, 0x1b, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x66, - 0x6f, 0x72, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x73, 0x6b, 0x69, 0x70, 0x57, 0x61, 0x69, 0x74, - 0x46, 0x6f, 0x72, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x42, - 0x0f, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, - 0x22, 0xa5, 0x03, 0x0a, 0x20, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, 0x68, 0x72, 0x65, - 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x4a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, 0x68, 0x72, - 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x50, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x38, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x4a, 0x6f, 0x62, 0x57, 0x6f, 0x72, 0x6b, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x0d, + 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x22, 0x78, 0x0a, + 0x17, 0x53, 0x64, 0x6b, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x03, 0x6a, 0x6f, 0x62, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x03, 0x6a, 0x6f, 0x62, + 0x12, 0x35, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x07, + 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x9f, 0x01, 0x0a, 0x17, 0x44, 0x72, 0x61, 0x69, + 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x53, 0x75, 0x6d, 0x6d, + 0x61, 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, + 0x6e, 0x75, 0x6d, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, + 0x28, 0x0a, 0x10, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x5f, 0x64, + 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x6e, 0x75, 0x6d, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x44, 0x6f, 0x6e, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x6e, 0x75, 0x6d, + 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x6e, 0x75, 0x6d, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x73, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x0a, 0x1f, 0x53, 0x64, 0x6b, + 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x72, 0x64, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, + 0x6f, 0x64, 0x65, 0x49, 0x64, 0x22, 0x22, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, + 0x43, 0x6f, 0x72, 0x64, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3c, 0x0a, 0x21, 0x53, 0x64, 0x6b, + 0x4e, 0x6f, 0x64, 0x65, 0x55, 0x6e, 0x63, 0x6f, 0x72, 0x64, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, + 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x22, 0x24, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x4e, 0x6f, + 0x64, 0x65, 0x55, 0x6e, 0x63, 0x6f, 0x72, 0x64, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xbe, 0x02, + 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, + 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, + 0x64, 0x12, 0x15, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x48, 0x00, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x21, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0xc9, 0x01, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, + 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x5a, 0x0a, 0x0e, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x50, 0x6f, 0x6f, 0x6c, 0x2e, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x1b, 0x73, 0x6b, 0x69, 0x70, 0x5f, + 0x77, 0x61, 0x69, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x5f, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x73, 0x6b, + 0x69, 0x70, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x61, + 0x64, 0x64, 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, + 0x66, 0x6f, 0x72, 0x63, 0x65, 0x41, 0x64, 0x64, 0x44, 0x72, 0x69, 0x76, 0x65, 0x42, 0x0f, 0x0a, + 0x0d, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x22, 0xa5, + 0x03, 0x0a, 0x20, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, + 0x6f, 0x6c, 0x64, 0x12, 0x4a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x36, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, 0x68, 0x72, 0x65, 0x73, - 0x68, 0x6f, 0x6c, 0x64, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x06, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x12, 0x3d, 0x0a, 0x1b, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x61, 0x64, - 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, - 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x18, 0x6f, 0x76, 0x65, 0x72, 0x4c, 0x6f, - 0x61, 0x64, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, - 0x6c, 0x64, 0x12, 0x3f, 0x0a, 0x1c, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x61, 0x64, - 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, - 0x6c, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x19, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x4c, - 0x6f, 0x61, 0x64, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, - 0x6f, 0x6c, 0x64, 0x22, 0x34, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x41, - 0x42, 0x53, 0x4f, 0x4c, 0x55, 0x54, 0x45, 0x5f, 0x50, 0x45, 0x52, 0x43, 0x45, 0x4e, 0x54, 0x10, - 0x00, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x45, 0x4c, 0x54, 0x41, 0x5f, 0x4d, 0x45, 0x41, 0x4e, 0x5f, - 0x50, 0x45, 0x52, 0x43, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x22, 0x2d, 0x0a, 0x06, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, - 0x5f, 0x53, 0x50, 0x41, 0x43, 0x45, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x53, 0x45, 0x44, - 0x5f, 0x53, 0x50, 0x41, 0x43, 0x45, 0x10, 0x01, 0x22, 0xbd, 0x04, 0x0a, 0x1a, 0x53, 0x64, 0x6b, - 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x60, 0x0a, 0x12, 0x74, 0x72, 0x69, 0x67, 0x67, - 0x65, 0x72, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x68, 0x6f, 0x6c, 0x64, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x50, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x38, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, + 0x6c, 0x64, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x12, 0x3d, 0x0a, 0x1b, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, + 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x18, 0x6f, 0x76, 0x65, 0x72, 0x4c, 0x6f, 0x61, 0x64, + 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, + 0x12, 0x3f, 0x0a, 0x1c, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, + 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x19, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x4c, 0x6f, 0x61, + 0x64, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, + 0x64, 0x22, 0x34, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x42, 0x53, + 0x4f, 0x4c, 0x55, 0x54, 0x45, 0x5f, 0x50, 0x45, 0x52, 0x43, 0x45, 0x4e, 0x54, 0x10, 0x00, 0x12, + 0x16, 0x0a, 0x12, 0x44, 0x45, 0x4c, 0x54, 0x41, 0x5f, 0x4d, 0x45, 0x41, 0x4e, 0x5f, 0x50, 0x45, + 0x52, 0x43, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x22, 0x2d, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, + 0x50, 0x41, 0x43, 0x45, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x53, 0x45, 0x44, 0x5f, 0x53, + 0x50, 0x41, 0x43, 0x45, 0x10, 0x01, 0x22, 0xcd, 0x04, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x60, 0x0a, 0x12, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, + 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, 0x68, 0x72, 0x65, 0x73, + 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x11, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, 0x68, 0x72, + 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x72, 0x69, 0x61, 0x6c, + 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x74, 0x72, 0x69, 0x61, + 0x6c, 0x52, 0x75, 0x6e, 0x12, 0x5b, 0x0a, 0x14, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, + 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x12, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x12, 0x5b, 0x0a, 0x14, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, + 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x12, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x30, + 0x0a, 0x14, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x6d, 0x61, + 0x78, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, + 0x12, 0x35, 0x0a, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x5f, + 0x31, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x14, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x31, 0x53, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x12, 0x44, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x47, 0x0a, + 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, + 0x5f, 0x52, 0x45, 0x42, 0x41, 0x4c, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, + 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x4d, 0x45, 0x4e, 0x54, + 0x5f, 0x46, 0x49, 0x58, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x4f, 0x4f, 0x4c, 0x5f, 0x44, + 0x52, 0x41, 0x49, 0x4e, 0x10, 0x02, 0x22, 0xdb, 0x01, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x03, 0x6a, 0x6f, 0x62, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, 0x68, 0x72, - 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x11, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, - 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x72, 0x69, - 0x61, 0x6c, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x74, 0x72, - 0x69, 0x61, 0x6c, 0x52, 0x75, 0x6e, 0x12, 0x5b, 0x0a, 0x14, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x12, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x12, 0x5b, 0x0a, 0x14, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x6f, - 0x6f, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x12, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x12, 0x30, 0x0a, 0x14, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, - 0x6d, 0x61, 0x78, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x75, 0x74, - 0x65, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x70, - 0x6c, 0x5f, 0x31, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x14, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x31, - 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x12, 0x44, 0x0a, 0x04, 0x6d, 0x6f, 0x64, - 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, - 0x37, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x4f, 0x52, 0x41, - 0x47, 0x45, 0x5f, 0x52, 0x45, 0x42, 0x41, 0x4c, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x00, 0x12, 0x18, - 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x4d, 0x45, - 0x4e, 0x54, 0x5f, 0x46, 0x49, 0x58, 0x10, 0x01, 0x22, 0xdb, 0x01, 0x0a, 0x1b, 0x53, 0x64, 0x6b, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x03, 0x6a, 0x6f, 0x62, 0x12, 0x42, + 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, + 0x72, 0x79, 0x12, 0x40, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x75, 0x64, 0x69, 0x74, 0x52, 0x07, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xce, 0x02, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x3f, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x4b, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x44, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x9f, 0x01, 0x0a, 0x17, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, + 0x79, 0x12, 0x33, 0x0a, 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x75, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x53, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x4f, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x73, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x57, + 0x6f, 0x72, 0x6b, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, + 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x89, 0x02, 0x0a, 0x1b, 0x53, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x57, 0x6f, 0x72, 0x6b, + 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x45, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x53, 0x75, 0x6d, 0x6d, + 0x61, 0x72, 0x79, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x64, 0x6f, + 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x75, 0x0a, 0x04, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x6e, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x6e, 0x62, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x10, 0x01, + 0x12, 0x23, 0x0a, 0x1f, 0x55, 0x6e, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x53, 0x70, 0x61, 0x63, 0x65, 0x42, 0x79, + 0x74, 0x65, 0x73, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x55, 0x6e, 0x62, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x64, 0x55, 0x73, 0x65, 0x64, 0x53, 0x70, 0x61, 0x63, 0x65, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x10, 0x03, 0x22, 0xb8, 0x04, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x75, 0x64, 0x69, 0x74, 0x12, 0x1b, 0x0a, + 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x55, + 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3d, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x41, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x6f, + 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x6f, 0x6f, 0x6c, 0x12, 0x39, 0x0a, + 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x4f, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x53, 0x75, 0x6d, 0x6d, + 0x61, 0x72, 0x79, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, + 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x72, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x3f, + 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, + 0x3d, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x0a, 0x0b, 0x41, 0x44, 0x44, + 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x52, 0x45, + 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x10, 0x01, 0x22, 0x6f, + 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3f, + 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, + 0x1f, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x31, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x22, 0xe0, 0x01, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x03, 0x6a, 0x6f, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, @@ -34208,3122 +35305,3081 @@ var file_api_api_proto_rawDesc = []byte{ 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x75, 0x64, 0x69, 0x74, 0x52, 0x07, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xce, 0x02, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3f, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x4b, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x70, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x22, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x45, 0x6e, 0x75, + 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, + 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5d, 0x0a, 0x21, 0x53, 0x64, + 0x6b, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x38, 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x4a, 0x6f, 0x62, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x22, 0xcc, 0x01, 0x0a, 0x15, 0x52, 0x65, + 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, + 0x5a, 0x0a, 0x12, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x44, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x9f, 0x01, 0x0a, 0x17, 0x53, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x75, 0x6d, 0x6d, - 0x61, 0x72, 0x79, 0x12, 0x33, 0x0a, 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x75, 0x6e, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x75, 0x6e, 0x54, 0x69, 0x6d, - 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x4f, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, - 0x5f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x0b, 0x77, 0x6f, - 0x72, 0x6b, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x89, 0x02, 0x0a, 0x1b, 0x53, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x57, 0x6f, - 0x72, 0x6b, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x45, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x53, 0x75, - 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, - 0x64, 0x6f, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x75, - 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x6e, 0x62, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x55, - 0x6e, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, - 0x10, 0x01, 0x12, 0x23, 0x0a, 0x1f, 0x55, 0x6e, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x64, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x53, 0x70, 0x61, 0x63, 0x65, - 0x42, 0x79, 0x74, 0x65, 0x73, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x55, 0x6e, 0x62, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x64, 0x55, 0x73, 0x65, 0x64, 0x53, 0x70, 0x61, 0x63, 0x65, 0x42, 0x79, - 0x74, 0x65, 0x73, 0x10, 0x03, 0x22, 0xb8, 0x04, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x75, 0x64, 0x69, 0x74, 0x12, - 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x55, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x3d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x41, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, - 0x6f, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x6f, 0x6f, 0x6c, 0x12, - 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, - 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x4f, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x79, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x53, 0x75, - 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, - 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x49, 0x64, - 0x12, 0x3f, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x22, 0x3d, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x0a, 0x0b, 0x41, - 0x44, 0x44, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, - 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x10, 0x01, - 0x22, 0x6f, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x62, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x3f, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x22, 0x1f, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x31, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xe0, 0x01, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x03, 0x6a, 0x6f, - 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x03, 0x6a, - 0x6f, 0x62, 0x12, 0x42, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x07, 0x73, - 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x40, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x75, 0x64, 0x69, 0x74, 0x52, - 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x22, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x45, - 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5d, 0x0a, 0x21, - 0x53, 0x64, 0x6b, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x38, 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x22, 0xcc, 0x01, 0x0a, 0x15, - 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x65, 0x12, 0x5a, 0x0a, 0x12, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x11, 0x72, 0x65, 0x62, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x3b, 0x0a, - 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x9b, 0x01, 0x0a, 0x21, 0x53, - 0x64, 0x6b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x5a, 0x0a, 0x12, - 0x72, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x11, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x70, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, - 0x0a, 0x0c, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x73, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x20, 0x0a, 0x1e, 0x53, 0x64, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x11, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x9b, 0x01, 0x0a, 0x21, 0x53, 0x64, 0x6b, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, + 0x0a, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x5a, 0x0a, 0x12, 0x72, 0x65, + 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x52, 0x11, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x70, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0c, + 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x20, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6d, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x68, - 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6d, 0x0a, 0x1f, - 0x53, 0x64, 0x6b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x4a, 0x0a, 0x0c, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x73, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x23, 0x0a, 0x21, 0x53, - 0x64, 0x6b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x24, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x62, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x90, 0x02, 0x0a, 0x0e, 0x53, 0x64, 0x6b, 0x53, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x73, 0x0a, 0x0f, 0x4f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x15, 0x0a, 0x11, - 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, - 0x47, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x18, - 0x0a, 0x14, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x55, 0x43, 0x43, - 0x45, 0x53, 0x53, 0x46, 0x55, 0x4c, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x45, 0x52, - 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x22, 0x25, - 0x0a, 0x0d, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x53, - 0x49, 0x5a, 0x45, 0x10, 0x00, 0x22, 0x62, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x4f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, - 0x52, 0x45, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x55, 0x54, 0x4f, - 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x52, 0x45, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x41, 0x44, 0x44, 0x5f, 0x44, 0x49, 0x53, 0x4b, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, - 0x52, 0x45, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x53, 0x49, - 0x5a, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x4b, 0x10, 0x02, 0x22, 0x1e, 0x0a, 0x1c, 0x53, 0x64, 0x6b, - 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x69, 0x7a, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, 0x0a, 0x16, 0x53, 0x64, 0x6b, - 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, - 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x1e, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, - 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x51, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, - 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, + 0x0c, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x73, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x23, 0x0a, 0x21, 0x53, 0x64, 0x6b, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x24, + 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x90, 0x02, 0x0a, 0x0e, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x73, 0x0a, 0x0f, 0x4f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x15, 0x0a, 0x11, 0x4f, 0x50, + 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, + 0x00, 0x12, 0x19, 0x0a, 0x15, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x49, + 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, + 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, + 0x53, 0x46, 0x55, 0x4c, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x22, 0x25, 0x0a, 0x0d, + 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, + 0x10, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x53, 0x49, 0x5a, + 0x45, 0x10, 0x00, 0x22, 0x62, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x52, 0x45, + 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x00, + 0x12, 0x18, 0x0a, 0x14, 0x52, 0x45, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x41, 0x44, 0x44, 0x5f, 0x44, 0x49, 0x53, 0x4b, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x52, 0x45, + 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x53, 0x49, 0x5a, 0x45, + 0x5f, 0x44, 0x49, 0x53, 0x4b, 0x10, 0x02, 0x22, 0x1e, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x4e, 0x6f, + 0x64, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x30, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6e, + 0x6f, 0x64, 0x65, 0x22, 0x1e, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, + 0x73, 0x70, 0x65, 0x63, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x22, 0x51, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, + 0x73, 0x70, 0x65, 0x63, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, + 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x19, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, + 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x22, 0x35, 0x0a, 0x18, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x6e, 0x75, 0x6d, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, + 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x73, 0x22, 0x24, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x4e, + 0x6f, 0x64, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x59, + 0x0a, 0x23, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4e, 0x6f, - 0x64, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x19, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x4e, - 0x6f, 0x64, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x22, 0x35, 0x0a, 0x18, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x6e, - 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x19, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x73, 0x22, 0x24, 0x0a, 0x22, 0x53, 0x64, - 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, - 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x59, 0x0a, 0x23, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x45, 0x0a, 0x1c, 0x53, - 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x73, - 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x49, 0x64, 0x22, 0x70, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x12, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x11, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x22, 0x3a, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x64, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x45, 0x0a, 0x1c, 0x53, 0x64, 0x6b, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x64, + 0x22, 0x70, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, + 0x72, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x4f, 0x0a, 0x12, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x11, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0x3a, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x22, 0x6f, + 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, + 0x0a, 0x12, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x11, 0x6f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, + 0x44, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, + 0x0a, 0x0e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x49, 0x64, 0x22, 0x1e, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5c, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x22, 0x1e, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x9c, 0x03, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, - 0x22, 0x6f, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x4f, 0x0a, 0x12, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x11, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x22, 0x44, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x64, 0x22, 0x1e, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5c, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x1e, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9c, 0x03, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, - 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x75, 0x6c, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x75, 0x6c, 0x6c, 0x12, 0x17, 0x0a, 0x07, 0x74, - 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, - 0x73, 0x6b, 0x49, 0x64, 0x12, 0x50, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x62, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x66, 0x75, 0x6c, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x2a, 0x0a, - 0x11, 0x6e, 0x65, 0x61, 0x72, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x6d, 0x69, 0x67, 0x72, 0x61, - 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6e, 0x65, 0x61, 0x72, 0x53, 0x79, - 0x6e, 0x63, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0x37, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0xca, 0x02, - 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, - 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, - 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x75, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x04, 0x66, 0x75, 0x6c, 0x6c, 0x12, 0x55, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x21, 0x0a, 0x0c, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x1a, - 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x71, 0x0a, 0x21, 0x53, 0x64, - 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x31, 0x0a, 0x15, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x62, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x22, 0xb4, 0x02, - 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, - 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x72, - 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, - 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, - 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, - 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x38, 0x0a, 0x07, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x07, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x6f, 0x72, 0x22, 0x64, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0x8d, 0x01, 0x0a, 0x1b, 0x53, - 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, - 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x1e, 0x0a, 0x1c, 0x53, 0x64, - 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x69, 0x0a, 0x1e, 0x53, 0x64, - 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0d, - 0x73, 0x72, 0x63, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x72, 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x49, 0x64, 0x22, 0x21, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, - 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd9, 0x04, 0x0a, 0x29, 0x53, 0x64, 0x6b, - 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x72, 0x63, 0x5f, 0x76, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, - 0x72, 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x10, - 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, - 0x12, 0x4e, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, - 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x12, 0x77, 0x0a, 0x0f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, - 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, - 0x6d, 0x61, 0x78, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x6f, - 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, - 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x72, 0x63, - 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x53, 0x72, 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x73, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe6, 0x03, 0x0a, 0x12, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, - 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x73, - 0x72, 0x63, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x73, 0x72, 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, - 0x26, 0x0a, 0x0f, 0x73, 0x72, 0x63, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x72, 0x63, 0x56, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x12, 0x4d, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x75, 0x6c, 0x6c, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x75, 0x6c, 0x6c, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, + 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, + 0x49, 0x64, 0x12, 0x50, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x62, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x13, 0x66, 0x75, 0x6c, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x46, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x2a, 0x0a, 0x11, 0x6e, + 0x65, 0x61, 0x72, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, + 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0x37, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0xca, 0x02, 0x0a, 0x20, + 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x66, 0x75, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, + 0x75, 0x6c, 0x6c, 0x12, 0x55, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x41, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x4d, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x9a, 0x01, - 0x0a, 0x2a, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x07, - 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x63, - 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xa5, 0x04, 0x0a, 0x14, 0x53, - 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, - 0x12, 0x3d, 0x0a, 0x06, 0x6f, 0x70, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x4f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x6f, 0x70, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x41, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x64, 0x6f, 0x6e, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x62, 0x79, 0x74, 0x65, 0x73, 0x44, 0x6f, 0x6e, - 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x0e, - 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, - 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x72, 0x63, 0x5f, - 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x73, 0x72, 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, - 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, - 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x74, 0x61, 0x5f, 0x73, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x65, 0x74, 0x61, - 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x49, 0x64, 0x22, 0x95, 0x01, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, - 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x2a, - 0x0a, 0x11, 0x6e, 0x65, 0x61, 0x72, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x6d, 0x69, 0x67, 0x72, - 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6e, 0x65, 0x61, 0x72, 0x53, - 0x79, 0x6e, 0x63, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x22, 0xdb, 0x01, 0x0a, 0x1c, 0x53, - 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x08, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x65, 0x73, 0x1a, 0x62, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, - 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x60, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, + 0x63, 0x6b, 0x75, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x1a, 0x39, 0x0a, + 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x71, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, + 0x15, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x62, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, + 0x12, 0x19, 0x0a, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x22, 0xb4, 0x02, 0x0a, 0x1c, + 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, + 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x65, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x17, + 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, + 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, + 0x12, 0x36, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x38, 0x0a, 0x07, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x07, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x6f, 0x72, 0x22, 0x64, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, + 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0x8d, 0x01, 0x0a, 0x1b, 0x53, 0x64, 0x6b, + 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x22, 0x3b, 0x0a, 0x1d, 0x53, 0x64, - 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x61, 0x74, 0x61, - 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xbc, 0x01, 0x0a, 0x19, 0x53, 0x64, 0x6b, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x72, 0x63, 0x5f, 0x76, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x72, - 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x12, 0x41, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x42, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, - 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x72, 0x63, 0x5f, 0x76, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, - 0x72, 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x22, 0x6e, 0x0a, 0x1d, 0x53, 0x64, - 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x48, 0x69, 0x73, 0x74, - 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0c, 0x68, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, + 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x1e, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x69, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x72, + 0x63, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x73, 0x72, 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x23, + 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x49, 0x64, 0x22, 0x21, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd9, 0x04, 0x0a, 0x29, 0x53, 0x64, 0x6b, 0x43, 0x6c, + 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x72, 0x63, 0x5f, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x72, 0x63, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, + 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x4e, + 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x0c, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x77, + 0x0a, 0x0f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, + 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x62, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x6d, 0x61, + 0x78, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x74, + 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x12, + 0x2e, 0x0a, 0x13, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x72, 0x63, 0x5f, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6e, 0x67, 0x53, 0x72, 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x1a, + 0x41, 0x0a, 0x13, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0xe6, 0x03, 0x0a, 0x12, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x72, 0x63, + 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x73, 0x72, 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, + 0x0f, 0x73, 0x72, 0x63, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x72, 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, + 0x4d, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0b, 0x68, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x93, 0x01, 0x0a, 0x20, 0x53, - 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x56, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x41, + 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x4d, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, + 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x1a, 0x3b, + 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x9a, 0x01, 0x0a, 0x2a, + 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x45, 0x6e, + 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x07, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, + 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x6f, 0x6e, + 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xa5, 0x04, 0x0a, 0x14, 0x53, 0x64, 0x6b, + 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x12, 0x3d, + 0x0a, 0x06, 0x6f, 0x70, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4f, + 0x70, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x6f, 0x70, 0x74, 0x79, 0x70, 0x65, 0x12, 0x41, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x64, 0x6f, 0x6e, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x62, 0x79, 0x74, 0x65, 0x73, 0x44, 0x6f, 0x6e, 0x65, 0x12, + 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x63, 0x6f, + 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, + 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x17, 0x0a, + 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x72, 0x63, 0x5f, 0x76, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, + 0x72, 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x6e, + 0x66, 0x6f, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x23, + 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x54, + 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x74, 0x61, 0x5f, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x65, 0x74, 0x61, 0x53, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, + 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, + 0x22, 0x95, 0x01, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, + 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, + 0x6e, 0x65, 0x61, 0x72, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, + 0x63, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x22, 0xdb, 0x01, 0x0a, 0x1c, 0x53, 0x64, 0x6b, + 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x08, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, + 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x65, 0x73, 0x1a, 0x62, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x60, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, + 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x22, 0x3b, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xbc, 0x01, 0x0a, 0x19, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, + 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, + 0x74, 0x65, 0x6d, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x72, 0x63, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x72, 0x63, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x12, 0x41, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x22, 0x23, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb2, 0x03, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, - 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x72, 0x63, 0x5f, 0x76, 0x6f, 0x6c, 0x75, + 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x22, 0x42, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x72, 0x63, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x72, 0x63, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x48, 0x0a, - 0x09, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x09, 0x73, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x62, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x6d, 0x61, - 0x78, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x75, 0x6c, 0x6c, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x75, 0x6c, 0x6c, 0x12, 0x25, 0x0a, 0x0e, - 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x44, - 0x61, 0x79, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x4f, - 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x22, 0x6e, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0c, 0x68, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0b, 0x68, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x93, 0x01, 0x0a, 0x20, 0x53, 0x64, 0x6b, + 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, + 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x56, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0e, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x23, + 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0xb2, 0x03, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x72, 0x63, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x72, 0x63, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x09, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, - 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x79, 0x0a, 0x20, 0x53, 0x64, - 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, - 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x55, - 0x0a, 0x10, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x69, 0x6e, - 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, - 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x53, 0x63, 0x68, 0x65, - 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x51, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, - 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x62, 0x61, + 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x09, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x62, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x75, 0x6c, 0x6c, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x75, 0x6c, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, + 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0d, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x79, + 0x73, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x4f, 0x0a, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, + 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x79, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x55, 0x0a, 0x10, + 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x66, 0x6f, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, + 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x0e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x53, 0x63, 0x68, 0x65, 0x64, 0x49, + 0x6e, 0x66, 0x6f, 0x22, 0x51, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x98, 0x01, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x43, 0x6c, + 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x55, 0x0a, 0x10, 0x63, + 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x0e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x53, 0x63, 0x68, 0x65, 0x64, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x75, 0x75, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x63, 0x68, 0x65, 0x64, 0x55, 0x75, 0x69, + 0x64, 0x22, 0x23, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x50, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, + 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x98, 0x01, 0x0a, 0x20, 0x53, 0x64, 0x6b, - 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x55, 0x0a, - 0x10, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x66, - 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, - 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x53, 0x63, 0x68, 0x65, 0x64, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x75, 0x75, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x63, 0x68, 0x65, 0x64, 0x55, - 0x75, 0x69, 0x64, 0x22, 0x23, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x50, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x43, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x23, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, - 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x23, 0x0a, 0x21, 0x53, 0x64, - 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, - 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x25, 0x0a, 0x23, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x8b, 0x02, 0x0a, 0x24, 0x53, 0x64, 0x6b, 0x43, 0x6c, - 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x45, 0x6e, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x0a, + 0x23, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x8b, 0x02, 0x0a, 0x24, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, + 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x73, 0x0a, + 0x10, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x73, + 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, + 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x45, 0x6e, 0x75, + 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x53, 0x63, 0x68, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x0e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x53, 0x63, 0x68, 0x65, 0x64, 0x4c, 0x69, + 0x73, 0x74, 0x1a, 0x6e, 0x0a, 0x13, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x41, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, + 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0x5d, 0x0a, 0x19, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, + 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, + 0x64, 0x22, 0xdd, 0x01, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, + 0x73, 0x69, 0x7a, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x64, 0x6f, + 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x12, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x64, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x41, + 0x0a, 0x1d, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1a, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x22, 0x39, 0x0a, 0x07, 0x53, 0x64, 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x70, 0x69, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x61, 0x70, 0x69, 0x73, 0x22, 0x4d, 0x0a, 0x07, + 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x72, + 0x75, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, + 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x44, 0x0a, 0x14, 0x53, + 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, + 0x65, 0x22, 0x45, 0x0a, 0x15, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x72, 0x6f, + 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x6f, + 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x19, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x52, + 0x6f, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x22, 0x30, 0x0a, 0x18, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x73, 0x0a, 0x10, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x6c, - 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x45, - 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x53, 0x63, 0x68, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x53, 0x63, 0x68, 0x65, 0x64, - 0x4c, 0x69, 0x73, 0x74, 0x1a, 0x6e, 0x0a, 0x13, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x53, 0x63, 0x68, - 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x41, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, - 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5d, 0x0a, 0x19, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x12, 0x23, - 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x49, 0x64, 0x22, 0xdd, 0x01, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, - 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x44, 0x6f, 0x77, 0x6e, 0x6c, - 0x6f, 0x61, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x70, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, 0x63, 0x6f, 0x6d, 0x70, 0x72, - 0x65, 0x73, 0x73, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, - 0x12, 0x41, 0x0a, 0x1d, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1a, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x22, 0x39, 0x0a, 0x07, 0x53, 0x64, 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x70, - 0x69, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x61, 0x70, 0x69, 0x73, 0x22, 0x4d, - 0x0a, 0x07, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, - 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x44, 0x0a, - 0x14, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, - 0x6f, 0x6c, 0x65, 0x22, 0x45, 0x0a, 0x15, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, + 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x2b, 0x0a, 0x15, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, + 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x22, 0x46, 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x73, + 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x19, 0x0a, 0x17, 0x53, 0x64, - 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x30, 0x0a, 0x18, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, - 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x2b, 0x0a, 0x15, 0x53, 0x64, 0x6b, 0x52, 0x6f, - 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x46, 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x49, - 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, + 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x53, 0x64, + 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, + 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x44, 0x0a, 0x14, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x52, + 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x45, 0x0a, 0x15, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x2a, 0x0a, 0x14, - 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x53, 0x64, 0x6b, 0x52, - 0x6f, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x44, 0x0a, 0x14, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x72, 0x6f, 0x6c, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, - 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x45, 0x0a, 0x15, 0x53, 0x64, 0x6b, 0x52, 0x6f, - 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2c, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0xc4, - 0x01, 0x0a, 0x0e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, - 0x6d, 0x22, 0xb1, 0x01, 0x0a, 0x14, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x53, - 0x5f, 0x54, 0x52, 0x49, 0x4d, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, - 0x17, 0x0a, 0x13, 0x46, 0x53, 0x5f, 0x54, 0x52, 0x49, 0x4d, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x52, - 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x53, 0x5f, 0x54, - 0x52, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x16, 0x0a, - 0x12, 0x46, 0x53, 0x5f, 0x54, 0x52, 0x49, 0x4d, 0x5f, 0x49, 0x4e, 0x50, 0x52, 0x4f, 0x47, 0x52, - 0x45, 0x53, 0x53, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x53, 0x5f, 0x54, 0x52, 0x49, 0x4d, - 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x46, 0x53, - 0x5f, 0x54, 0x52, 0x49, 0x4d, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, - 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x46, 0x53, 0x5f, 0x54, 0x52, 0x49, 0x4d, 0x5f, 0x46, 0x41, 0x49, - 0x4c, 0x45, 0x44, 0x10, 0x06, 0x22, 0x5b, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x74, - 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x61, - 0x74, 0x68, 0x22, 0x88, 0x01, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x5c, 0x0a, - 0x1e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, - 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, 0x89, 0x01, 0x0a, 0x1f, - 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, - 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x4c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x34, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, 0x6d, - 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x41, 0x75, - 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x8b, 0x02, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, - 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0b, 0x74, 0x72, 0x69, 0x6d, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x74, 0x72, 0x69, 0x6d, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x73, - 0x0a, 0x0f, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, - 0x72, 0x69, 0x6d, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, - 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0x1b, 0x0a, 0x19, 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, - 0x54, 0x72, 0x69, 0x6d, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0xe6, 0x01, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, - 0x69, 0x6d, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x4c, 0x0a, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x55, 0x73, - 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x55, 0x73, 0x61, 0x67, - 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x60, 0x0a, 0x0a, 0x55, 0x73, 0x61, 0x67, 0x65, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5a, 0x0a, 0x1c, 0x53, 0x64, 0x6b, - 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, - 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, 0x68, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x55, 0x73, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0d, 0x76, 0x6f, 0x6c, 0x5f, 0x75, 0x74, 0x69, 0x6c, 0x5f, - 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x55, 0x73, 0x65, 0x64, 0x42, 0x79, 0x4e, 0x6f, - 0x64, 0x65, 0x52, 0x0b, 0x76, 0x6f, 0x6c, 0x55, 0x74, 0x69, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x22, - 0x46, 0x0a, 0x19, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x42, 0x79, 0x74, 0x65, - 0x73, 0x55, 0x73, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, - 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, - 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x04, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x1f, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x46, 0x69, - 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x6f, 0x70, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x0a, 0x18, 0x53, 0x64, 0x6b, 0x41, - 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x71, + 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0xc4, 0x01, 0x0a, + 0x0e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x22, + 0xb1, 0x01, 0x0a, 0x14, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, + 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x53, 0x5f, 0x54, + 0x52, 0x49, 0x4d, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x17, 0x0a, + 0x13, 0x46, 0x53, 0x5f, 0x54, 0x52, 0x49, 0x4d, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x52, 0x55, 0x4e, + 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x53, 0x5f, 0x54, 0x52, 0x49, + 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x46, + 0x53, 0x5f, 0x54, 0x52, 0x49, 0x4d, 0x5f, 0x49, 0x4e, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, + 0x53, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x53, 0x5f, 0x54, 0x52, 0x49, 0x4d, 0x5f, 0x53, + 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x46, 0x53, 0x5f, 0x54, + 0x52, 0x49, 0x4d, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, 0x12, + 0x12, 0x0a, 0x0e, 0x46, 0x53, 0x5f, 0x54, 0x52, 0x49, 0x4d, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, + 0x44, 0x10, 0x06, 0x22, 0x5b, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, - 0x64, 0x22, 0x35, 0x0a, 0x19, 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, - 0x69, 0x6d, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x36, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x41, - 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x50, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, - 0x22, 0x34, 0x0a, 0x18, 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, - 0x6d, 0x50, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x61, 0x74, 0x68, + 0x22, 0x88, 0x01, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x54, 0x72, 0x69, 0x6d, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, + 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x5c, 0x0a, 0x1e, 0x53, + 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, 0x6d, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, + 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, 0x89, 0x01, 0x0a, 0x1f, 0x53, 0x64, + 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x2e, 0x46, + 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, + 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x22, 0x8b, 0x02, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x46, + 0x53, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0b, 0x74, 0x72, 0x69, 0x6d, 0x5f, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x75, + 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x74, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x73, 0x0a, 0x0f, + 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x34, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, + 0x6d, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, 0x6d, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x1b, 0x0a, 0x19, 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, + 0x69, 0x6d, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xe6, + 0x01, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, + 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, + 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x55, 0x73, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x60, 0x0a, 0x0a, 0x55, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5a, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x46, 0x69, + 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x6f, 0x70, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x70, 0x61, + 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x50, + 0x61, 0x74, 0x68, 0x22, 0x68, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x42, 0x79, 0x74, 0x65, 0x73, 0x55, 0x73, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x4a, 0x0a, 0x0d, 0x76, 0x6f, 0x6c, 0x5f, 0x75, 0x74, 0x69, 0x6c, 0x5f, 0x69, 0x6e, + 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x55, 0x73, 0x65, 0x64, 0x42, 0x79, 0x4e, 0x6f, 0x64, 0x65, + 0x52, 0x0b, 0x76, 0x6f, 0x6c, 0x55, 0x74, 0x69, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x46, 0x0a, + 0x19, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x55, + 0x73, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, + 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x04, + 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x1f, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x0a, 0x18, 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, + 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x22, + 0x35, 0x0a, 0x19, 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, + 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xcd, 0x01, 0x0a, 0x0f, 0x46, 0x69, 0x6c, 0x65, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x22, 0xb9, 0x01, 0x0a, 0x15, 0x46, - 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x53, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, - 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x46, 0x53, - 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, - 0x4e, 0x47, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x53, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, - 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x46, 0x53, - 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, - 0x53, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x53, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, - 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x53, 0x5f, - 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, - 0x05, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x53, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x46, 0x41, - 0x49, 0x4c, 0x45, 0x44, 0x10, 0x06, 0x22, 0x4b, 0x0a, 0x17, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x6e, 0x61, 0x70, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x30, 0x0a, 0x14, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x73, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x12, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x22, 0xab, 0x01, 0x0a, 0x16, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x56, 0x6f, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1f, - 0x0a, 0x0b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x4c, 0x0a, 0x0d, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x36, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, + 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x50, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x22, 0x34, + 0x0a, 0x18, 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x50, + 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x22, 0xcd, 0x01, 0x0a, 0x0f, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x22, 0xb9, 0x01, 0x0a, 0x15, 0x46, 0x69, 0x6c, + 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x53, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x46, 0x53, 0x5f, 0x43, + 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, + 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x53, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x53, + 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x46, 0x53, 0x5f, 0x43, + 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, + 0x03, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x53, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x53, 0x54, + 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x53, 0x5f, 0x43, 0x48, + 0x45, 0x43, 0x4b, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, 0x12, + 0x13, 0x0a, 0x0f, 0x46, 0x53, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x46, 0x41, 0x49, 0x4c, + 0x45, 0x44, 0x10, 0x06, 0x22, 0x4b, 0x0a, 0x17, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x6e, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x30, 0x0a, 0x14, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0xab, 0x01, 0x0a, 0x16, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x56, 0x6f, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1f, 0x0a, 0x0b, + 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a, + 0x0d, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0c, 0x68, + 0x65, 0x61, 0x6c, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x66, + 0x73, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x66, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x73, 0x67, 0x22, + 0x51, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, + 0x64, 0x65, 0x22, 0x8b, 0x01, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x0c, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, 0x0a, - 0x0d, 0x66, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x73, - 0x67, 0x22, 0x51, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x3e, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x8b, 0x01, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0x3e, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x49, 0x64, 0x22, 0xee, 0x01, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4c, 0x0a, 0x0d, 0x68, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x48, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0c, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x22, 0x3c, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, - 0x64, 0x22, 0x20, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x5e, 0x0a, 0x26, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, - 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, - 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, - 0x65, 0x49, 0x64, 0x22, 0xf8, 0x01, 0x0a, 0x27, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x65, 0x0a, 0x09, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, + 0x22, 0xee, 0x01, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4c, 0x0a, 0x0d, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, + 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0c, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x3c, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x22, + 0x20, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x5e, 0x0a, 0x26, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x73, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x1a, 0x66, 0x0a, 0x0e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3e, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x65, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x6e, 0x61, 0x70, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x60, - 0x0a, 0x28, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, + 0x68, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, + 0x64, 0x22, 0xf8, 0x01, 0x0a, 0x27, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, + 0x09, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x47, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x73, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x73, 0x1a, 0x66, 0x0a, 0x0e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x6e, 0x61, 0x70, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x60, 0x0a, 0x28, + 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x22, 0x2b, + 0x0a, 0x29, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, - 0x22, 0x2b, 0x0a, 0x29, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x0a, - 0x24, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, + 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x0a, 0x24, 0x53, + 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x22, 0xeb, 0x01, 0x0a, + 0x25, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x22, 0xeb, - 0x01, 0x0a, 0x25, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, - 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x69, - 0x73, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, - 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x1a, 0x63, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x56, 0x6f, 0x6c, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x20, 0x0a, 0x1e, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, + 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x76, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x1a, 0x63, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x56, 0x6f, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x20, 0x0a, 0x1e, 0x53, 0x64, + 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6c, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x70, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6c, - 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x70, - 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0c, - 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x1b, 0x0a, 0x19, - 0x53, 0x64, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x95, 0x01, 0x0a, 0x1a, 0x53, 0x64, - 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x73, 0x64, 0x6b, 0x5f, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x73, 0x64, 0x6b, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x22, 0xbe, 0x03, 0x0a, 0x14, 0x53, 0x64, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x54, 0x0a, 0x07, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, - 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x48, 0x00, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x1a, 0xc7, 0x02, 0x0a, 0x12, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x49, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x4f, 0x70, 0x65, - 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xdd, 0x01, 0x0a, 0x04, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, - 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x10, 0x01, 0x12, 0x10, 0x0a, - 0x0c, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x10, 0x02, 0x12, - 0x0f, 0x0a, 0x0b, 0x43, 0x52, 0x45, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x41, 0x4c, 0x53, 0x10, 0x03, - 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x4f, 0x42, - 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x10, 0x05, 0x12, 0x13, - 0x0a, 0x0f, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, - 0x59, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x10, 0x07, 0x12, - 0x0a, 0x0a, 0x06, 0x41, 0x4c, 0x45, 0x52, 0x54, 0x53, 0x10, 0x08, 0x12, 0x10, 0x0a, 0x0c, 0x4d, - 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x41, 0x54, 0x54, 0x41, 0x43, 0x48, 0x10, 0x09, 0x12, 0x08, 0x0a, - 0x04, 0x52, 0x4f, 0x4c, 0x45, 0x10, 0x0a, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x4c, 0x55, 0x53, 0x54, - 0x45, 0x52, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x10, 0x0b, 0x12, 0x0b, 0x0a, 0x07, 0x4d, 0x49, 0x47, - 0x52, 0x41, 0x54, 0x45, 0x10, 0x0c, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, - 0x45, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x10, 0x0d, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x22, 0xb3, 0x01, 0x0a, 0x0a, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x14, 0x0a, - 0x05, 0x70, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x61, - 0x74, 0x63, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x49, 0x0a, - 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x4d, 0x55, 0x53, 0x54, - 0x5f, 0x48, 0x41, 0x56, 0x45, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, - 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x61, 0x6a, 0x6f, 0x72, 0x10, 0x00, 0x12, 0x0a, 0x0a, - 0x05, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x10, 0xb0, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x61, 0x74, - 0x63, 0x68, 0x10, 0x00, 0x1a, 0x02, 0x10, 0x01, 0x22, 0xc6, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x64, - 0x72, 0x69, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x72, 0x69, - 0x76, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x0a, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2e, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0xb1, 0x02, 0x0a, 0x0c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, - 0x74, 0x65, 0x22, 0x5f, 0x0a, 0x0d, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x54, 0x79, - 0x70, 0x65, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x69, 0x67, 0x72, - 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x4d, - 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x10, 0x03, 0x22, 0x4e, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x0c, - 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x53, 0x74, 0x61, 0x67, 0x65, 0x10, 0x00, 0x12, 0x0a, - 0x0a, 0x06, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x65, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x6f, 0x6e, - 0x65, 0x10, 0x04, 0x22, 0x70, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x11, 0x0a, - 0x0d, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, 0x00, - 0x12, 0x0a, 0x0a, 0x06, 0x51, 0x75, 0x65, 0x75, 0x65, 0x64, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, - 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x10, 0x02, 0x12, 0x0e, 0x0a, - 0x0a, 0x49, 0x6e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x10, 0x03, 0x12, 0x0a, 0x0a, - 0x06, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x6f, 0x6d, - 0x70, 0x6c, 0x65, 0x74, 0x65, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x61, 0x6e, 0x63, 0x65, - 0x6c, 0x65, 0x64, 0x10, 0x06, 0x22, 0xba, 0x01, 0x0a, 0x18, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, - 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x49, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, - 0x72, 0x61, 0x74, 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, - 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, - 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, - 0x49, 0x64, 0x22, 0xf2, 0x03, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, - 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x55, 0x0a, 0x06, 0x76, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x6f, 0x70, + 0x63, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0c, 0x63, 0x61, + 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x1b, 0x0a, 0x19, 0x53, 0x64, + 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x95, 0x01, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x73, 0x64, 0x6b, 0x5f, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, - 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, - 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x12, 0x65, 0x0a, 0x0c, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x18, 0xc9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, + 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x73, 0x64, 0x6b, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, + 0xbe, 0x03, 0x0a, 0x14, 0x53, 0x64, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x61, + 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x54, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, + 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x48, 0x00, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, 0xc7, + 0x02, 0x0a, 0x12, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x3d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xdd, 0x01, 0x0a, 0x04, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, + 0x0a, 0x07, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x43, + 0x4c, 0x4f, 0x55, 0x44, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x10, 0x02, 0x12, 0x0f, 0x0a, + 0x0b, 0x43, 0x52, 0x45, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x41, 0x4c, 0x53, 0x10, 0x03, 0x12, 0x08, + 0x0a, 0x04, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x4f, 0x42, 0x4a, 0x45, + 0x43, 0x54, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x10, 0x05, 0x12, 0x13, 0x0a, 0x0f, + 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x10, + 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x10, 0x07, 0x12, 0x0a, 0x0a, + 0x06, 0x41, 0x4c, 0x45, 0x52, 0x54, 0x53, 0x10, 0x08, 0x12, 0x10, 0x0a, 0x0c, 0x4d, 0x4f, 0x55, + 0x4e, 0x54, 0x5f, 0x41, 0x54, 0x54, 0x41, 0x43, 0x48, 0x10, 0x09, 0x12, 0x08, 0x0a, 0x04, 0x52, + 0x4f, 0x4c, 0x45, 0x10, 0x0a, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, + 0x5f, 0x50, 0x41, 0x49, 0x52, 0x10, 0x0b, 0x12, 0x0b, 0x0a, 0x07, 0x4d, 0x49, 0x47, 0x52, 0x41, + 0x54, 0x45, 0x10, 0x0c, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, + 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x10, 0x0d, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x22, 0xb3, 0x01, 0x0a, 0x0a, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x14, 0x0a, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x70, + 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x61, 0x74, 0x63, + 0x68, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x49, 0x0a, 0x07, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x4d, 0x55, 0x53, 0x54, 0x5f, 0x48, + 0x41, 0x56, 0x45, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x00, + 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x61, 0x6a, 0x6f, 0x72, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x05, 0x4d, + 0x69, 0x6e, 0x6f, 0x72, 0x10, 0xb6, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x61, 0x74, 0x63, 0x68, + 0x10, 0x00, 0x1a, 0x02, 0x10, 0x01, 0x22, 0xc6, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x72, 0x69, + 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, + 0x72, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x0a, 0x07, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0xb1, 0x02, 0x0a, 0x0c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, + 0x22, 0x5f, 0x0a, 0x0d, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x54, 0x79, 0x70, 0x65, + 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, + 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x4d, 0x69, 0x67, + 0x72, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x10, + 0x03, 0x22, 0x4e, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x6e, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x53, 0x74, 0x61, 0x67, 0x65, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x6f, 0x6e, 0x65, 0x10, + 0x04, 0x22, 0x70, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x11, 0x0a, 0x0d, 0x49, + 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, 0x00, 0x12, 0x0a, + 0x0a, 0x06, 0x51, 0x75, 0x65, 0x75, 0x65, 0x64, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x6e, + 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x49, + 0x6e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x46, + 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x74, 0x65, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, + 0x64, 0x10, 0x06, 0x22, 0xba, 0x01, 0x0a, 0x18, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, + 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x49, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, + 0x74, 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, + 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, + 0x22, 0xf2, 0x03, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, + 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x55, 0x0a, 0x06, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, + 0x65, 0x0a, 0x0c, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, + 0xc9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, + 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x48, 0x00, 0x52, 0x0b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x62, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x5f, 0x76, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0xca, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x69, 0x67, 0x72, 0x61, + 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0a, + 0x61, 0x6c, 0x6c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x1a, 0x2c, 0x0a, 0x0d, 0x4d, 0x69, + 0x67, 0x72, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x1a, 0x2f, 0x0a, 0x12, 0x4d, 0x69, 0x67, 0x72, + 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x19, + 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x1a, 0x13, 0x0a, 0x11, 0x4d, 0x69, 0x67, + 0x72, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x42, 0x05, + 0x0a, 0x03, 0x6f, 0x70, 0x74, 0x22, 0x34, 0x0a, 0x19, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, + 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0x62, 0x0a, 0x1c, 0x53, + 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x48, 0x00, 0x52, 0x0b, 0x76, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x62, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x5f, - 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0xca, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x69, 0x67, - 0x72, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x48, 0x00, - 0x52, 0x0a, 0x61, 0x6c, 0x6c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x1a, 0x2c, 0x0a, 0x0d, - 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x1b, 0x0a, - 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x1a, 0x2f, 0x0a, 0x12, 0x4d, 0x69, - 0x67, 0x72, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x1a, 0x13, 0x0a, 0x11, 0x4d, - 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, - 0x42, 0x05, 0x0a, 0x03, 0x6f, 0x70, 0x74, 0x22, 0x34, 0x0a, 0x19, 0x43, 0x6c, 0x6f, 0x75, 0x64, - 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0x62, 0x0a, - 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, - 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x34, 0x0a, 0x19, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, - 0x65, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, - 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0x64, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x6c, - 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, + 0x34, 0x0a, 0x19, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, + 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, + 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, + 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0x64, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, + 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, + 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x1f, 0x0a, 0x1d, 0x53, + 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, 0x61, + 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb6, 0x05, 0x0a, + 0x10, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, + 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, + 0x10, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x12, 0x48, + 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x67, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, + 0x72, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, - 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x1f, 0x0a, - 0x1d, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, - 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb6, - 0x05, 0x0a, 0x10, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x76, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, - 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x28, 0x0a, 0x10, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, - 0x12, 0x48, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x67, - 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, - 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x0c, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x6f, - 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, - 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, - 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, - 0x5f, 0x64, 0x6f, 0x6e, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x44, 0x6f, 0x6e, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x74, 0x61, 0x5f, 0x73, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x65, 0x74, 0x61, - 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0x4d, 0x0a, 0x14, 0x43, 0x6c, 0x6f, 0x75, 0x64, - 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x35, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x64, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, - 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, - 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x53, 0x0a, 0x19, - 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, - 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, - 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, - 0x64, 0x22, 0xc7, 0x01, 0x0a, 0x1a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, - 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x49, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x49, 0x6e, 0x66, 0x6f, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x1a, 0x5e, 0x0a, 0x09, 0x49, - 0x6e, 0x66, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x6f, 0x75, - 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x64, 0x0a, 0x1d, 0x53, - 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x72, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x64, + 0x6f, 0x6e, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x44, 0x6f, 0x6e, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x74, 0x61, 0x5f, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x65, 0x74, 0x61, 0x53, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0x4d, 0x0a, 0x14, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, + 0x67, 0x72, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x35, 0x0a, + 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, + 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, + 0x6c, 0x69, 0x73, 0x74, 0x22, 0x64, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, + 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, + 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x53, 0x0a, 0x19, 0x43, 0x6c, + 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, + 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x22, + 0xc7, 0x01, 0x0a, 0x1a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, + 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x52, 0x0a, 0x0f, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, - 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x3f, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, - 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x69, 0x73, - 0x61, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x10, 0x01, 0x12, - 0x14, 0x0a, 0x10, 0x4f, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x10, 0x02, 0x22, 0xa9, 0x02, 0x0a, 0x18, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x50, 0x61, 0x69, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x70, 0x12, 0x2e, - 0x0a, 0x13, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x72, 0x65, 0x6d, - 0x6f, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x30, - 0x0a, 0x14, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x12, 0x39, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x4d, 0x6f, 0x64, - 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, - 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, - 0x64, 0x22, 0x77, 0x0a, 0x19, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, - 0x0a, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x62, 0x0a, 0x1b, 0x53, 0x64, - 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x07, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x62, - 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, - 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x22, 0xd9, 0x01, 0x0a, 0x19, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, - 0x69, 0x72, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x1a, 0x5e, 0x0a, 0x09, 0x49, 0x6e, 0x66, + 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, + 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x64, 0x0a, 0x1d, 0x53, 0x64, 0x6b, + 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x6f, + 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, + 0x52, 0x0a, 0x0f, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x4d, 0x6f, + 0x64, 0x65, 0x22, 0x3f, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x69, 0x73, 0x61, 0x73, + 0x74, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x10, 0x01, 0x12, 0x14, 0x0a, + 0x10, 0x4f, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x10, 0x02, 0x22, 0xa9, 0x02, 0x0a, 0x18, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, + 0x61, 0x69, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x5f, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x70, 0x12, 0x2e, 0x0a, 0x13, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, + 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x72, 0x65, 0x6d, 0x6f, - 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x39, - 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x72, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1f, + 0x0a, 0x0b, 0x73, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, + 0x39, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x2e, + 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x22, + 0x77, 0x0a, 0x19, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x11, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x62, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x62, 0x0a, 0x1c, + 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x2e, 0x4d, - 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x22, 0xc2, - 0x02, 0x0a, 0x1a, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x50, 0x72, - 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, - 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x65, 0x6d, - 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x18, 0x72, 0x65, 0x6d, - 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x65, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x72, 0x65, 0x6d, - 0x6f, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x73, 0x12, 0x52, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x22, 0xd9, 0x01, 0x0a, 0x19, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, + 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, + 0x0a, 0x11, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x39, 0x0a, 0x04, + 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x2e, 0x4d, 0x6f, 0x64, + 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x22, 0xc2, 0x02, 0x0a, + 0x1a, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x50, 0x72, 0x6f, 0x63, + 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x72, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x18, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x73, 0x12, 0x52, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, + 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x3c, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, + 0x61, 0x69, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x22, + 0x1e, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, + 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x33, 0x0a, 0x1b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x1f, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x66, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x50, 0x61, 0x69, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x21, 0x0a, + 0x1f, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x52, + 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x68, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, + 0x69, 0x72, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, - 0x69, 0x72, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0x3c, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x50, 0x61, 0x69, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, - 0x64, 0x22, 0x1e, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, - 0x61, 0x69, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x33, 0x0a, 0x1b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x1f, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x66, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, - 0x21, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, - 0x72, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x68, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x69, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xec, 0x02, 0x0a, 0x0f, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x2b, + 0x0a, 0x11, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x65, 0x63, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x65, 0x63, + 0x75, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x47, 0x0a, 0x07, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x39, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x4d, 0x6f, + 0x64, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x1a, 0x3a, 0x0a, + 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2e, 0x0a, 0x1c, 0x53, 0x64, 0x6b, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x49, 0x6e, 0x73, 0x70, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x57, 0x0a, 0x16, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x09, 0x70, 0x61, 0x69, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x50, 0x61, 0x69, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xec, 0x02, 0x0a, - 0x0f, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, - 0x06, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x47, 0x0a, 0x07, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x39, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, - 0x4d, 0x6f, 0x64, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x1a, - 0x3a, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2e, 0x0a, 0x1c, 0x53, - 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x49, 0x6e, 0x73, - 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x57, 0x0a, 0x16, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x09, 0x70, 0x61, 0x69, 0x72, 0x5f, 0x69, 0x6e, - 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x70, 0x61, 0x69, 0x72, - 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x60, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, - 0x61, 0x69, 0x72, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x20, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xeb, 0x01, 0x0a, 0x1d, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4f, 0x0a, 0x05, 0x70, 0x61, 0x69, - 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x50, 0x61, 0x69, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x70, 0x61, 0x69, 0x72, 0x49, 0x6e, + 0x66, 0x6f, 0x22, 0x60, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x50, 0x61, 0x69, 0x72, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, + 0x72, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x22, 0x20, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xeb, 0x01, 0x0a, 0x1d, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x05, 0x70, 0x61, 0x69, 0x72, 0x73, 0x1a, 0x5a, 0x0a, 0x0a, 0x50, 0x61, - 0x69, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x69, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0xcf, 0x01, 0x0a, 0x07, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3e, 0x0a, - 0x0c, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0c, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x34, 0x0a, - 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, - 0x72, 0x65, 0x6e, 0x22, 0x40, 0x0a, 0x06, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x20, 0x0a, - 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x66, 0x69, 0x6c, 0x65, 0x73, 0x22, 0x70, 0x0a, 0x0f, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, - 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, - 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x9c, 0x02, 0x0a, 0x0e, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x63, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, - 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, - 0x4c, 0x0a, 0x09, 0x64, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x69, 0x64, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x09, 0x64, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x69, 0x64, 0x73, 0x1a, 0x39, 0x0a, - 0x0b, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x44, 0x6f, 0x63, 0x6b, - 0x65, 0x72, 0x69, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x4f, 0x0a, 0x05, 0x70, 0x61, 0x69, 0x72, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x50, 0x61, 0x69, 0x72, 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x05, 0x70, 0x61, 0x69, 0x72, 0x73, 0x1a, 0x5a, 0x0a, 0x0a, 0x50, 0x61, 0x69, 0x72, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x50, 0x61, 0x69, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x69, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x50, 0x61, 0x69, 0x72, 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, + 0xcf, 0x01, 0x0a, 0x07, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3e, 0x0a, 0x0c, 0x4c, + 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x4c, + 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x34, 0x0a, 0x08, 0x63, + 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, + 0x6e, 0x22, 0x40, 0x0a, 0x06, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x14, 0x0a, + 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x22, 0x70, 0x0a, 0x0f, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x04, + 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x06, 0x72, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x9c, 0x02, 0x0a, 0x0e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x4c, 0x0a, + 0x09, 0x64, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x44, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x69, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x09, 0x64, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x69, 0x64, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4d, + 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xed, 0x02, 0x0a, 0x17, 0x56, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, - 0x67, 0x79, 0x12, 0x50, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x61, 0x66, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, - 0x70, 0x65, 0x63, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x41, 0x66, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x79, 0x12, 0x59, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, - 0x61, 0x6e, 0x74, 0x69, 0x5f, 0x61, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x50, 0x6c, 0x61, - 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x13, 0x72, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x41, 0x6e, 0x74, 0x69, 0x41, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x12, - 0x4d, 0x0a, 0x0f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x61, 0x66, 0x66, 0x69, 0x6e, 0x69, - 0x74, 0x79, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0e, - 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x12, 0x56, - 0x0a, 0x14, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x61, 0x6e, 0x74, 0x69, 0x5f, 0x61, 0x66, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x70, - 0x65, 0x63, 0x52, 0x12, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x6e, 0x74, 0x69, 0x41, 0x66, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x22, 0x9a, 0x02, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, - 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x65, 0x6e, 0x66, 0x6f, 0x72, - 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, - 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, - 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x61, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x70, 0x6f, - 0x6c, 0x6f, 0x67, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x4b, 0x65, 0x79, 0x12, 0x56, 0x0a, 0x11, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x10, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0xec, 0x01, 0x0a, 0x13, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x50, 0x6c, - 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x77, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x77, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x6e, 0x66, 0x6f, 0x72, - 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x65, 0x6e, 0x66, 0x6f, - 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x70, 0x6f, 0x6c, - 0x6f, 0x67, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, - 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x4b, 0x65, 0x79, 0x12, 0x56, 0x0a, 0x11, 0x6d, 0x61, - 0x74, 0x63, 0x68, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x10, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x22, 0xe1, 0x01, 0x0a, 0x18, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x4e, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x44, 0x6f, 0x63, 0x6b, 0x65, 0x72, + 0x69, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0xed, 0x02, 0x0a, 0x17, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x50, + 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, + 0x12, 0x50, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x61, 0x66, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, + 0x63, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x41, 0x66, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x79, 0x12, 0x59, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x61, 0x6e, + 0x74, 0x69, 0x5f, 0x61, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x50, 0x6c, 0x61, 0x63, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x13, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x41, 0x6e, 0x74, 0x69, 0x41, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x12, 0x4d, 0x0a, + 0x0f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x61, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x50, + 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0e, 0x76, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x12, 0x56, 0x0a, 0x14, + 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x61, 0x6e, 0x74, 0x69, 0x5f, 0x61, 0x66, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, + 0x52, 0x12, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x6e, 0x74, 0x69, 0x41, 0x66, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x79, 0x22, 0x9a, 0x02, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x16, 0x0a, + 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x77, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x6e, 0x66, + 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x65, 0x6e, + 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x66, 0x66, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, + 0x67, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x6f, + 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x4b, 0x65, 0x79, 0x12, 0x56, 0x0a, 0x11, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x10, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x22, 0xec, 0x01, 0x0a, 0x13, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x50, 0x6c, 0x61, 0x63, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, + 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x6f, 0x70, + 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x4b, 0x65, 0x79, 0x12, 0x56, 0x0a, 0x11, 0x6d, 0x61, 0x74, 0x63, + 0x68, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x4b, 0x0a, 0x08, 0x4f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x06, 0x0a, 0x02, 0x49, 0x6e, 0x10, 0x00, 0x12, 0x09, 0x0a, - 0x05, 0x4e, 0x6f, 0x74, 0x49, 0x6e, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x78, 0x69, 0x73, - 0x74, 0x73, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x6f, 0x65, 0x73, 0x4e, 0x6f, 0x74, 0x45, - 0x78, 0x69, 0x73, 0x74, 0x10, 0x03, 0x12, 0x06, 0x0a, 0x02, 0x47, 0x74, 0x10, 0x04, 0x12, 0x06, - 0x0a, 0x02, 0x4c, 0x74, 0x10, 0x05, 0x22, 0x37, 0x0a, 0x19, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x56, 0x6f, 0x6c, 0x53, 0x6e, 0x61, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x22, - 0x31, 0x0a, 0x17, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x56, 0x6f, 0x6c, 0x53, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x22, 0xa3, 0x0f, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x19, 0x0a, 0x08, 0x68, 0x61, 0x5f, 0x6c, - 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x68, 0x61, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x12, 0x2a, 0x0a, 0x03, 0x63, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x03, 0x63, 0x6f, 0x73, 0x12, - 0x39, 0x0a, 0x0a, 0x69, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, - 0x09, 0x69, 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x3d, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, - 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x53, 0x65, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x10, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x12, 0x57, 0x0a, 0x11, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x73, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, - 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x56, 0x6f, 0x6c, 0x53, 0x6e, 0x61, 0x73, 0x68, 0x6f, 0x74, - 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x10, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x73, 0x74, - 0x69, 0x63, 0x6b, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, + 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x10, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x22, 0xe1, 0x01, 0x0a, 0x18, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x4e, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, + 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x4b, 0x0a, 0x08, 0x4f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x12, 0x06, 0x0a, 0x02, 0x49, 0x6e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x4e, + 0x6f, 0x74, 0x49, 0x6e, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, + 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x6f, 0x65, 0x73, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, + 0x73, 0x74, 0x10, 0x03, 0x12, 0x06, 0x0a, 0x02, 0x47, 0x74, 0x10, 0x04, 0x12, 0x06, 0x0a, 0x02, + 0x4c, 0x74, 0x10, 0x05, 0x22, 0x37, 0x0a, 0x19, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x56, + 0x6f, 0x6c, 0x53, 0x6e, 0x61, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x22, 0x31, 0x0a, + 0x17, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x56, 0x6f, 0x6c, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x22, 0xa3, 0x0f, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x19, 0x0a, 0x08, 0x68, 0x61, 0x5f, 0x6c, 0x65, 0x76, + 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x68, 0x61, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x12, 0x2a, 0x0a, 0x03, 0x63, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x43, 0x6f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x03, 0x63, 0x6f, 0x73, 0x12, 0x39, 0x0a, + 0x0a, 0x69, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x09, 0x69, + 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x10, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x6e, 0x74, + 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x3d, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x73, 0x68, + 0x61, 0x72, 0x65, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, + 0x73, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, + 0x65, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x61, + 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, + 0x57, 0x0a, 0x11, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x06, 0x73, 0x74, 0x69, 0x63, 0x6b, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x5f, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x12, 0x3f, - 0x0a, 0x07, 0x6a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x42, 0x6f, - 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x6a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x12, - 0x41, 0x0a, 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, - 0x76, 0x34, 0x12, 0x1f, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x74, - 0x68, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x71, 0x75, 0x65, 0x75, 0x65, 0x44, 0x65, - 0x70, 0x74, 0x68, 0x12, 0x43, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x6e, - 0x6f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x69, 0x6f, 0x5f, 0x73, - 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x74, 0x6f, 0x72, 0x65, 0x56, 0x6f, 0x6c, 0x53, 0x6e, 0x61, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x10, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x73, 0x74, 0x69, 0x63, + 0x6b, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, + 0x72, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x06, 0x73, 0x74, 0x69, 0x63, 0x6b, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x65, + 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x12, 0x3f, 0x0a, 0x07, + 0x6a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x49, 0x6f, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x0a, 0x69, 0x6f, 0x53, 0x74, - 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x57, 0x0a, 0x12, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x11, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x50, 0x6c, 0x61, 0x63, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x11, 0x70, 0x6c, - 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, - 0x4f, 0x0a, 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x56, 0x6f, 0x6c, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x52, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x18, 0x13, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, - 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x3c, 0x0a, 0x0b, 0x65, 0x78, - 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0a, 0x65, 0x78, - 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4a, 0x0a, 0x0d, 0x66, 0x70, 0x5f, 0x70, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x42, 0x6f, 0x6f, 0x6c, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x6a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x41, 0x0a, + 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x42, 0x6f, - 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x66, 0x70, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x12, 0x42, 0x0a, 0x0d, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x6f, - 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0c, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x53, 0x0a, 0x16, 0x73, 0x68, 0x61, 0x72, - 0x65, 0x64, 0x76, 0x34, 0x5f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x14, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, - 0x34, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x46, 0x0a, - 0x0b, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x18, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x78, 0x79, - 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x2d, 0x0a, 0x13, 0x69, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x5f, 0x62, 0x6b, 0x75, 0x70, 0x5f, 0x73, 0x72, 0x63, 0x18, 0x19, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x10, 0x69, 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x42, 0x6b, 0x75, - 0x70, 0x53, 0x72, 0x63, 0x12, 0x39, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x73, 0x70, - 0x65, 0x63, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, - 0x53, 0x70, 0x65, 0x63, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, - 0x58, 0x0a, 0x15, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, + 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, + 0x12, 0x1f, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x71, 0x75, 0x65, 0x75, 0x65, 0x44, 0x65, 0x70, 0x74, + 0x68, 0x12, 0x43, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x18, 0x0f, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x6e, 0x6f, 0x64, + 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x69, 0x6f, 0x5f, 0x73, 0x74, 0x72, + 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6f, + 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x0a, 0x69, 0x6f, 0x53, 0x74, 0x72, 0x61, + 0x74, 0x65, 0x67, 0x79, 0x12, 0x57, 0x0a, 0x12, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x11, 0x70, 0x6c, 0x61, 0x63, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x4f, 0x0a, + 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, + 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x56, + 0x6f, 0x6c, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, + 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x38, + 0x0a, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x18, 0x13, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x09, 0x6f, + 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x3c, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x6f, + 0x72, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x6f, + 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4a, 0x0a, 0x0d, 0x66, 0x70, 0x5f, 0x70, 0x72, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x42, 0x6f, 0x6f, 0x6c, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x66, 0x70, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x12, 0x42, 0x0a, 0x0d, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, + 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0c, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x53, 0x0a, 0x16, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, + 0x76, 0x34, 0x5f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x14, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x4d, + 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x0b, 0x70, + 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x42, + 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x12, 0x2d, 0x0a, 0x13, 0x69, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x5f, 0x62, 0x6b, 0x75, 0x70, 0x5f, 0x73, 0x72, 0x63, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x10, 0x69, 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x42, 0x6b, 0x75, 0x70, 0x53, + 0x72, 0x63, 0x12, 0x39, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x73, 0x70, 0x65, 0x63, + 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x58, 0x0a, + 0x15, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x13, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x42, 0x0a, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x65, + 0x64, 0x76, 0x34, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x53, 0x70, 0x65, 0x63, 0x52, 0x13, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x42, 0x0a, 0x0d, 0x73, 0x68, 0x61, - 0x72, 0x65, 0x64, 0x76, 0x34, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x70, 0x65, 0x63, 0x52, - 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x70, 0x65, 0x63, 0x12, 0x46, 0x0a, - 0x0b, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x66, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x18, 0x1d, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x46, - 0x73, 0x74, 0x72, 0x69, 0x6d, 0x12, 0x3c, 0x0a, 0x0b, 0x69, 0x6f, 0x5f, 0x74, 0x68, 0x72, 0x6f, - 0x74, 0x74, 0x6c, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6f, 0x54, - 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x0a, 0x69, 0x6f, 0x54, 0x68, 0x72, 0x6f, 0x74, - 0x74, 0x6c, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x61, 0x68, 0x65, 0x61, 0x64, - 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x72, - 0x65, 0x61, 0x64, 0x61, 0x68, 0x65, 0x61, 0x64, 0x22, 0x60, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x70, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x70, 0x74, 0x68, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, 0x65, 0x70, 0x74, 0x68, 0x22, 0x56, 0x0a, 0x18, 0x53, 0x64, - 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, - 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x63, 0x61, 0x74, 0x61, 0x6c, - 0x6f, 0x67, 0x22, 0xdc, 0x01, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x22, 0xc9, 0x01, 0x0a, 0x14, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, - 0x0a, 0x17, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, - 0x4d, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x1f, 0x0a, 0x1b, 0x56, - 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x5f, 0x4e, - 0x4f, 0x54, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, + 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0c, 0x73, + 0x68, 0x61, 0x72, 0x65, 0x64, 0x76, 0x34, 0x53, 0x70, 0x65, 0x63, 0x12, 0x46, 0x0a, 0x0b, 0x61, + 0x75, 0x74, 0x6f, 0x5f, 0x66, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x42, + 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x46, 0x73, 0x74, + 0x72, 0x69, 0x6d, 0x12, 0x3c, 0x0a, 0x0b, 0x69, 0x6f, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, + 0x6c, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6f, 0x54, 0x68, 0x72, + 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x0a, 0x69, 0x6f, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, + 0x65, 0x12, 0x43, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x61, 0x68, 0x65, 0x61, 0x64, 0x18, 0x1f, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x72, 0x65, 0x61, + 0x64, 0x61, 0x68, 0x65, 0x61, 0x64, 0x22, 0x60, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x70, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x64, 0x65, 0x70, 0x74, 0x68, 0x22, 0x56, 0x0a, 0x18, 0x53, 0x64, 0x6b, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, + 0x22, 0xdc, 0x01, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x73, 0x75, 0x6d, 0x22, 0xc9, 0x01, 0x0a, 0x14, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x17, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x5f, - 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x56, 0x45, 0x52, - 0x49, 0x46, 0x59, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x5f, 0x53, 0x54, 0x4f, - 0x50, 0x50, 0x45, 0x44, 0x10, 0x03, 0x12, 0x1d, 0x0a, 0x19, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, - 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, - 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, - 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, - 0x05, 0x22, 0x3c, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x22, - 0x88, 0x01, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x73, 0x75, 0x6d, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, - 0x75, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x3d, 0x0a, 0x1e, 0x53, 0x64, - 0x6b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, - 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x22, 0x89, 0x01, 0x0a, 0x1f, 0x53, 0x64, - 0x6b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x2e, 0x56, + 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x1f, 0x0a, 0x1b, 0x56, 0x45, 0x52, + 0x49, 0x46, 0x59, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x5f, 0x4e, 0x4f, 0x54, + 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x56, 0x45, + 0x52, 0x49, 0x46, 0x59, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x5f, 0x53, 0x54, + 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x56, 0x45, 0x52, 0x49, 0x46, + 0x59, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, + 0x45, 0x44, 0x10, 0x03, 0x12, 0x1d, 0x0a, 0x19, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, 0x43, + 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, + 0x44, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, 0x43, 0x48, + 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x05, 0x22, + 0x3c, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x73, 0x75, 0x6d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x22, 0x88, 0x01, + 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x73, 0x75, 0x6d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x4c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x34, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, + 0x6d, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x3d, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x3b, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x69, - 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x49, 0x64, 0x22, 0x39, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2a, 0x8a, 0x03, - 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4f, 0x4b, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x4f, 0x46, 0x46, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x03, 0x12, 0x10, 0x0a, - 0x0c, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, - 0x18, 0x0a, 0x14, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, - 0x5f, 0x51, 0x55, 0x4f, 0x52, 0x55, 0x4d, 0x10, 0x05, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x44, 0x45, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, - 0x10, 0x06, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4d, 0x41, 0x49, - 0x4e, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x07, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x44, 0x4f, 0x57, - 0x4e, 0x10, 0x08, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x54, - 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x44, 0x45, 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, 0x10, 0x09, - 0x12, 0x17, 0x0a, 0x13, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x45, 0x45, 0x44, 0x53, - 0x5f, 0x52, 0x45, 0x42, 0x4f, 0x4f, 0x54, 0x10, 0x0a, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x52, 0x45, 0x42, 0x41, - 0x4c, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x0b, 0x12, 0x20, 0x0a, 0x1c, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x44, 0x52, 0x49, 0x56, 0x45, 0x5f, - 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x10, 0x0c, 0x12, 0x23, 0x0a, 0x1f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x5f, 0x51, 0x55, 0x4f, 0x52, 0x55, - 0x4d, 0x5f, 0x4e, 0x4f, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x10, 0x0d, 0x12, 0x1a, - 0x0a, 0x16, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x4f, 0x4f, 0x4c, 0x4d, 0x41, 0x49, - 0x4e, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x0e, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4d, 0x41, 0x58, 0x10, 0x0f, 0x2a, 0x99, 0x01, 0x0a, 0x0a, 0x44, - 0x72, 0x69, 0x76, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x52, 0x49, - 0x56, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, - 0x14, 0x0a, 0x10, 0x44, 0x52, 0x49, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, - 0x49, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x52, 0x49, 0x56, 0x45, 0x52, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, - 0x44, 0x52, 0x49, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, - 0x43, 0x54, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x52, 0x49, 0x56, 0x45, 0x52, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x45, 0x44, 0x10, 0x04, 0x12, - 0x15, 0x0a, 0x11, 0x44, 0x52, 0x49, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x47, - 0x52, 0x41, 0x50, 0x48, 0x10, 0x05, 0x2a, 0xa8, 0x01, 0x0a, 0x06, 0x46, 0x53, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, - 0x45, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, - 0x54, 0x52, 0x46, 0x53, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x53, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x45, 0x58, 0x54, 0x34, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x53, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x46, 0x55, 0x53, 0x45, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x53, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x46, 0x53, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x46, - 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x46, 0x53, 0x10, 0x05, 0x12, 0x0f, 0x0a, 0x0b, - 0x46, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x58, 0x46, 0x53, 0x10, 0x06, 0x12, 0x0f, 0x0a, - 0x0b, 0x46, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x5a, 0x46, 0x53, 0x10, 0x07, 0x12, 0x11, - 0x0a, 0x0d, 0x46, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x58, 0x46, 0x53, 0x76, 0x32, 0x10, - 0x08, 0x2a, 0xab, 0x01, 0x0a, 0x15, 0x47, 0x72, 0x61, 0x70, 0x68, 0x44, 0x72, 0x69, 0x76, 0x65, - 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x47, - 0x52, 0x41, 0x50, 0x48, 0x5f, 0x44, 0x52, 0x49, 0x56, 0x45, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, - 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x25, - 0x0a, 0x21, 0x47, 0x52, 0x41, 0x50, 0x48, 0x5f, 0x44, 0x52, 0x49, 0x56, 0x45, 0x52, 0x5f, 0x43, - 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x22, 0x0a, 0x1e, 0x47, 0x52, 0x41, 0x50, 0x48, 0x5f, 0x44, - 0x52, 0x49, 0x56, 0x45, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x02, 0x12, 0x24, 0x0a, 0x20, 0x47, 0x52, 0x41, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x22, 0x89, 0x01, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x56, + 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x2e, 0x56, 0x65, 0x72, + 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x3b, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, + 0x22, 0x39, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2a, 0x8a, 0x03, 0x0a, 0x06, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x4f, 0x4b, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x4f, 0x46, 0x46, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x18, 0x0a, + 0x14, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x5f, 0x51, + 0x55, 0x4f, 0x52, 0x55, 0x4d, 0x10, 0x05, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x44, 0x45, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x06, + 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4d, 0x41, 0x49, 0x4e, 0x54, + 0x45, 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x07, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, + 0x08, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x54, 0x4f, 0x52, + 0x41, 0x47, 0x45, 0x5f, 0x44, 0x45, 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, 0x10, 0x09, 0x12, 0x17, + 0x0a, 0x13, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x45, 0x45, 0x44, 0x53, 0x5f, 0x52, + 0x45, 0x42, 0x4f, 0x4f, 0x54, 0x10, 0x0a, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x52, 0x45, 0x42, 0x41, 0x4c, 0x41, + 0x4e, 0x43, 0x45, 0x10, 0x0b, 0x12, 0x20, 0x0a, 0x1c, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x44, 0x52, 0x49, 0x56, 0x45, 0x5f, 0x52, 0x45, + 0x50, 0x4c, 0x41, 0x43, 0x45, 0x10, 0x0c, 0x12, 0x23, 0x0a, 0x1f, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x5f, 0x51, 0x55, 0x4f, 0x52, 0x55, 0x4d, 0x5f, + 0x4e, 0x4f, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x10, 0x0d, 0x12, 0x1a, 0x0a, 0x16, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x4f, 0x4f, 0x4c, 0x4d, 0x41, 0x49, 0x4e, 0x54, + 0x45, 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x0e, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x4d, 0x41, 0x58, 0x10, 0x0f, 0x2a, 0x99, 0x01, 0x0a, 0x0a, 0x44, 0x72, 0x69, + 0x76, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x52, 0x49, 0x56, 0x45, + 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x14, 0x0a, + 0x10, 0x44, 0x52, 0x49, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x49, 0x4c, + 0x45, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x52, 0x49, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x52, + 0x49, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, + 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x52, 0x49, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x45, 0x44, 0x10, 0x04, 0x12, 0x15, 0x0a, + 0x11, 0x44, 0x52, 0x49, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x47, 0x52, 0x41, + 0x50, 0x48, 0x10, 0x05, 0x2a, 0xa8, 0x01, 0x0a, 0x06, 0x46, 0x53, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x10, 0x0a, 0x0c, 0x46, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, + 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x54, 0x52, + 0x46, 0x53, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x45, 0x58, 0x54, 0x34, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x53, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x46, 0x55, 0x53, 0x45, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x53, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x46, 0x53, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x53, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x46, 0x53, 0x10, 0x05, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x53, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x58, 0x46, 0x53, 0x10, 0x06, 0x12, 0x0f, 0x0a, 0x0b, 0x46, + 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x5a, 0x46, 0x53, 0x10, 0x07, 0x12, 0x11, 0x0a, 0x0d, + 0x46, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x58, 0x46, 0x53, 0x76, 0x32, 0x10, 0x08, 0x2a, + 0xab, 0x01, 0x0a, 0x15, 0x47, 0x72, 0x61, 0x70, 0x68, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x47, 0x52, 0x41, 0x50, 0x48, 0x5f, 0x44, 0x52, 0x49, 0x56, 0x45, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x03, 0x2a, - 0x74, 0x0a, 0x0c, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x16, 0x0a, 0x12, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x45, 0x56, 0x45, 0x52, - 0x49, 0x54, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x4c, 0x41, 0x52, 0x4d, 0x10, 0x01, - 0x12, 0x19, 0x0a, 0x15, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x53, - 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x54, - 0x49, 0x46, 0x59, 0x10, 0x03, 0x2a, 0xa4, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x18, - 0x0a, 0x14, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x02, - 0x12, 0x19, 0x0a, 0x15, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, 0x52, - 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x52, 0x49, - 0x56, 0x45, 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x4f, 0x4f, 0x4c, 0x10, 0x05, 0x2a, 0x87, 0x01, 0x0a, - 0x0f, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x1a, 0x0a, 0x16, 0x41, 0x4c, 0x45, 0x52, 0x54, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, - 0x41, 0x4c, 0x45, 0x52, 0x54, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x4c, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x25, 0x0a, 0x21, + 0x47, 0x52, 0x41, 0x50, 0x48, 0x5f, 0x44, 0x52, 0x49, 0x56, 0x45, 0x52, 0x5f, 0x43, 0x48, 0x41, + 0x4e, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x01, 0x12, 0x22, 0x0a, 0x1e, 0x47, 0x52, 0x41, 0x50, 0x48, 0x5f, 0x44, 0x52, 0x49, + 0x56, 0x45, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x02, 0x12, 0x24, 0x0a, 0x20, 0x47, 0x52, 0x41, 0x50, 0x48, + 0x5f, 0x44, 0x52, 0x49, 0x56, 0x45, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x74, 0x0a, + 0x0c, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, + 0x12, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, + 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, + 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x4c, 0x41, 0x52, 0x4d, 0x10, 0x01, 0x12, 0x19, + 0x0a, 0x15, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x45, 0x56, + 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, + 0x59, 0x10, 0x03, 0x2a, 0xa4, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, + 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x4f, + 0x4c, 0x55, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x02, 0x12, 0x19, + 0x0a, 0x15, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, 0x52, 0x45, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x52, 0x49, 0x56, 0x45, + 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x50, 0x4f, 0x4f, 0x4c, 0x10, 0x05, 0x2a, 0x87, 0x01, 0x0a, 0x0f, 0x41, + 0x6c, 0x65, 0x72, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, + 0x0a, 0x16, 0x41, 0x4c, 0x45, 0x52, 0x54, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x4c, 0x45, 0x52, 0x54, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x4c, 0x45, 0x52, - 0x54, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x50, - 0x44, 0x41, 0x54, 0x45, 0x10, 0x03, 0x2a, 0x6a, 0x0a, 0x11, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x1c, 0x0a, 0x18, 0x56, - 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x52, - 0x41, 0x4d, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x56, 0x4f, 0x4c, + 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x4c, 0x45, 0x52, + 0x54, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x52, + 0x45, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x4c, 0x45, 0x52, 0x54, 0x5f, + 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, + 0x54, 0x45, 0x10, 0x03, 0x2a, 0x6a, 0x0a, 0x11, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x1c, 0x0a, 0x18, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, - 0x5f, 0x4f, 0x46, 0x46, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, - 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x5f, 0x4f, 0x4e, - 0x10, 0x02, 0x2a, 0x32, 0x0a, 0x07, 0x43, 0x6f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, - 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x4f, 0x57, 0x10, 0x01, - 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, - 0x48, 0x49, 0x47, 0x48, 0x10, 0x03, 0x2a, 0xf9, 0x01, 0x0a, 0x09, 0x49, 0x6f, 0x50, 0x72, 0x6f, - 0x66, 0x69, 0x6c, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x4f, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, - 0x4c, 0x45, 0x5f, 0x53, 0x45, 0x51, 0x55, 0x45, 0x4e, 0x54, 0x49, 0x41, 0x4c, 0x10, 0x00, 0x12, - 0x15, 0x0a, 0x11, 0x49, 0x4f, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x52, 0x41, - 0x4e, 0x44, 0x4f, 0x4d, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x49, 0x4f, 0x5f, 0x50, 0x52, 0x4f, - 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x44, 0x42, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4f, 0x5f, - 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x44, 0x42, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x54, - 0x45, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4f, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, - 0x45, 0x5f, 0x43, 0x4d, 0x53, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4f, 0x5f, 0x50, 0x52, - 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, - 0x44, 0x10, 0x05, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4f, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, - 0x45, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x06, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4f, 0x5f, 0x50, - 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x07, 0x12, 0x16, 0x0a, - 0x12, 0x49, 0x4f, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x4a, 0x4f, 0x55, 0x52, - 0x4e, 0x41, 0x4c, 0x10, 0x08, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4f, 0x5f, 0x50, 0x52, 0x4f, 0x46, - 0x49, 0x4c, 0x45, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x4a, 0x4f, 0x55, 0x52, 0x4e, 0x41, 0x4c, - 0x10, 0x09, 0x2a, 0x99, 0x02, 0x0a, 0x0b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, - 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, - 0x47, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x45, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x02, 0x12, - 0x19, 0x0a, 0x15, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, - 0x41, 0x54, 0x54, 0x41, 0x43, 0x48, 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x56, 0x4f, - 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x54, 0x41, 0x43, - 0x48, 0x45, 0x44, 0x10, 0x04, 0x12, 0x1b, 0x0a, 0x17, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x54, 0x41, 0x54, 0x43, 0x48, 0x49, 0x4e, 0x47, - 0x10, 0x05, 0x12, 0x16, 0x0a, 0x12, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x06, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, - 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, - 0x45, 0x44, 0x10, 0x07, 0x12, 0x1e, 0x0a, 0x1a, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x54, 0x52, 0x59, 0x5f, 0x44, 0x45, 0x54, 0x41, 0x43, 0x48, 0x49, - 0x4e, 0x47, 0x10, 0x08, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x10, 0x09, 0x2a, 0x8f, - 0x01, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x16, 0x0a, 0x12, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x56, 0x4f, 0x4c, 0x55, 0x4d, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x50, 0x52, 0x45, - 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x50, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, - 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, - 0x57, 0x4e, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x45, 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, 0x10, 0x04, - 0x2a, 0x9d, 0x01, 0x0a, 0x16, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x48, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x18, 0x46, - 0x53, 0x5f, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x46, 0x53, 0x5f, - 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x48, 0x45, - 0x41, 0x4c, 0x54, 0x48, 0x59, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x46, 0x53, 0x5f, 0x48, 0x45, - 0x41, 0x4c, 0x54, 0x48, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x41, 0x46, 0x45, - 0x5f, 0x54, 0x4f, 0x5f, 0x46, 0x49, 0x58, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x46, 0x53, 0x5f, - 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x45, - 0x45, 0x44, 0x53, 0x5f, 0x49, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, - 0x2a, 0x5d, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x64, 0x69, 0x75, - 0x6d, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x4d, 0x45, 0x44, - 0x49, 0x55, 0x4d, 0x5f, 0x4d, 0x41, 0x47, 0x4e, 0x45, 0x54, 0x49, 0x43, 0x10, 0x00, 0x12, 0x16, - 0x0a, 0x12, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x4d, 0x45, 0x44, 0x49, 0x55, 0x4d, - 0x5f, 0x53, 0x53, 0x44, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, - 0x45, 0x5f, 0x4d, 0x45, 0x44, 0x49, 0x55, 0x4d, 0x5f, 0x4e, 0x56, 0x4d, 0x45, 0x10, 0x02, 0x2a, - 0x65, 0x0a, 0x0b, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x19, - 0x0a, 0x15, 0x41, 0x54, 0x54, 0x41, 0x43, 0x48, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, - 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x41, 0x54, 0x54, - 0x41, 0x43, 0x48, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, - 0x41, 0x4c, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x41, 0x54, 0x54, 0x41, 0x43, 0x48, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x53, 0x57, - 0x49, 0x54, 0x43, 0x48, 0x10, 0x02, 0x2a, 0x54, 0x0a, 0x0e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x5f, 0x46, - 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x11, - 0x0a, 0x0d, 0x4f, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, - 0x01, 0x12, 0x19, 0x0a, 0x15, 0x4f, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x44, 0x45, - 0x54, 0x41, 0x43, 0x48, 0x5f, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x10, 0x02, 0x2a, 0x4c, 0x0a, 0x0c, - 0x48, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x0e, - 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x10, 0x00, - 0x12, 0x12, 0x0a, 0x0e, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x42, 0x61, 0x72, 0x65, 0x4d, 0x65, 0x74, 0x61, - 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x10, 0x02, 0x2a, 0x46, 0x0a, 0x0e, 0x45, 0x78, - 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x0b, 0x0a, 0x07, - 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x58, 0x44, - 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x53, 0x43, 0x53, 0x49, 0x10, 0x02, 0x12, 0x07, 0x0a, - 0x03, 0x4e, 0x46, 0x53, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, - 0x10, 0x04, 0x2a, 0xaf, 0x01, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x5f, 0x50, 0x52, - 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, - 0x12, 0x16, 0x0a, 0x12, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, - 0x4f, 0x4c, 0x5f, 0x4e, 0x46, 0x53, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x52, 0x4f, 0x58, - 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x33, 0x10, 0x02, 0x12, - 0x16, 0x0a, 0x12, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, - 0x4c, 0x5f, 0x50, 0x58, 0x44, 0x10, 0x03, 0x12, 0x1d, 0x0a, 0x19, 0x50, 0x52, 0x4f, 0x58, 0x59, - 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x50, 0x55, 0x52, 0x45, 0x5f, 0x42, - 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x04, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x5f, - 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x50, 0x55, 0x52, 0x45, 0x5f, 0x46, 0x49, - 0x4c, 0x45, 0x10, 0x05, 0x2a, 0x98, 0x01, 0x0a, 0x0e, 0x46, 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, - 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x41, 0x53, 0x54, 0x50, - 0x41, 0x54, 0x48, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, - 0x0f, 0x46, 0x41, 0x53, 0x54, 0x50, 0x41, 0x54, 0x48, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, - 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x46, 0x41, 0x53, 0x54, 0x50, 0x41, 0x54, 0x48, 0x5f, 0x49, - 0x4e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x46, 0x41, 0x53, - 0x54, 0x50, 0x41, 0x54, 0x48, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x45, - 0x44, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x41, 0x53, 0x54, 0x50, 0x41, 0x54, 0x48, 0x5f, - 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x41, 0x53, - 0x54, 0x50, 0x41, 0x54, 0x48, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x45, 0x44, 0x10, 0x05, 0x2a, - 0x81, 0x01, 0x0a, 0x10, 0x46, 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x16, 0x46, 0x41, 0x53, 0x54, 0x50, 0x41, 0x54, 0x48, - 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, - 0x12, 0x1d, 0x0a, 0x19, 0x46, 0x41, 0x53, 0x54, 0x50, 0x41, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, - 0x54, 0x4f, 0x5f, 0x4e, 0x56, 0x4d, 0x45, 0x4f, 0x46, 0x5f, 0x54, 0x43, 0x50, 0x10, 0x01, 0x12, - 0x18, 0x0a, 0x14, 0x46, 0x41, 0x53, 0x54, 0x50, 0x41, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x54, - 0x4f, 0x5f, 0x49, 0x53, 0x43, 0x53, 0x49, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x46, 0x41, 0x53, - 0x54, 0x50, 0x41, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x5f, 0x4c, 0x4f, 0x43, 0x41, - 0x4c, 0x10, 0x03, 0x2a, 0x7f, 0x0a, 0x1b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, - 0x67, 0x79, 0x12, 0x1b, 0x0a, 0x17, 0x4e, 0x45, 0x41, 0x52, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x5f, - 0x53, 0x54, 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, - 0x21, 0x0a, 0x1d, 0x4e, 0x45, 0x41, 0x52, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x5f, 0x53, 0x54, 0x52, - 0x41, 0x54, 0x45, 0x47, 0x59, 0x5f, 0x41, 0x47, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x56, 0x45, - 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x4e, 0x45, 0x41, 0x52, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x5f, - 0x53, 0x54, 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4d, 0x49, 0x5a, - 0x45, 0x44, 0x10, 0x02, 0x2a, 0x71, 0x0a, 0x19, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, - 0x73, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, - 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x42, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x10, 0x00, 0x12, 0x0b, - 0x0a, 0x07, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, - 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x65, 0x61, 0x64, - 0x57, 0x72, 0x69, 0x74, 0x65, 0x10, 0x04, 0x2a, 0xce, 0x01, 0x0a, 0x0e, 0x53, 0x64, 0x6b, 0x54, - 0x69, 0x6d, 0x65, 0x57, 0x65, 0x65, 0x6b, 0x64, 0x61, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x64, - 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x65, 0x65, 0x6b, 0x64, 0x61, 0x79, 0x53, 0x75, 0x6e, 0x64, - 0x61, 0x79, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x64, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x57, - 0x65, 0x65, 0x6b, 0x64, 0x61, 0x79, 0x4d, 0x6f, 0x6e, 0x64, 0x61, 0x79, 0x10, 0x01, 0x12, 0x19, - 0x0a, 0x15, 0x53, 0x64, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x65, 0x65, 0x6b, 0x64, 0x61, 0x79, - 0x54, 0x75, 0x65, 0x73, 0x64, 0x61, 0x79, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x64, 0x6b, - 0x54, 0x69, 0x6d, 0x65, 0x57, 0x65, 0x65, 0x6b, 0x64, 0x61, 0x79, 0x57, 0x65, 0x64, 0x6e, 0x65, - 0x73, 0x64, 0x61, 0x79, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x54, 0x69, 0x6d, - 0x65, 0x57, 0x65, 0x65, 0x6b, 0x64, 0x61, 0x79, 0x54, 0x68, 0x75, 0x72, 0x73, 0x64, 0x61, 0x79, - 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x64, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x65, 0x65, - 0x6b, 0x64, 0x61, 0x79, 0x46, 0x72, 0x69, 0x64, 0x61, 0x79, 0x10, 0x05, 0x12, 0x1a, 0x0a, 0x16, - 0x53, 0x64, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x65, 0x65, 0x6b, 0x64, 0x61, 0x79, 0x53, 0x61, - 0x74, 0x75, 0x72, 0x64, 0x61, 0x79, 0x10, 0x06, 0x2a, 0x59, 0x0a, 0x18, 0x53, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, - 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x08, - 0x0a, 0x04, 0x44, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x41, 0x55, 0x53, - 0x45, 0x44, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x4c, 0x45, - 0x44, 0x10, 0x04, 0x2a, 0x7f, 0x0a, 0x19, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x20, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x10, 0x00, 0x12, 0x20, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4f, 0x74, 0x68, - 0x65, 0x72, 0x10, 0x02, 0x2a, 0xda, 0x01, 0x0a, 0x14, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, - 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, - 0x1b, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4f, - 0x70, 0x54, 0x79, 0x70, 0x65, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x20, + 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x56, 0x4f, 0x4c, 0x55, 0x4d, + 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x5f, 0x4f, + 0x46, 0x46, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, + 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x5f, 0x4f, 0x4e, 0x10, 0x02, + 0x2a, 0x32, 0x0a, 0x07, 0x43, 0x6f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, + 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x4f, 0x57, 0x10, 0x01, 0x12, 0x0a, + 0x0a, 0x06, 0x4d, 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x49, + 0x47, 0x48, 0x10, 0x03, 0x2a, 0xf9, 0x01, 0x0a, 0x09, 0x49, 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x4f, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, + 0x5f, 0x53, 0x45, 0x51, 0x55, 0x45, 0x4e, 0x54, 0x49, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x15, 0x0a, + 0x11, 0x49, 0x4f, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x52, 0x41, 0x4e, 0x44, + 0x4f, 0x4d, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x49, 0x4f, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, + 0x4c, 0x45, 0x5f, 0x44, 0x42, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4f, 0x5f, 0x50, 0x52, + 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x44, 0x42, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x10, + 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4f, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, + 0x43, 0x4d, 0x53, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4f, 0x5f, 0x50, 0x52, 0x4f, 0x46, + 0x49, 0x4c, 0x45, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x44, 0x10, + 0x05, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4f, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, + 0x41, 0x55, 0x54, 0x4f, 0x10, 0x06, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4f, 0x5f, 0x50, 0x52, 0x4f, + 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x07, 0x12, 0x16, 0x0a, 0x12, 0x49, + 0x4f, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x4a, 0x4f, 0x55, 0x52, 0x4e, 0x41, + 0x4c, 0x10, 0x08, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4f, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, + 0x45, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x4a, 0x4f, 0x55, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x09, + 0x2a, 0x99, 0x02, 0x0a, 0x0b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x15, 0x0a, 0x11, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, 0x4d, + 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, + 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x45, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x19, 0x0a, + 0x15, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x54, + 0x54, 0x41, 0x43, 0x48, 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x56, 0x4f, 0x4c, 0x55, + 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x54, 0x41, 0x43, 0x48, 0x45, + 0x44, 0x10, 0x04, 0x12, 0x1b, 0x0a, 0x17, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x54, 0x41, 0x54, 0x43, 0x48, 0x49, 0x4e, 0x47, 0x10, 0x05, + 0x12, 0x16, 0x0a, 0x12, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x06, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, + 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, + 0x10, 0x07, 0x12, 0x1e, 0x0a, 0x1a, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x54, 0x52, 0x59, 0x5f, 0x44, 0x45, 0x54, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x47, + 0x10, 0x08, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x10, 0x09, 0x2a, 0x8f, 0x01, 0x0a, + 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, + 0x12, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, + 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, + 0x4e, 0x54, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x50, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x56, 0x4f, + 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x57, 0x4e, + 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x44, 0x45, 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, 0x10, 0x04, 0x2a, 0x9d, + 0x01, 0x0a, 0x16, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x48, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x18, 0x46, 0x53, 0x5f, + 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, + 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x46, 0x53, 0x5f, 0x48, 0x45, + 0x41, 0x4c, 0x54, 0x48, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x48, 0x45, 0x41, 0x4c, + 0x54, 0x48, 0x59, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x46, 0x53, 0x5f, 0x48, 0x45, 0x41, 0x4c, + 0x54, 0x48, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x41, 0x46, 0x45, 0x5f, 0x54, + 0x4f, 0x5f, 0x46, 0x49, 0x58, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x46, 0x53, 0x5f, 0x48, 0x45, + 0x41, 0x4c, 0x54, 0x48, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x45, 0x45, 0x44, + 0x53, 0x5f, 0x49, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x2a, 0x5d, + 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x12, + 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x4d, 0x45, 0x44, 0x49, 0x55, + 0x4d, 0x5f, 0x4d, 0x41, 0x47, 0x4e, 0x45, 0x54, 0x49, 0x43, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, + 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x4d, 0x45, 0x44, 0x49, 0x55, 0x4d, 0x5f, 0x53, + 0x53, 0x44, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, + 0x4d, 0x45, 0x44, 0x49, 0x55, 0x4d, 0x5f, 0x4e, 0x56, 0x4d, 0x45, 0x10, 0x02, 0x2a, 0x65, 0x0a, + 0x0b, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x19, 0x0a, 0x15, + 0x41, 0x54, 0x54, 0x41, 0x43, 0x48, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x58, 0x54, + 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x41, 0x54, 0x54, 0x41, 0x43, + 0x48, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, + 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x41, 0x54, 0x54, 0x41, 0x43, 0x48, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x53, 0x57, 0x49, 0x54, + 0x43, 0x48, 0x10, 0x02, 0x2a, 0x54, 0x0a, 0x0e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x5f, 0x46, 0x4c, 0x41, + 0x47, 0x53, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, + 0x4f, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x12, + 0x19, 0x0a, 0x15, 0x4f, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x44, 0x45, 0x54, 0x41, + 0x43, 0x48, 0x5f, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x10, 0x02, 0x2a, 0x4c, 0x0a, 0x0c, 0x48, 0x61, + 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x6e, + 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x10, 0x00, 0x12, 0x12, + 0x0a, 0x0e, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x42, 0x61, 0x72, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x4d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x10, 0x02, 0x2a, 0x46, 0x0a, 0x0e, 0x45, 0x78, 0x70, 0x6f, + 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, + 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x58, 0x44, 0x10, 0x01, + 0x12, 0x09, 0x0a, 0x05, 0x49, 0x53, 0x43, 0x53, 0x49, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x4e, + 0x46, 0x53, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x10, 0x04, + 0x2a, 0xaf, 0x01, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x54, + 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x16, + 0x0a, 0x12, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, + 0x5f, 0x4e, 0x46, 0x53, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x5f, + 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x33, 0x10, 0x02, 0x12, 0x16, 0x0a, + 0x12, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, + 0x50, 0x58, 0x44, 0x10, 0x03, 0x12, 0x1d, 0x0a, 0x19, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x5f, 0x50, + 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x50, 0x55, 0x52, 0x45, 0x5f, 0x42, 0x4c, 0x4f, + 0x43, 0x4b, 0x10, 0x04, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x5f, 0x50, 0x52, + 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x50, 0x55, 0x52, 0x45, 0x5f, 0x46, 0x49, 0x4c, 0x45, + 0x10, 0x05, 0x2a, 0x98, 0x01, 0x0a, 0x0e, 0x46, 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x41, 0x53, 0x54, 0x50, 0x41, 0x54, + 0x48, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x46, + 0x41, 0x53, 0x54, 0x50, 0x41, 0x54, 0x48, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, + 0x12, 0x15, 0x0a, 0x11, 0x46, 0x41, 0x53, 0x54, 0x50, 0x41, 0x54, 0x48, 0x5f, 0x49, 0x4e, 0x41, + 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x46, 0x41, 0x53, 0x54, 0x50, + 0x41, 0x54, 0x48, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, + 0x03, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x41, 0x53, 0x54, 0x50, 0x41, 0x54, 0x48, 0x5f, 0x50, 0x45, + 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x41, 0x53, 0x54, 0x50, + 0x41, 0x54, 0x48, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x45, 0x44, 0x10, 0x05, 0x2a, 0x81, 0x01, + 0x0a, 0x10, 0x46, 0x61, 0x73, 0x74, 0x70, 0x61, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x16, 0x46, 0x41, 0x53, 0x54, 0x50, 0x41, 0x54, 0x48, 0x5f, 0x50, + 0x52, 0x4f, 0x54, 0x4f, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x1d, + 0x0a, 0x19, 0x46, 0x41, 0x53, 0x54, 0x50, 0x41, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, + 0x5f, 0x4e, 0x56, 0x4d, 0x45, 0x4f, 0x46, 0x5f, 0x54, 0x43, 0x50, 0x10, 0x01, 0x12, 0x18, 0x0a, + 0x14, 0x46, 0x41, 0x53, 0x54, 0x50, 0x41, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x5f, + 0x49, 0x53, 0x43, 0x53, 0x49, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x46, 0x41, 0x53, 0x54, 0x50, + 0x41, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x10, + 0x03, 0x2a, 0x7f, 0x0a, 0x1b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, + 0x12, 0x1b, 0x0a, 0x17, 0x4e, 0x45, 0x41, 0x52, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x5f, 0x53, 0x54, + 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x21, 0x0a, + 0x1d, 0x4e, 0x45, 0x41, 0x52, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x5f, 0x53, 0x54, 0x52, 0x41, 0x54, + 0x45, 0x47, 0x59, 0x5f, 0x41, 0x47, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x56, 0x45, 0x10, 0x01, + 0x12, 0x20, 0x0a, 0x1c, 0x4e, 0x45, 0x41, 0x52, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x5f, 0x53, 0x54, + 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4d, 0x49, 0x5a, 0x45, 0x44, + 0x10, 0x02, 0x2a, 0x71, 0x0a, 0x19, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x42, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, + 0x1b, 0x0a, 0x17, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, + 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x65, 0x61, + 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x4f, 0x6e, 0x6c, 0x79, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x65, 0x61, 0x64, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x10, 0x04, 0x2a, 0xce, 0x01, 0x0a, 0x0e, 0x53, 0x64, 0x6b, 0x54, 0x69, 0x6d, + 0x65, 0x57, 0x65, 0x65, 0x6b, 0x64, 0x61, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x64, 0x6b, 0x54, + 0x69, 0x6d, 0x65, 0x57, 0x65, 0x65, 0x6b, 0x64, 0x61, 0x79, 0x53, 0x75, 0x6e, 0x64, 0x61, 0x79, + 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x64, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x65, 0x65, + 0x6b, 0x64, 0x61, 0x79, 0x4d, 0x6f, 0x6e, 0x64, 0x61, 0x79, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, + 0x53, 0x64, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x65, 0x65, 0x6b, 0x64, 0x61, 0x79, 0x54, 0x75, + 0x65, 0x73, 0x64, 0x61, 0x79, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x64, 0x6b, 0x54, 0x69, + 0x6d, 0x65, 0x57, 0x65, 0x65, 0x6b, 0x64, 0x61, 0x79, 0x57, 0x65, 0x64, 0x6e, 0x65, 0x73, 0x64, + 0x61, 0x79, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x64, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x57, + 0x65, 0x65, 0x6b, 0x64, 0x61, 0x79, 0x54, 0x68, 0x75, 0x72, 0x73, 0x64, 0x61, 0x79, 0x10, 0x04, + 0x12, 0x18, 0x0a, 0x14, 0x53, 0x64, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x65, 0x65, 0x6b, 0x64, + 0x61, 0x79, 0x46, 0x72, 0x69, 0x64, 0x61, 0x79, 0x10, 0x05, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x64, + 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x65, 0x65, 0x6b, 0x64, 0x61, 0x79, 0x53, 0x61, 0x74, 0x75, + 0x72, 0x64, 0x61, 0x79, 0x10, 0x06, 0x2a, 0x59, 0x0a, 0x18, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, + 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, + 0x44, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x41, 0x55, 0x53, 0x45, 0x44, + 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x4c, 0x45, 0x44, 0x10, + 0x04, 0x2a, 0x7f, 0x0a, 0x19, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x4f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4f, 0x70, 0x10, 0x01, - 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x4f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4f, - 0x70, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, - 0x6e, 0x63, 0x4f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x4f, 0x70, 0x10, - 0x03, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, - 0x4f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x41, 0x64, 0x64, 0x4f, 0x70, 0x10, - 0x04, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, + 0x12, 0x20, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4f, 0x74, 0x68, 0x65, 0x72, + 0x10, 0x02, 0x2a, 0xda, 0x01, 0x0a, 0x14, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x1b, 0x53, + 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4f, 0x70, 0x54, + 0x79, 0x70, 0x65, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x20, 0x0a, 0x1c, + 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4f, 0x70, + 0x54, 0x79, 0x70, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4f, 0x70, 0x10, 0x01, 0x12, 0x21, + 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4f, 0x70, 0x10, - 0x05, 0x2a, 0xf3, 0x04, 0x0a, 0x18, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, - 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, - 0x6e, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x4e, - 0x6f, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x53, - 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x44, 0x6f, 0x6e, 0x65, 0x10, 0x02, 0x12, 0x23, 0x0a, - 0x1f, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x65, 0x64, - 0x10, 0x03, 0x12, 0x22, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x50, 0x61, - 0x75, 0x73, 0x65, 0x64, 0x10, 0x04, 0x12, 0x23, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, - 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, - 0x70, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x10, 0x05, 0x12, 0x22, 0x0a, 0x1e, 0x53, + 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, + 0x4f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x4f, 0x70, 0x10, 0x03, 0x12, + 0x1e, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, 0x4f, 0x70, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x41, 0x64, 0x64, 0x4f, 0x70, 0x10, 0x04, 0x12, + 0x1e, 0x0a, 0x1a, 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, 0x4f, 0x70, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4f, 0x70, 0x10, 0x05, 0x2a, + 0xf3, 0x04, 0x0a, 0x18, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x1f, + 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, + 0x00, 0x12, 0x26, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x6f, 0x74, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x53, 0x64, 0x6b, + 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x54, 0x79, 0x70, 0x65, 0x44, 0x6f, 0x6e, 0x65, 0x10, 0x02, 0x12, 0x23, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x10, 0x06, 0x12, - 0x22, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, - 0x64, 0x10, 0x07, 0x12, 0x22, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x51, - 0x75, 0x65, 0x75, 0x65, 0x64, 0x10, 0x08, 0x12, 0x23, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x43, 0x6c, - 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, - 0x79, 0x70, 0x65, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x10, 0x09, 0x12, 0x23, 0x0a, 0x1f, - 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x10, - 0x0a, 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x44, 0x6f, 0x6e, 0x65, 0x10, 0x0b, - 0x12, 0x1f, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x50, 0x61, 0x75, 0x73, 0x65, 0x64, 0x10, - 0x0c, 0x12, 0x20, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x65, - 0x64, 0x10, 0x0d, 0x12, 0x1f, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, - 0x6e, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x41, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x10, 0x0e, 0x12, 0x1f, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, - 0x79, 0x6e, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x46, 0x61, 0x69, - 0x6c, 0x65, 0x64, 0x10, 0x0f, 0x12, 0x20, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, 0x72, - 0x53, 0x79, 0x6e, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x10, 0x10, 0x2a, 0xa8, 0x02, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x23, 0x53, 0x64, 0x6b, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, - 0x00, 0x12, 0x25, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x50, 0x61, 0x75, 0x73, 0x65, 0x10, 0x01, 0x12, 0x26, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x10, 0x02, - 0x12, 0x24, 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x53, 0x74, 0x6f, 0x70, 0x10, 0x03, 0x12, 0x22, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, - 0x72, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x50, 0x61, 0x75, 0x73, 0x65, 0x10, 0x04, 0x12, 0x23, 0x0a, 0x1f, 0x53, 0x64, - 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x10, 0x05, 0x12, - 0x21, 0x0a, 0x1d, 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x70, - 0x10, 0x06, 0x2a, 0x2e, 0x0a, 0x0f, 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, - 0x10, 0x01, 0x2a, 0x4a, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x41, - 0x52, 0x41, 0x4d, 0x5f, 0x42, 0x4b, 0x55, 0x50, 0x53, 0x52, 0x43, 0x10, 0x00, 0x12, 0x0f, 0x0a, - 0x0b, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x5f, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x01, 0x12, 0x0e, - 0x0a, 0x0a, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x5f, 0x54, 0x52, 0x55, 0x45, 0x10, 0x02, 0x32, 0xb0, - 0x02, 0x0a, 0x11, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x41, 0x6c, - 0x65, 0x72, 0x74, 0x73, 0x12, 0xa6, 0x01, 0x0a, 0x14, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x35, 0x2e, + 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x10, 0x03, + 0x12, 0x22, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x50, 0x61, 0x75, 0x73, + 0x65, 0x64, 0x10, 0x04, 0x12, 0x23, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, + 0x53, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x10, 0x05, 0x12, 0x22, 0x0a, 0x1e, 0x53, 0x64, 0x6b, + 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x54, 0x79, 0x70, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x10, 0x06, 0x12, 0x22, 0x0a, + 0x1e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, + 0x07, 0x12, 0x22, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x51, 0x75, 0x65, + 0x75, 0x65, 0x64, 0x10, 0x08, 0x12, 0x23, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, + 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, + 0x65, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x10, 0x09, 0x12, 0x23, 0x0a, 0x1f, 0x53, 0x64, + 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, + 0x79, 0x70, 0x65, 0x4e, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x10, 0x0a, 0x12, + 0x1d, 0x0a, 0x19, 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x44, 0x6f, 0x6e, 0x65, 0x10, 0x0b, 0x12, 0x1f, + 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x50, 0x61, 0x75, 0x73, 0x65, 0x64, 0x10, 0x0c, 0x12, + 0x20, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x10, + 0x0d, 0x12, 0x1f, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x10, 0x0e, 0x12, 0x1f, 0x0a, 0x1b, 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, + 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, + 0x64, 0x10, 0x0f, 0x12, 0x20, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, + 0x6e, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x10, 0x10, 0x2a, 0xa8, 0x02, 0x0a, 0x1c, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, + 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x23, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, + 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, + 0x25, 0x0a, 0x21, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x50, + 0x61, 0x75, 0x73, 0x65, 0x10, 0x01, 0x12, 0x26, 0x0a, 0x22, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, + 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x10, 0x02, 0x12, 0x24, + 0x0a, 0x20, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, + 0x6f, 0x70, 0x10, 0x03, 0x12, 0x22, 0x0a, 0x1e, 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, + 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x50, 0x61, 0x75, 0x73, 0x65, 0x10, 0x04, 0x12, 0x23, 0x0a, 0x1f, 0x53, 0x64, 0x6b, 0x4e, + 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x10, 0x05, 0x12, 0x21, 0x0a, + 0x1d, 0x53, 0x64, 0x6b, 0x4e, 0x65, 0x61, 0x72, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x10, 0x06, + 0x2a, 0x2e, 0x0a, 0x0f, 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x10, + 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x10, 0x01, + 0x2a, 0x4a, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x41, 0x52, 0x41, + 0x4d, 0x5f, 0x42, 0x4b, 0x55, 0x50, 0x53, 0x52, 0x43, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x50, + 0x41, 0x52, 0x41, 0x4d, 0x5f, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, + 0x50, 0x41, 0x52, 0x41, 0x4d, 0x5f, 0x54, 0x52, 0x55, 0x45, 0x10, 0x02, 0x32, 0xb0, 0x02, 0x0a, + 0x11, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x41, 0x6c, 0x65, 0x72, + 0x74, 0x73, 0x12, 0xa6, 0x01, 0x0a, 0x14, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x35, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, + 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x45, 0x6e, + 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x17, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x2f, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x30, 0x01, 0x12, 0x72, 0x0a, 0x06, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, + 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, + 0x22, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x32, + 0xd5, 0x04, 0x0a, 0x0f, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, + 0x6f, 0x6c, 0x65, 0x12, 0x6d, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, - 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, - 0x2f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x30, 0x01, 0x12, 0x72, 0x0a, - 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, - 0x72, 0x74, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x3a, 0x01, - 0x2a, 0x32, 0xd5, 0x04, 0x0a, 0x0f, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x6d, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, + 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x0e, 0x22, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x3a, + 0x01, 0x2a, 0x12, 0x73, 0x0a, 0x09, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, + 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x52, + 0x6f, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x2f, 0x76, + 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x7c, 0x0a, 0x07, 0x49, 0x6e, 0x73, 0x70, 0x65, + 0x63, 0x74, 0x12, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x70, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, + 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, + 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x2f, 0x7b, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x71, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, + 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x22, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, - 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x73, 0x0a, 0x09, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x12, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, - 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, - 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x7c, 0x0a, 0x07, 0x49, 0x6e, 0x73, - 0x70, 0x65, 0x63, 0x74, 0x12, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, - 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, - 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, - 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x71, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x12, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x6f, - 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x2a, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, - 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x6d, 0x0a, 0x06, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, - 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x1a, 0x09, 0x2f, 0x76, 0x31, - 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x32, 0xb9, 0x08, 0x0a, 0x19, 0x4f, 0x70, - 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x12, 0x8e, 0x01, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x12, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x22, 0x19, 0x2f, 0x76, 0x31, 0x2f, - 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, 0x74, 0x72, 0x69, 0x6d, 0x2f, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x8f, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, - 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, 0x74, - 0x72, 0x69, 0x6d, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x9d, 0x01, 0x0a, 0x10, 0x41, - 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x2d, 0x74, 0x72, 0x69, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x2d, 0x66, 0x73, 0x74, - 0x72, 0x69, 0x6d, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x99, 0x01, 0x0a, 0x0f, 0x41, - 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x55, 0x73, - 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, - 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, - 0x74, 0x72, 0x69, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x2d, 0x66, 0x73, 0x74, 0x72, 0x69, 0x6d, - 0x2d, 0x75, 0x73, 0x61, 0x67, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x04, 0x53, 0x74, 0x6f, 0x70, 0x12, - 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x2a, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, + 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x6d, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x12, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x52, + 0x6f, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x1a, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x72, + 0x6f, 0x6c, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x32, 0xb9, 0x08, 0x0a, 0x19, 0x4f, 0x70, 0x65, 0x6e, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x12, 0x8e, 0x01, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, + 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, - 0x72, 0x69, 0x6d, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, - 0x69, 0x6d, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, 0x74, 0x72, 0x69, 0x6d, 0x2f, 0x73, 0x74, 0x6f, 0x70, - 0x3a, 0x01, 0x2a, 0x12, 0x98, 0x01, 0x0a, 0x0e, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, - 0x69, 0x6d, 0x50, 0x75, 0x73, 0x68, 0x12, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, - 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, - 0x6d, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, 0x74, 0x72, 0x69, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x2d, - 0x66, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x2d, 0x70, 0x75, 0x73, 0x68, 0x3a, 0x01, 0x2a, 0x12, 0x94, - 0x01, 0x0a, 0x0d, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x50, 0x6f, 0x70, - 0x12, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, - 0x50, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x70, 0x65, + 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, + 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x22, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, 0x74, 0x72, 0x69, 0x6d, 0x2f, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x8f, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, + 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, 0x74, 0x72, 0x69, + 0x6d, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x9d, 0x01, 0x0a, 0x10, 0x41, 0x75, 0x74, + 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2b, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x50, 0x6f, 0x70, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x22, 0x23, 0x2f, + 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, + 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2d, 0x74, 0x72, 0x69, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x2d, 0x66, 0x73, 0x74, 0x72, 0x69, + 0x6d, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x99, 0x01, 0x0a, 0x0f, 0x41, 0x75, 0x74, + 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x55, 0x73, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x75, + 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, 0x74, 0x72, - 0x69, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x2d, 0x66, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x2d, 0x70, - 0x6f, 0x70, 0x3a, 0x01, 0x2a, 0x32, 0xee, 0x07, 0x0a, 0x1a, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x12, 0x91, 0x01, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2f, + 0x69, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x2d, 0x66, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x2d, 0x75, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x04, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x2d, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, + 0x6d, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x69, 0x6d, + 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x2d, 0x74, 0x72, 0x69, 0x6d, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x3a, 0x01, + 0x2a, 0x12, 0x98, 0x01, 0x0a, 0x0e, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, + 0x50, 0x75, 0x73, 0x68, 0x12, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, + 0x54, 0x72, 0x69, 0x6d, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x50, + 0x75, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x2d, 0x74, 0x72, 0x69, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x2d, 0x66, 0x73, + 0x74, 0x72, 0x69, 0x6d, 0x2d, 0x70, 0x75, 0x73, 0x68, 0x3a, 0x01, 0x2a, 0x12, 0x94, 0x01, 0x0a, + 0x0d, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x50, 0x6f, 0x70, 0x12, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x66, - 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2f, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x92, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x50, 0x6f, + 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x41, 0x75, + 0x74, 0x6f, 0x46, 0x53, 0x54, 0x72, 0x69, 0x6d, 0x50, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x22, 0x23, 0x2f, 0x76, 0x31, + 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, 0x74, 0x72, 0x69, 0x6d, + 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x2d, 0x66, 0x73, 0x74, 0x72, 0x69, 0x6d, 0x2d, 0x70, 0x6f, 0x70, + 0x3a, 0x01, 0x2a, 0x32, 0xee, 0x07, 0x0a, 0x1a, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x12, 0x91, 0x01, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2f, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, + 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2f, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x92, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, - 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x8d, 0x01, - 0x0a, 0x04, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x6f, 0x70, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, + 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x8d, 0x01, 0x0a, 0x04, + 0x53, 0x74, 0x6f, 0x70, 0x12, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x22, 0x19, 0x2f, + 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x3a, 0x01, 0x2a, 0x12, 0xaf, 0x01, 0x0a, 0x0d, + 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x12, 0x37, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x6f, 0x70, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x22, - 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x3a, 0x01, 0x2a, 0x12, 0xaf, 0x01, - 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x12, - 0x37, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, - 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x69, 0x73, - 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x76, 0x31, 0x2f, - 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x12, - 0xba, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x73, 0x12, 0x39, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x2a, 0x22, 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x2d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x2d, - 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xa7, 0x01, 0x0a, - 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x35, 0x2e, 0x6f, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x53, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2f, 0x6c, + 0x69, 0x73, 0x74, 0x2d, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x12, 0xba, 0x01, + 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x73, 0x12, 0x39, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x23, 0x12, 0x21, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x2d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x32, 0xb3, 0x02, 0x0a, 0x13, 0x4f, 0x70, 0x65, 0x6e, 0x53, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x96, - 0x01, 0x0a, 0x0c, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, - 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x70, - 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, - 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x63, 0x61, 0x70, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x82, 0x01, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x32, 0xb1, 0x01, 0x0a, - 0x12, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x12, 0x9a, 0x01, 0x0a, 0x0e, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x43, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x43, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x73, 0x2f, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x32, 0xee, 0x06, 0x0a, 0x16, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x12, 0x82, 0x01, 0x0a, 0x06, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x50, 0x61, 0x69, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x70, 0x61, 0x69, 0x72, 0x73, 0x3a, 0x01, 0x2a, - 0x12, 0x8f, 0x01, 0x0a, 0x07, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x2d, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x49, 0x6e, 0x73, - 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, - 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x49, 0x6e, 0x73, 0x70, - 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x69, - 0x64, 0x7d, 0x12, 0x88, 0x01, 0x0a, 0x09, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x12, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, - 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, - 0x69, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x70, 0x61, 0x69, 0x72, 0x73, 0x12, 0x8b, 0x01, - 0x0a, 0x08, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2e, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x47, 0x65, 0x74, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x70, 0x65, + 0x6b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, + 0x22, 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x2d, 0x73, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xa7, 0x01, 0x0a, 0x0b, 0x4c, + 0x69, 0x73, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x35, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x47, 0x65, 0x74, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x94, 0x01, 0x0a, 0x0a, - 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x30, 0x2e, 0x6f, 0x70, 0x65, + 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, + 0x69, 0x73, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x36, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x23, 0x12, 0x21, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x2d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x76, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x73, 0x32, 0xa9, 0x05, 0x0a, 0x1b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x44, 0x65, + 0x66, 0x72, 0x61, 0x67, 0x12, 0x9e, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x2d, 0x64, 0x65, 0x66, 0x72, 0x61, 0x67, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0xa0, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, + 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2d, 0x64, 0x65, 0x66, 0x72, 0x61, 0x67, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2f, 0x7b, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa0, 0x01, 0x0a, 0x13, 0x45, 0x6e, 0x75, + 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x44, + 0x65, 0x66, 0x72, 0x61, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, + 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, 0x64, 0x65, + 0x66, 0x72, 0x61, 0x67, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0xa2, 0x01, 0x0a, 0x10, + 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x55, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x12, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x55, 0x70, 0x44, 0x65, 0x66, + 0x72, 0x61, 0x67, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x55, 0x70, + 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x2a, + 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, + 0x64, 0x65, 0x66, 0x72, 0x61, 0x67, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x32, 0xb3, 0x02, 0x0a, 0x13, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x96, 0x01, 0x0a, 0x0c, 0x43, 0x61, 0x70, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, 0x73, 0x65, 0x74, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, 0x73, - 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x3a, - 0x01, 0x2a, 0x12, 0x8c, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2c, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, - 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1f, 0x2a, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x70, - 0x61, 0x69, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x7d, 0x32, 0xb9, 0x05, 0x0a, 0x19, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x12, - 0x90, 0x01, 0x0a, 0x09, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x32, 0x2e, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x2f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x12, 0x82, 0x01, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, - 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x64, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x73, 0x12, 0xa6, 0x01, 0x0a, 0x07, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x2f, + 0x53, 0x64, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, + 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x32, 0xb1, 0x01, 0x0a, 0x12, 0x4f, 0x70, 0x65, 0x6e, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x9a, 0x01, + 0x0a, 0x0e, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x12, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x73, + 0x70, 0x65, 0x63, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, + 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x73, 0x70, + 0x65, 0x63, 0x74, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x32, 0xee, 0x06, 0x0a, 0x16, 0x4f, + 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x50, 0x61, 0x69, 0x72, 0x12, 0x82, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x12, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, + 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, 0x2f, 0x76, 0x31, 0x2f, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x2f, 0x69, 0x6e, - 0x73, 0x70, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x64, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xaa, 0x01, 0x0a, 0x08, - 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6f, 0x70, 0x65, + 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x70, 0x61, 0x69, 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x8f, 0x01, 0x0a, 0x07, 0x49, + 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, + 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x88, 0x01, 0x0a, + 0x09, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x22, 0x31, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xb2, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, + 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x75, 0x6d, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x70, 0x61, 0x69, 0x72, 0x73, 0x12, 0x8b, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x50, 0x61, 0x69, 0x72, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x50, 0x61, 0x69, 0x72, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x94, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1b, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x70, 0x61, + 0x69, 0x72, 0x73, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x8c, 0x01, 0x0a, + 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x50, 0x61, 0x69, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x2a, 0x1d, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, 0x7b, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x32, 0xb9, 0x05, 0x0a, 0x19, + 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x90, 0x01, 0x0a, 0x09, 0x45, 0x6e, + 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6f, 0x70, + 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, - 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x44, 0x65, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x22, 0x33, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x2f, 0x64, 0x65, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x32, 0xb9, 0x0a, - 0x0a, 0x0f, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, - 0x6c, 0x12, 0x8d, 0x01, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x2c, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, - 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x70, 0x65, + 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x45, + 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x12, 0xa6, 0x01, 0x0a, + 0x07, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x49, 0x6e, 0x73, 0x70, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x49, 0x6e, 0x73, 0x70, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x32, 0x12, 0x30, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x2f, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x2f, + 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xaa, 0x01, 0x0a, 0x08, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x12, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, + 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x22, + 0x31, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x64, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x73, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x7b, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x12, 0xb2, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x12, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x6f, + 0x6d, 0x61, 0x69, 0x6e, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x35, 0x22, 0x33, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x64, + 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x2f, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x32, 0xb9, 0x0a, 0x0a, 0x0f, 0x4f, 0x70, 0x65, 0x6e, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x8d, 0x01, 0x0a, 0x06, + 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x1a, 0x1e, 0x2f, 0x76, 0x31, + 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x72, 0x65, + 0x73, 0x69, 0x7a, 0x65, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x8a, 0x01, 0x0a, 0x09, + 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x1a, 0x1a, 0x2f, 0x76, + 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x72, + 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0xa5, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x1a, 0x23, 0x2f, 0x76, 0x31, + 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x72, 0x65, + 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x6a, 0x6f, 0x62, 0x2f, 0x7b, 0x69, 0x64, 0x7d, + 0x12, 0xa9, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x69, 0x7a, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x20, 0x1a, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, 0x6f, - 0x6f, 0x6c, 0x73, 0x2f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, - 0x7d, 0x12, 0x8a, 0x01, 0x0a, 0x09, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, - 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6f, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1c, 0x1a, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, - 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0xa5, - 0x01, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2d, 0x2e, 0x6f, 0x70, 0x65, + 0x64, 0x6b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, + 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x2f, 0x6a, 0x6f, 0x62, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xa7, 0x01, 0x0a, + 0x16, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x45, 0x6e, 0x75, + 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, + 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, - 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, - 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x25, 0x1a, 0x23, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, 0x6f, - 0x6f, 0x6c, 0x73, 0x2f, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x6a, 0x6f, - 0x62, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xa9, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x2f, 0x6a, 0x6f, 0x62, 0x12, 0xaf, 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x12, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x25, 0x22, 0x23, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x2f, + 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0xa6, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x12, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, - 0x72, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x6a, 0x6f, 0x62, 0x2f, 0x7b, 0x69, - 0x64, 0x7d, 0x12, 0xa7, 0x01, 0x0a, 0x16, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x31, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x64, 0x6b, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x76, + 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x72, - 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x6a, 0x6f, 0x62, 0x12, 0xaf, 0x01, 0x0a, - 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x68, - 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6f, + 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x12, 0xaf, 0x01, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x32, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x53, 0x64, 0x6b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x62, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x2a, 0x23, + 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, 0x6f, 0x6f, 0x6c, 0x73, + 0x2f, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x32, 0x86, 0x01, 0x0a, 0x10, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x44, 0x69, 0x61, 0x67, 0x73, 0x12, 0x72, 0x0a, 0x07, 0x43, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x12, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x44, 0x69, 0x61, 0x67, 0x73, 0x43, 0x6f, + 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x23, 0x2f, 0x76, 0x31, 0x2f, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x72, 0x65, 0x62, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0xa6, - 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, - 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x25, 0x12, 0x23, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, - 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x73, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0xaf, 0x01, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x65, 0x12, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, - 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x25, 0x2a, 0x23, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x32, 0x86, 0x01, 0x0a, 0x10, 0x4f, 0x70, - 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x44, 0x69, 0x61, 0x67, 0x73, 0x12, 0x72, - 0x0a, 0x07, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x44, - 0x69, 0x61, 0x67, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x44, 0x69, 0x61, 0x67, 0x73, 0x43, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x0e, 0x22, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x69, 0x61, 0x67, 0x73, 0x3a, - 0x01, 0x2a, 0x32, 0xec, 0x02, 0x0a, 0x0e, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x6f, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, - 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x64, 0x6b, 0x44, 0x69, 0x61, 0x67, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x22, 0x09, + 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x69, 0x61, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x32, 0xec, 0x02, 0x0a, + 0x0e, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4a, 0x6f, 0x62, 0x12, + 0x6f, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x12, 0x1a, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x6a, 0x6f, 0x62, 0x73, 0x2f, 0x7b, - 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x75, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6f, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x1a, 0x0d, + 0x2f, 0x76, 0x31, 0x2f, 0x6a, 0x6f, 0x62, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, + 0x12, 0x75, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x27, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x53, 0x64, 0x6b, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x47, 0x65, 0x74, 0x4a, + 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x6a, 0x6f, + 0x62, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x72, 0x0a, 0x09, 0x45, 0x6e, 0x75, 0x6d, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x12, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x64, 0x6b, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x10, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x0a, 0x12, 0x08, 0x2f, 0x76, 0x31, 0x2f, 0x6a, 0x6f, 0x62, 0x73, 0x32, 0xad, 0x03, 0x0a, 0x13, + 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x12, 0x85, 0x01, 0x0a, 0x07, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, + 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, + 0x6b, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, + 0x12, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x7b, 0x74, 0x79, 0x70, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x88, 0x01, 0x0a, 0x09, + 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x45, + 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x45, 0x6e, + 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, + 0x12, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x7b, 0x74, 0x79, 0x70, 0x65, 0x7d, 0x12, 0x82, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x12, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x64, 0x6b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, + 0x2a, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x7b, 0x74, 0x79, 0x70, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x32, 0x8b, 0x0c, 0x0a, 0x0f, + 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, + 0x7f, 0x0a, 0x07, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x26, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, + 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x73, 0x70, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, + 0x12, 0x91, 0x01, 0x0a, 0x0e, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x43, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x12, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x73, + 0x70, 0x65, 0x63, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x73, 0x70, + 0x65, 0x63, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x2f, + 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x12, 0x73, 0x0a, 0x09, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x12, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, + 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, + 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x9c, 0x01, 0x0a, 0x14, 0x45, 0x6e, + 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x73, 0x12, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x6e, 0x75, 0x6d, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, + 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, + 0x2f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x9b, 0x01, 0x0a, 0x11, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x42, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x30, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x73, + 0x61, 0x67, 0x65, 0x42, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x55, 0x73, 0x61, 0x67, 0x65, 0x42, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x76, 0x31, + 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x2f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x2f, 0x7b, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa1, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x6c, 0x61, 0x78, + 0x65, 0x64, 0x52, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x75, 0x72, 0x67, 0x65, 0x12, 0x32, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x65, 0x64, 0x52, + 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x75, 0x72, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x6c, 0x61, + 0x78, 0x65, 0x64, 0x52, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x75, 0x72, 0x67, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, + 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x2f, 0x75, 0x73, 0x61, 0x67, 0x65, + 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x10, 0x44, + 0x72, 0x61, 0x69, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, + 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x72, 0x61, 0x69, 0x6e, 0x41, 0x74, + 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x1a, 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x6e, + 0x6f, 0x64, 0x65, 0x73, 0x2f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x2f, 0x64, 0x72, 0x61, 0x69, 0x6e, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, + 0x3a, 0x01, 0x2a, 0x12, 0xac, 0x01, 0x0a, 0x11, 0x43, 0x6f, 0x72, 0x64, 0x6f, 0x6e, 0x41, 0x74, + 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, + 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x72, 0x64, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, + 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x72, 0x64, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, + 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x1a, 0x27, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, + 0x73, 0x2f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x64, 0x69, + 0x73, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x3a, + 0x01, 0x2a, 0x12, 0xb1, 0x01, 0x0a, 0x13, 0x55, 0x6e, 0x63, 0x6f, 0x72, 0x64, 0x6f, 0x6e, 0x41, + 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x32, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, + 0x4e, 0x6f, 0x64, 0x65, 0x55, 0x6e, 0x63, 0x6f, 0x72, 0x64, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x55, 0x6e, 0x63, 0x6f, 0x72, 0x64, 0x6f, 0x6e, + 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, + 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x2f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x2f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x90, 0x01, 0x0a, 0x15, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x55, 0x73, 0x65, 0x64, 0x42, 0x79, 0x4e, 0x6f, 0x64, 0x65, + 0x12, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x55, 0x73, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, - 0x2f, 0x76, 0x31, 0x2f, 0x6a, 0x6f, 0x62, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x72, 0x0a, - 0x09, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x28, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x10, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x2f, 0x76, 0x31, 0x2f, 0x6a, 0x6f, 0x62, - 0x73, 0x32, 0x8b, 0x0c, 0x0a, 0x0f, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x7f, 0x0a, 0x07, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, - 0x12, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, - 0x64, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x6e, - 0x6f, 0x64, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x6e, 0x6f, - 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x91, 0x01, 0x0a, 0x0e, 0x49, 0x6e, 0x73, 0x70, 0x65, - 0x63, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, - 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, - 0x64, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, - 0x12, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x73, 0x70, - 0x65, 0x63, 0x74, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x73, 0x0a, 0x09, 0x45, 0x6e, - 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, - 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x11, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, - 0x9c, 0x01, 0x0a, 0x14, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, - 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, - 0x64, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, + 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x55, 0x73, 0x65, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x18, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x2f, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x75, 0x73, 0x65, 0x64, 0x3a, 0x01, 0x2a, 0x32, 0x9d, 0x04, 0x0a, 0x11, 0x4f, 0x70, + 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, + 0x6c, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, + 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x75, 0x0a, + 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x31, - 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x2f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x9b, - 0x01, 0x0a, 0x11, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x42, 0x79, - 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x42, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x42, 0x79, 0x4e, 0x6f, 0x64, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1b, 0x12, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x2f, 0x75, 0x73, 0x61, - 0x67, 0x65, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa1, 0x01, 0x0a, - 0x13, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x65, 0x64, 0x52, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x50, - 0x75, 0x72, 0x67, 0x65, 0x12, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, - 0x6c, 0x61, 0x78, 0x65, 0x64, 0x52, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x75, 0x72, 0x67, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, - 0x64, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x65, 0x64, 0x52, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x50, 0x75, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, - 0x2f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, - 0x12, 0x96, 0x01, 0x0a, 0x10, 0x44, 0x72, 0x61, 0x69, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x44, - 0x72, 0x61, 0x69, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4a, 0x6f, 0x62, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x1a, - 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x2f, 0x61, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x64, 0x72, 0x61, 0x69, 0x6e, 0x2f, 0x7b, 0x6e, 0x6f, - 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xac, 0x01, 0x0a, 0x11, 0x43, 0x6f, - 0x72, 0x64, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, - 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x72, 0x64, 0x6f, 0x6e, 0x41, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x72, 0x64, 0x6f, - 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x1a, 0x27, 0x2f, 0x76, - 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x2f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x2f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, - 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xb1, 0x01, 0x0a, 0x13, 0x55, 0x6e, 0x63, - 0x6f, 0x72, 0x64, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x12, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x55, 0x6e, 0x63, 0x6f, 0x72, 0x64, - 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x55, 0x6e, - 0x63, 0x6f, 0x72, 0x64, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x2f, 0x61, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x2f, - 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x90, 0x01, 0x0a, - 0x15, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x55, 0x73, 0x65, 0x64, - 0x42, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x55, 0x73, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x2a, 0x16, 0x2f, 0x76, + 0x31, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2f, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x8e, 0x01, 0x0a, 0x0b, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x12, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x47, 0x72, 0x61, + 0x6e, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x22, 0x22, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2f, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2f, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, + 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x91, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, + 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x42, 0x79, - 0x74, 0x65, 0x73, 0x55, 0x73, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, - 0x65, 0x73, 0x2f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x75, 0x73, 0x65, 0x64, 0x3a, 0x01, 0x2a, 0x32, - 0x9d, 0x04, 0x0a, 0x11, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x42, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x6c, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, - 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x3a, 0x01, 0x2a, 0x12, 0x75, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x24, 0x2e, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x76, 0x6f, 0x6b, + 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x2f, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x2f, 0x7b, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x32, 0xee, 0x12, 0x0a, 0x11, 0x4f, 0x70, + 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, + 0x73, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x10, 0x22, 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x76, 0x0a, 0x05, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x12, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x18, 0x2a, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2f, 0x7b, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x8e, 0x01, 0x0a, 0x0b, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x29, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x47, 0x72, - 0x61, 0x6e, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2f, 0x7b, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x91, 0x01, 0x0a, 0x0c, - 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x2a, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x1d, 0x2f, - 0x76, 0x31, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2f, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, - 0x2f, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x32, - 0xee, 0x12, 0x0a, 0x11, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x73, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, - 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x22, 0x0b, 0x2f, 0x76, 0x31, 0x2f, - 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x76, 0x0a, 0x05, 0x43, 0x6c, - 0x6f, 0x6e, 0x65, 0x12, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, - 0x6c, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, - 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, - 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x3a, - 0x01, 0x2a, 0x12, 0x7c, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x27, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x7b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x7d, - 0x12, 0x87, 0x01, 0x0a, 0x07, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x28, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x65, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x73, 0x2f, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x7c, 0x0a, 0x06, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x2f, 0x7b, - 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xaa, 0x01, 0x0a, 0x12, 0x49, - 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x73, 0x12, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x73, - 0x70, 0x65, 0x63, 0x74, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x6d, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x19, 0x2a, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x7b, + 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x87, 0x01, 0x0a, 0x07, 0x49, + 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x73, 0x2f, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x77, 0x69, 0x74, 0x68, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x7f, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x12, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x1a, 0x17, 0x2f, 0x76, - 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x7b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x7f, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, - 0x73, 0x12, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x2f, - 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2f, 0x7b, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x97, 0x01, 0x0a, 0x0d, 0x43, 0x61, - 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x2e, 0x6f, 0x70, + 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x70, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xaa, 0x01, 0x0a, 0x12, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, + 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x33, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, + 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x57, 0x69, + 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x34, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x70, + 0x65, 0x63, 0x74, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1e, + 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x73, 0x70, + 0x65, 0x63, 0x74, 0x77, 0x69, 0x74, 0x68, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x01, + 0x2a, 0x12, 0x7f, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, - 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x55, - 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x70, + 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x1a, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x73, 0x2f, 0x7b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x3a, + 0x01, 0x2a, 0x12, 0x7f, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, - 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x55, - 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, + 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x73, 0x2f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x2f, 0x7b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, - 0x69, 0x64, 0x7d, 0x12, 0x79, 0x0a, 0x09, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x12, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x6e, 0x75, 0x6d, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6f, + 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2f, 0x7b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, + 0x69, 0x64, 0x7d, 0x12, 0x97, 0x01, 0x0a, 0x0d, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, + 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, + 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x75, 0x73, 0x61, 0x67, + 0x65, 0x2f, 0x7b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x79, 0x0a, + 0x09, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x13, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, 0x76, 0x31, + 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, 0xa5, 0x01, 0x0a, 0x14, 0x45, 0x6e, 0x75, + 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x73, 0x12, 0x35, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x6e, 0x75, + 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, + 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, + 0x12, 0x95, 0x01, 0x0a, 0x0e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x12, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, + 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x73, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xa0, 0x01, 0x0a, 0x0f, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x13, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x0d, 0x12, 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, 0xa5, - 0x01, 0x0a, 0x14, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x35, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, + 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, - 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x66, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x95, 0x01, 0x0a, 0x0e, 0x53, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x70, 0x65, + 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, + 0x2f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x9b, 0x01, 0x0a, 0x11, + 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x12, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x12, 0xd3, 0x01, 0x0a, 0x1c, 0x53, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, + 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x3d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x73, 0x2f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xa0, - 0x01, 0x0a, 0x0f, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x12, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, - 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x73, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x3a, 0x01, - 0x2a, 0x12, 0x9b, 0x01, 0x0a, 0x11, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x45, 0x6e, - 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, - 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x45, - 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x12, - 0xd3, 0x01, 0x0a, 0x1c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x45, 0x6e, 0x75, 0x6d, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, - 0x12, 0x3d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, - 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x3e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x22, 0x29, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2f, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, - 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xc2, 0x01, 0x0a, 0x16, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x12, 0x37, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x45, 0x6e, + 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x63, 0x68, - 0x65, 0x64, 0x75, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, 0x2f, 0x76, 0x31, - 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x76, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x83, 0x01, 0x0a, 0x0d, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x12, 0x28, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x45, 0x6e, 0x75, + 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x2e, 0x22, 0x29, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x73, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, + 0x2f, 0x7b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, + 0xc2, 0x01, 0x0a, 0x16, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x37, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x73, 0x2f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x2f, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, + 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x83, 0x01, 0x0a, 0x0d, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x12, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x3a, 0x01, 0x2a, - 0x32, 0x78, 0x0a, 0x10, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x57, - 0x61, 0x74, 0x63, 0x68, 0x12, 0x64, 0x0a, 0x05, 0x57, 0x61, 0x74, 0x63, 0x68, 0x12, 0x20, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x64, 0x6b, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x22, 0x09, 0x2f, 0x76, 0x31, 0x2f, - 0x77, 0x61, 0x74, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x30, 0x01, 0x32, 0x99, 0x04, 0x0a, 0x16, 0x4f, - 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x41, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x12, 0x7e, 0x0a, 0x06, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x12, - 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x2f, 0x61, 0x74, 0x74, 0x61, - 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x12, 0x7e, 0x0a, 0x06, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x12, - 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, + 0x6d, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x61, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x2f, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x3a, 0x01, 0x2a, 0x32, 0x78, 0x0a, 0x10, 0x4f, 0x70, + 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x57, 0x61, 0x74, 0x63, 0x68, 0x12, 0x64, + 0x0a, 0x05, 0x57, 0x61, 0x74, 0x63, 0x68, 0x12, 0x20, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x57, 0x61, 0x74, + 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x57, + 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x0e, 0x22, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x61, 0x74, 0x63, 0x68, 0x3a, + 0x01, 0x2a, 0x30, 0x01, 0x32, 0x99, 0x04, 0x0a, 0x16, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x12, + 0x7e, 0x0a, 0x06, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x12, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x74, + 0x74, 0x61, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x61, + 0x74, 0x74, 0x61, 0x63, 0x68, 0x2f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x12, + 0x7e, 0x0a, 0x06, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x12, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x65, + 0x74, 0x61, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x61, + 0x74, 0x74, 0x61, 0x63, 0x68, 0x2f, 0x64, 0x65, 0x74, 0x61, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x12, + 0x7a, 0x0a, 0x05, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x2f, 0x64, 0x65, 0x74, 0x61, - 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x12, 0x7a, 0x0a, 0x05, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x01, - 0x2a, 0x12, 0x82, 0x01, 0x0a, 0x07, 0x55, 0x6e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x6e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6c, 0x75, 0x6d, 0x65, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4d, 0x6f, 0x75, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1a, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x61, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x82, 0x01, 0x0a, 0x07, + 0x55, 0x6e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x55, 0x6e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x2f, 0x75, 0x6e, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x3a, 0x01, 0x2a, 0x32, 0xad, 0x03, 0x0a, 0x12, 0x4f, 0x70, 0x65, 0x6e, 0x53, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x12, 0x82, 0x01, - 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x75, 0x6d, 0x65, 0x55, 0x6e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x6e, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x61, + 0x74, 0x74, 0x61, 0x63, 0x68, 0x2f, 0x75, 0x6e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x01, 0x2a, + 0x32, 0xad, 0x03, 0x0a, 0x12, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x12, 0x82, 0x01, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x12, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, + 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, + 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x8c, 0x01, 0x0a, + 0x06, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, - 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, + 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, + 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, + 0x65, 0x2f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x82, 0x01, 0x0a, 0x06, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, + 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, - 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, - 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x3a, - 0x01, 0x2a, 0x12, 0x8c, 0x01, 0x0a, 0x06, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x2d, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, - 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, + 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, + 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, + 0x32, 0xe4, 0x04, 0x0a, 0x16, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x9b, 0x01, 0x0a, 0x07, + 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x12, 0x29, + 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x82, 0x01, 0x0a, 0x06, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x90, + 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x2a, 0x21, + 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, + 0x2f, 0x7b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, + 0x7d, 0x12, 0x93, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, 0x61, - 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x3a, 0x01, - 0x2a, 0x12, 0x82, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, 0x2e, 0x6f, + 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x26, 0x1a, 0x21, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, + 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x32, 0xb2, 0x08, 0x0a, 0x16, 0x4f, 0x70, 0x65, 0x6e, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x73, 0x12, 0x7f, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x70, + 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, + 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, + 0x3a, 0x01, 0x2a, 0x12, 0x8f, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2b, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, - 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x6d, - 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x32, 0xe4, 0x04, 0x0a, 0x16, 0x4f, 0x70, 0x65, 0x6e, 0x53, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x12, 0x9b, 0x01, 0x0a, 0x07, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x2d, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x6e, - 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x73, - 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x2b, 0x12, 0x29, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x2f, 0x7b, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, - 0x82, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, - 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x90, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, - 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x23, 0x2a, 0x21, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x93, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x12, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x1a, 0x21, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x32, 0xb2, 0x08, - 0x0a, 0x16, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x7f, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, + 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x24, 0x1a, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x73, 0x2f, 0x7b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, + 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x85, 0x01, 0x0a, 0x09, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x12, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x97, 0x01, + 0x0a, 0x07, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x2f, + 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x8c, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x8f, 0x01, 0x0a, 0x06, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x1a, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x85, 0x01, 0x0a, 0x09, - 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x73, 0x12, 0x97, 0x01, 0x0a, 0x07, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, + 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, - 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x6e, 0x73, - 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x73, 0x2f, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x63, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x8c, 0x01, - 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x2a, 0x1f, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x63, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9b, 0x01, 0x0a, - 0x08, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, - 0x12, 0x28, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x73, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x7b, 0x63, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xb5, 0x01, 0x0a, 0x10, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, - 0x35, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x2a, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x2f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x73, 0x2f, 0x7b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, - 0x64, 0x7d, 0x32, 0xff, 0x05, 0x0a, 0x19, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x12, 0x8c, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, - 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68, 0x65, - 0x64, 0x75, 0x6c, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, - 0x8c, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x2e, 0x6f, 0x70, 0x65, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x2a, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x08, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x65, 0x12, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x31, 0x2f, + 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x2f, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x65, 0x2f, 0x7b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xb5, 0x01, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x35, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x36, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, + 0x2a, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x73, 0x2f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x63, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x32, 0xff, 0x05, 0x0a, + 0x19, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x8c, 0x01, 0x0a, 0x06, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, + 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x8c, 0x01, 0x0a, 0x06, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x1a, + 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x69, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x92, 0x01, 0x0a, 0x09, 0x45, 0x6e, 0x75, + 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x70, + 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x6e, + 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x9b, 0x01, + 0x0a, 0x07, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x73, + 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, - 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x1a, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x92, - 0x01, 0x0a, 0x09, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x32, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x69, 0x65, 0x73, 0x12, 0x9b, 0x01, 0x0a, 0x07, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, - 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x76, - 0x31, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, - 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x12, 0x90, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2f, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x2a, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68, - 0x65, 0x64, 0x75, 0x6c, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x32, 0x9e, 0x12, 0x0a, 0x16, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, - 0x82, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, - 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, - 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x97, 0x01, 0x0a, 0x0b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, - 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1b, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x62, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3a, 0x01, 0x2a, 0x12, 0x8d, - 0x01, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x2d, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, + 0x6b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, + 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x73, + 0x70, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x90, 0x01, 0x0a, 0x06, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x53, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1d, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x62, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x73, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x92, - 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, - 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x2a, 0x23, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, - 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2f, 0x7b, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, - 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, - 0x6c, 0x12, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x64, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x61, 0x6c, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0xbe, 0x01, 0x0a, 0x14, - 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x73, 0x12, 0x3a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x1d, 0x2a, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x32, 0x9e, + 0x12, 0x0a, 0x16, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, + 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x82, 0x01, 0x0a, 0x06, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, - 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x3b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x2f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x89, 0x01, 0x0a, - 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, - 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x8d, 0x01, 0x0a, 0x07, 0x43, 0x61, 0x74, - 0x61, 0x6c, 0x6f, 0x67, 0x12, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6c, 0x6f, 0x75, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x97, + 0x01, 0x0a, 0x0b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x31, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3a, 0x01, 0x2a, 0x12, 0x8d, 0x01, 0x0a, 0x07, 0x52, 0x65, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x12, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x63, 0x61, - 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x3a, 0x01, 0x2a, 0x12, 0x9a, 0x01, 0x0a, 0x07, 0x48, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x68, 0x69, - 0x73, 0x74, 0x6f, 0x72, 0x79, 0x2f, 0x7b, 0x73, 0x72, 0x63, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9d, 0x01, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, - 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x62, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x9b, 0x01, 0x0a, 0x0b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, - 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x62, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, - 0x3a, 0x01, 0x2a, 0x12, 0x9b, 0x01, 0x0a, 0x0b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x72, 0x65, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x92, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x12, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, - 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1f, 0x1a, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x62, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x3a, 0x01, - 0x2a, 0x12, 0xad, 0x01, 0x0a, 0x0b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x12, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x63, 0x6b, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, - 0x2a, 0x2f, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x73, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x62, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, - 0x7d, 0x12, 0xa1, 0x01, 0x0a, 0x0e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x6f, 0x70, 0x65, + 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x2a, 0x23, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, + 0x6f, 0x75, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x2f, 0x7b, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, + 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x12, 0x2f, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, + 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x6f, 0x75, + 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x61, + 0x6c, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0xbe, 0x01, 0x0a, 0x14, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x3a, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x45, + 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, - 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x63, - 0x6c, 0x6f, 0x75, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x73, 0x63, 0x68, 0x65, - 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x7e, 0x0a, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2a, 0x2e, + 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, + 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x73, 0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x2f, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x89, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x6f, 0x75, + 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3a, + 0x01, 0x2a, 0x12, 0x8d, 0x01, 0x0a, 0x07, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x12, 0x2d, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x69, - 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, + 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x3a, + 0x01, 0x2a, 0x12, 0x9a, 0x01, 0x0a, 0x07, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2d, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x48, + 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x48, 0x69, + 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x2f, + 0x7b, 0x73, 0x72, 0x63, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, + 0x9d, 0x01, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, + 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, - 0x2f, 0x73, 0x69, 0x7a, 0x65, 0x32, 0x8f, 0x0a, 0x0a, 0x11, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x91, 0x01, 0x0a, 0x06, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, - 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, - 0x97, 0x01, 0x0a, 0x09, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x35, 0x2e, + 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x3a, 0x01, 0x2a, 0x12, + 0x9b, 0x01, 0x0a, 0x0b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, + 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x53, 0x63, 0x68, 0x65, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, + 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x9b, 0x01, + 0x0a, 0x0b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, + 0x68, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x1a, 0x1a, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xad, 0x01, 0x0a, 0x0b, + 0x53, 0x63, 0x68, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, + 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x2a, 0x2f, 0x2f, 0x76, 0x31, 0x2f, + 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x73, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa1, 0x01, 0x0a, 0x0e, + 0x53, 0x63, 0x68, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x34, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, + 0x7e, 0x0a, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, + 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, + 0x6f, 0x75, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x73, 0x69, 0x7a, 0x65, 0x32, + 0x8f, 0x0a, 0x0a, 0x11, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x91, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x12, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x6e, 0x75, 0x6d, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0xa0, 0x01, 0x0a, 0x07, 0x49, 0x6e, - 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x73, 0x70, - 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x69, 0x6e, - 0x73, 0x70, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x91, 0x01, 0x0a, - 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x18, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x97, 0x01, 0x0a, 0x09, 0x45, 0x6e, + 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x35, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, - 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, - 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x1a, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x3a, 0x01, 0x2a, - 0x12, 0x95, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x32, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, - 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x6e, + 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, + 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x69, 0x65, 0x73, 0x12, 0xa0, 0x01, 0x0a, 0x07, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, 0x76, - 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, - 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xac, 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x74, - 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x36, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, - 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x53, 0x65, - 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x37, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, - 0x22, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2f, 0x7b, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xae, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x3a, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, - 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, - 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, - 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, - 0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x9c, 0x01, 0x0a, 0x07, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x12, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x6e, 0x73, 0x70, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x24, 0x12, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x91, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x12, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x18, 0x1a, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x32, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x22, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x3a, 0x01, 0x2a, 0x32, 0xcb, 0x03, 0x0a, 0x19, 0x4f, 0x70, 0x65, 0x6e, - 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x8e, 0x01, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, - 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x73, 0x75, 0x6d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x73, 0x75, 0x6d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x22, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, - 0x72, 0x69, 0x66, 0x79, 0x2d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x2f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x8f, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, - 0x31, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x2d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, - 0x6d, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x8a, 0x01, 0x0a, 0x04, 0x53, 0x74, 0x6f, - 0x70, 0x12, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x73, 0x75, 0x6d, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, - 0x72, 0x69, 0x66, 0x79, 0x2d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x2f, 0x73, 0x74, - 0x6f, 0x70, 0x3a, 0x01, 0x2a, 0x42, 0x22, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x50, 0x01, 0x5a, 0x09, - 0x2e, 0x2f, 0x61, 0x70, 0x69, 0x3b, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x12, 0xac, 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x12, 0x36, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, + 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x22, 0x2f, 0x76, 0x31, 0x2f, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, + 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, + 0x2a, 0x12, 0xae, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x73, + 0x70, 0x65, 0x63, 0x74, 0x12, 0x3a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x3b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, + 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x12, 0x9c, 0x01, 0x0a, 0x07, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x33, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x20, 0x22, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x3a, 0x01, + 0x2a, 0x32, 0xcb, 0x03, 0x0a, 0x19, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, + 0x8e, 0x01, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, + 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, 0x56, + 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1e, 0x22, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x2d, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0x01, 0x2a, + 0x12, 0x8f, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2f, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, + 0x6b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x64, 0x6b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x72, 0x69, + 0x66, 0x79, 0x2d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x2f, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x8a, 0x01, 0x0a, 0x04, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x2d, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, + 0x6b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x53, + 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x64, 0x6b, + 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x53, 0x74, + 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x2d, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x3a, 0x01, 0x2a, 0x42, + 0x22, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x50, 0x01, 0x5a, 0x09, 0x2e, 0x2f, 0x61, 0x70, 0x69, 0x3b, + 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -37339,7 +38395,7 @@ func file_api_api_proto_rawDescGZIP() []byte { } var file_api_api_proto_enumTypes = make([]protoimpl.EnumInfo, 60) -var file_api_api_proto_msgTypes = make([]protoimpl.MessageInfo, 465) +var file_api_api_proto_msgTypes = make([]protoimpl.MessageInfo, 482) var file_api_api_proto_goTypes = []interface{}{ (Status)(0), // 0: openstorage.api.Status (DriverType)(0), // 1: openstorage.api.DriverType @@ -37602,285 +38658,302 @@ var file_api_api_proto_goTypes = []interface{}{ (*SdkClusterInspectCurrentResponse)(nil), // 258: openstorage.api.SdkClusterInspectCurrentResponse (*SdkNodeInspectRequest)(nil), // 259: openstorage.api.SdkNodeInspectRequest (*Job)(nil), // 260: openstorage.api.Job - (*SdkJobResponse)(nil), // 261: openstorage.api.SdkJobResponse - (*NodeDrainAttachmentOptions)(nil), // 262: openstorage.api.NodeDrainAttachmentOptions - (*SdkNodeDrainAttachmentsRequest)(nil), // 263: openstorage.api.SdkNodeDrainAttachmentsRequest - (*NodeDrainAttachmentsJob)(nil), // 264: openstorage.api.NodeDrainAttachmentsJob - (*CloudDriveTransferJob)(nil), // 265: openstorage.api.CloudDriveTransferJob - (*CollectDiagsJob)(nil), // 266: openstorage.api.CollectDiagsJob - (*DefragJob)(nil), // 267: openstorage.api.DefragJob - (*DefragNodeStatus)(nil), // 268: openstorage.api.DefragNodeStatus - (*DefragPoolStatus)(nil), // 269: openstorage.api.DefragPoolStatus - (*DiagsCollectionStatus)(nil), // 270: openstorage.api.DiagsCollectionStatus - (*SdkDiagsCollectRequest)(nil), // 271: openstorage.api.SdkDiagsCollectRequest - (*SdkDiagsCollectResponse)(nil), // 272: openstorage.api.SdkDiagsCollectResponse - (*DiagsNodeSelector)(nil), // 273: openstorage.api.DiagsNodeSelector - (*DiagsVolumeSelector)(nil), // 274: openstorage.api.DiagsVolumeSelector - (*SdkEnumerateJobsRequest)(nil), // 275: openstorage.api.SdkEnumerateJobsRequest - (*SdkEnumerateJobsResponse)(nil), // 276: openstorage.api.SdkEnumerateJobsResponse - (*SdkUpdateJobRequest)(nil), // 277: openstorage.api.SdkUpdateJobRequest - (*SdkUpdateJobResponse)(nil), // 278: openstorage.api.SdkUpdateJobResponse - (*SdkGetJobStatusRequest)(nil), // 279: openstorage.api.SdkGetJobStatusRequest - (*JobAudit)(nil), // 280: openstorage.api.JobAudit - (*JobWorkSummary)(nil), // 281: openstorage.api.JobWorkSummary - (*JobSummary)(nil), // 282: openstorage.api.JobSummary - (*SdkGetJobStatusResponse)(nil), // 283: openstorage.api.SdkGetJobStatusResponse - (*DrainAttachmentsSummary)(nil), // 284: openstorage.api.DrainAttachmentsSummary - (*SdkNodeCordonAttachmentsRequest)(nil), // 285: openstorage.api.SdkNodeCordonAttachmentsRequest - (*SdkNodeCordonAttachmentsResponse)(nil), // 286: openstorage.api.SdkNodeCordonAttachmentsResponse - (*SdkNodeUncordonAttachmentsRequest)(nil), // 287: openstorage.api.SdkNodeUncordonAttachmentsRequest - (*SdkNodeUncordonAttachmentsResponse)(nil), // 288: openstorage.api.SdkNodeUncordonAttachmentsResponse - (*SdkStoragePoolResizeRequest)(nil), // 289: openstorage.api.SdkStoragePoolResizeRequest - (*StorageRebalanceTriggerThreshold)(nil), // 290: openstorage.api.StorageRebalanceTriggerThreshold - (*SdkStorageRebalanceRequest)(nil), // 291: openstorage.api.SdkStorageRebalanceRequest - (*SdkStorageRebalanceResponse)(nil), // 292: openstorage.api.SdkStorageRebalanceResponse - (*StorageRebalanceJob)(nil), // 293: openstorage.api.StorageRebalanceJob - (*StorageRebalanceSummary)(nil), // 294: openstorage.api.StorageRebalanceSummary - (*StorageRebalanceWorkSummary)(nil), // 295: openstorage.api.StorageRebalanceWorkSummary - (*StorageRebalanceAudit)(nil), // 296: openstorage.api.StorageRebalanceAudit - (*SdkUpdateRebalanceJobRequest)(nil), // 297: openstorage.api.SdkUpdateRebalanceJobRequest - (*SdkUpdateRebalanceJobResponse)(nil), // 298: openstorage.api.SdkUpdateRebalanceJobResponse - (*SdkGetRebalanceJobStatusRequest)(nil), // 299: openstorage.api.SdkGetRebalanceJobStatusRequest - (*SdkGetRebalanceJobStatusResponse)(nil), // 300: openstorage.api.SdkGetRebalanceJobStatusResponse - (*SdkEnumerateRebalanceJobsRequest)(nil), // 301: openstorage.api.SdkEnumerateRebalanceJobsRequest - (*SdkEnumerateRebalanceJobsResponse)(nil), // 302: openstorage.api.SdkEnumerateRebalanceJobsResponse - (*RebalanceScheduleInfo)(nil), // 303: openstorage.api.RebalanceScheduleInfo - (*SdkCreateRebalanceScheduleRequest)(nil), // 304: openstorage.api.SdkCreateRebalanceScheduleRequest - (*SdkCreateRebalanceScheduleResponse)(nil), // 305: openstorage.api.SdkCreateRebalanceScheduleResponse - (*SdkGetRebalanceScheduleRequest)(nil), // 306: openstorage.api.SdkGetRebalanceScheduleRequest - (*SdkGetRebalanceScheduleResponse)(nil), // 307: openstorage.api.SdkGetRebalanceScheduleResponse - (*SdkDeleteRebalanceScheduleRequest)(nil), // 308: openstorage.api.SdkDeleteRebalanceScheduleRequest - (*SdkDeleteRebalanceScheduleResponse)(nil), // 309: openstorage.api.SdkDeleteRebalanceScheduleResponse - (*SdkStoragePool)(nil), // 310: openstorage.api.SdkStoragePool - (*SdkStoragePoolResizeResponse)(nil), // 311: openstorage.api.SdkStoragePoolResizeResponse - (*SdkNodeInspectResponse)(nil), // 312: openstorage.api.SdkNodeInspectResponse - (*SdkNodeInspectCurrentRequest)(nil), // 313: openstorage.api.SdkNodeInspectCurrentRequest - (*SdkNodeInspectCurrentResponse)(nil), // 314: openstorage.api.SdkNodeInspectCurrentResponse - (*SdkNodeEnumerateRequest)(nil), // 315: openstorage.api.SdkNodeEnumerateRequest - (*SdkNodeEnumerateResponse)(nil), // 316: openstorage.api.SdkNodeEnumerateResponse - (*SdkNodeEnumerateWithFiltersRequest)(nil), // 317: openstorage.api.SdkNodeEnumerateWithFiltersRequest - (*SdkNodeEnumerateWithFiltersResponse)(nil), // 318: openstorage.api.SdkNodeEnumerateWithFiltersResponse - (*SdkObjectstoreInspectRequest)(nil), // 319: openstorage.api.SdkObjectstoreInspectRequest - (*SdkObjectstoreInspectResponse)(nil), // 320: openstorage.api.SdkObjectstoreInspectResponse - (*SdkObjectstoreCreateRequest)(nil), // 321: openstorage.api.SdkObjectstoreCreateRequest - (*SdkObjectstoreCreateResponse)(nil), // 322: openstorage.api.SdkObjectstoreCreateResponse - (*SdkObjectstoreDeleteRequest)(nil), // 323: openstorage.api.SdkObjectstoreDeleteRequest - (*SdkObjectstoreDeleteResponse)(nil), // 324: openstorage.api.SdkObjectstoreDeleteResponse - (*SdkObjectstoreUpdateRequest)(nil), // 325: openstorage.api.SdkObjectstoreUpdateRequest - (*SdkObjectstoreUpdateResponse)(nil), // 326: openstorage.api.SdkObjectstoreUpdateResponse - (*SdkCloudBackupCreateRequest)(nil), // 327: openstorage.api.SdkCloudBackupCreateRequest - (*SdkCloudBackupCreateResponse)(nil), // 328: openstorage.api.SdkCloudBackupCreateResponse - (*SdkCloudBackupGroupCreateRequest)(nil), // 329: openstorage.api.SdkCloudBackupGroupCreateRequest - (*SdkCloudBackupGroupCreateResponse)(nil), // 330: openstorage.api.SdkCloudBackupGroupCreateResponse - (*SdkCloudBackupRestoreRequest)(nil), // 331: openstorage.api.SdkCloudBackupRestoreRequest - (*SdkCloudBackupRestoreResponse)(nil), // 332: openstorage.api.SdkCloudBackupRestoreResponse - (*SdkCloudBackupDeleteRequest)(nil), // 333: openstorage.api.SdkCloudBackupDeleteRequest - (*SdkCloudBackupDeleteResponse)(nil), // 334: openstorage.api.SdkCloudBackupDeleteResponse - (*SdkCloudBackupDeleteAllRequest)(nil), // 335: openstorage.api.SdkCloudBackupDeleteAllRequest - (*SdkCloudBackupDeleteAllResponse)(nil), // 336: openstorage.api.SdkCloudBackupDeleteAllResponse - (*SdkCloudBackupEnumerateWithFiltersRequest)(nil), // 337: openstorage.api.SdkCloudBackupEnumerateWithFiltersRequest - (*SdkCloudBackupInfo)(nil), // 338: openstorage.api.SdkCloudBackupInfo - (*SdkCloudBackupEnumerateWithFiltersResponse)(nil), // 339: openstorage.api.SdkCloudBackupEnumerateWithFiltersResponse - (*SdkCloudBackupStatus)(nil), // 340: openstorage.api.SdkCloudBackupStatus - (*SdkCloudBackupStatusRequest)(nil), // 341: openstorage.api.SdkCloudBackupStatusRequest - (*SdkCloudBackupStatusResponse)(nil), // 342: openstorage.api.SdkCloudBackupStatusResponse - (*SdkCloudBackupCatalogRequest)(nil), // 343: openstorage.api.SdkCloudBackupCatalogRequest - (*SdkCloudBackupCatalogResponse)(nil), // 344: openstorage.api.SdkCloudBackupCatalogResponse - (*SdkCloudBackupHistoryItem)(nil), // 345: openstorage.api.SdkCloudBackupHistoryItem - (*SdkCloudBackupHistoryRequest)(nil), // 346: openstorage.api.SdkCloudBackupHistoryRequest - (*SdkCloudBackupHistoryResponse)(nil), // 347: openstorage.api.SdkCloudBackupHistoryResponse - (*SdkCloudBackupStateChangeRequest)(nil), // 348: openstorage.api.SdkCloudBackupStateChangeRequest - (*SdkCloudBackupStateChangeResponse)(nil), // 349: openstorage.api.SdkCloudBackupStateChangeResponse - (*SdkCloudBackupScheduleInfo)(nil), // 350: openstorage.api.SdkCloudBackupScheduleInfo - (*SdkCloudBackupSchedCreateRequest)(nil), // 351: openstorage.api.SdkCloudBackupSchedCreateRequest - (*SdkCloudBackupSchedCreateResponse)(nil), // 352: openstorage.api.SdkCloudBackupSchedCreateResponse - (*SdkCloudBackupSchedUpdateRequest)(nil), // 353: openstorage.api.SdkCloudBackupSchedUpdateRequest - (*SdkCloudBackupSchedUpdateResponse)(nil), // 354: openstorage.api.SdkCloudBackupSchedUpdateResponse - (*SdkCloudBackupSchedDeleteRequest)(nil), // 355: openstorage.api.SdkCloudBackupSchedDeleteRequest - (*SdkCloudBackupSchedDeleteResponse)(nil), // 356: openstorage.api.SdkCloudBackupSchedDeleteResponse - (*SdkCloudBackupSchedEnumerateRequest)(nil), // 357: openstorage.api.SdkCloudBackupSchedEnumerateRequest - (*SdkCloudBackupSchedEnumerateResponse)(nil), // 358: openstorage.api.SdkCloudBackupSchedEnumerateResponse - (*SdkCloudBackupSizeRequest)(nil), // 359: openstorage.api.SdkCloudBackupSizeRequest - (*SdkCloudBackupSizeResponse)(nil), // 360: openstorage.api.SdkCloudBackupSizeResponse - (*SdkRule)(nil), // 361: openstorage.api.SdkRule - (*SdkRole)(nil), // 362: openstorage.api.SdkRole - (*SdkRoleCreateRequest)(nil), // 363: openstorage.api.SdkRoleCreateRequest - (*SdkRoleCreateResponse)(nil), // 364: openstorage.api.SdkRoleCreateResponse - (*SdkRoleEnumerateRequest)(nil), // 365: openstorage.api.SdkRoleEnumerateRequest - (*SdkRoleEnumerateResponse)(nil), // 366: openstorage.api.SdkRoleEnumerateResponse - (*SdkRoleInspectRequest)(nil), // 367: openstorage.api.SdkRoleInspectRequest - (*SdkRoleInspectResponse)(nil), // 368: openstorage.api.SdkRoleInspectResponse - (*SdkRoleDeleteRequest)(nil), // 369: openstorage.api.SdkRoleDeleteRequest - (*SdkRoleDeleteResponse)(nil), // 370: openstorage.api.SdkRoleDeleteResponse - (*SdkRoleUpdateRequest)(nil), // 371: openstorage.api.SdkRoleUpdateRequest - (*SdkRoleUpdateResponse)(nil), // 372: openstorage.api.SdkRoleUpdateResponse - (*FilesystemTrim)(nil), // 373: openstorage.api.FilesystemTrim - (*SdkFilesystemTrimStartRequest)(nil), // 374: openstorage.api.SdkFilesystemTrimStartRequest - (*SdkFilesystemTrimStartResponse)(nil), // 375: openstorage.api.SdkFilesystemTrimStartResponse - (*SdkFilesystemTrimStatusRequest)(nil), // 376: openstorage.api.SdkFilesystemTrimStatusRequest - (*SdkFilesystemTrimStatusResponse)(nil), // 377: openstorage.api.SdkFilesystemTrimStatusResponse - (*SdkAutoFSTrimStatusRequest)(nil), // 378: openstorage.api.SdkAutoFSTrimStatusRequest - (*SdkAutoFSTrimStatusResponse)(nil), // 379: openstorage.api.SdkAutoFSTrimStatusResponse - (*SdkAutoFSTrimUsageRequest)(nil), // 380: openstorage.api.SdkAutoFSTrimUsageRequest - (*SdkAutoFSTrimUsageResponse)(nil), // 381: openstorage.api.SdkAutoFSTrimUsageResponse - (*SdkFilesystemTrimStopRequest)(nil), // 382: openstorage.api.SdkFilesystemTrimStopRequest - (*SdkVolumeBytesUsedResponse)(nil), // 383: openstorage.api.SdkVolumeBytesUsedResponse - (*SdkVolumeBytesUsedRequest)(nil), // 384: openstorage.api.SdkVolumeBytesUsedRequest - (*SdkFilesystemTrimStopResponse)(nil), // 385: openstorage.api.SdkFilesystemTrimStopResponse - (*SdkAutoFSTrimPushRequest)(nil), // 386: openstorage.api.SdkAutoFSTrimPushRequest - (*SdkAutoFSTrimPushResponse)(nil), // 387: openstorage.api.SdkAutoFSTrimPushResponse - (*SdkAutoFSTrimPopRequest)(nil), // 388: openstorage.api.SdkAutoFSTrimPopRequest - (*SdkAutoFSTrimPopResponse)(nil), // 389: openstorage.api.SdkAutoFSTrimPopResponse - (*FilesystemCheck)(nil), // 390: openstorage.api.FilesystemCheck - (*FilesystemCheckSnapInfo)(nil), // 391: openstorage.api.FilesystemCheckSnapInfo - (*FilesystemCheckVolInfo)(nil), // 392: openstorage.api.FilesystemCheckVolInfo - (*SdkFilesystemCheckStartRequest)(nil), // 393: openstorage.api.SdkFilesystemCheckStartRequest - (*SdkFilesystemCheckStartResponse)(nil), // 394: openstorage.api.SdkFilesystemCheckStartResponse - (*SdkFilesystemCheckStatusRequest)(nil), // 395: openstorage.api.SdkFilesystemCheckStatusRequest - (*SdkFilesystemCheckStatusResponse)(nil), // 396: openstorage.api.SdkFilesystemCheckStatusResponse - (*SdkFilesystemCheckStopRequest)(nil), // 397: openstorage.api.SdkFilesystemCheckStopRequest - (*SdkFilesystemCheckStopResponse)(nil), // 398: openstorage.api.SdkFilesystemCheckStopResponse - (*SdkFilesystemCheckListSnapshotsRequest)(nil), // 399: openstorage.api.SdkFilesystemCheckListSnapshotsRequest - (*SdkFilesystemCheckListSnapshotsResponse)(nil), // 400: openstorage.api.SdkFilesystemCheckListSnapshotsResponse - (*SdkFilesystemCheckDeleteSnapshotsRequest)(nil), // 401: openstorage.api.SdkFilesystemCheckDeleteSnapshotsRequest - (*SdkFilesystemCheckDeleteSnapshotsResponse)(nil), // 402: openstorage.api.SdkFilesystemCheckDeleteSnapshotsResponse - (*SdkFilesystemCheckListVolumesRequest)(nil), // 403: openstorage.api.SdkFilesystemCheckListVolumesRequest - (*SdkFilesystemCheckListVolumesResponse)(nil), // 404: openstorage.api.SdkFilesystemCheckListVolumesResponse - (*SdkIdentityCapabilitiesRequest)(nil), // 405: openstorage.api.SdkIdentityCapabilitiesRequest - (*SdkIdentityCapabilitiesResponse)(nil), // 406: openstorage.api.SdkIdentityCapabilitiesResponse - (*SdkIdentityVersionRequest)(nil), // 407: openstorage.api.SdkIdentityVersionRequest - (*SdkIdentityVersionResponse)(nil), // 408: openstorage.api.SdkIdentityVersionResponse - (*SdkServiceCapability)(nil), // 409: openstorage.api.SdkServiceCapability - (*SdkVersion)(nil), // 410: openstorage.api.SdkVersion - (*StorageVersion)(nil), // 411: openstorage.api.StorageVersion - (*CloudMigrate)(nil), // 412: openstorage.api.CloudMigrate - (*CloudMigrateStartRequest)(nil), // 413: openstorage.api.CloudMigrateStartRequest - (*SdkCloudMigrateStartRequest)(nil), // 414: openstorage.api.SdkCloudMigrateStartRequest - (*CloudMigrateStartResponse)(nil), // 415: openstorage.api.CloudMigrateStartResponse - (*SdkCloudMigrateStartResponse)(nil), // 416: openstorage.api.SdkCloudMigrateStartResponse - (*CloudMigrateCancelRequest)(nil), // 417: openstorage.api.CloudMigrateCancelRequest - (*SdkCloudMigrateCancelRequest)(nil), // 418: openstorage.api.SdkCloudMigrateCancelRequest - (*SdkCloudMigrateCancelResponse)(nil), // 419: openstorage.api.SdkCloudMigrateCancelResponse - (*CloudMigrateInfo)(nil), // 420: openstorage.api.CloudMigrateInfo - (*CloudMigrateInfoList)(nil), // 421: openstorage.api.CloudMigrateInfoList - (*SdkCloudMigrateStatusRequest)(nil), // 422: openstorage.api.SdkCloudMigrateStatusRequest - (*CloudMigrateStatusRequest)(nil), // 423: openstorage.api.CloudMigrateStatusRequest - (*CloudMigrateStatusResponse)(nil), // 424: openstorage.api.CloudMigrateStatusResponse - (*SdkCloudMigrateStatusResponse)(nil), // 425: openstorage.api.SdkCloudMigrateStatusResponse - (*ClusterPairMode)(nil), // 426: openstorage.api.ClusterPairMode - (*ClusterPairCreateRequest)(nil), // 427: openstorage.api.ClusterPairCreateRequest - (*ClusterPairCreateResponse)(nil), // 428: openstorage.api.ClusterPairCreateResponse - (*SdkClusterPairCreateRequest)(nil), // 429: openstorage.api.SdkClusterPairCreateRequest - (*SdkClusterPairCreateResponse)(nil), // 430: openstorage.api.SdkClusterPairCreateResponse - (*ClusterPairProcessRequest)(nil), // 431: openstorage.api.ClusterPairProcessRequest - (*ClusterPairProcessResponse)(nil), // 432: openstorage.api.ClusterPairProcessResponse - (*SdkClusterPairDeleteRequest)(nil), // 433: openstorage.api.SdkClusterPairDeleteRequest - (*SdkClusterPairDeleteResponse)(nil), // 434: openstorage.api.SdkClusterPairDeleteResponse - (*ClusterPairTokenGetResponse)(nil), // 435: openstorage.api.ClusterPairTokenGetResponse - (*SdkClusterPairGetTokenRequest)(nil), // 436: openstorage.api.SdkClusterPairGetTokenRequest - (*SdkClusterPairGetTokenResponse)(nil), // 437: openstorage.api.SdkClusterPairGetTokenResponse - (*SdkClusterPairResetTokenRequest)(nil), // 438: openstorage.api.SdkClusterPairResetTokenRequest - (*SdkClusterPairResetTokenResponse)(nil), // 439: openstorage.api.SdkClusterPairResetTokenResponse - (*ClusterPairInfo)(nil), // 440: openstorage.api.ClusterPairInfo - (*SdkClusterPairInspectRequest)(nil), // 441: openstorage.api.SdkClusterPairInspectRequest - (*ClusterPairGetResponse)(nil), // 442: openstorage.api.ClusterPairGetResponse - (*SdkClusterPairInspectResponse)(nil), // 443: openstorage.api.SdkClusterPairInspectResponse - (*SdkClusterPairEnumerateRequest)(nil), // 444: openstorage.api.SdkClusterPairEnumerateRequest - (*ClusterPairsEnumerateResponse)(nil), // 445: openstorage.api.ClusterPairsEnumerateResponse - (*SdkClusterPairEnumerateResponse)(nil), // 446: openstorage.api.SdkClusterPairEnumerateResponse - (*Catalog)(nil), // 447: openstorage.api.Catalog - (*Report)(nil), // 448: openstorage.api.Report - (*CatalogResponse)(nil), // 449: openstorage.api.CatalogResponse - (*LocateResponse)(nil), // 450: openstorage.api.LocateResponse - (*VolumePlacementStrategy)(nil), // 451: openstorage.api.VolumePlacementStrategy - (*ReplicaPlacementSpec)(nil), // 452: openstorage.api.ReplicaPlacementSpec - (*VolumePlacementSpec)(nil), // 453: openstorage.api.VolumePlacementSpec - (*LabelSelectorRequirement)(nil), // 454: openstorage.api.LabelSelectorRequirement - (*RestoreVolSnashotSchedule)(nil), // 455: openstorage.api.RestoreVolSnashotSchedule - (*RestoreVolStoragePolicy)(nil), // 456: openstorage.api.RestoreVolStoragePolicy - (*RestoreVolumeSpec)(nil), // 457: openstorage.api.RestoreVolumeSpec - (*SdkVolumeCatalogRequest)(nil), // 458: openstorage.api.SdkVolumeCatalogRequest - (*SdkVolumeCatalogResponse)(nil), // 459: openstorage.api.SdkVolumeCatalogResponse - (*VerifyChecksum)(nil), // 460: openstorage.api.VerifyChecksum - (*SdkVerifyChecksumStartRequest)(nil), // 461: openstorage.api.SdkVerifyChecksumStartRequest - (*SdkVerifyChecksumStartResponse)(nil), // 462: openstorage.api.SdkVerifyChecksumStartResponse - (*SdkVerifyChecksumStatusRequest)(nil), // 463: openstorage.api.SdkVerifyChecksumStatusRequest - (*SdkVerifyChecksumStatusResponse)(nil), // 464: openstorage.api.SdkVerifyChecksumStatusResponse - (*SdkVerifyChecksumStopRequest)(nil), // 465: openstorage.api.SdkVerifyChecksumStopRequest - (*SdkVerifyChecksumStopResponse)(nil), // 466: openstorage.api.SdkVerifyChecksumStopResponse - nil, // 467: openstorage.api.StoragePool.LabelsEntry - nil, // 468: openstorage.api.SchedulerTopology.LabelsEntry - nil, // 469: openstorage.api.StoragePoolOperation.ParamsEntry - nil, // 470: openstorage.api.TopologyRequirement.LabelsEntry - nil, // 471: openstorage.api.VolumeLocator.VolumeLabelsEntry - nil, // 472: openstorage.api.MountOptions.OptionsEntry - nil, // 473: openstorage.api.VolumeSpec.VolumeLabelsEntry - nil, // 474: openstorage.api.VolumeSpecPolicy.VolumeLabelsEntry - nil, // 475: openstorage.api.RuntimeStateMap.RuntimeStateEntry - (*Ownership_PublicAccessControl)(nil), // 476: openstorage.api.Ownership.PublicAccessControl - (*Ownership_AccessControl)(nil), // 477: openstorage.api.Ownership.AccessControl - nil, // 478: openstorage.api.Ownership.AccessControl.GroupsEntry - nil, // 479: openstorage.api.Ownership.AccessControl.CollaboratorsEntry - nil, // 480: openstorage.api.Volume.AttachInfoEntry - nil, // 481: openstorage.api.VolumeSetRequest.OptionsEntry - nil, // 482: openstorage.api.VolumeServiceRequest.SrvCmdParamsEntry - nil, // 483: openstorage.api.VolumeServiceInstanceResponse.StatusEntry - nil, // 484: openstorage.api.ActiveRequest.ReqestKVEntry - nil, // 485: openstorage.api.GroupSnapCreateRequest.LabelsEntry - nil, // 486: openstorage.api.GroupSnapCreateResponse.SnapshotsEntry - nil, // 487: openstorage.api.StorageNode.DisksEntry - nil, // 488: openstorage.api.StorageNode.NodeLabelsEntry - nil, // 489: openstorage.api.SdkVolumeMountRequest.DriverOptionsEntry - nil, // 490: openstorage.api.SdkVolumeUnmountRequest.DriverOptionsEntry - nil, // 491: openstorage.api.SdkVolumeAttachRequest.DriverOptionsEntry - nil, // 492: openstorage.api.SdkVolumeDetachRequest.DriverOptionsEntry - nil, // 493: openstorage.api.SdkVolumeCreateRequest.LabelsEntry - nil, // 494: openstorage.api.SdkVolumeCloneRequest.AdditionalLabelsEntry - nil, // 495: openstorage.api.SdkVolumeInspectResponse.LabelsEntry - nil, // 496: openstorage.api.SdkVolumeInspectWithFiltersRequest.LabelsEntry - nil, // 497: openstorage.api.SdkVolumeUpdateRequest.LabelsEntry - nil, // 498: openstorage.api.SdkVolumeEnumerateWithFiltersRequest.LabelsEntry - nil, // 499: openstorage.api.SdkVolumeSnapshotCreateRequest.LabelsEntry - nil, // 500: openstorage.api.SdkVolumeSnapshotEnumerateWithFiltersRequest.LabelsEntry - nil, // 501: openstorage.api.SdkVolumeWatchRequest.LabelsEntry - nil, // 502: openstorage.api.DefragNodeStatus.PoolStatusEntry - nil, // 503: openstorage.api.SdkCloudBackupCreateRequest.LabelsEntry - nil, // 504: openstorage.api.SdkCloudBackupGroupCreateRequest.LabelsEntry - nil, // 505: openstorage.api.SdkCloudBackupEnumerateWithFiltersRequest.MetadataFilterEntry - nil, // 506: openstorage.api.SdkCloudBackupInfo.MetadataEntry - nil, // 507: openstorage.api.SdkCloudBackupStatusResponse.StatusesEntry - nil, // 508: openstorage.api.SdkCloudBackupScheduleInfo.LabelsEntry - nil, // 509: openstorage.api.SdkCloudBackupSchedEnumerateResponse.CloudSchedListEntry - nil, // 510: openstorage.api.SdkAutoFSTrimStatusResponse.TrimStatusEntry - nil, // 511: openstorage.api.SdkAutoFSTrimUsageResponse.UsageEntry - nil, // 512: openstorage.api.SdkFilesystemCheckListSnapshotsResponse.SnapshotsEntry - nil, // 513: openstorage.api.SdkFilesystemCheckListVolumesResponse.VolumesEntry - (*SdkServiceCapability_OpenStorageService)(nil), // 514: openstorage.api.SdkServiceCapability.OpenStorageService - nil, // 515: openstorage.api.StorageVersion.DetailsEntry - (*SdkCloudMigrateStartRequest_MigrateVolume)(nil), // 516: openstorage.api.SdkCloudMigrateStartRequest.MigrateVolume - (*SdkCloudMigrateStartRequest_MigrateVolumeGroup)(nil), // 517: openstorage.api.SdkCloudMigrateStartRequest.MigrateVolumeGroup - (*SdkCloudMigrateStartRequest_MigrateAllVolumes)(nil), // 518: openstorage.api.SdkCloudMigrateStartRequest.MigrateAllVolumes - nil, // 519: openstorage.api.CloudMigrateStatusResponse.InfoEntry - nil, // 520: openstorage.api.ClusterPairProcessResponse.OptionsEntry - nil, // 521: openstorage.api.ClusterPairInfo.OptionsEntry - nil, // 522: openstorage.api.ClusterPairsEnumerateResponse.PairsEntry - nil, // 523: openstorage.api.LocateResponse.MountsEntry - nil, // 524: openstorage.api.LocateResponse.DockeridsEntry - (*timestamppb.Timestamp)(nil), // 525: google.protobuf.Timestamp + (*Schedule)(nil), // 261: openstorage.api.Schedule + (*SdkInspectScheduleRequest)(nil), // 262: openstorage.api.SdkInspectScheduleRequest + (*SdkInspectScheduleResponse)(nil), // 263: openstorage.api.SdkInspectScheduleResponse + (*SdkEnumerateSchedulesRequest)(nil), // 264: openstorage.api.SdkEnumerateSchedulesRequest + (*SdkEnumerateSchedulesResponse)(nil), // 265: openstorage.api.SdkEnumerateSchedulesResponse + (*SdkDeleteScheduleRequest)(nil), // 266: openstorage.api.SdkDeleteScheduleRequest + (*SdkDeleteScheduleResponse)(nil), // 267: openstorage.api.SdkDeleteScheduleResponse + (*SdkJobResponse)(nil), // 268: openstorage.api.SdkJobResponse + (*NodeDrainAttachmentOptions)(nil), // 269: openstorage.api.NodeDrainAttachmentOptions + (*SdkNodeDrainAttachmentsRequest)(nil), // 270: openstorage.api.SdkNodeDrainAttachmentsRequest + (*NodeDrainAttachmentsJob)(nil), // 271: openstorage.api.NodeDrainAttachmentsJob + (*CloudDriveTransferJob)(nil), // 272: openstorage.api.CloudDriveTransferJob + (*CollectDiagsJob)(nil), // 273: openstorage.api.CollectDiagsJob + (*DefragJob)(nil), // 274: openstorage.api.DefragJob + (*DefragNodeStatus)(nil), // 275: openstorage.api.DefragNodeStatus + (*DefragPoolStatus)(nil), // 276: openstorage.api.DefragPoolStatus + (*SdkCreateDefragScheduleRequest)(nil), // 277: openstorage.api.SdkCreateDefragScheduleRequest + (*SdkCreateDefragScheduleResponse)(nil), // 278: openstorage.api.SdkCreateDefragScheduleResponse + (*SdkCleanUpDefragSchedulesRequest)(nil), // 279: openstorage.api.SdkCleanUpDefragSchedulesRequest + (*SdkCleanUpDefragSchedulesResponse)(nil), // 280: openstorage.api.SdkCleanUpDefragSchedulesResponse + (*SdkGetDefragNodeStatusRequest)(nil), // 281: openstorage.api.SdkGetDefragNodeStatusRequest + (*SdkGetDefragNodeStatusResponse)(nil), // 282: openstorage.api.SdkGetDefragNodeStatusResponse + (*SdkEnumerateDefragStatusRequest)(nil), // 283: openstorage.api.SdkEnumerateDefragStatusRequest + (*SdkEnumerateDefragStatusResponse)(nil), // 284: openstorage.api.SdkEnumerateDefragStatusResponse + (*DiagsCollectionStatus)(nil), // 285: openstorage.api.DiagsCollectionStatus + (*SdkDiagsCollectRequest)(nil), // 286: openstorage.api.SdkDiagsCollectRequest + (*SdkDiagsCollectResponse)(nil), // 287: openstorage.api.SdkDiagsCollectResponse + (*DiagsNodeSelector)(nil), // 288: openstorage.api.DiagsNodeSelector + (*DiagsVolumeSelector)(nil), // 289: openstorage.api.DiagsVolumeSelector + (*SdkEnumerateJobsRequest)(nil), // 290: openstorage.api.SdkEnumerateJobsRequest + (*SdkEnumerateJobsResponse)(nil), // 291: openstorage.api.SdkEnumerateJobsResponse + (*SdkUpdateJobRequest)(nil), // 292: openstorage.api.SdkUpdateJobRequest + (*SdkUpdateJobResponse)(nil), // 293: openstorage.api.SdkUpdateJobResponse + (*SdkGetJobStatusRequest)(nil), // 294: openstorage.api.SdkGetJobStatusRequest + (*JobAudit)(nil), // 295: openstorage.api.JobAudit + (*JobWorkSummary)(nil), // 296: openstorage.api.JobWorkSummary + (*JobSummary)(nil), // 297: openstorage.api.JobSummary + (*SdkGetJobStatusResponse)(nil), // 298: openstorage.api.SdkGetJobStatusResponse + (*DrainAttachmentsSummary)(nil), // 299: openstorage.api.DrainAttachmentsSummary + (*SdkNodeCordonAttachmentsRequest)(nil), // 300: openstorage.api.SdkNodeCordonAttachmentsRequest + (*SdkNodeCordonAttachmentsResponse)(nil), // 301: openstorage.api.SdkNodeCordonAttachmentsResponse + (*SdkNodeUncordonAttachmentsRequest)(nil), // 302: openstorage.api.SdkNodeUncordonAttachmentsRequest + (*SdkNodeUncordonAttachmentsResponse)(nil), // 303: openstorage.api.SdkNodeUncordonAttachmentsResponse + (*SdkStoragePoolResizeRequest)(nil), // 304: openstorage.api.SdkStoragePoolResizeRequest + (*StorageRebalanceTriggerThreshold)(nil), // 305: openstorage.api.StorageRebalanceTriggerThreshold + (*SdkStorageRebalanceRequest)(nil), // 306: openstorage.api.SdkStorageRebalanceRequest + (*SdkStorageRebalanceResponse)(nil), // 307: openstorage.api.SdkStorageRebalanceResponse + (*StorageRebalanceJob)(nil), // 308: openstorage.api.StorageRebalanceJob + (*StorageRebalanceSummary)(nil), // 309: openstorage.api.StorageRebalanceSummary + (*StorageRebalanceWorkSummary)(nil), // 310: openstorage.api.StorageRebalanceWorkSummary + (*StorageRebalanceAudit)(nil), // 311: openstorage.api.StorageRebalanceAudit + (*SdkUpdateRebalanceJobRequest)(nil), // 312: openstorage.api.SdkUpdateRebalanceJobRequest + (*SdkUpdateRebalanceJobResponse)(nil), // 313: openstorage.api.SdkUpdateRebalanceJobResponse + (*SdkGetRebalanceJobStatusRequest)(nil), // 314: openstorage.api.SdkGetRebalanceJobStatusRequest + (*SdkGetRebalanceJobStatusResponse)(nil), // 315: openstorage.api.SdkGetRebalanceJobStatusResponse + (*SdkEnumerateRebalanceJobsRequest)(nil), // 316: openstorage.api.SdkEnumerateRebalanceJobsRequest + (*SdkEnumerateRebalanceJobsResponse)(nil), // 317: openstorage.api.SdkEnumerateRebalanceJobsResponse + (*RebalanceScheduleInfo)(nil), // 318: openstorage.api.RebalanceScheduleInfo + (*SdkCreateRebalanceScheduleRequest)(nil), // 319: openstorage.api.SdkCreateRebalanceScheduleRequest + (*SdkCreateRebalanceScheduleResponse)(nil), // 320: openstorage.api.SdkCreateRebalanceScheduleResponse + (*SdkGetRebalanceScheduleRequest)(nil), // 321: openstorage.api.SdkGetRebalanceScheduleRequest + (*SdkGetRebalanceScheduleResponse)(nil), // 322: openstorage.api.SdkGetRebalanceScheduleResponse + (*SdkDeleteRebalanceScheduleRequest)(nil), // 323: openstorage.api.SdkDeleteRebalanceScheduleRequest + (*SdkDeleteRebalanceScheduleResponse)(nil), // 324: openstorage.api.SdkDeleteRebalanceScheduleResponse + (*SdkStoragePool)(nil), // 325: openstorage.api.SdkStoragePool + (*SdkStoragePoolResizeResponse)(nil), // 326: openstorage.api.SdkStoragePoolResizeResponse + (*SdkNodeInspectResponse)(nil), // 327: openstorage.api.SdkNodeInspectResponse + (*SdkNodeInspectCurrentRequest)(nil), // 328: openstorage.api.SdkNodeInspectCurrentRequest + (*SdkNodeInspectCurrentResponse)(nil), // 329: openstorage.api.SdkNodeInspectCurrentResponse + (*SdkNodeEnumerateRequest)(nil), // 330: openstorage.api.SdkNodeEnumerateRequest + (*SdkNodeEnumerateResponse)(nil), // 331: openstorage.api.SdkNodeEnumerateResponse + (*SdkNodeEnumerateWithFiltersRequest)(nil), // 332: openstorage.api.SdkNodeEnumerateWithFiltersRequest + (*SdkNodeEnumerateWithFiltersResponse)(nil), // 333: openstorage.api.SdkNodeEnumerateWithFiltersResponse + (*SdkObjectstoreInspectRequest)(nil), // 334: openstorage.api.SdkObjectstoreInspectRequest + (*SdkObjectstoreInspectResponse)(nil), // 335: openstorage.api.SdkObjectstoreInspectResponse + (*SdkObjectstoreCreateRequest)(nil), // 336: openstorage.api.SdkObjectstoreCreateRequest + (*SdkObjectstoreCreateResponse)(nil), // 337: openstorage.api.SdkObjectstoreCreateResponse + (*SdkObjectstoreDeleteRequest)(nil), // 338: openstorage.api.SdkObjectstoreDeleteRequest + (*SdkObjectstoreDeleteResponse)(nil), // 339: openstorage.api.SdkObjectstoreDeleteResponse + (*SdkObjectstoreUpdateRequest)(nil), // 340: openstorage.api.SdkObjectstoreUpdateRequest + (*SdkObjectstoreUpdateResponse)(nil), // 341: openstorage.api.SdkObjectstoreUpdateResponse + (*SdkCloudBackupCreateRequest)(nil), // 342: openstorage.api.SdkCloudBackupCreateRequest + (*SdkCloudBackupCreateResponse)(nil), // 343: openstorage.api.SdkCloudBackupCreateResponse + (*SdkCloudBackupGroupCreateRequest)(nil), // 344: openstorage.api.SdkCloudBackupGroupCreateRequest + (*SdkCloudBackupGroupCreateResponse)(nil), // 345: openstorage.api.SdkCloudBackupGroupCreateResponse + (*SdkCloudBackupRestoreRequest)(nil), // 346: openstorage.api.SdkCloudBackupRestoreRequest + (*SdkCloudBackupRestoreResponse)(nil), // 347: openstorage.api.SdkCloudBackupRestoreResponse + (*SdkCloudBackupDeleteRequest)(nil), // 348: openstorage.api.SdkCloudBackupDeleteRequest + (*SdkCloudBackupDeleteResponse)(nil), // 349: openstorage.api.SdkCloudBackupDeleteResponse + (*SdkCloudBackupDeleteAllRequest)(nil), // 350: openstorage.api.SdkCloudBackupDeleteAllRequest + (*SdkCloudBackupDeleteAllResponse)(nil), // 351: openstorage.api.SdkCloudBackupDeleteAllResponse + (*SdkCloudBackupEnumerateWithFiltersRequest)(nil), // 352: openstorage.api.SdkCloudBackupEnumerateWithFiltersRequest + (*SdkCloudBackupInfo)(nil), // 353: openstorage.api.SdkCloudBackupInfo + (*SdkCloudBackupEnumerateWithFiltersResponse)(nil), // 354: openstorage.api.SdkCloudBackupEnumerateWithFiltersResponse + (*SdkCloudBackupStatus)(nil), // 355: openstorage.api.SdkCloudBackupStatus + (*SdkCloudBackupStatusRequest)(nil), // 356: openstorage.api.SdkCloudBackupStatusRequest + (*SdkCloudBackupStatusResponse)(nil), // 357: openstorage.api.SdkCloudBackupStatusResponse + (*SdkCloudBackupCatalogRequest)(nil), // 358: openstorage.api.SdkCloudBackupCatalogRequest + (*SdkCloudBackupCatalogResponse)(nil), // 359: openstorage.api.SdkCloudBackupCatalogResponse + (*SdkCloudBackupHistoryItem)(nil), // 360: openstorage.api.SdkCloudBackupHistoryItem + (*SdkCloudBackupHistoryRequest)(nil), // 361: openstorage.api.SdkCloudBackupHistoryRequest + (*SdkCloudBackupHistoryResponse)(nil), // 362: openstorage.api.SdkCloudBackupHistoryResponse + (*SdkCloudBackupStateChangeRequest)(nil), // 363: openstorage.api.SdkCloudBackupStateChangeRequest + (*SdkCloudBackupStateChangeResponse)(nil), // 364: openstorage.api.SdkCloudBackupStateChangeResponse + (*SdkCloudBackupScheduleInfo)(nil), // 365: openstorage.api.SdkCloudBackupScheduleInfo + (*SdkCloudBackupSchedCreateRequest)(nil), // 366: openstorage.api.SdkCloudBackupSchedCreateRequest + (*SdkCloudBackupSchedCreateResponse)(nil), // 367: openstorage.api.SdkCloudBackupSchedCreateResponse + (*SdkCloudBackupSchedUpdateRequest)(nil), // 368: openstorage.api.SdkCloudBackupSchedUpdateRequest + (*SdkCloudBackupSchedUpdateResponse)(nil), // 369: openstorage.api.SdkCloudBackupSchedUpdateResponse + (*SdkCloudBackupSchedDeleteRequest)(nil), // 370: openstorage.api.SdkCloudBackupSchedDeleteRequest + (*SdkCloudBackupSchedDeleteResponse)(nil), // 371: openstorage.api.SdkCloudBackupSchedDeleteResponse + (*SdkCloudBackupSchedEnumerateRequest)(nil), // 372: openstorage.api.SdkCloudBackupSchedEnumerateRequest + (*SdkCloudBackupSchedEnumerateResponse)(nil), // 373: openstorage.api.SdkCloudBackupSchedEnumerateResponse + (*SdkCloudBackupSizeRequest)(nil), // 374: openstorage.api.SdkCloudBackupSizeRequest + (*SdkCloudBackupSizeResponse)(nil), // 375: openstorage.api.SdkCloudBackupSizeResponse + (*SdkRule)(nil), // 376: openstorage.api.SdkRule + (*SdkRole)(nil), // 377: openstorage.api.SdkRole + (*SdkRoleCreateRequest)(nil), // 378: openstorage.api.SdkRoleCreateRequest + (*SdkRoleCreateResponse)(nil), // 379: openstorage.api.SdkRoleCreateResponse + (*SdkRoleEnumerateRequest)(nil), // 380: openstorage.api.SdkRoleEnumerateRequest + (*SdkRoleEnumerateResponse)(nil), // 381: openstorage.api.SdkRoleEnumerateResponse + (*SdkRoleInspectRequest)(nil), // 382: openstorage.api.SdkRoleInspectRequest + (*SdkRoleInspectResponse)(nil), // 383: openstorage.api.SdkRoleInspectResponse + (*SdkRoleDeleteRequest)(nil), // 384: openstorage.api.SdkRoleDeleteRequest + (*SdkRoleDeleteResponse)(nil), // 385: openstorage.api.SdkRoleDeleteResponse + (*SdkRoleUpdateRequest)(nil), // 386: openstorage.api.SdkRoleUpdateRequest + (*SdkRoleUpdateResponse)(nil), // 387: openstorage.api.SdkRoleUpdateResponse + (*FilesystemTrim)(nil), // 388: openstorage.api.FilesystemTrim + (*SdkFilesystemTrimStartRequest)(nil), // 389: openstorage.api.SdkFilesystemTrimStartRequest + (*SdkFilesystemTrimStartResponse)(nil), // 390: openstorage.api.SdkFilesystemTrimStartResponse + (*SdkFilesystemTrimStatusRequest)(nil), // 391: openstorage.api.SdkFilesystemTrimStatusRequest + (*SdkFilesystemTrimStatusResponse)(nil), // 392: openstorage.api.SdkFilesystemTrimStatusResponse + (*SdkAutoFSTrimStatusRequest)(nil), // 393: openstorage.api.SdkAutoFSTrimStatusRequest + (*SdkAutoFSTrimStatusResponse)(nil), // 394: openstorage.api.SdkAutoFSTrimStatusResponse + (*SdkAutoFSTrimUsageRequest)(nil), // 395: openstorage.api.SdkAutoFSTrimUsageRequest + (*SdkAutoFSTrimUsageResponse)(nil), // 396: openstorage.api.SdkAutoFSTrimUsageResponse + (*SdkFilesystemTrimStopRequest)(nil), // 397: openstorage.api.SdkFilesystemTrimStopRequest + (*SdkVolumeBytesUsedResponse)(nil), // 398: openstorage.api.SdkVolumeBytesUsedResponse + (*SdkVolumeBytesUsedRequest)(nil), // 399: openstorage.api.SdkVolumeBytesUsedRequest + (*SdkFilesystemTrimStopResponse)(nil), // 400: openstorage.api.SdkFilesystemTrimStopResponse + (*SdkAutoFSTrimPushRequest)(nil), // 401: openstorage.api.SdkAutoFSTrimPushRequest + (*SdkAutoFSTrimPushResponse)(nil), // 402: openstorage.api.SdkAutoFSTrimPushResponse + (*SdkAutoFSTrimPopRequest)(nil), // 403: openstorage.api.SdkAutoFSTrimPopRequest + (*SdkAutoFSTrimPopResponse)(nil), // 404: openstorage.api.SdkAutoFSTrimPopResponse + (*FilesystemCheck)(nil), // 405: openstorage.api.FilesystemCheck + (*FilesystemCheckSnapInfo)(nil), // 406: openstorage.api.FilesystemCheckSnapInfo + (*FilesystemCheckVolInfo)(nil), // 407: openstorage.api.FilesystemCheckVolInfo + (*SdkFilesystemCheckStartRequest)(nil), // 408: openstorage.api.SdkFilesystemCheckStartRequest + (*SdkFilesystemCheckStartResponse)(nil), // 409: openstorage.api.SdkFilesystemCheckStartResponse + (*SdkFilesystemCheckStatusRequest)(nil), // 410: openstorage.api.SdkFilesystemCheckStatusRequest + (*SdkFilesystemCheckStatusResponse)(nil), // 411: openstorage.api.SdkFilesystemCheckStatusResponse + (*SdkFilesystemCheckStopRequest)(nil), // 412: openstorage.api.SdkFilesystemCheckStopRequest + (*SdkFilesystemCheckStopResponse)(nil), // 413: openstorage.api.SdkFilesystemCheckStopResponse + (*SdkFilesystemCheckListSnapshotsRequest)(nil), // 414: openstorage.api.SdkFilesystemCheckListSnapshotsRequest + (*SdkFilesystemCheckListSnapshotsResponse)(nil), // 415: openstorage.api.SdkFilesystemCheckListSnapshotsResponse + (*SdkFilesystemCheckDeleteSnapshotsRequest)(nil), // 416: openstorage.api.SdkFilesystemCheckDeleteSnapshotsRequest + (*SdkFilesystemCheckDeleteSnapshotsResponse)(nil), // 417: openstorage.api.SdkFilesystemCheckDeleteSnapshotsResponse + (*SdkFilesystemCheckListVolumesRequest)(nil), // 418: openstorage.api.SdkFilesystemCheckListVolumesRequest + (*SdkFilesystemCheckListVolumesResponse)(nil), // 419: openstorage.api.SdkFilesystemCheckListVolumesResponse + (*SdkIdentityCapabilitiesRequest)(nil), // 420: openstorage.api.SdkIdentityCapabilitiesRequest + (*SdkIdentityCapabilitiesResponse)(nil), // 421: openstorage.api.SdkIdentityCapabilitiesResponse + (*SdkIdentityVersionRequest)(nil), // 422: openstorage.api.SdkIdentityVersionRequest + (*SdkIdentityVersionResponse)(nil), // 423: openstorage.api.SdkIdentityVersionResponse + (*SdkServiceCapability)(nil), // 424: openstorage.api.SdkServiceCapability + (*SdkVersion)(nil), // 425: openstorage.api.SdkVersion + (*StorageVersion)(nil), // 426: openstorage.api.StorageVersion + (*CloudMigrate)(nil), // 427: openstorage.api.CloudMigrate + (*CloudMigrateStartRequest)(nil), // 428: openstorage.api.CloudMigrateStartRequest + (*SdkCloudMigrateStartRequest)(nil), // 429: openstorage.api.SdkCloudMigrateStartRequest + (*CloudMigrateStartResponse)(nil), // 430: openstorage.api.CloudMigrateStartResponse + (*SdkCloudMigrateStartResponse)(nil), // 431: openstorage.api.SdkCloudMigrateStartResponse + (*CloudMigrateCancelRequest)(nil), // 432: openstorage.api.CloudMigrateCancelRequest + (*SdkCloudMigrateCancelRequest)(nil), // 433: openstorage.api.SdkCloudMigrateCancelRequest + (*SdkCloudMigrateCancelResponse)(nil), // 434: openstorage.api.SdkCloudMigrateCancelResponse + (*CloudMigrateInfo)(nil), // 435: openstorage.api.CloudMigrateInfo + (*CloudMigrateInfoList)(nil), // 436: openstorage.api.CloudMigrateInfoList + (*SdkCloudMigrateStatusRequest)(nil), // 437: openstorage.api.SdkCloudMigrateStatusRequest + (*CloudMigrateStatusRequest)(nil), // 438: openstorage.api.CloudMigrateStatusRequest + (*CloudMigrateStatusResponse)(nil), // 439: openstorage.api.CloudMigrateStatusResponse + (*SdkCloudMigrateStatusResponse)(nil), // 440: openstorage.api.SdkCloudMigrateStatusResponse + (*ClusterPairMode)(nil), // 441: openstorage.api.ClusterPairMode + (*ClusterPairCreateRequest)(nil), // 442: openstorage.api.ClusterPairCreateRequest + (*ClusterPairCreateResponse)(nil), // 443: openstorage.api.ClusterPairCreateResponse + (*SdkClusterPairCreateRequest)(nil), // 444: openstorage.api.SdkClusterPairCreateRequest + (*SdkClusterPairCreateResponse)(nil), // 445: openstorage.api.SdkClusterPairCreateResponse + (*ClusterPairProcessRequest)(nil), // 446: openstorage.api.ClusterPairProcessRequest + (*ClusterPairProcessResponse)(nil), // 447: openstorage.api.ClusterPairProcessResponse + (*SdkClusterPairDeleteRequest)(nil), // 448: openstorage.api.SdkClusterPairDeleteRequest + (*SdkClusterPairDeleteResponse)(nil), // 449: openstorage.api.SdkClusterPairDeleteResponse + (*ClusterPairTokenGetResponse)(nil), // 450: openstorage.api.ClusterPairTokenGetResponse + (*SdkClusterPairGetTokenRequest)(nil), // 451: openstorage.api.SdkClusterPairGetTokenRequest + (*SdkClusterPairGetTokenResponse)(nil), // 452: openstorage.api.SdkClusterPairGetTokenResponse + (*SdkClusterPairResetTokenRequest)(nil), // 453: openstorage.api.SdkClusterPairResetTokenRequest + (*SdkClusterPairResetTokenResponse)(nil), // 454: openstorage.api.SdkClusterPairResetTokenResponse + (*ClusterPairInfo)(nil), // 455: openstorage.api.ClusterPairInfo + (*SdkClusterPairInspectRequest)(nil), // 456: openstorage.api.SdkClusterPairInspectRequest + (*ClusterPairGetResponse)(nil), // 457: openstorage.api.ClusterPairGetResponse + (*SdkClusterPairInspectResponse)(nil), // 458: openstorage.api.SdkClusterPairInspectResponse + (*SdkClusterPairEnumerateRequest)(nil), // 459: openstorage.api.SdkClusterPairEnumerateRequest + (*ClusterPairsEnumerateResponse)(nil), // 460: openstorage.api.ClusterPairsEnumerateResponse + (*SdkClusterPairEnumerateResponse)(nil), // 461: openstorage.api.SdkClusterPairEnumerateResponse + (*Catalog)(nil), // 462: openstorage.api.Catalog + (*Report)(nil), // 463: openstorage.api.Report + (*CatalogResponse)(nil), // 464: openstorage.api.CatalogResponse + (*LocateResponse)(nil), // 465: openstorage.api.LocateResponse + (*VolumePlacementStrategy)(nil), // 466: openstorage.api.VolumePlacementStrategy + (*ReplicaPlacementSpec)(nil), // 467: openstorage.api.ReplicaPlacementSpec + (*VolumePlacementSpec)(nil), // 468: openstorage.api.VolumePlacementSpec + (*LabelSelectorRequirement)(nil), // 469: openstorage.api.LabelSelectorRequirement + (*RestoreVolSnashotSchedule)(nil), // 470: openstorage.api.RestoreVolSnashotSchedule + (*RestoreVolStoragePolicy)(nil), // 471: openstorage.api.RestoreVolStoragePolicy + (*RestoreVolumeSpec)(nil), // 472: openstorage.api.RestoreVolumeSpec + (*SdkVolumeCatalogRequest)(nil), // 473: openstorage.api.SdkVolumeCatalogRequest + (*SdkVolumeCatalogResponse)(nil), // 474: openstorage.api.SdkVolumeCatalogResponse + (*VerifyChecksum)(nil), // 475: openstorage.api.VerifyChecksum + (*SdkVerifyChecksumStartRequest)(nil), // 476: openstorage.api.SdkVerifyChecksumStartRequest + (*SdkVerifyChecksumStartResponse)(nil), // 477: openstorage.api.SdkVerifyChecksumStartResponse + (*SdkVerifyChecksumStatusRequest)(nil), // 478: openstorage.api.SdkVerifyChecksumStatusRequest + (*SdkVerifyChecksumStatusResponse)(nil), // 479: openstorage.api.SdkVerifyChecksumStatusResponse + (*SdkVerifyChecksumStopRequest)(nil), // 480: openstorage.api.SdkVerifyChecksumStopRequest + (*SdkVerifyChecksumStopResponse)(nil), // 481: openstorage.api.SdkVerifyChecksumStopResponse + nil, // 482: openstorage.api.StoragePool.LabelsEntry + nil, // 483: openstorage.api.SchedulerTopology.LabelsEntry + nil, // 484: openstorage.api.StoragePoolOperation.ParamsEntry + nil, // 485: openstorage.api.TopologyRequirement.LabelsEntry + nil, // 486: openstorage.api.VolumeLocator.VolumeLabelsEntry + nil, // 487: openstorage.api.MountOptions.OptionsEntry + nil, // 488: openstorage.api.VolumeSpec.VolumeLabelsEntry + nil, // 489: openstorage.api.VolumeSpecPolicy.VolumeLabelsEntry + nil, // 490: openstorage.api.RuntimeStateMap.RuntimeStateEntry + (*Ownership_PublicAccessControl)(nil), // 491: openstorage.api.Ownership.PublicAccessControl + (*Ownership_AccessControl)(nil), // 492: openstorage.api.Ownership.AccessControl + nil, // 493: openstorage.api.Ownership.AccessControl.GroupsEntry + nil, // 494: openstorage.api.Ownership.AccessControl.CollaboratorsEntry + nil, // 495: openstorage.api.Volume.AttachInfoEntry + nil, // 496: openstorage.api.VolumeSetRequest.OptionsEntry + nil, // 497: openstorage.api.VolumeServiceRequest.SrvCmdParamsEntry + nil, // 498: openstorage.api.VolumeServiceInstanceResponse.StatusEntry + nil, // 499: openstorage.api.ActiveRequest.ReqestKVEntry + nil, // 500: openstorage.api.GroupSnapCreateRequest.LabelsEntry + nil, // 501: openstorage.api.GroupSnapCreateResponse.SnapshotsEntry + nil, // 502: openstorage.api.StorageNode.DisksEntry + nil, // 503: openstorage.api.StorageNode.NodeLabelsEntry + nil, // 504: openstorage.api.SdkVolumeMountRequest.DriverOptionsEntry + nil, // 505: openstorage.api.SdkVolumeUnmountRequest.DriverOptionsEntry + nil, // 506: openstorage.api.SdkVolumeAttachRequest.DriverOptionsEntry + nil, // 507: openstorage.api.SdkVolumeDetachRequest.DriverOptionsEntry + nil, // 508: openstorage.api.SdkVolumeCreateRequest.LabelsEntry + nil, // 509: openstorage.api.SdkVolumeCloneRequest.AdditionalLabelsEntry + nil, // 510: openstorage.api.SdkVolumeInspectResponse.LabelsEntry + nil, // 511: openstorage.api.SdkVolumeInspectWithFiltersRequest.LabelsEntry + nil, // 512: openstorage.api.SdkVolumeUpdateRequest.LabelsEntry + nil, // 513: openstorage.api.SdkVolumeEnumerateWithFiltersRequest.LabelsEntry + nil, // 514: openstorage.api.SdkVolumeSnapshotCreateRequest.LabelsEntry + nil, // 515: openstorage.api.SdkVolumeSnapshotEnumerateWithFiltersRequest.LabelsEntry + nil, // 516: openstorage.api.SdkVolumeWatchRequest.LabelsEntry + nil, // 517: openstorage.api.DefragNodeStatus.PoolStatusEntry + nil, // 518: openstorage.api.SdkGetDefragNodeStatusResponse.PoolUsageEntry + nil, // 519: openstorage.api.SdkEnumerateDefragStatusResponse.StatusEntry + nil, // 520: openstorage.api.SdkCloudBackupCreateRequest.LabelsEntry + nil, // 521: openstorage.api.SdkCloudBackupGroupCreateRequest.LabelsEntry + nil, // 522: openstorage.api.SdkCloudBackupEnumerateWithFiltersRequest.MetadataFilterEntry + nil, // 523: openstorage.api.SdkCloudBackupInfo.MetadataEntry + nil, // 524: openstorage.api.SdkCloudBackupStatusResponse.StatusesEntry + nil, // 525: openstorage.api.SdkCloudBackupScheduleInfo.LabelsEntry + nil, // 526: openstorage.api.SdkCloudBackupSchedEnumerateResponse.CloudSchedListEntry + nil, // 527: openstorage.api.SdkAutoFSTrimStatusResponse.TrimStatusEntry + nil, // 528: openstorage.api.SdkAutoFSTrimUsageResponse.UsageEntry + nil, // 529: openstorage.api.SdkFilesystemCheckListSnapshotsResponse.SnapshotsEntry + nil, // 530: openstorage.api.SdkFilesystemCheckListVolumesResponse.VolumesEntry + (*SdkServiceCapability_OpenStorageService)(nil), // 531: openstorage.api.SdkServiceCapability.OpenStorageService + nil, // 532: openstorage.api.StorageVersion.DetailsEntry + (*SdkCloudMigrateStartRequest_MigrateVolume)(nil), // 533: openstorage.api.SdkCloudMigrateStartRequest.MigrateVolume + (*SdkCloudMigrateStartRequest_MigrateVolumeGroup)(nil), // 534: openstorage.api.SdkCloudMigrateStartRequest.MigrateVolumeGroup + (*SdkCloudMigrateStartRequest_MigrateAllVolumes)(nil), // 535: openstorage.api.SdkCloudMigrateStartRequest.MigrateAllVolumes + nil, // 536: openstorage.api.CloudMigrateStatusResponse.InfoEntry + nil, // 537: openstorage.api.ClusterPairProcessResponse.OptionsEntry + nil, // 538: openstorage.api.ClusterPairInfo.OptionsEntry + nil, // 539: openstorage.api.ClusterPairsEnumerateResponse.PairsEntry + nil, // 540: openstorage.api.LocateResponse.MountsEntry + nil, // 541: openstorage.api.LocateResponse.DockeridsEntry + (*timestamppb.Timestamp)(nil), // 542: google.protobuf.Timestamp } var file_api_api_proto_depIdxs = []int32{ 13, // 0: openstorage.api.StorageResource.medium:type_name -> openstorage.api.StorageMedium - 525, // 1: openstorage.api.StorageResource.last_scan:type_name -> google.protobuf.Timestamp + 542, // 1: openstorage.api.StorageResource.last_scan:type_name -> google.protobuf.Timestamp 8, // 2: openstorage.api.StoragePool.Cos:type_name -> openstorage.api.CosType 13, // 3: openstorage.api.StoragePool.Medium:type_name -> openstorage.api.StorageMedium - 467, // 4: openstorage.api.StoragePool.labels:type_name -> openstorage.api.StoragePool.LabelsEntry + 482, // 4: openstorage.api.StoragePool.labels:type_name -> openstorage.api.StoragePool.LabelsEntry 63, // 5: openstorage.api.StoragePool.last_operation:type_name -> openstorage.api.StoragePoolOperation - 468, // 6: openstorage.api.SchedulerTopology.labels:type_name -> openstorage.api.SchedulerTopology.LabelsEntry + 483, // 6: openstorage.api.SchedulerTopology.labels:type_name -> openstorage.api.SchedulerTopology.LabelsEntry 48, // 7: openstorage.api.StoragePoolOperation.type:type_name -> openstorage.api.SdkStoragePool.OperationType - 469, // 8: openstorage.api.StoragePoolOperation.params:type_name -> openstorage.api.StoragePoolOperation.ParamsEntry + 484, // 8: openstorage.api.StoragePoolOperation.params:type_name -> openstorage.api.StoragePoolOperation.ParamsEntry 47, // 9: openstorage.api.StoragePoolOperation.status:type_name -> openstorage.api.SdkStoragePool.OperationStatus - 470, // 10: openstorage.api.TopologyRequirement.labels:type_name -> openstorage.api.TopologyRequirement.LabelsEntry - 471, // 11: openstorage.api.VolumeLocator.volume_labels:type_name -> openstorage.api.VolumeLocator.VolumeLabelsEntry + 485, // 10: openstorage.api.TopologyRequirement.labels:type_name -> openstorage.api.TopologyRequirement.LabelsEntry + 486, // 11: openstorage.api.VolumeLocator.volume_labels:type_name -> openstorage.api.VolumeLocator.VolumeLabelsEntry 91, // 12: openstorage.api.VolumeLocator.ownership:type_name -> openstorage.api.Ownership 68, // 13: openstorage.api.VolumeLocator.group:type_name -> openstorage.api.Group 17, // 14: openstorage.api.ExportSpec.export_protocol:type_name -> openstorage.api.ExportProtocol @@ -37892,7 +38965,7 @@ var file_api_api_proto_depIdxs = []int32{ 76, // 20: openstorage.api.ProxySpec.pure_file_spec:type_name -> openstorage.api.PureFileSpec 32, // 21: openstorage.api.Sharedv4ServiceSpec.type:type_name -> openstorage.api.Sharedv4ServiceSpec.ServiceType 33, // 22: openstorage.api.Sharedv4Spec.failover_strategy:type_name -> openstorage.api.Sharedv4FailoverStrategy.Value - 472, // 23: openstorage.api.MountOptions.options:type_name -> openstorage.api.MountOptions.OptionsEntry + 487, // 23: openstorage.api.MountOptions.options:type_name -> openstorage.api.MountOptions.OptionsEntry 20, // 24: openstorage.api.FastpathReplState.protocol:type_name -> openstorage.api.FastpathProtocol 19, // 25: openstorage.api.FastpathConfig.status:type_name -> openstorage.api.FastpathStatus 82, // 26: openstorage.api.FastpathConfig.replicas:type_name -> openstorage.api.FastpathReplState @@ -37901,11 +38974,11 @@ var file_api_api_proto_depIdxs = []int32{ 2, // 29: openstorage.api.VolumeSpec.format:type_name -> openstorage.api.FSType 8, // 30: openstorage.api.VolumeSpec.cos:type_name -> openstorage.api.CosType 9, // 31: openstorage.api.VolumeSpec.io_profile:type_name -> openstorage.api.IoProfile - 473, // 32: openstorage.api.VolumeSpec.volume_labels:type_name -> openstorage.api.VolumeSpec.VolumeLabelsEntry + 488, // 32: openstorage.api.VolumeSpec.volume_labels:type_name -> openstorage.api.VolumeSpec.VolumeLabelsEntry 89, // 33: openstorage.api.VolumeSpec.replica_set:type_name -> openstorage.api.ReplicaSet 68, // 34: openstorage.api.VolumeSpec.group:type_name -> openstorage.api.Group 69, // 35: openstorage.api.VolumeSpec.io_strategy:type_name -> openstorage.api.IoStrategy - 451, // 36: openstorage.api.VolumeSpec.placement_strategy:type_name -> openstorage.api.VolumePlacementStrategy + 466, // 36: openstorage.api.VolumeSpec.placement_strategy:type_name -> openstorage.api.VolumePlacementStrategy 91, // 37: openstorage.api.VolumeSpec.ownership:type_name -> openstorage.api.Ownership 71, // 38: openstorage.api.VolumeSpec.export_spec:type_name -> openstorage.api.ExportSpec 31, // 39: openstorage.api.VolumeSpec.xattr:type_name -> openstorage.api.Xattr.Value @@ -37936,7 +39009,7 @@ var file_api_api_proto_depIdxs = []int32{ 21, // 64: openstorage.api.VolumeSpecUpdate.near_sync_replication_strategy:type_name -> openstorage.api.NearSyncReplicationStrategy 8, // 65: openstorage.api.VolumeSpecPolicy.cos:type_name -> openstorage.api.CosType 9, // 66: openstorage.api.VolumeSpecPolicy.io_profile:type_name -> openstorage.api.IoProfile - 474, // 67: openstorage.api.VolumeSpecPolicy.volume_labels:type_name -> openstorage.api.VolumeSpecPolicy.VolumeLabelsEntry + 489, // 67: openstorage.api.VolumeSpecPolicy.volume_labels:type_name -> openstorage.api.VolumeSpecPolicy.VolumeLabelsEntry 89, // 68: openstorage.api.VolumeSpecPolicy.replica_set:type_name -> openstorage.api.ReplicaSet 68, // 69: openstorage.api.VolumeSpecPolicy.group:type_name -> openstorage.api.Group 36, // 70: openstorage.api.VolumeSpecPolicy.size_operator:type_name -> openstorage.api.VolumeSpecPolicy.PolicyOp @@ -37952,26 +39025,26 @@ var file_api_api_proto_depIdxs = []int32{ 78, // 80: openstorage.api.VolumeSpecPolicy.sharedv4_service_spec:type_name -> openstorage.api.Sharedv4ServiceSpec 80, // 81: openstorage.api.VolumeSpecPolicy.sharedv4_spec:type_name -> openstorage.api.Sharedv4Spec 85, // 82: openstorage.api.VolumeSpecPolicy.io_throttle:type_name -> openstorage.api.IoThrottle - 475, // 83: openstorage.api.RuntimeStateMap.runtime_state:type_name -> openstorage.api.RuntimeStateMap.RuntimeStateEntry - 477, // 84: openstorage.api.Ownership.acls:type_name -> openstorage.api.Ownership.AccessControl + 490, // 83: openstorage.api.RuntimeStateMap.runtime_state:type_name -> openstorage.api.RuntimeStateMap.RuntimeStateEntry + 492, // 84: openstorage.api.Ownership.acls:type_name -> openstorage.api.Ownership.AccessControl 67, // 85: openstorage.api.Volume.source:type_name -> openstorage.api.Source 68, // 86: openstorage.api.Volume.group:type_name -> openstorage.api.Group 65, // 87: openstorage.api.Volume.locator:type_name -> openstorage.api.VolumeLocator - 525, // 88: openstorage.api.Volume.ctime:type_name -> google.protobuf.Timestamp + 542, // 88: openstorage.api.Volume.ctime:type_name -> google.protobuf.Timestamp 86, // 89: openstorage.api.Volume.spec:type_name -> openstorage.api.VolumeSpec - 525, // 90: openstorage.api.Volume.last_scan:type_name -> google.protobuf.Timestamp + 542, // 90: openstorage.api.Volume.last_scan:type_name -> google.protobuf.Timestamp 2, // 91: openstorage.api.Volume.format:type_name -> openstorage.api.FSType 11, // 92: openstorage.api.Volume.status:type_name -> openstorage.api.VolumeStatus 10, // 93: openstorage.api.Volume.state:type_name -> openstorage.api.VolumeState 14, // 94: openstorage.api.Volume.attached_state:type_name -> openstorage.api.AttachState - 480, // 95: openstorage.api.Volume.attach_info:type_name -> openstorage.api.Volume.AttachInfoEntry + 495, // 95: openstorage.api.Volume.attach_info:type_name -> openstorage.api.Volume.AttachInfoEntry 89, // 96: openstorage.api.Volume.replica_sets:type_name -> openstorage.api.ReplicaSet 90, // 97: openstorage.api.Volume.runtime_state:type_name -> openstorage.api.RuntimeStateMap 125, // 98: openstorage.api.Volume.volume_consumers:type_name -> openstorage.api.VolumeConsumer - 525, // 99: openstorage.api.Volume.attach_time:type_name -> google.protobuf.Timestamp - 525, // 100: openstorage.api.Volume.detach_time:type_name -> google.protobuf.Timestamp + 542, // 99: openstorage.api.Volume.attach_time:type_name -> google.protobuf.Timestamp + 542, // 100: openstorage.api.Volume.detach_time:type_name -> google.protobuf.Timestamp 83, // 101: openstorage.api.Volume.fpConfig:type_name -> openstorage.api.FastpathConfig - 525, // 102: openstorage.api.Volume.last_scan_fix:type_name -> google.protobuf.Timestamp + 542, // 102: openstorage.api.Volume.last_scan_fix:type_name -> google.protobuf.Timestamp 12, // 103: openstorage.api.Volume.last_scan_status:type_name -> openstorage.api.FilesystemHealthStatus 81, // 104: openstorage.api.Volume.mount_options:type_name -> openstorage.api.MountOptions 81, // 105: openstorage.api.Volume.sharedv4_mount_options:type_name -> openstorage.api.MountOptions @@ -37981,11 +39054,11 @@ var file_api_api_proto_depIdxs = []int32{ 88, // 109: openstorage.api.SdkStoragePolicy.policy:type_name -> openstorage.api.VolumeSpecPolicy 91, // 110: openstorage.api.SdkStoragePolicy.ownership:type_name -> openstorage.api.Ownership 4, // 111: openstorage.api.Alert.severity:type_name -> openstorage.api.SeverityType - 525, // 112: openstorage.api.Alert.timestamp:type_name -> google.protobuf.Timestamp + 542, // 112: openstorage.api.Alert.timestamp:type_name -> google.protobuf.Timestamp 5, // 113: openstorage.api.Alert.resource:type_name -> openstorage.api.ResourceType - 525, // 114: openstorage.api.Alert.first_seen:type_name -> google.protobuf.Timestamp - 525, // 115: openstorage.api.SdkAlertsTimeSpan.start_time:type_name -> google.protobuf.Timestamp - 525, // 116: openstorage.api.SdkAlertsTimeSpan.end_time:type_name -> google.protobuf.Timestamp + 542, // 114: openstorage.api.Alert.first_seen:type_name -> google.protobuf.Timestamp + 542, // 115: openstorage.api.SdkAlertsTimeSpan.start_time:type_name -> google.protobuf.Timestamp + 542, // 116: openstorage.api.SdkAlertsTimeSpan.end_time:type_name -> google.protobuf.Timestamp 4, // 117: openstorage.api.SdkAlertsOption.min_severity_type:type_name -> openstorage.api.SeverityType 103, // 118: openstorage.api.SdkAlertsOption.time_span:type_name -> openstorage.api.SdkAlertsTimeSpan 104, // 119: openstorage.api.SdkAlertsOption.count_span:type_name -> openstorage.api.SdkAlertsCountSpan @@ -38009,24 +39082,24 @@ var file_api_api_proto_depIdxs = []int32{ 65, // 137: openstorage.api.VolumeSetRequest.locator:type_name -> openstorage.api.VolumeLocator 86, // 138: openstorage.api.VolumeSetRequest.spec:type_name -> openstorage.api.VolumeSpec 119, // 139: openstorage.api.VolumeSetRequest.action:type_name -> openstorage.api.VolumeStateAction - 481, // 140: openstorage.api.VolumeSetRequest.options:type_name -> openstorage.api.VolumeSetRequest.OptionsEntry + 496, // 140: openstorage.api.VolumeSetRequest.options:type_name -> openstorage.api.VolumeSetRequest.OptionsEntry 92, // 141: openstorage.api.VolumeSetResponse.volume:type_name -> openstorage.api.Volume 117, // 142: openstorage.api.VolumeSetResponse.volume_response:type_name -> openstorage.api.VolumeResponse 65, // 143: openstorage.api.SnapCreateRequest.locator:type_name -> openstorage.api.VolumeLocator 118, // 144: openstorage.api.SnapCreateResponse.volume_create_response:type_name -> openstorage.api.VolumeCreateResponse 86, // 145: openstorage.api.VolumeInfo.storage:type_name -> openstorage.api.VolumeSpec - 482, // 146: openstorage.api.VolumeServiceRequest.srv_cmd_params:type_name -> openstorage.api.VolumeServiceRequest.SrvCmdParamsEntry - 483, // 147: openstorage.api.VolumeServiceInstanceResponse.status:type_name -> openstorage.api.VolumeServiceInstanceResponse.StatusEntry + 497, // 146: openstorage.api.VolumeServiceRequest.srv_cmd_params:type_name -> openstorage.api.VolumeServiceRequest.SrvCmdParamsEntry + 498, // 147: openstorage.api.VolumeServiceInstanceResponse.status:type_name -> openstorage.api.VolumeServiceInstanceResponse.StatusEntry 127, // 148: openstorage.api.VolumeServiceResponse.vol_srv_rsp:type_name -> openstorage.api.VolumeServiceInstanceResponse 3, // 149: openstorage.api.GraphDriverChanges.kind:type_name -> openstorage.api.GraphDriverChangeType - 484, // 150: openstorage.api.ActiveRequest.ReqestKV:type_name -> openstorage.api.ActiveRequest.ReqestKVEntry + 499, // 150: openstorage.api.ActiveRequest.ReqestKV:type_name -> openstorage.api.ActiveRequest.ReqestKVEntry 131, // 151: openstorage.api.ActiveRequests.ActiveRequest:type_name -> openstorage.api.ActiveRequest - 485, // 152: openstorage.api.GroupSnapCreateRequest.Labels:type_name -> openstorage.api.GroupSnapCreateRequest.LabelsEntry - 486, // 153: openstorage.api.GroupSnapCreateResponse.snapshots:type_name -> openstorage.api.GroupSnapCreateResponse.SnapshotsEntry + 500, // 152: openstorage.api.GroupSnapCreateRequest.Labels:type_name -> openstorage.api.GroupSnapCreateRequest.LabelsEntry + 501, // 153: openstorage.api.GroupSnapCreateResponse.snapshots:type_name -> openstorage.api.GroupSnapCreateResponse.SnapshotsEntry 0, // 154: openstorage.api.StorageNode.status:type_name -> openstorage.api.Status - 487, // 155: openstorage.api.StorageNode.disks:type_name -> openstorage.api.StorageNode.DisksEntry + 502, // 155: openstorage.api.StorageNode.disks:type_name -> openstorage.api.StorageNode.DisksEntry 61, // 156: openstorage.api.StorageNode.pools:type_name -> openstorage.api.StoragePool - 488, // 157: openstorage.api.StorageNode.node_labels:type_name -> openstorage.api.StorageNode.NodeLabelsEntry + 503, // 157: openstorage.api.StorageNode.node_labels:type_name -> openstorage.api.StorageNode.NodeLabelsEntry 16, // 158: openstorage.api.StorageNode.HWType:type_name -> openstorage.api.HardwareType 38, // 159: openstorage.api.StorageNode.security_status:type_name -> openstorage.api.StorageNode.SecurityStatus 62, // 160: openstorage.api.StorageNode.scheduler_topology:type_name -> openstorage.api.SchedulerTopology @@ -38060,501 +39133,532 @@ var file_api_api_proto_depIdxs = []int32{ 188, // 188: openstorage.api.SdkCredentialInspectResponse.google_credential:type_name -> openstorage.api.SdkGoogleCredentialResponse 189, // 189: openstorage.api.SdkCredentialInspectResponse.nfs_credential:type_name -> openstorage.api.SdkNfsCredentialResponse 200, // 190: openstorage.api.SdkVolumeMountRequest.options:type_name -> openstorage.api.SdkVolumeAttachOptions - 489, // 191: openstorage.api.SdkVolumeMountRequest.driver_options:type_name -> openstorage.api.SdkVolumeMountRequest.DriverOptionsEntry + 504, // 191: openstorage.api.SdkVolumeMountRequest.driver_options:type_name -> openstorage.api.SdkVolumeMountRequest.DriverOptionsEntry 203, // 192: openstorage.api.SdkVolumeUnmountRequest.options:type_name -> openstorage.api.SdkVolumeUnmountOptions - 490, // 193: openstorage.api.SdkVolumeUnmountRequest.driver_options:type_name -> openstorage.api.SdkVolumeUnmountRequest.DriverOptionsEntry + 505, // 193: openstorage.api.SdkVolumeUnmountRequest.driver_options:type_name -> openstorage.api.SdkVolumeUnmountRequest.DriverOptionsEntry 200, // 194: openstorage.api.SdkVolumeAttachRequest.options:type_name -> openstorage.api.SdkVolumeAttachOptions - 491, // 195: openstorage.api.SdkVolumeAttachRequest.driver_options:type_name -> openstorage.api.SdkVolumeAttachRequest.DriverOptionsEntry + 506, // 195: openstorage.api.SdkVolumeAttachRequest.driver_options:type_name -> openstorage.api.SdkVolumeAttachRequest.DriverOptionsEntry 208, // 196: openstorage.api.SdkVolumeDetachRequest.options:type_name -> openstorage.api.SdkVolumeDetachOptions - 492, // 197: openstorage.api.SdkVolumeDetachRequest.driver_options:type_name -> openstorage.api.SdkVolumeDetachRequest.DriverOptionsEntry + 507, // 197: openstorage.api.SdkVolumeDetachRequest.driver_options:type_name -> openstorage.api.SdkVolumeDetachRequest.DriverOptionsEntry 86, // 198: openstorage.api.SdkVolumeCreateRequest.spec:type_name -> openstorage.api.VolumeSpec - 493, // 199: openstorage.api.SdkVolumeCreateRequest.labels:type_name -> openstorage.api.SdkVolumeCreateRequest.LabelsEntry - 494, // 200: openstorage.api.SdkVolumeCloneRequest.additional_labels:type_name -> openstorage.api.SdkVolumeCloneRequest.AdditionalLabelsEntry + 508, // 199: openstorage.api.SdkVolumeCreateRequest.labels:type_name -> openstorage.api.SdkVolumeCreateRequest.LabelsEntry + 509, // 200: openstorage.api.SdkVolumeCloneRequest.additional_labels:type_name -> openstorage.api.SdkVolumeCloneRequest.AdditionalLabelsEntry 66, // 201: openstorage.api.SdkVolumeInspectRequest.options:type_name -> openstorage.api.VolumeInspectOptions 92, // 202: openstorage.api.SdkVolumeInspectResponse.volume:type_name -> openstorage.api.Volume - 495, // 203: openstorage.api.SdkVolumeInspectResponse.labels:type_name -> openstorage.api.SdkVolumeInspectResponse.LabelsEntry - 496, // 204: openstorage.api.SdkVolumeInspectWithFiltersRequest.labels:type_name -> openstorage.api.SdkVolumeInspectWithFiltersRequest.LabelsEntry + 510, // 203: openstorage.api.SdkVolumeInspectResponse.labels:type_name -> openstorage.api.SdkVolumeInspectResponse.LabelsEntry + 511, // 204: openstorage.api.SdkVolumeInspectWithFiltersRequest.labels:type_name -> openstorage.api.SdkVolumeInspectWithFiltersRequest.LabelsEntry 91, // 205: openstorage.api.SdkVolumeInspectWithFiltersRequest.ownership:type_name -> openstorage.api.Ownership 68, // 206: openstorage.api.SdkVolumeInspectWithFiltersRequest.group:type_name -> openstorage.api.Group 66, // 207: openstorage.api.SdkVolumeInspectWithFiltersRequest.options:type_name -> openstorage.api.VolumeInspectOptions 218, // 208: openstorage.api.SdkVolumeInspectWithFiltersResponse.volumes:type_name -> openstorage.api.SdkVolumeInspectResponse - 497, // 209: openstorage.api.SdkVolumeUpdateRequest.labels:type_name -> openstorage.api.SdkVolumeUpdateRequest.LabelsEntry + 512, // 209: openstorage.api.SdkVolumeUpdateRequest.labels:type_name -> openstorage.api.SdkVolumeUpdateRequest.LabelsEntry 87, // 210: openstorage.api.SdkVolumeUpdateRequest.spec:type_name -> openstorage.api.VolumeSpecUpdate 93, // 211: openstorage.api.SdkVolumeStatsResponse.stats:type_name -> openstorage.api.Stats 94, // 212: openstorage.api.SdkVolumeCapacityUsageResponse.capacity_usage_info:type_name -> openstorage.api.CapacityUsageInfo - 498, // 213: openstorage.api.SdkVolumeEnumerateWithFiltersRequest.labels:type_name -> openstorage.api.SdkVolumeEnumerateWithFiltersRequest.LabelsEntry + 513, // 213: openstorage.api.SdkVolumeEnumerateWithFiltersRequest.labels:type_name -> openstorage.api.SdkVolumeEnumerateWithFiltersRequest.LabelsEntry 91, // 214: openstorage.api.SdkVolumeEnumerateWithFiltersRequest.ownership:type_name -> openstorage.api.Ownership 68, // 215: openstorage.api.SdkVolumeEnumerateWithFiltersRequest.group:type_name -> openstorage.api.Group - 499, // 216: openstorage.api.SdkVolumeSnapshotCreateRequest.labels:type_name -> openstorage.api.SdkVolumeSnapshotCreateRequest.LabelsEntry - 500, // 217: openstorage.api.SdkVolumeSnapshotEnumerateWithFiltersRequest.labels:type_name -> openstorage.api.SdkVolumeSnapshotEnumerateWithFiltersRequest.LabelsEntry + 514, // 216: openstorage.api.SdkVolumeSnapshotCreateRequest.labels:type_name -> openstorage.api.SdkVolumeSnapshotCreateRequest.LabelsEntry + 515, // 217: openstorage.api.SdkVolumeSnapshotEnumerateWithFiltersRequest.labels:type_name -> openstorage.api.SdkVolumeSnapshotEnumerateWithFiltersRequest.LabelsEntry 243, // 218: openstorage.api.SdkWatchRequest.volume_event:type_name -> openstorage.api.SdkVolumeWatchRequest 244, // 219: openstorage.api.SdkWatchResponse.volume_event:type_name -> openstorage.api.SdkVolumeWatchResponse - 501, // 220: openstorage.api.SdkVolumeWatchRequest.labels:type_name -> openstorage.api.SdkVolumeWatchRequest.LabelsEntry + 516, // 220: openstorage.api.SdkVolumeWatchRequest.labels:type_name -> openstorage.api.SdkVolumeWatchRequest.LabelsEntry 92, // 221: openstorage.api.SdkVolumeWatchResponse.volume:type_name -> openstorage.api.Volume 96, // 222: openstorage.api.SdkNodeVolumeUsageByNodeResponse.volume_usage_info:type_name -> openstorage.api.VolumeUsageByNode 100, // 223: openstorage.api.SdkNodeRelaxedReclaimPurgeResponse.status:type_name -> openstorage.api.RelaxedReclaimPurge 136, // 224: openstorage.api.SdkClusterInspectCurrentResponse.cluster:type_name -> openstorage.api.StorageCluster 40, // 225: openstorage.api.Job.state:type_name -> openstorage.api.Job.State 39, // 226: openstorage.api.Job.type:type_name -> openstorage.api.Job.Type - 264, // 227: openstorage.api.Job.drain_attachments:type_name -> openstorage.api.NodeDrainAttachmentsJob - 265, // 228: openstorage.api.Job.clouddrive_transfer:type_name -> openstorage.api.CloudDriveTransferJob - 266, // 229: openstorage.api.Job.collect_diags:type_name -> openstorage.api.CollectDiagsJob - 267, // 230: openstorage.api.Job.defrag:type_name -> openstorage.api.DefragJob - 525, // 231: openstorage.api.Job.create_time:type_name -> google.protobuf.Timestamp - 525, // 232: openstorage.api.Job.last_update_time:type_name -> google.protobuf.Timestamp - 260, // 233: openstorage.api.SdkJobResponse.job:type_name -> openstorage.api.Job - 454, // 234: openstorage.api.SdkNodeDrainAttachmentsRequest.selector:type_name -> openstorage.api.LabelSelectorRequirement - 263, // 235: openstorage.api.NodeDrainAttachmentsJob.parameters:type_name -> openstorage.api.SdkNodeDrainAttachmentsRequest - 525, // 236: openstorage.api.NodeDrainAttachmentsJob.create_time:type_name -> google.protobuf.Timestamp - 525, // 237: openstorage.api.NodeDrainAttachmentsJob.last_update_time:type_name -> google.protobuf.Timestamp - 271, // 238: openstorage.api.CollectDiagsJob.request:type_name -> openstorage.api.SdkDiagsCollectRequest - 270, // 239: openstorage.api.CollectDiagsJob.statuses:type_name -> openstorage.api.DiagsCollectionStatus - 502, // 240: openstorage.api.DefragNodeStatus.pool_status:type_name -> openstorage.api.DefragNodeStatus.PoolStatusEntry - 525, // 241: openstorage.api.DefragPoolStatus.last_start_time:type_name -> google.protobuf.Timestamp - 525, // 242: openstorage.api.DefragPoolStatus.last_complete_time:type_name -> google.protobuf.Timestamp - 41, // 243: openstorage.api.DiagsCollectionStatus.state:type_name -> openstorage.api.DiagsCollectionStatus.State - 273, // 244: openstorage.api.SdkDiagsCollectRequest.node:type_name -> openstorage.api.DiagsNodeSelector - 274, // 245: openstorage.api.SdkDiagsCollectRequest.volume:type_name -> openstorage.api.DiagsVolumeSelector - 260, // 246: openstorage.api.SdkDiagsCollectResponse.job:type_name -> openstorage.api.Job - 454, // 247: openstorage.api.DiagsNodeSelector.node_label_selector:type_name -> openstorage.api.LabelSelectorRequirement - 454, // 248: openstorage.api.DiagsVolumeSelector.volume_label_selector:type_name -> openstorage.api.LabelSelectorRequirement - 39, // 249: openstorage.api.SdkEnumerateJobsRequest.type:type_name -> openstorage.api.Job.Type - 260, // 250: openstorage.api.SdkEnumerateJobsResponse.jobs:type_name -> openstorage.api.Job - 39, // 251: openstorage.api.SdkUpdateJobRequest.type:type_name -> openstorage.api.Job.Type - 40, // 252: openstorage.api.SdkUpdateJobRequest.state:type_name -> openstorage.api.Job.State - 39, // 253: openstorage.api.SdkGetJobStatusRequest.type:type_name -> openstorage.api.Job.Type - 281, // 254: openstorage.api.JobAudit.summary:type_name -> openstorage.api.JobWorkSummary - 284, // 255: openstorage.api.JobWorkSummary.drain_attachments_summary:type_name -> openstorage.api.DrainAttachmentsSummary - 281, // 256: openstorage.api.JobSummary.work_summaries:type_name -> openstorage.api.JobWorkSummary - 260, // 257: openstorage.api.SdkGetJobStatusResponse.job:type_name -> openstorage.api.Job - 282, // 258: openstorage.api.SdkGetJobStatusResponse.summary:type_name -> openstorage.api.JobSummary - 49, // 259: openstorage.api.SdkStoragePoolResizeRequest.operation_type:type_name -> openstorage.api.SdkStoragePool.ResizeOperationType - 42, // 260: openstorage.api.StorageRebalanceTriggerThreshold.type:type_name -> openstorage.api.StorageRebalanceTriggerThreshold.Type - 43, // 261: openstorage.api.StorageRebalanceTriggerThreshold.metric:type_name -> openstorage.api.StorageRebalanceTriggerThreshold.Metric - 290, // 262: openstorage.api.SdkStorageRebalanceRequest.trigger_thresholds:type_name -> openstorage.api.StorageRebalanceTriggerThreshold - 454, // 263: openstorage.api.SdkStorageRebalanceRequest.source_pool_selector:type_name -> openstorage.api.LabelSelectorRequirement - 454, // 264: openstorage.api.SdkStorageRebalanceRequest.target_pool_selector:type_name -> openstorage.api.LabelSelectorRequirement - 44, // 265: openstorage.api.SdkStorageRebalanceRequest.mode:type_name -> openstorage.api.SdkStorageRebalanceRequest.Mode - 293, // 266: openstorage.api.SdkStorageRebalanceResponse.job:type_name -> openstorage.api.StorageRebalanceJob - 294, // 267: openstorage.api.SdkStorageRebalanceResponse.summary:type_name -> openstorage.api.StorageRebalanceSummary - 296, // 268: openstorage.api.SdkStorageRebalanceResponse.actions:type_name -> openstorage.api.StorageRebalanceAudit - 24, // 269: openstorage.api.StorageRebalanceJob.state:type_name -> openstorage.api.StorageRebalanceJobState - 291, // 270: openstorage.api.StorageRebalanceJob.parameters:type_name -> openstorage.api.SdkStorageRebalanceRequest - 525, // 271: openstorage.api.StorageRebalanceJob.create_time:type_name -> google.protobuf.Timestamp - 525, // 272: openstorage.api.StorageRebalanceJob.last_update_time:type_name -> google.protobuf.Timestamp - 295, // 273: openstorage.api.StorageRebalanceSummary.work_summary:type_name -> openstorage.api.StorageRebalanceWorkSummary - 45, // 274: openstorage.api.StorageRebalanceWorkSummary.type:type_name -> openstorage.api.StorageRebalanceWorkSummary.Type - 46, // 275: openstorage.api.StorageRebalanceAudit.action:type_name -> openstorage.api.StorageRebalanceAudit.StorageRebalanceAction - 525, // 276: openstorage.api.StorageRebalanceAudit.start_time:type_name -> google.protobuf.Timestamp - 525, // 277: openstorage.api.StorageRebalanceAudit.end_time:type_name -> google.protobuf.Timestamp - 295, // 278: openstorage.api.StorageRebalanceAudit.work_summary:type_name -> openstorage.api.StorageRebalanceWorkSummary - 24, // 279: openstorage.api.StorageRebalanceAudit.state:type_name -> openstorage.api.StorageRebalanceJobState - 24, // 280: openstorage.api.SdkUpdateRebalanceJobRequest.state:type_name -> openstorage.api.StorageRebalanceJobState - 293, // 281: openstorage.api.SdkGetRebalanceJobStatusResponse.job:type_name -> openstorage.api.StorageRebalanceJob - 294, // 282: openstorage.api.SdkGetRebalanceJobStatusResponse.summary:type_name -> openstorage.api.StorageRebalanceSummary - 296, // 283: openstorage.api.SdkGetRebalanceJobStatusResponse.actions:type_name -> openstorage.api.StorageRebalanceAudit - 293, // 284: openstorage.api.SdkEnumerateRebalanceJobsResponse.jobs:type_name -> openstorage.api.StorageRebalanceJob - 291, // 285: openstorage.api.RebalanceScheduleInfo.rebalance_requests:type_name -> openstorage.api.SdkStorageRebalanceRequest - 525, // 286: openstorage.api.RebalanceScheduleInfo.create_time:type_name -> google.protobuf.Timestamp - 291, // 287: openstorage.api.SdkCreateRebalanceScheduleRequest.rebalance_requests:type_name -> openstorage.api.SdkStorageRebalanceRequest - 303, // 288: openstorage.api.SdkCreateRebalanceScheduleResponse.scheduleInfo:type_name -> openstorage.api.RebalanceScheduleInfo - 303, // 289: openstorage.api.SdkGetRebalanceScheduleResponse.scheduleInfo:type_name -> openstorage.api.RebalanceScheduleInfo - 135, // 290: openstorage.api.SdkNodeInspectResponse.node:type_name -> openstorage.api.StorageNode - 135, // 291: openstorage.api.SdkNodeInspectCurrentResponse.node:type_name -> openstorage.api.StorageNode - 135, // 292: openstorage.api.SdkNodeEnumerateWithFiltersResponse.nodes:type_name -> openstorage.api.StorageNode - 115, // 293: openstorage.api.SdkObjectstoreInspectResponse.objectstore_status:type_name -> openstorage.api.ObjectstoreInfo - 115, // 294: openstorage.api.SdkObjectstoreCreateResponse.objectstore_status:type_name -> openstorage.api.ObjectstoreInfo - 503, // 295: openstorage.api.SdkCloudBackupCreateRequest.labels:type_name -> openstorage.api.SdkCloudBackupCreateRequest.LabelsEntry - 504, // 296: openstorage.api.SdkCloudBackupGroupCreateRequest.labels:type_name -> openstorage.api.SdkCloudBackupGroupCreateRequest.LabelsEntry - 457, // 297: openstorage.api.SdkCloudBackupRestoreRequest.spec:type_name -> openstorage.api.RestoreVolumeSpec - 65, // 298: openstorage.api.SdkCloudBackupRestoreRequest.locator:type_name -> openstorage.api.VolumeLocator - 27, // 299: openstorage.api.SdkCloudBackupEnumerateWithFiltersRequest.status_filter:type_name -> openstorage.api.SdkCloudBackupStatusType - 505, // 300: openstorage.api.SdkCloudBackupEnumerateWithFiltersRequest.metadata_filter:type_name -> openstorage.api.SdkCloudBackupEnumerateWithFiltersRequest.MetadataFilterEntry - 525, // 301: openstorage.api.SdkCloudBackupInfo.timestamp:type_name -> google.protobuf.Timestamp - 506, // 302: openstorage.api.SdkCloudBackupInfo.metadata:type_name -> openstorage.api.SdkCloudBackupInfo.MetadataEntry - 27, // 303: openstorage.api.SdkCloudBackupInfo.status:type_name -> openstorage.api.SdkCloudBackupStatusType - 25, // 304: openstorage.api.SdkCloudBackupInfo.cluster_type:type_name -> openstorage.api.SdkCloudBackupClusterType - 338, // 305: openstorage.api.SdkCloudBackupEnumerateWithFiltersResponse.backups:type_name -> openstorage.api.SdkCloudBackupInfo - 26, // 306: openstorage.api.SdkCloudBackupStatus.optype:type_name -> openstorage.api.SdkCloudBackupOpType - 27, // 307: openstorage.api.SdkCloudBackupStatus.status:type_name -> openstorage.api.SdkCloudBackupStatusType - 525, // 308: openstorage.api.SdkCloudBackupStatus.start_time:type_name -> google.protobuf.Timestamp - 525, // 309: openstorage.api.SdkCloudBackupStatus.completed_time:type_name -> google.protobuf.Timestamp - 507, // 310: openstorage.api.SdkCloudBackupStatusResponse.statuses:type_name -> openstorage.api.SdkCloudBackupStatusResponse.StatusesEntry - 525, // 311: openstorage.api.SdkCloudBackupHistoryItem.timestamp:type_name -> google.protobuf.Timestamp - 27, // 312: openstorage.api.SdkCloudBackupHistoryItem.status:type_name -> openstorage.api.SdkCloudBackupStatusType - 345, // 313: openstorage.api.SdkCloudBackupHistoryResponse.history_list:type_name -> openstorage.api.SdkCloudBackupHistoryItem - 28, // 314: openstorage.api.SdkCloudBackupStateChangeRequest.requested_state:type_name -> openstorage.api.SdkCloudBackupRequestedState - 176, // 315: openstorage.api.SdkCloudBackupScheduleInfo.schedules:type_name -> openstorage.api.SdkSchedulePolicyInterval - 508, // 316: openstorage.api.SdkCloudBackupScheduleInfo.labels:type_name -> openstorage.api.SdkCloudBackupScheduleInfo.LabelsEntry - 350, // 317: openstorage.api.SdkCloudBackupSchedCreateRequest.cloud_sched_info:type_name -> openstorage.api.SdkCloudBackupScheduleInfo - 350, // 318: openstorage.api.SdkCloudBackupSchedUpdateRequest.cloud_sched_info:type_name -> openstorage.api.SdkCloudBackupScheduleInfo - 509, // 319: openstorage.api.SdkCloudBackupSchedEnumerateResponse.cloud_sched_list:type_name -> openstorage.api.SdkCloudBackupSchedEnumerateResponse.CloudSchedListEntry - 361, // 320: openstorage.api.SdkRole.rules:type_name -> openstorage.api.SdkRule - 362, // 321: openstorage.api.SdkRoleCreateRequest.role:type_name -> openstorage.api.SdkRole - 362, // 322: openstorage.api.SdkRoleCreateResponse.role:type_name -> openstorage.api.SdkRole - 362, // 323: openstorage.api.SdkRoleInspectResponse.role:type_name -> openstorage.api.SdkRole - 362, // 324: openstorage.api.SdkRoleUpdateRequest.role:type_name -> openstorage.api.SdkRole - 362, // 325: openstorage.api.SdkRoleUpdateResponse.role:type_name -> openstorage.api.SdkRole - 50, // 326: openstorage.api.SdkFilesystemTrimStartResponse.status:type_name -> openstorage.api.FilesystemTrim.FilesystemTrimStatus - 50, // 327: openstorage.api.SdkFilesystemTrimStatusResponse.status:type_name -> openstorage.api.FilesystemTrim.FilesystemTrimStatus - 510, // 328: openstorage.api.SdkAutoFSTrimStatusResponse.trim_status:type_name -> openstorage.api.SdkAutoFSTrimStatusResponse.TrimStatusEntry - 511, // 329: openstorage.api.SdkAutoFSTrimUsageResponse.usage:type_name -> openstorage.api.SdkAutoFSTrimUsageResponse.UsageEntry - 98, // 330: openstorage.api.SdkVolumeBytesUsedResponse.vol_util_info:type_name -> openstorage.api.VolumeBytesUsedByNode - 12, // 331: openstorage.api.FilesystemCheckVolInfo.health_status:type_name -> openstorage.api.FilesystemHealthStatus - 51, // 332: openstorage.api.SdkFilesystemCheckStartResponse.status:type_name -> openstorage.api.FilesystemCheck.FilesystemCheckStatus - 51, // 333: openstorage.api.SdkFilesystemCheckStatusResponse.status:type_name -> openstorage.api.FilesystemCheck.FilesystemCheckStatus - 12, // 334: openstorage.api.SdkFilesystemCheckStatusResponse.health_status:type_name -> openstorage.api.FilesystemHealthStatus - 512, // 335: openstorage.api.SdkFilesystemCheckListSnapshotsResponse.snapshots:type_name -> openstorage.api.SdkFilesystemCheckListSnapshotsResponse.SnapshotsEntry - 513, // 336: openstorage.api.SdkFilesystemCheckListVolumesResponse.volumes:type_name -> openstorage.api.SdkFilesystemCheckListVolumesResponse.VolumesEntry - 409, // 337: openstorage.api.SdkIdentityCapabilitiesResponse.capabilities:type_name -> openstorage.api.SdkServiceCapability - 410, // 338: openstorage.api.SdkIdentityVersionResponse.sdk_version:type_name -> openstorage.api.SdkVersion - 411, // 339: openstorage.api.SdkIdentityVersionResponse.version:type_name -> openstorage.api.StorageVersion - 514, // 340: openstorage.api.SdkServiceCapability.service:type_name -> openstorage.api.SdkServiceCapability.OpenStorageService - 515, // 341: openstorage.api.StorageVersion.details:type_name -> openstorage.api.StorageVersion.DetailsEntry - 54, // 342: openstorage.api.CloudMigrateStartRequest.operation:type_name -> openstorage.api.CloudMigrate.OperationType - 516, // 343: openstorage.api.SdkCloudMigrateStartRequest.volume:type_name -> openstorage.api.SdkCloudMigrateStartRequest.MigrateVolume - 517, // 344: openstorage.api.SdkCloudMigrateStartRequest.volume_group:type_name -> openstorage.api.SdkCloudMigrateStartRequest.MigrateVolumeGroup - 518, // 345: openstorage.api.SdkCloudMigrateStartRequest.all_volumes:type_name -> openstorage.api.SdkCloudMigrateStartRequest.MigrateAllVolumes - 415, // 346: openstorage.api.SdkCloudMigrateStartResponse.result:type_name -> openstorage.api.CloudMigrateStartResponse - 417, // 347: openstorage.api.SdkCloudMigrateCancelRequest.request:type_name -> openstorage.api.CloudMigrateCancelRequest - 55, // 348: openstorage.api.CloudMigrateInfo.current_stage:type_name -> openstorage.api.CloudMigrate.Stage - 56, // 349: openstorage.api.CloudMigrateInfo.status:type_name -> openstorage.api.CloudMigrate.Status - 525, // 350: openstorage.api.CloudMigrateInfo.last_update:type_name -> google.protobuf.Timestamp - 525, // 351: openstorage.api.CloudMigrateInfo.start_time:type_name -> google.protobuf.Timestamp - 525, // 352: openstorage.api.CloudMigrateInfo.completed_time:type_name -> google.protobuf.Timestamp - 420, // 353: openstorage.api.CloudMigrateInfoList.list:type_name -> openstorage.api.CloudMigrateInfo - 423, // 354: openstorage.api.SdkCloudMigrateStatusRequest.request:type_name -> openstorage.api.CloudMigrateStatusRequest - 519, // 355: openstorage.api.CloudMigrateStatusResponse.info:type_name -> openstorage.api.CloudMigrateStatusResponse.InfoEntry - 424, // 356: openstorage.api.SdkCloudMigrateStatusResponse.result:type_name -> openstorage.api.CloudMigrateStatusResponse - 57, // 357: openstorage.api.ClusterPairCreateRequest.mode:type_name -> openstorage.api.ClusterPairMode.Mode - 427, // 358: openstorage.api.SdkClusterPairCreateRequest.request:type_name -> openstorage.api.ClusterPairCreateRequest - 428, // 359: openstorage.api.SdkClusterPairCreateResponse.result:type_name -> openstorage.api.ClusterPairCreateResponse - 57, // 360: openstorage.api.ClusterPairProcessRequest.mode:type_name -> openstorage.api.ClusterPairMode.Mode - 520, // 361: openstorage.api.ClusterPairProcessResponse.options:type_name -> openstorage.api.ClusterPairProcessResponse.OptionsEntry - 435, // 362: openstorage.api.SdkClusterPairGetTokenResponse.result:type_name -> openstorage.api.ClusterPairTokenGetResponse - 435, // 363: openstorage.api.SdkClusterPairResetTokenResponse.result:type_name -> openstorage.api.ClusterPairTokenGetResponse - 521, // 364: openstorage.api.ClusterPairInfo.options:type_name -> openstorage.api.ClusterPairInfo.OptionsEntry - 57, // 365: openstorage.api.ClusterPairInfo.mode:type_name -> openstorage.api.ClusterPairMode.Mode - 440, // 366: openstorage.api.ClusterPairGetResponse.pair_info:type_name -> openstorage.api.ClusterPairInfo - 442, // 367: openstorage.api.SdkClusterPairInspectResponse.result:type_name -> openstorage.api.ClusterPairGetResponse - 522, // 368: openstorage.api.ClusterPairsEnumerateResponse.pairs:type_name -> openstorage.api.ClusterPairsEnumerateResponse.PairsEntry - 445, // 369: openstorage.api.SdkClusterPairEnumerateResponse.result:type_name -> openstorage.api.ClusterPairsEnumerateResponse - 525, // 370: openstorage.api.Catalog.LastModified:type_name -> google.protobuf.Timestamp - 447, // 371: openstorage.api.Catalog.children:type_name -> openstorage.api.Catalog - 447, // 372: openstorage.api.CatalogResponse.root:type_name -> openstorage.api.Catalog - 448, // 373: openstorage.api.CatalogResponse.report:type_name -> openstorage.api.Report - 523, // 374: openstorage.api.LocateResponse.mounts:type_name -> openstorage.api.LocateResponse.MountsEntry - 524, // 375: openstorage.api.LocateResponse.dockerids:type_name -> openstorage.api.LocateResponse.DockeridsEntry - 452, // 376: openstorage.api.VolumePlacementStrategy.replica_affinity:type_name -> openstorage.api.ReplicaPlacementSpec - 452, // 377: openstorage.api.VolumePlacementStrategy.replica_anti_affinity:type_name -> openstorage.api.ReplicaPlacementSpec - 453, // 378: openstorage.api.VolumePlacementStrategy.volume_affinity:type_name -> openstorage.api.VolumePlacementSpec - 453, // 379: openstorage.api.VolumePlacementStrategy.volume_anti_affinity:type_name -> openstorage.api.VolumePlacementSpec - 29, // 380: openstorage.api.ReplicaPlacementSpec.enforcement:type_name -> openstorage.api.EnforcementType - 454, // 381: openstorage.api.ReplicaPlacementSpec.match_expressions:type_name -> openstorage.api.LabelSelectorRequirement - 29, // 382: openstorage.api.VolumePlacementSpec.enforcement:type_name -> openstorage.api.EnforcementType - 454, // 383: openstorage.api.VolumePlacementSpec.match_expressions:type_name -> openstorage.api.LabelSelectorRequirement - 58, // 384: openstorage.api.LabelSelectorRequirement.operator:type_name -> openstorage.api.LabelSelectorRequirement.Operator - 8, // 385: openstorage.api.RestoreVolumeSpec.cos:type_name -> openstorage.api.CosType - 9, // 386: openstorage.api.RestoreVolumeSpec.io_profile:type_name -> openstorage.api.IoProfile - 30, // 387: openstorage.api.RestoreVolumeSpec.shared:type_name -> openstorage.api.RestoreParamBoolType - 89, // 388: openstorage.api.RestoreVolumeSpec.replica_set:type_name -> openstorage.api.ReplicaSet - 455, // 389: openstorage.api.RestoreVolumeSpec.snapshot_schedule:type_name -> openstorage.api.RestoreVolSnashotSchedule - 30, // 390: openstorage.api.RestoreVolumeSpec.sticky:type_name -> openstorage.api.RestoreParamBoolType - 68, // 391: openstorage.api.RestoreVolumeSpec.group:type_name -> openstorage.api.Group - 30, // 392: openstorage.api.RestoreVolumeSpec.journal:type_name -> openstorage.api.RestoreParamBoolType - 30, // 393: openstorage.api.RestoreVolumeSpec.sharedv4:type_name -> openstorage.api.RestoreParamBoolType - 30, // 394: openstorage.api.RestoreVolumeSpec.nodiscard:type_name -> openstorage.api.RestoreParamBoolType - 69, // 395: openstorage.api.RestoreVolumeSpec.io_strategy:type_name -> openstorage.api.IoStrategy - 451, // 396: openstorage.api.RestoreVolumeSpec.placement_strategy:type_name -> openstorage.api.VolumePlacementStrategy - 456, // 397: openstorage.api.RestoreVolumeSpec.storage_policy:type_name -> openstorage.api.RestoreVolStoragePolicy - 91, // 398: openstorage.api.RestoreVolumeSpec.ownership:type_name -> openstorage.api.Ownership - 71, // 399: openstorage.api.RestoreVolumeSpec.export_spec:type_name -> openstorage.api.ExportSpec - 30, // 400: openstorage.api.RestoreVolumeSpec.fp_preference:type_name -> openstorage.api.RestoreParamBoolType - 81, // 401: openstorage.api.RestoreVolumeSpec.mount_options:type_name -> openstorage.api.MountOptions - 81, // 402: openstorage.api.RestoreVolumeSpec.sharedv4_mount_options:type_name -> openstorage.api.MountOptions - 30, // 403: openstorage.api.RestoreVolumeSpec.proxy_write:type_name -> openstorage.api.RestoreParamBoolType - 77, // 404: openstorage.api.RestoreVolumeSpec.proxy_spec:type_name -> openstorage.api.ProxySpec - 78, // 405: openstorage.api.RestoreVolumeSpec.sharedv4_service_spec:type_name -> openstorage.api.Sharedv4ServiceSpec - 80, // 406: openstorage.api.RestoreVolumeSpec.sharedv4_spec:type_name -> openstorage.api.Sharedv4Spec - 30, // 407: openstorage.api.RestoreVolumeSpec.auto_fstrim:type_name -> openstorage.api.RestoreParamBoolType - 85, // 408: openstorage.api.RestoreVolumeSpec.io_throttle:type_name -> openstorage.api.IoThrottle - 30, // 409: openstorage.api.RestoreVolumeSpec.readahead:type_name -> openstorage.api.RestoreParamBoolType - 449, // 410: openstorage.api.SdkVolumeCatalogResponse.catalog:type_name -> openstorage.api.CatalogResponse - 59, // 411: openstorage.api.SdkVerifyChecksumStartResponse.status:type_name -> openstorage.api.VerifyChecksum.VerifyChecksumStatus - 59, // 412: openstorage.api.SdkVerifyChecksumStatusResponse.status:type_name -> openstorage.api.VerifyChecksum.VerifyChecksumStatus - 37, // 413: openstorage.api.Ownership.PublicAccessControl.type:type_name -> openstorage.api.Ownership.AccessType - 478, // 414: openstorage.api.Ownership.AccessControl.groups:type_name -> openstorage.api.Ownership.AccessControl.GroupsEntry - 479, // 415: openstorage.api.Ownership.AccessControl.collaborators:type_name -> openstorage.api.Ownership.AccessControl.CollaboratorsEntry - 476, // 416: openstorage.api.Ownership.AccessControl.public:type_name -> openstorage.api.Ownership.PublicAccessControl - 37, // 417: openstorage.api.Ownership.AccessControl.GroupsEntry.value:type_name -> openstorage.api.Ownership.AccessType - 37, // 418: openstorage.api.Ownership.AccessControl.CollaboratorsEntry.value:type_name -> openstorage.api.Ownership.AccessType - 123, // 419: openstorage.api.GroupSnapCreateResponse.SnapshotsEntry.value:type_name -> openstorage.api.SnapCreateResponse - 60, // 420: openstorage.api.StorageNode.DisksEntry.value:type_name -> openstorage.api.StorageResource - 269, // 421: openstorage.api.DefragNodeStatus.PoolStatusEntry.value:type_name -> openstorage.api.DefragPoolStatus - 340, // 422: openstorage.api.SdkCloudBackupStatusResponse.StatusesEntry.value:type_name -> openstorage.api.SdkCloudBackupStatus - 350, // 423: openstorage.api.SdkCloudBackupSchedEnumerateResponse.CloudSchedListEntry.value:type_name -> openstorage.api.SdkCloudBackupScheduleInfo - 50, // 424: openstorage.api.SdkAutoFSTrimStatusResponse.TrimStatusEntry.value:type_name -> openstorage.api.FilesystemTrim.FilesystemTrimStatus - 99, // 425: openstorage.api.SdkAutoFSTrimUsageResponse.UsageEntry.value:type_name -> openstorage.api.FstrimVolumeUsageInfo - 391, // 426: openstorage.api.SdkFilesystemCheckListSnapshotsResponse.SnapshotsEntry.value:type_name -> openstorage.api.FilesystemCheckSnapInfo - 392, // 427: openstorage.api.SdkFilesystemCheckListVolumesResponse.VolumesEntry.value:type_name -> openstorage.api.FilesystemCheckVolInfo - 52, // 428: openstorage.api.SdkServiceCapability.OpenStorageService.type:type_name -> openstorage.api.SdkServiceCapability.OpenStorageService.Type - 421, // 429: openstorage.api.CloudMigrateStatusResponse.InfoEntry.value:type_name -> openstorage.api.CloudMigrateInfoList - 440, // 430: openstorage.api.ClusterPairsEnumerateResponse.PairsEntry.value:type_name -> openstorage.api.ClusterPairInfo - 110, // 431: openstorage.api.OpenStorageAlerts.EnumerateWithFilters:input_type -> openstorage.api.SdkAlertsEnumerateWithFiltersRequest - 112, // 432: openstorage.api.OpenStorageAlerts.Delete:input_type -> openstorage.api.SdkAlertsDeleteRequest - 363, // 433: openstorage.api.OpenStorageRole.Create:input_type -> openstorage.api.SdkRoleCreateRequest - 365, // 434: openstorage.api.OpenStorageRole.Enumerate:input_type -> openstorage.api.SdkRoleEnumerateRequest - 367, // 435: openstorage.api.OpenStorageRole.Inspect:input_type -> openstorage.api.SdkRoleInspectRequest - 369, // 436: openstorage.api.OpenStorageRole.Delete:input_type -> openstorage.api.SdkRoleDeleteRequest - 371, // 437: openstorage.api.OpenStorageRole.Update:input_type -> openstorage.api.SdkRoleUpdateRequest - 374, // 438: openstorage.api.OpenStorageFilesystemTrim.Start:input_type -> openstorage.api.SdkFilesystemTrimStartRequest - 376, // 439: openstorage.api.OpenStorageFilesystemTrim.Status:input_type -> openstorage.api.SdkFilesystemTrimStatusRequest - 378, // 440: openstorage.api.OpenStorageFilesystemTrim.AutoFSTrimStatus:input_type -> openstorage.api.SdkAutoFSTrimStatusRequest - 380, // 441: openstorage.api.OpenStorageFilesystemTrim.AutoFSTrimUsage:input_type -> openstorage.api.SdkAutoFSTrimUsageRequest - 382, // 442: openstorage.api.OpenStorageFilesystemTrim.Stop:input_type -> openstorage.api.SdkFilesystemTrimStopRequest - 386, // 443: openstorage.api.OpenStorageFilesystemTrim.AutoFSTrimPush:input_type -> openstorage.api.SdkAutoFSTrimPushRequest - 388, // 444: openstorage.api.OpenStorageFilesystemTrim.AutoFSTrimPop:input_type -> openstorage.api.SdkAutoFSTrimPopRequest - 393, // 445: openstorage.api.OpenStorageFilesystemCheck.Start:input_type -> openstorage.api.SdkFilesystemCheckStartRequest - 395, // 446: openstorage.api.OpenStorageFilesystemCheck.Status:input_type -> openstorage.api.SdkFilesystemCheckStatusRequest - 397, // 447: openstorage.api.OpenStorageFilesystemCheck.Stop:input_type -> openstorage.api.SdkFilesystemCheckStopRequest - 399, // 448: openstorage.api.OpenStorageFilesystemCheck.ListSnapshots:input_type -> openstorage.api.SdkFilesystemCheckListSnapshotsRequest - 401, // 449: openstorage.api.OpenStorageFilesystemCheck.DeleteSnapshots:input_type -> openstorage.api.SdkFilesystemCheckDeleteSnapshotsRequest - 403, // 450: openstorage.api.OpenStorageFilesystemCheck.ListVolumes:input_type -> openstorage.api.SdkFilesystemCheckListVolumesRequest - 405, // 451: openstorage.api.OpenStorageIdentity.Capabilities:input_type -> openstorage.api.SdkIdentityCapabilitiesRequest - 407, // 452: openstorage.api.OpenStorageIdentity.Version:input_type -> openstorage.api.SdkIdentityVersionRequest - 257, // 453: openstorage.api.OpenStorageCluster.InspectCurrent:input_type -> openstorage.api.SdkClusterInspectCurrentRequest - 429, // 454: openstorage.api.OpenStorageClusterPair.Create:input_type -> openstorage.api.SdkClusterPairCreateRequest - 441, // 455: openstorage.api.OpenStorageClusterPair.Inspect:input_type -> openstorage.api.SdkClusterPairInspectRequest - 444, // 456: openstorage.api.OpenStorageClusterPair.Enumerate:input_type -> openstorage.api.SdkClusterPairEnumerateRequest - 436, // 457: openstorage.api.OpenStorageClusterPair.GetToken:input_type -> openstorage.api.SdkClusterPairGetTokenRequest - 438, // 458: openstorage.api.OpenStorageClusterPair.ResetToken:input_type -> openstorage.api.SdkClusterPairResetTokenRequest - 433, // 459: openstorage.api.OpenStorageClusterPair.Delete:input_type -> openstorage.api.SdkClusterPairDeleteRequest - 249, // 460: openstorage.api.OpenStorageClusterDomains.Enumerate:input_type -> openstorage.api.SdkClusterDomainsEnumerateRequest - 251, // 461: openstorage.api.OpenStorageClusterDomains.Inspect:input_type -> openstorage.api.SdkClusterDomainInspectRequest - 253, // 462: openstorage.api.OpenStorageClusterDomains.Activate:input_type -> openstorage.api.SdkClusterDomainActivateRequest - 255, // 463: openstorage.api.OpenStorageClusterDomains.Deactivate:input_type -> openstorage.api.SdkClusterDomainDeactivateRequest - 289, // 464: openstorage.api.OpenStoragePool.Resize:input_type -> openstorage.api.SdkStoragePoolResizeRequest - 291, // 465: openstorage.api.OpenStoragePool.Rebalance:input_type -> openstorage.api.SdkStorageRebalanceRequest - 297, // 466: openstorage.api.OpenStoragePool.UpdateRebalanceJobState:input_type -> openstorage.api.SdkUpdateRebalanceJobRequest - 299, // 467: openstorage.api.OpenStoragePool.GetRebalanceJobStatus:input_type -> openstorage.api.SdkGetRebalanceJobStatusRequest - 301, // 468: openstorage.api.OpenStoragePool.EnumerateRebalanceJobs:input_type -> openstorage.api.SdkEnumerateRebalanceJobsRequest - 304, // 469: openstorage.api.OpenStoragePool.CreateRebalanceSchedule:input_type -> openstorage.api.SdkCreateRebalanceScheduleRequest - 306, // 470: openstorage.api.OpenStoragePool.GetRebalanceSchedule:input_type -> openstorage.api.SdkGetRebalanceScheduleRequest - 308, // 471: openstorage.api.OpenStoragePool.DeleteRebalanceSchedule:input_type -> openstorage.api.SdkDeleteRebalanceScheduleRequest - 271, // 472: openstorage.api.OpenStorageDiags.Collect:input_type -> openstorage.api.SdkDiagsCollectRequest - 277, // 473: openstorage.api.OpenStorageJob.Update:input_type -> openstorage.api.SdkUpdateJobRequest - 279, // 474: openstorage.api.OpenStorageJob.GetStatus:input_type -> openstorage.api.SdkGetJobStatusRequest - 275, // 475: openstorage.api.OpenStorageJob.Enumerate:input_type -> openstorage.api.SdkEnumerateJobsRequest - 259, // 476: openstorage.api.OpenStorageNode.Inspect:input_type -> openstorage.api.SdkNodeInspectRequest - 313, // 477: openstorage.api.OpenStorageNode.InspectCurrent:input_type -> openstorage.api.SdkNodeInspectCurrentRequest - 315, // 478: openstorage.api.OpenStorageNode.Enumerate:input_type -> openstorage.api.SdkNodeEnumerateRequest - 317, // 479: openstorage.api.OpenStorageNode.EnumerateWithFilters:input_type -> openstorage.api.SdkNodeEnumerateWithFiltersRequest - 245, // 480: openstorage.api.OpenStorageNode.VolumeUsageByNode:input_type -> openstorage.api.SdkNodeVolumeUsageByNodeRequest - 247, // 481: openstorage.api.OpenStorageNode.RelaxedReclaimPurge:input_type -> openstorage.api.SdkNodeRelaxedReclaimPurgeRequest - 263, // 482: openstorage.api.OpenStorageNode.DrainAttachments:input_type -> openstorage.api.SdkNodeDrainAttachmentsRequest - 285, // 483: openstorage.api.OpenStorageNode.CordonAttachments:input_type -> openstorage.api.SdkNodeCordonAttachmentsRequest - 287, // 484: openstorage.api.OpenStorageNode.UncordonAttachments:input_type -> openstorage.api.SdkNodeUncordonAttachmentsRequest - 384, // 485: openstorage.api.OpenStorageNode.VolumeBytesUsedByNode:input_type -> openstorage.api.SdkVolumeBytesUsedRequest - 137, // 486: openstorage.api.OpenStorageBucket.Create:input_type -> openstorage.api.BucketCreateRequest - 139, // 487: openstorage.api.OpenStorageBucket.Delete:input_type -> openstorage.api.BucketDeleteRequest - 141, // 488: openstorage.api.OpenStorageBucket.GrantAccess:input_type -> openstorage.api.BucketGrantAccessRequest - 143, // 489: openstorage.api.OpenStorageBucket.RevokeAccess:input_type -> openstorage.api.BucketRevokeAccessRequest - 211, // 490: openstorage.api.OpenStorageVolume.Create:input_type -> openstorage.api.SdkVolumeCreateRequest - 213, // 491: openstorage.api.OpenStorageVolume.Clone:input_type -> openstorage.api.SdkVolumeCloneRequest - 215, // 492: openstorage.api.OpenStorageVolume.Delete:input_type -> openstorage.api.SdkVolumeDeleteRequest - 217, // 493: openstorage.api.OpenStorageVolume.Inspect:input_type -> openstorage.api.SdkVolumeInspectRequest - 219, // 494: openstorage.api.OpenStorageVolume.InspectWithFilters:input_type -> openstorage.api.SdkVolumeInspectWithFiltersRequest - 221, // 495: openstorage.api.OpenStorageVolume.Update:input_type -> openstorage.api.SdkVolumeUpdateRequest - 223, // 496: openstorage.api.OpenStorageVolume.Stats:input_type -> openstorage.api.SdkVolumeStatsRequest - 225, // 497: openstorage.api.OpenStorageVolume.CapacityUsage:input_type -> openstorage.api.SdkVolumeCapacityUsageRequest - 227, // 498: openstorage.api.OpenStorageVolume.Enumerate:input_type -> openstorage.api.SdkVolumeEnumerateRequest - 229, // 499: openstorage.api.OpenStorageVolume.EnumerateWithFilters:input_type -> openstorage.api.SdkVolumeEnumerateWithFiltersRequest - 231, // 500: openstorage.api.OpenStorageVolume.SnapshotCreate:input_type -> openstorage.api.SdkVolumeSnapshotCreateRequest - 233, // 501: openstorage.api.OpenStorageVolume.SnapshotRestore:input_type -> openstorage.api.SdkVolumeSnapshotRestoreRequest - 235, // 502: openstorage.api.OpenStorageVolume.SnapshotEnumerate:input_type -> openstorage.api.SdkVolumeSnapshotEnumerateRequest - 237, // 503: openstorage.api.OpenStorageVolume.SnapshotEnumerateWithFilters:input_type -> openstorage.api.SdkVolumeSnapshotEnumerateWithFiltersRequest - 239, // 504: openstorage.api.OpenStorageVolume.SnapshotScheduleUpdate:input_type -> openstorage.api.SdkVolumeSnapshotScheduleUpdateRequest - 458, // 505: openstorage.api.OpenStorageVolume.VolumeCatalog:input_type -> openstorage.api.SdkVolumeCatalogRequest - 241, // 506: openstorage.api.OpenStorageWatch.Watch:input_type -> openstorage.api.SdkWatchRequest - 206, // 507: openstorage.api.OpenStorageMountAttach.Attach:input_type -> openstorage.api.SdkVolumeAttachRequest - 209, // 508: openstorage.api.OpenStorageMountAttach.Detach:input_type -> openstorage.api.SdkVolumeDetachRequest - 201, // 509: openstorage.api.OpenStorageMountAttach.Mount:input_type -> openstorage.api.SdkVolumeMountRequest - 204, // 510: openstorage.api.OpenStorageMountAttach.Unmount:input_type -> openstorage.api.SdkVolumeUnmountRequest - 414, // 511: openstorage.api.OpenStorageMigrate.Start:input_type -> openstorage.api.SdkCloudMigrateStartRequest - 418, // 512: openstorage.api.OpenStorageMigrate.Cancel:input_type -> openstorage.api.SdkCloudMigrateCancelRequest - 422, // 513: openstorage.api.OpenStorageMigrate.Status:input_type -> openstorage.api.SdkCloudMigrateStatusRequest - 319, // 514: openstorage.api.OpenStorageObjectstore.Inspect:input_type -> openstorage.api.SdkObjectstoreInspectRequest - 321, // 515: openstorage.api.OpenStorageObjectstore.Create:input_type -> openstorage.api.SdkObjectstoreCreateRequest - 323, // 516: openstorage.api.OpenStorageObjectstore.Delete:input_type -> openstorage.api.SdkObjectstoreDeleteRequest - 325, // 517: openstorage.api.OpenStorageObjectstore.Update:input_type -> openstorage.api.SdkObjectstoreUpdateRequest - 178, // 518: openstorage.api.OpenStorageCredentials.Create:input_type -> openstorage.api.SdkCredentialCreateRequest - 180, // 519: openstorage.api.OpenStorageCredentials.Update:input_type -> openstorage.api.SdkCredentialUpdateRequest - 190, // 520: openstorage.api.OpenStorageCredentials.Enumerate:input_type -> openstorage.api.SdkCredentialEnumerateRequest - 192, // 521: openstorage.api.OpenStorageCredentials.Inspect:input_type -> openstorage.api.SdkCredentialInspectRequest - 194, // 522: openstorage.api.OpenStorageCredentials.Delete:input_type -> openstorage.api.SdkCredentialDeleteRequest - 196, // 523: openstorage.api.OpenStorageCredentials.Validate:input_type -> openstorage.api.SdkCredentialValidateRequest - 198, // 524: openstorage.api.OpenStorageCredentials.DeleteReferences:input_type -> openstorage.api.SdkCredentialDeleteReferencesRequest - 162, // 525: openstorage.api.OpenStorageSchedulePolicy.Create:input_type -> openstorage.api.SdkSchedulePolicyCreateRequest - 164, // 526: openstorage.api.OpenStorageSchedulePolicy.Update:input_type -> openstorage.api.SdkSchedulePolicyUpdateRequest - 166, // 527: openstorage.api.OpenStorageSchedulePolicy.Enumerate:input_type -> openstorage.api.SdkSchedulePolicyEnumerateRequest - 168, // 528: openstorage.api.OpenStorageSchedulePolicy.Inspect:input_type -> openstorage.api.SdkSchedulePolicyInspectRequest - 170, // 529: openstorage.api.OpenStorageSchedulePolicy.Delete:input_type -> openstorage.api.SdkSchedulePolicyDeleteRequest - 327, // 530: openstorage.api.OpenStorageCloudBackup.Create:input_type -> openstorage.api.SdkCloudBackupCreateRequest - 329, // 531: openstorage.api.OpenStorageCloudBackup.GroupCreate:input_type -> openstorage.api.SdkCloudBackupGroupCreateRequest - 331, // 532: openstorage.api.OpenStorageCloudBackup.Restore:input_type -> openstorage.api.SdkCloudBackupRestoreRequest - 333, // 533: openstorage.api.OpenStorageCloudBackup.Delete:input_type -> openstorage.api.SdkCloudBackupDeleteRequest - 335, // 534: openstorage.api.OpenStorageCloudBackup.DeleteAll:input_type -> openstorage.api.SdkCloudBackupDeleteAllRequest - 337, // 535: openstorage.api.OpenStorageCloudBackup.EnumerateWithFilters:input_type -> openstorage.api.SdkCloudBackupEnumerateWithFiltersRequest - 341, // 536: openstorage.api.OpenStorageCloudBackup.Status:input_type -> openstorage.api.SdkCloudBackupStatusRequest - 343, // 537: openstorage.api.OpenStorageCloudBackup.Catalog:input_type -> openstorage.api.SdkCloudBackupCatalogRequest - 346, // 538: openstorage.api.OpenStorageCloudBackup.History:input_type -> openstorage.api.SdkCloudBackupHistoryRequest - 348, // 539: openstorage.api.OpenStorageCloudBackup.StateChange:input_type -> openstorage.api.SdkCloudBackupStateChangeRequest - 351, // 540: openstorage.api.OpenStorageCloudBackup.SchedCreate:input_type -> openstorage.api.SdkCloudBackupSchedCreateRequest - 353, // 541: openstorage.api.OpenStorageCloudBackup.SchedUpdate:input_type -> openstorage.api.SdkCloudBackupSchedUpdateRequest - 355, // 542: openstorage.api.OpenStorageCloudBackup.SchedDelete:input_type -> openstorage.api.SdkCloudBackupSchedDeleteRequest - 357, // 543: openstorage.api.OpenStorageCloudBackup.SchedEnumerate:input_type -> openstorage.api.SdkCloudBackupSchedEnumerateRequest - 359, // 544: openstorage.api.OpenStorageCloudBackup.Size:input_type -> openstorage.api.SdkCloudBackupSizeRequest - 146, // 545: openstorage.api.OpenStoragePolicy.Create:input_type -> openstorage.api.SdkOpenStoragePolicyCreateRequest - 148, // 546: openstorage.api.OpenStoragePolicy.Enumerate:input_type -> openstorage.api.SdkOpenStoragePolicyEnumerateRequest - 150, // 547: openstorage.api.OpenStoragePolicy.Inspect:input_type -> openstorage.api.SdkOpenStoragePolicyInspectRequest - 154, // 548: openstorage.api.OpenStoragePolicy.Update:input_type -> openstorage.api.SdkOpenStoragePolicyUpdateRequest - 152, // 549: openstorage.api.OpenStoragePolicy.Delete:input_type -> openstorage.api.SdkOpenStoragePolicyDeleteRequest - 156, // 550: openstorage.api.OpenStoragePolicy.SetDefault:input_type -> openstorage.api.SdkOpenStoragePolicySetDefaultRequest - 160, // 551: openstorage.api.OpenStoragePolicy.DefaultInspect:input_type -> openstorage.api.SdkOpenStoragePolicyDefaultInspectRequest - 158, // 552: openstorage.api.OpenStoragePolicy.Release:input_type -> openstorage.api.SdkOpenStoragePolicyReleaseRequest - 461, // 553: openstorage.api.OpenStorageVerifyChecksum.Start:input_type -> openstorage.api.SdkVerifyChecksumStartRequest - 463, // 554: openstorage.api.OpenStorageVerifyChecksum.Status:input_type -> openstorage.api.SdkVerifyChecksumStatusRequest - 465, // 555: openstorage.api.OpenStorageVerifyChecksum.Stop:input_type -> openstorage.api.SdkVerifyChecksumStopRequest - 111, // 556: openstorage.api.OpenStorageAlerts.EnumerateWithFilters:output_type -> openstorage.api.SdkAlertsEnumerateWithFiltersResponse - 113, // 557: openstorage.api.OpenStorageAlerts.Delete:output_type -> openstorage.api.SdkAlertsDeleteResponse - 364, // 558: openstorage.api.OpenStorageRole.Create:output_type -> openstorage.api.SdkRoleCreateResponse - 366, // 559: openstorage.api.OpenStorageRole.Enumerate:output_type -> openstorage.api.SdkRoleEnumerateResponse - 368, // 560: openstorage.api.OpenStorageRole.Inspect:output_type -> openstorage.api.SdkRoleInspectResponse - 370, // 561: openstorage.api.OpenStorageRole.Delete:output_type -> openstorage.api.SdkRoleDeleteResponse - 372, // 562: openstorage.api.OpenStorageRole.Update:output_type -> openstorage.api.SdkRoleUpdateResponse - 375, // 563: openstorage.api.OpenStorageFilesystemTrim.Start:output_type -> openstorage.api.SdkFilesystemTrimStartResponse - 377, // 564: openstorage.api.OpenStorageFilesystemTrim.Status:output_type -> openstorage.api.SdkFilesystemTrimStatusResponse - 379, // 565: openstorage.api.OpenStorageFilesystemTrim.AutoFSTrimStatus:output_type -> openstorage.api.SdkAutoFSTrimStatusResponse - 381, // 566: openstorage.api.OpenStorageFilesystemTrim.AutoFSTrimUsage:output_type -> openstorage.api.SdkAutoFSTrimUsageResponse - 385, // 567: openstorage.api.OpenStorageFilesystemTrim.Stop:output_type -> openstorage.api.SdkFilesystemTrimStopResponse - 387, // 568: openstorage.api.OpenStorageFilesystemTrim.AutoFSTrimPush:output_type -> openstorage.api.SdkAutoFSTrimPushResponse - 389, // 569: openstorage.api.OpenStorageFilesystemTrim.AutoFSTrimPop:output_type -> openstorage.api.SdkAutoFSTrimPopResponse - 394, // 570: openstorage.api.OpenStorageFilesystemCheck.Start:output_type -> openstorage.api.SdkFilesystemCheckStartResponse - 396, // 571: openstorage.api.OpenStorageFilesystemCheck.Status:output_type -> openstorage.api.SdkFilesystemCheckStatusResponse - 398, // 572: openstorage.api.OpenStorageFilesystemCheck.Stop:output_type -> openstorage.api.SdkFilesystemCheckStopResponse - 400, // 573: openstorage.api.OpenStorageFilesystemCheck.ListSnapshots:output_type -> openstorage.api.SdkFilesystemCheckListSnapshotsResponse - 402, // 574: openstorage.api.OpenStorageFilesystemCheck.DeleteSnapshots:output_type -> openstorage.api.SdkFilesystemCheckDeleteSnapshotsResponse - 404, // 575: openstorage.api.OpenStorageFilesystemCheck.ListVolumes:output_type -> openstorage.api.SdkFilesystemCheckListVolumesResponse - 406, // 576: openstorage.api.OpenStorageIdentity.Capabilities:output_type -> openstorage.api.SdkIdentityCapabilitiesResponse - 408, // 577: openstorage.api.OpenStorageIdentity.Version:output_type -> openstorage.api.SdkIdentityVersionResponse - 258, // 578: openstorage.api.OpenStorageCluster.InspectCurrent:output_type -> openstorage.api.SdkClusterInspectCurrentResponse - 430, // 579: openstorage.api.OpenStorageClusterPair.Create:output_type -> openstorage.api.SdkClusterPairCreateResponse - 443, // 580: openstorage.api.OpenStorageClusterPair.Inspect:output_type -> openstorage.api.SdkClusterPairInspectResponse - 446, // 581: openstorage.api.OpenStorageClusterPair.Enumerate:output_type -> openstorage.api.SdkClusterPairEnumerateResponse - 437, // 582: openstorage.api.OpenStorageClusterPair.GetToken:output_type -> openstorage.api.SdkClusterPairGetTokenResponse - 439, // 583: openstorage.api.OpenStorageClusterPair.ResetToken:output_type -> openstorage.api.SdkClusterPairResetTokenResponse - 434, // 584: openstorage.api.OpenStorageClusterPair.Delete:output_type -> openstorage.api.SdkClusterPairDeleteResponse - 250, // 585: openstorage.api.OpenStorageClusterDomains.Enumerate:output_type -> openstorage.api.SdkClusterDomainsEnumerateResponse - 252, // 586: openstorage.api.OpenStorageClusterDomains.Inspect:output_type -> openstorage.api.SdkClusterDomainInspectResponse - 254, // 587: openstorage.api.OpenStorageClusterDomains.Activate:output_type -> openstorage.api.SdkClusterDomainActivateResponse - 256, // 588: openstorage.api.OpenStorageClusterDomains.Deactivate:output_type -> openstorage.api.SdkClusterDomainDeactivateResponse - 311, // 589: openstorage.api.OpenStoragePool.Resize:output_type -> openstorage.api.SdkStoragePoolResizeResponse - 292, // 590: openstorage.api.OpenStoragePool.Rebalance:output_type -> openstorage.api.SdkStorageRebalanceResponse - 298, // 591: openstorage.api.OpenStoragePool.UpdateRebalanceJobState:output_type -> openstorage.api.SdkUpdateRebalanceJobResponse - 300, // 592: openstorage.api.OpenStoragePool.GetRebalanceJobStatus:output_type -> openstorage.api.SdkGetRebalanceJobStatusResponse - 302, // 593: openstorage.api.OpenStoragePool.EnumerateRebalanceJobs:output_type -> openstorage.api.SdkEnumerateRebalanceJobsResponse - 305, // 594: openstorage.api.OpenStoragePool.CreateRebalanceSchedule:output_type -> openstorage.api.SdkCreateRebalanceScheduleResponse - 307, // 595: openstorage.api.OpenStoragePool.GetRebalanceSchedule:output_type -> openstorage.api.SdkGetRebalanceScheduleResponse - 309, // 596: openstorage.api.OpenStoragePool.DeleteRebalanceSchedule:output_type -> openstorage.api.SdkDeleteRebalanceScheduleResponse - 272, // 597: openstorage.api.OpenStorageDiags.Collect:output_type -> openstorage.api.SdkDiagsCollectResponse - 278, // 598: openstorage.api.OpenStorageJob.Update:output_type -> openstorage.api.SdkUpdateJobResponse - 283, // 599: openstorage.api.OpenStorageJob.GetStatus:output_type -> openstorage.api.SdkGetJobStatusResponse - 276, // 600: openstorage.api.OpenStorageJob.Enumerate:output_type -> openstorage.api.SdkEnumerateJobsResponse - 312, // 601: openstorage.api.OpenStorageNode.Inspect:output_type -> openstorage.api.SdkNodeInspectResponse - 314, // 602: openstorage.api.OpenStorageNode.InspectCurrent:output_type -> openstorage.api.SdkNodeInspectCurrentResponse - 316, // 603: openstorage.api.OpenStorageNode.Enumerate:output_type -> openstorage.api.SdkNodeEnumerateResponse - 318, // 604: openstorage.api.OpenStorageNode.EnumerateWithFilters:output_type -> openstorage.api.SdkNodeEnumerateWithFiltersResponse - 246, // 605: openstorage.api.OpenStorageNode.VolumeUsageByNode:output_type -> openstorage.api.SdkNodeVolumeUsageByNodeResponse - 248, // 606: openstorage.api.OpenStorageNode.RelaxedReclaimPurge:output_type -> openstorage.api.SdkNodeRelaxedReclaimPurgeResponse - 261, // 607: openstorage.api.OpenStorageNode.DrainAttachments:output_type -> openstorage.api.SdkJobResponse - 286, // 608: openstorage.api.OpenStorageNode.CordonAttachments:output_type -> openstorage.api.SdkNodeCordonAttachmentsResponse - 288, // 609: openstorage.api.OpenStorageNode.UncordonAttachments:output_type -> openstorage.api.SdkNodeUncordonAttachmentsResponse - 383, // 610: openstorage.api.OpenStorageNode.VolumeBytesUsedByNode:output_type -> openstorage.api.SdkVolumeBytesUsedResponse - 138, // 611: openstorage.api.OpenStorageBucket.Create:output_type -> openstorage.api.BucketCreateResponse - 140, // 612: openstorage.api.OpenStorageBucket.Delete:output_type -> openstorage.api.BucketDeleteResponse - 142, // 613: openstorage.api.OpenStorageBucket.GrantAccess:output_type -> openstorage.api.BucketGrantAccessResponse - 144, // 614: openstorage.api.OpenStorageBucket.RevokeAccess:output_type -> openstorage.api.BucketRevokeAccessResponse - 212, // 615: openstorage.api.OpenStorageVolume.Create:output_type -> openstorage.api.SdkVolumeCreateResponse - 214, // 616: openstorage.api.OpenStorageVolume.Clone:output_type -> openstorage.api.SdkVolumeCloneResponse - 216, // 617: openstorage.api.OpenStorageVolume.Delete:output_type -> openstorage.api.SdkVolumeDeleteResponse - 218, // 618: openstorage.api.OpenStorageVolume.Inspect:output_type -> openstorage.api.SdkVolumeInspectResponse - 220, // 619: openstorage.api.OpenStorageVolume.InspectWithFilters:output_type -> openstorage.api.SdkVolumeInspectWithFiltersResponse - 222, // 620: openstorage.api.OpenStorageVolume.Update:output_type -> openstorage.api.SdkVolumeUpdateResponse - 224, // 621: openstorage.api.OpenStorageVolume.Stats:output_type -> openstorage.api.SdkVolumeStatsResponse - 226, // 622: openstorage.api.OpenStorageVolume.CapacityUsage:output_type -> openstorage.api.SdkVolumeCapacityUsageResponse - 228, // 623: openstorage.api.OpenStorageVolume.Enumerate:output_type -> openstorage.api.SdkVolumeEnumerateResponse - 230, // 624: openstorage.api.OpenStorageVolume.EnumerateWithFilters:output_type -> openstorage.api.SdkVolumeEnumerateWithFiltersResponse - 232, // 625: openstorage.api.OpenStorageVolume.SnapshotCreate:output_type -> openstorage.api.SdkVolumeSnapshotCreateResponse - 234, // 626: openstorage.api.OpenStorageVolume.SnapshotRestore:output_type -> openstorage.api.SdkVolumeSnapshotRestoreResponse - 236, // 627: openstorage.api.OpenStorageVolume.SnapshotEnumerate:output_type -> openstorage.api.SdkVolumeSnapshotEnumerateResponse - 238, // 628: openstorage.api.OpenStorageVolume.SnapshotEnumerateWithFilters:output_type -> openstorage.api.SdkVolumeSnapshotEnumerateWithFiltersResponse - 240, // 629: openstorage.api.OpenStorageVolume.SnapshotScheduleUpdate:output_type -> openstorage.api.SdkVolumeSnapshotScheduleUpdateResponse - 459, // 630: openstorage.api.OpenStorageVolume.VolumeCatalog:output_type -> openstorage.api.SdkVolumeCatalogResponse - 242, // 631: openstorage.api.OpenStorageWatch.Watch:output_type -> openstorage.api.SdkWatchResponse - 207, // 632: openstorage.api.OpenStorageMountAttach.Attach:output_type -> openstorage.api.SdkVolumeAttachResponse - 210, // 633: openstorage.api.OpenStorageMountAttach.Detach:output_type -> openstorage.api.SdkVolumeDetachResponse - 202, // 634: openstorage.api.OpenStorageMountAttach.Mount:output_type -> openstorage.api.SdkVolumeMountResponse - 205, // 635: openstorage.api.OpenStorageMountAttach.Unmount:output_type -> openstorage.api.SdkVolumeUnmountResponse - 416, // 636: openstorage.api.OpenStorageMigrate.Start:output_type -> openstorage.api.SdkCloudMigrateStartResponse - 419, // 637: openstorage.api.OpenStorageMigrate.Cancel:output_type -> openstorage.api.SdkCloudMigrateCancelResponse - 425, // 638: openstorage.api.OpenStorageMigrate.Status:output_type -> openstorage.api.SdkCloudMigrateStatusResponse - 320, // 639: openstorage.api.OpenStorageObjectstore.Inspect:output_type -> openstorage.api.SdkObjectstoreInspectResponse - 322, // 640: openstorage.api.OpenStorageObjectstore.Create:output_type -> openstorage.api.SdkObjectstoreCreateResponse - 324, // 641: openstorage.api.OpenStorageObjectstore.Delete:output_type -> openstorage.api.SdkObjectstoreDeleteResponse - 326, // 642: openstorage.api.OpenStorageObjectstore.Update:output_type -> openstorage.api.SdkObjectstoreUpdateResponse - 179, // 643: openstorage.api.OpenStorageCredentials.Create:output_type -> openstorage.api.SdkCredentialCreateResponse - 181, // 644: openstorage.api.OpenStorageCredentials.Update:output_type -> openstorage.api.SdkCredentialUpdateResponse - 191, // 645: openstorage.api.OpenStorageCredentials.Enumerate:output_type -> openstorage.api.SdkCredentialEnumerateResponse - 193, // 646: openstorage.api.OpenStorageCredentials.Inspect:output_type -> openstorage.api.SdkCredentialInspectResponse - 195, // 647: openstorage.api.OpenStorageCredentials.Delete:output_type -> openstorage.api.SdkCredentialDeleteResponse - 197, // 648: openstorage.api.OpenStorageCredentials.Validate:output_type -> openstorage.api.SdkCredentialValidateResponse - 199, // 649: openstorage.api.OpenStorageCredentials.DeleteReferences:output_type -> openstorage.api.SdkCredentialDeleteReferencesResponse - 163, // 650: openstorage.api.OpenStorageSchedulePolicy.Create:output_type -> openstorage.api.SdkSchedulePolicyCreateResponse - 165, // 651: openstorage.api.OpenStorageSchedulePolicy.Update:output_type -> openstorage.api.SdkSchedulePolicyUpdateResponse - 167, // 652: openstorage.api.OpenStorageSchedulePolicy.Enumerate:output_type -> openstorage.api.SdkSchedulePolicyEnumerateResponse - 169, // 653: openstorage.api.OpenStorageSchedulePolicy.Inspect:output_type -> openstorage.api.SdkSchedulePolicyInspectResponse - 171, // 654: openstorage.api.OpenStorageSchedulePolicy.Delete:output_type -> openstorage.api.SdkSchedulePolicyDeleteResponse - 328, // 655: openstorage.api.OpenStorageCloudBackup.Create:output_type -> openstorage.api.SdkCloudBackupCreateResponse - 330, // 656: openstorage.api.OpenStorageCloudBackup.GroupCreate:output_type -> openstorage.api.SdkCloudBackupGroupCreateResponse - 332, // 657: openstorage.api.OpenStorageCloudBackup.Restore:output_type -> openstorage.api.SdkCloudBackupRestoreResponse - 334, // 658: openstorage.api.OpenStorageCloudBackup.Delete:output_type -> openstorage.api.SdkCloudBackupDeleteResponse - 336, // 659: openstorage.api.OpenStorageCloudBackup.DeleteAll:output_type -> openstorage.api.SdkCloudBackupDeleteAllResponse - 339, // 660: openstorage.api.OpenStorageCloudBackup.EnumerateWithFilters:output_type -> openstorage.api.SdkCloudBackupEnumerateWithFiltersResponse - 342, // 661: openstorage.api.OpenStorageCloudBackup.Status:output_type -> openstorage.api.SdkCloudBackupStatusResponse - 344, // 662: openstorage.api.OpenStorageCloudBackup.Catalog:output_type -> openstorage.api.SdkCloudBackupCatalogResponse - 347, // 663: openstorage.api.OpenStorageCloudBackup.History:output_type -> openstorage.api.SdkCloudBackupHistoryResponse - 349, // 664: openstorage.api.OpenStorageCloudBackup.StateChange:output_type -> openstorage.api.SdkCloudBackupStateChangeResponse - 352, // 665: openstorage.api.OpenStorageCloudBackup.SchedCreate:output_type -> openstorage.api.SdkCloudBackupSchedCreateResponse - 354, // 666: openstorage.api.OpenStorageCloudBackup.SchedUpdate:output_type -> openstorage.api.SdkCloudBackupSchedUpdateResponse - 356, // 667: openstorage.api.OpenStorageCloudBackup.SchedDelete:output_type -> openstorage.api.SdkCloudBackupSchedDeleteResponse - 358, // 668: openstorage.api.OpenStorageCloudBackup.SchedEnumerate:output_type -> openstorage.api.SdkCloudBackupSchedEnumerateResponse - 360, // 669: openstorage.api.OpenStorageCloudBackup.Size:output_type -> openstorage.api.SdkCloudBackupSizeResponse - 147, // 670: openstorage.api.OpenStoragePolicy.Create:output_type -> openstorage.api.SdkOpenStoragePolicyCreateResponse - 149, // 671: openstorage.api.OpenStoragePolicy.Enumerate:output_type -> openstorage.api.SdkOpenStoragePolicyEnumerateResponse - 151, // 672: openstorage.api.OpenStoragePolicy.Inspect:output_type -> openstorage.api.SdkOpenStoragePolicyInspectResponse - 155, // 673: openstorage.api.OpenStoragePolicy.Update:output_type -> openstorage.api.SdkOpenStoragePolicyUpdateResponse - 153, // 674: openstorage.api.OpenStoragePolicy.Delete:output_type -> openstorage.api.SdkOpenStoragePolicyDeleteResponse - 157, // 675: openstorage.api.OpenStoragePolicy.SetDefault:output_type -> openstorage.api.SdkOpenStoragePolicySetDefaultResponse - 161, // 676: openstorage.api.OpenStoragePolicy.DefaultInspect:output_type -> openstorage.api.SdkOpenStoragePolicyDefaultInspectResponse - 159, // 677: openstorage.api.OpenStoragePolicy.Release:output_type -> openstorage.api.SdkOpenStoragePolicyReleaseResponse - 462, // 678: openstorage.api.OpenStorageVerifyChecksum.Start:output_type -> openstorage.api.SdkVerifyChecksumStartResponse - 464, // 679: openstorage.api.OpenStorageVerifyChecksum.Status:output_type -> openstorage.api.SdkVerifyChecksumStatusResponse - 466, // 680: openstorage.api.OpenStorageVerifyChecksum.Stop:output_type -> openstorage.api.SdkVerifyChecksumStopResponse - 556, // [556:681] is the sub-list for method output_type - 431, // [431:556] is the sub-list for method input_type - 431, // [431:431] is the sub-list for extension type_name - 431, // [431:431] is the sub-list for extension extendee - 0, // [0:431] is the sub-list for field type_name + 271, // 227: openstorage.api.Job.drain_attachments:type_name -> openstorage.api.NodeDrainAttachmentsJob + 272, // 228: openstorage.api.Job.clouddrive_transfer:type_name -> openstorage.api.CloudDriveTransferJob + 273, // 229: openstorage.api.Job.collect_diags:type_name -> openstorage.api.CollectDiagsJob + 274, // 230: openstorage.api.Job.defrag:type_name -> openstorage.api.DefragJob + 542, // 231: openstorage.api.Job.create_time:type_name -> google.protobuf.Timestamp + 542, // 232: openstorage.api.Job.last_update_time:type_name -> google.protobuf.Timestamp + 39, // 233: openstorage.api.Schedule.type:type_name -> openstorage.api.Job.Type + 260, // 234: openstorage.api.Schedule.tasks:type_name -> openstorage.api.Job + 542, // 235: openstorage.api.Schedule.create_time:type_name -> google.protobuf.Timestamp + 542, // 236: openstorage.api.Schedule.last_update_time:type_name -> google.protobuf.Timestamp + 39, // 237: openstorage.api.SdkInspectScheduleRequest.type:type_name -> openstorage.api.Job.Type + 261, // 238: openstorage.api.SdkInspectScheduleResponse.schedule:type_name -> openstorage.api.Schedule + 39, // 239: openstorage.api.SdkEnumerateSchedulesRequest.type:type_name -> openstorage.api.Job.Type + 261, // 240: openstorage.api.SdkEnumerateSchedulesResponse.schedules:type_name -> openstorage.api.Schedule + 39, // 241: openstorage.api.SdkDeleteScheduleRequest.type:type_name -> openstorage.api.Job.Type + 260, // 242: openstorage.api.SdkJobResponse.job:type_name -> openstorage.api.Job + 469, // 243: openstorage.api.SdkNodeDrainAttachmentsRequest.selector:type_name -> openstorage.api.LabelSelectorRequirement + 270, // 244: openstorage.api.NodeDrainAttachmentsJob.parameters:type_name -> openstorage.api.SdkNodeDrainAttachmentsRequest + 542, // 245: openstorage.api.NodeDrainAttachmentsJob.create_time:type_name -> google.protobuf.Timestamp + 542, // 246: openstorage.api.NodeDrainAttachmentsJob.last_update_time:type_name -> google.protobuf.Timestamp + 286, // 247: openstorage.api.CollectDiagsJob.request:type_name -> openstorage.api.SdkDiagsCollectRequest + 285, // 248: openstorage.api.CollectDiagsJob.statuses:type_name -> openstorage.api.DiagsCollectionStatus + 469, // 249: openstorage.api.DefragJob.node_selector:type_name -> openstorage.api.LabelSelectorRequirement + 517, // 250: openstorage.api.DefragNodeStatus.pool_status:type_name -> openstorage.api.DefragNodeStatus.PoolStatusEntry + 542, // 251: openstorage.api.DefragNodeStatus.last_update_time:type_name -> google.protobuf.Timestamp + 542, // 252: openstorage.api.DefragPoolStatus.last_start_time:type_name -> google.protobuf.Timestamp + 542, // 253: openstorage.api.DefragPoolStatus.last_complete_time:type_name -> google.protobuf.Timestamp + 274, // 254: openstorage.api.SdkCreateDefragScheduleRequest.defrag_task:type_name -> openstorage.api.DefragJob + 261, // 255: openstorage.api.SdkCreateDefragScheduleResponse.schedule:type_name -> openstorage.api.Schedule + 275, // 256: openstorage.api.SdkGetDefragNodeStatusResponse.defrag_node_status:type_name -> openstorage.api.DefragNodeStatus + 518, // 257: openstorage.api.SdkGetDefragNodeStatusResponse.pool_usage:type_name -> openstorage.api.SdkGetDefragNodeStatusResponse.PoolUsageEntry + 519, // 258: openstorage.api.SdkEnumerateDefragStatusResponse.status:type_name -> openstorage.api.SdkEnumerateDefragStatusResponse.StatusEntry + 41, // 259: openstorage.api.DiagsCollectionStatus.state:type_name -> openstorage.api.DiagsCollectionStatus.State + 288, // 260: openstorage.api.SdkDiagsCollectRequest.node:type_name -> openstorage.api.DiagsNodeSelector + 289, // 261: openstorage.api.SdkDiagsCollectRequest.volume:type_name -> openstorage.api.DiagsVolumeSelector + 260, // 262: openstorage.api.SdkDiagsCollectResponse.job:type_name -> openstorage.api.Job + 469, // 263: openstorage.api.DiagsNodeSelector.node_label_selector:type_name -> openstorage.api.LabelSelectorRequirement + 469, // 264: openstorage.api.DiagsVolumeSelector.volume_label_selector:type_name -> openstorage.api.LabelSelectorRequirement + 39, // 265: openstorage.api.SdkEnumerateJobsRequest.type:type_name -> openstorage.api.Job.Type + 260, // 266: openstorage.api.SdkEnumerateJobsResponse.jobs:type_name -> openstorage.api.Job + 39, // 267: openstorage.api.SdkUpdateJobRequest.type:type_name -> openstorage.api.Job.Type + 40, // 268: openstorage.api.SdkUpdateJobRequest.state:type_name -> openstorage.api.Job.State + 39, // 269: openstorage.api.SdkGetJobStatusRequest.type:type_name -> openstorage.api.Job.Type + 296, // 270: openstorage.api.JobAudit.summary:type_name -> openstorage.api.JobWorkSummary + 299, // 271: openstorage.api.JobWorkSummary.drain_attachments_summary:type_name -> openstorage.api.DrainAttachmentsSummary + 296, // 272: openstorage.api.JobSummary.work_summaries:type_name -> openstorage.api.JobWorkSummary + 260, // 273: openstorage.api.SdkGetJobStatusResponse.job:type_name -> openstorage.api.Job + 297, // 274: openstorage.api.SdkGetJobStatusResponse.summary:type_name -> openstorage.api.JobSummary + 49, // 275: openstorage.api.SdkStoragePoolResizeRequest.operation_type:type_name -> openstorage.api.SdkStoragePool.ResizeOperationType + 42, // 276: openstorage.api.StorageRebalanceTriggerThreshold.type:type_name -> openstorage.api.StorageRebalanceTriggerThreshold.Type + 43, // 277: openstorage.api.StorageRebalanceTriggerThreshold.metric:type_name -> openstorage.api.StorageRebalanceTriggerThreshold.Metric + 305, // 278: openstorage.api.SdkStorageRebalanceRequest.trigger_thresholds:type_name -> openstorage.api.StorageRebalanceTriggerThreshold + 469, // 279: openstorage.api.SdkStorageRebalanceRequest.source_pool_selector:type_name -> openstorage.api.LabelSelectorRequirement + 469, // 280: openstorage.api.SdkStorageRebalanceRequest.target_pool_selector:type_name -> openstorage.api.LabelSelectorRequirement + 44, // 281: openstorage.api.SdkStorageRebalanceRequest.mode:type_name -> openstorage.api.SdkStorageRebalanceRequest.Mode + 308, // 282: openstorage.api.SdkStorageRebalanceResponse.job:type_name -> openstorage.api.StorageRebalanceJob + 309, // 283: openstorage.api.SdkStorageRebalanceResponse.summary:type_name -> openstorage.api.StorageRebalanceSummary + 311, // 284: openstorage.api.SdkStorageRebalanceResponse.actions:type_name -> openstorage.api.StorageRebalanceAudit + 24, // 285: openstorage.api.StorageRebalanceJob.state:type_name -> openstorage.api.StorageRebalanceJobState + 306, // 286: openstorage.api.StorageRebalanceJob.parameters:type_name -> openstorage.api.SdkStorageRebalanceRequest + 542, // 287: openstorage.api.StorageRebalanceJob.create_time:type_name -> google.protobuf.Timestamp + 542, // 288: openstorage.api.StorageRebalanceJob.last_update_time:type_name -> google.protobuf.Timestamp + 310, // 289: openstorage.api.StorageRebalanceSummary.work_summary:type_name -> openstorage.api.StorageRebalanceWorkSummary + 45, // 290: openstorage.api.StorageRebalanceWorkSummary.type:type_name -> openstorage.api.StorageRebalanceWorkSummary.Type + 46, // 291: openstorage.api.StorageRebalanceAudit.action:type_name -> openstorage.api.StorageRebalanceAudit.StorageRebalanceAction + 542, // 292: openstorage.api.StorageRebalanceAudit.start_time:type_name -> google.protobuf.Timestamp + 542, // 293: openstorage.api.StorageRebalanceAudit.end_time:type_name -> google.protobuf.Timestamp + 310, // 294: openstorage.api.StorageRebalanceAudit.work_summary:type_name -> openstorage.api.StorageRebalanceWorkSummary + 24, // 295: openstorage.api.StorageRebalanceAudit.state:type_name -> openstorage.api.StorageRebalanceJobState + 24, // 296: openstorage.api.SdkUpdateRebalanceJobRequest.state:type_name -> openstorage.api.StorageRebalanceJobState + 308, // 297: openstorage.api.SdkGetRebalanceJobStatusResponse.job:type_name -> openstorage.api.StorageRebalanceJob + 309, // 298: openstorage.api.SdkGetRebalanceJobStatusResponse.summary:type_name -> openstorage.api.StorageRebalanceSummary + 311, // 299: openstorage.api.SdkGetRebalanceJobStatusResponse.actions:type_name -> openstorage.api.StorageRebalanceAudit + 308, // 300: openstorage.api.SdkEnumerateRebalanceJobsResponse.jobs:type_name -> openstorage.api.StorageRebalanceJob + 306, // 301: openstorage.api.RebalanceScheduleInfo.rebalance_requests:type_name -> openstorage.api.SdkStorageRebalanceRequest + 542, // 302: openstorage.api.RebalanceScheduleInfo.create_time:type_name -> google.protobuf.Timestamp + 306, // 303: openstorage.api.SdkCreateRebalanceScheduleRequest.rebalance_requests:type_name -> openstorage.api.SdkStorageRebalanceRequest + 318, // 304: openstorage.api.SdkCreateRebalanceScheduleResponse.scheduleInfo:type_name -> openstorage.api.RebalanceScheduleInfo + 318, // 305: openstorage.api.SdkGetRebalanceScheduleResponse.scheduleInfo:type_name -> openstorage.api.RebalanceScheduleInfo + 135, // 306: openstorage.api.SdkNodeInspectResponse.node:type_name -> openstorage.api.StorageNode + 135, // 307: openstorage.api.SdkNodeInspectCurrentResponse.node:type_name -> openstorage.api.StorageNode + 135, // 308: openstorage.api.SdkNodeEnumerateWithFiltersResponse.nodes:type_name -> openstorage.api.StorageNode + 115, // 309: openstorage.api.SdkObjectstoreInspectResponse.objectstore_status:type_name -> openstorage.api.ObjectstoreInfo + 115, // 310: openstorage.api.SdkObjectstoreCreateResponse.objectstore_status:type_name -> openstorage.api.ObjectstoreInfo + 520, // 311: openstorage.api.SdkCloudBackupCreateRequest.labels:type_name -> openstorage.api.SdkCloudBackupCreateRequest.LabelsEntry + 521, // 312: openstorage.api.SdkCloudBackupGroupCreateRequest.labels:type_name -> openstorage.api.SdkCloudBackupGroupCreateRequest.LabelsEntry + 472, // 313: openstorage.api.SdkCloudBackupRestoreRequest.spec:type_name -> openstorage.api.RestoreVolumeSpec + 65, // 314: openstorage.api.SdkCloudBackupRestoreRequest.locator:type_name -> openstorage.api.VolumeLocator + 27, // 315: openstorage.api.SdkCloudBackupEnumerateWithFiltersRequest.status_filter:type_name -> openstorage.api.SdkCloudBackupStatusType + 522, // 316: openstorage.api.SdkCloudBackupEnumerateWithFiltersRequest.metadata_filter:type_name -> openstorage.api.SdkCloudBackupEnumerateWithFiltersRequest.MetadataFilterEntry + 542, // 317: openstorage.api.SdkCloudBackupInfo.timestamp:type_name -> google.protobuf.Timestamp + 523, // 318: openstorage.api.SdkCloudBackupInfo.metadata:type_name -> openstorage.api.SdkCloudBackupInfo.MetadataEntry + 27, // 319: openstorage.api.SdkCloudBackupInfo.status:type_name -> openstorage.api.SdkCloudBackupStatusType + 25, // 320: openstorage.api.SdkCloudBackupInfo.cluster_type:type_name -> openstorage.api.SdkCloudBackupClusterType + 353, // 321: openstorage.api.SdkCloudBackupEnumerateWithFiltersResponse.backups:type_name -> openstorage.api.SdkCloudBackupInfo + 26, // 322: openstorage.api.SdkCloudBackupStatus.optype:type_name -> openstorage.api.SdkCloudBackupOpType + 27, // 323: openstorage.api.SdkCloudBackupStatus.status:type_name -> openstorage.api.SdkCloudBackupStatusType + 542, // 324: openstorage.api.SdkCloudBackupStatus.start_time:type_name -> google.protobuf.Timestamp + 542, // 325: openstorage.api.SdkCloudBackupStatus.completed_time:type_name -> google.protobuf.Timestamp + 524, // 326: openstorage.api.SdkCloudBackupStatusResponse.statuses:type_name -> openstorage.api.SdkCloudBackupStatusResponse.StatusesEntry + 542, // 327: openstorage.api.SdkCloudBackupHistoryItem.timestamp:type_name -> google.protobuf.Timestamp + 27, // 328: openstorage.api.SdkCloudBackupHistoryItem.status:type_name -> openstorage.api.SdkCloudBackupStatusType + 360, // 329: openstorage.api.SdkCloudBackupHistoryResponse.history_list:type_name -> openstorage.api.SdkCloudBackupHistoryItem + 28, // 330: openstorage.api.SdkCloudBackupStateChangeRequest.requested_state:type_name -> openstorage.api.SdkCloudBackupRequestedState + 176, // 331: openstorage.api.SdkCloudBackupScheduleInfo.schedules:type_name -> openstorage.api.SdkSchedulePolicyInterval + 525, // 332: openstorage.api.SdkCloudBackupScheduleInfo.labels:type_name -> openstorage.api.SdkCloudBackupScheduleInfo.LabelsEntry + 365, // 333: openstorage.api.SdkCloudBackupSchedCreateRequest.cloud_sched_info:type_name -> openstorage.api.SdkCloudBackupScheduleInfo + 365, // 334: openstorage.api.SdkCloudBackupSchedUpdateRequest.cloud_sched_info:type_name -> openstorage.api.SdkCloudBackupScheduleInfo + 526, // 335: openstorage.api.SdkCloudBackupSchedEnumerateResponse.cloud_sched_list:type_name -> openstorage.api.SdkCloudBackupSchedEnumerateResponse.CloudSchedListEntry + 376, // 336: openstorage.api.SdkRole.rules:type_name -> openstorage.api.SdkRule + 377, // 337: openstorage.api.SdkRoleCreateRequest.role:type_name -> openstorage.api.SdkRole + 377, // 338: openstorage.api.SdkRoleCreateResponse.role:type_name -> openstorage.api.SdkRole + 377, // 339: openstorage.api.SdkRoleInspectResponse.role:type_name -> openstorage.api.SdkRole + 377, // 340: openstorage.api.SdkRoleUpdateRequest.role:type_name -> openstorage.api.SdkRole + 377, // 341: openstorage.api.SdkRoleUpdateResponse.role:type_name -> openstorage.api.SdkRole + 50, // 342: openstorage.api.SdkFilesystemTrimStartResponse.status:type_name -> openstorage.api.FilesystemTrim.FilesystemTrimStatus + 50, // 343: openstorage.api.SdkFilesystemTrimStatusResponse.status:type_name -> openstorage.api.FilesystemTrim.FilesystemTrimStatus + 527, // 344: openstorage.api.SdkAutoFSTrimStatusResponse.trim_status:type_name -> openstorage.api.SdkAutoFSTrimStatusResponse.TrimStatusEntry + 528, // 345: openstorage.api.SdkAutoFSTrimUsageResponse.usage:type_name -> openstorage.api.SdkAutoFSTrimUsageResponse.UsageEntry + 98, // 346: openstorage.api.SdkVolumeBytesUsedResponse.vol_util_info:type_name -> openstorage.api.VolumeBytesUsedByNode + 12, // 347: openstorage.api.FilesystemCheckVolInfo.health_status:type_name -> openstorage.api.FilesystemHealthStatus + 51, // 348: openstorage.api.SdkFilesystemCheckStartResponse.status:type_name -> openstorage.api.FilesystemCheck.FilesystemCheckStatus + 51, // 349: openstorage.api.SdkFilesystemCheckStatusResponse.status:type_name -> openstorage.api.FilesystemCheck.FilesystemCheckStatus + 12, // 350: openstorage.api.SdkFilesystemCheckStatusResponse.health_status:type_name -> openstorage.api.FilesystemHealthStatus + 529, // 351: openstorage.api.SdkFilesystemCheckListSnapshotsResponse.snapshots:type_name -> openstorage.api.SdkFilesystemCheckListSnapshotsResponse.SnapshotsEntry + 530, // 352: openstorage.api.SdkFilesystemCheckListVolumesResponse.volumes:type_name -> openstorage.api.SdkFilesystemCheckListVolumesResponse.VolumesEntry + 424, // 353: openstorage.api.SdkIdentityCapabilitiesResponse.capabilities:type_name -> openstorage.api.SdkServiceCapability + 425, // 354: openstorage.api.SdkIdentityVersionResponse.sdk_version:type_name -> openstorage.api.SdkVersion + 426, // 355: openstorage.api.SdkIdentityVersionResponse.version:type_name -> openstorage.api.StorageVersion + 531, // 356: openstorage.api.SdkServiceCapability.service:type_name -> openstorage.api.SdkServiceCapability.OpenStorageService + 532, // 357: openstorage.api.StorageVersion.details:type_name -> openstorage.api.StorageVersion.DetailsEntry + 54, // 358: openstorage.api.CloudMigrateStartRequest.operation:type_name -> openstorage.api.CloudMigrate.OperationType + 533, // 359: openstorage.api.SdkCloudMigrateStartRequest.volume:type_name -> openstorage.api.SdkCloudMigrateStartRequest.MigrateVolume + 534, // 360: openstorage.api.SdkCloudMigrateStartRequest.volume_group:type_name -> openstorage.api.SdkCloudMigrateStartRequest.MigrateVolumeGroup + 535, // 361: openstorage.api.SdkCloudMigrateStartRequest.all_volumes:type_name -> openstorage.api.SdkCloudMigrateStartRequest.MigrateAllVolumes + 430, // 362: openstorage.api.SdkCloudMigrateStartResponse.result:type_name -> openstorage.api.CloudMigrateStartResponse + 432, // 363: openstorage.api.SdkCloudMigrateCancelRequest.request:type_name -> openstorage.api.CloudMigrateCancelRequest + 55, // 364: openstorage.api.CloudMigrateInfo.current_stage:type_name -> openstorage.api.CloudMigrate.Stage + 56, // 365: openstorage.api.CloudMigrateInfo.status:type_name -> openstorage.api.CloudMigrate.Status + 542, // 366: openstorage.api.CloudMigrateInfo.last_update:type_name -> google.protobuf.Timestamp + 542, // 367: openstorage.api.CloudMigrateInfo.start_time:type_name -> google.protobuf.Timestamp + 542, // 368: openstorage.api.CloudMigrateInfo.completed_time:type_name -> google.protobuf.Timestamp + 435, // 369: openstorage.api.CloudMigrateInfoList.list:type_name -> openstorage.api.CloudMigrateInfo + 438, // 370: openstorage.api.SdkCloudMigrateStatusRequest.request:type_name -> openstorage.api.CloudMigrateStatusRequest + 536, // 371: openstorage.api.CloudMigrateStatusResponse.info:type_name -> openstorage.api.CloudMigrateStatusResponse.InfoEntry + 439, // 372: openstorage.api.SdkCloudMigrateStatusResponse.result:type_name -> openstorage.api.CloudMigrateStatusResponse + 57, // 373: openstorage.api.ClusterPairCreateRequest.mode:type_name -> openstorage.api.ClusterPairMode.Mode + 442, // 374: openstorage.api.SdkClusterPairCreateRequest.request:type_name -> openstorage.api.ClusterPairCreateRequest + 443, // 375: openstorage.api.SdkClusterPairCreateResponse.result:type_name -> openstorage.api.ClusterPairCreateResponse + 57, // 376: openstorage.api.ClusterPairProcessRequest.mode:type_name -> openstorage.api.ClusterPairMode.Mode + 537, // 377: openstorage.api.ClusterPairProcessResponse.options:type_name -> openstorage.api.ClusterPairProcessResponse.OptionsEntry + 450, // 378: openstorage.api.SdkClusterPairGetTokenResponse.result:type_name -> openstorage.api.ClusterPairTokenGetResponse + 450, // 379: openstorage.api.SdkClusterPairResetTokenResponse.result:type_name -> openstorage.api.ClusterPairTokenGetResponse + 538, // 380: openstorage.api.ClusterPairInfo.options:type_name -> openstorage.api.ClusterPairInfo.OptionsEntry + 57, // 381: openstorage.api.ClusterPairInfo.mode:type_name -> openstorage.api.ClusterPairMode.Mode + 455, // 382: openstorage.api.ClusterPairGetResponse.pair_info:type_name -> openstorage.api.ClusterPairInfo + 457, // 383: openstorage.api.SdkClusterPairInspectResponse.result:type_name -> openstorage.api.ClusterPairGetResponse + 539, // 384: openstorage.api.ClusterPairsEnumerateResponse.pairs:type_name -> openstorage.api.ClusterPairsEnumerateResponse.PairsEntry + 460, // 385: openstorage.api.SdkClusterPairEnumerateResponse.result:type_name -> openstorage.api.ClusterPairsEnumerateResponse + 542, // 386: openstorage.api.Catalog.LastModified:type_name -> google.protobuf.Timestamp + 462, // 387: openstorage.api.Catalog.children:type_name -> openstorage.api.Catalog + 462, // 388: openstorage.api.CatalogResponse.root:type_name -> openstorage.api.Catalog + 463, // 389: openstorage.api.CatalogResponse.report:type_name -> openstorage.api.Report + 540, // 390: openstorage.api.LocateResponse.mounts:type_name -> openstorage.api.LocateResponse.MountsEntry + 541, // 391: openstorage.api.LocateResponse.dockerids:type_name -> openstorage.api.LocateResponse.DockeridsEntry + 467, // 392: openstorage.api.VolumePlacementStrategy.replica_affinity:type_name -> openstorage.api.ReplicaPlacementSpec + 467, // 393: openstorage.api.VolumePlacementStrategy.replica_anti_affinity:type_name -> openstorage.api.ReplicaPlacementSpec + 468, // 394: openstorage.api.VolumePlacementStrategy.volume_affinity:type_name -> openstorage.api.VolumePlacementSpec + 468, // 395: openstorage.api.VolumePlacementStrategy.volume_anti_affinity:type_name -> openstorage.api.VolumePlacementSpec + 29, // 396: openstorage.api.ReplicaPlacementSpec.enforcement:type_name -> openstorage.api.EnforcementType + 469, // 397: openstorage.api.ReplicaPlacementSpec.match_expressions:type_name -> openstorage.api.LabelSelectorRequirement + 29, // 398: openstorage.api.VolumePlacementSpec.enforcement:type_name -> openstorage.api.EnforcementType + 469, // 399: openstorage.api.VolumePlacementSpec.match_expressions:type_name -> openstorage.api.LabelSelectorRequirement + 58, // 400: openstorage.api.LabelSelectorRequirement.operator:type_name -> openstorage.api.LabelSelectorRequirement.Operator + 8, // 401: openstorage.api.RestoreVolumeSpec.cos:type_name -> openstorage.api.CosType + 9, // 402: openstorage.api.RestoreVolumeSpec.io_profile:type_name -> openstorage.api.IoProfile + 30, // 403: openstorage.api.RestoreVolumeSpec.shared:type_name -> openstorage.api.RestoreParamBoolType + 89, // 404: openstorage.api.RestoreVolumeSpec.replica_set:type_name -> openstorage.api.ReplicaSet + 470, // 405: openstorage.api.RestoreVolumeSpec.snapshot_schedule:type_name -> openstorage.api.RestoreVolSnashotSchedule + 30, // 406: openstorage.api.RestoreVolumeSpec.sticky:type_name -> openstorage.api.RestoreParamBoolType + 68, // 407: openstorage.api.RestoreVolumeSpec.group:type_name -> openstorage.api.Group + 30, // 408: openstorage.api.RestoreVolumeSpec.journal:type_name -> openstorage.api.RestoreParamBoolType + 30, // 409: openstorage.api.RestoreVolumeSpec.sharedv4:type_name -> openstorage.api.RestoreParamBoolType + 30, // 410: openstorage.api.RestoreVolumeSpec.nodiscard:type_name -> openstorage.api.RestoreParamBoolType + 69, // 411: openstorage.api.RestoreVolumeSpec.io_strategy:type_name -> openstorage.api.IoStrategy + 466, // 412: openstorage.api.RestoreVolumeSpec.placement_strategy:type_name -> openstorage.api.VolumePlacementStrategy + 471, // 413: openstorage.api.RestoreVolumeSpec.storage_policy:type_name -> openstorage.api.RestoreVolStoragePolicy + 91, // 414: openstorage.api.RestoreVolumeSpec.ownership:type_name -> openstorage.api.Ownership + 71, // 415: openstorage.api.RestoreVolumeSpec.export_spec:type_name -> openstorage.api.ExportSpec + 30, // 416: openstorage.api.RestoreVolumeSpec.fp_preference:type_name -> openstorage.api.RestoreParamBoolType + 81, // 417: openstorage.api.RestoreVolumeSpec.mount_options:type_name -> openstorage.api.MountOptions + 81, // 418: openstorage.api.RestoreVolumeSpec.sharedv4_mount_options:type_name -> openstorage.api.MountOptions + 30, // 419: openstorage.api.RestoreVolumeSpec.proxy_write:type_name -> openstorage.api.RestoreParamBoolType + 77, // 420: openstorage.api.RestoreVolumeSpec.proxy_spec:type_name -> openstorage.api.ProxySpec + 78, // 421: openstorage.api.RestoreVolumeSpec.sharedv4_service_spec:type_name -> openstorage.api.Sharedv4ServiceSpec + 80, // 422: openstorage.api.RestoreVolumeSpec.sharedv4_spec:type_name -> openstorage.api.Sharedv4Spec + 30, // 423: openstorage.api.RestoreVolumeSpec.auto_fstrim:type_name -> openstorage.api.RestoreParamBoolType + 85, // 424: openstorage.api.RestoreVolumeSpec.io_throttle:type_name -> openstorage.api.IoThrottle + 30, // 425: openstorage.api.RestoreVolumeSpec.readahead:type_name -> openstorage.api.RestoreParamBoolType + 464, // 426: openstorage.api.SdkVolumeCatalogResponse.catalog:type_name -> openstorage.api.CatalogResponse + 59, // 427: openstorage.api.SdkVerifyChecksumStartResponse.status:type_name -> openstorage.api.VerifyChecksum.VerifyChecksumStatus + 59, // 428: openstorage.api.SdkVerifyChecksumStatusResponse.status:type_name -> openstorage.api.VerifyChecksum.VerifyChecksumStatus + 37, // 429: openstorage.api.Ownership.PublicAccessControl.type:type_name -> openstorage.api.Ownership.AccessType + 493, // 430: openstorage.api.Ownership.AccessControl.groups:type_name -> openstorage.api.Ownership.AccessControl.GroupsEntry + 494, // 431: openstorage.api.Ownership.AccessControl.collaborators:type_name -> openstorage.api.Ownership.AccessControl.CollaboratorsEntry + 491, // 432: openstorage.api.Ownership.AccessControl.public:type_name -> openstorage.api.Ownership.PublicAccessControl + 37, // 433: openstorage.api.Ownership.AccessControl.GroupsEntry.value:type_name -> openstorage.api.Ownership.AccessType + 37, // 434: openstorage.api.Ownership.AccessControl.CollaboratorsEntry.value:type_name -> openstorage.api.Ownership.AccessType + 123, // 435: openstorage.api.GroupSnapCreateResponse.SnapshotsEntry.value:type_name -> openstorage.api.SnapCreateResponse + 60, // 436: openstorage.api.StorageNode.DisksEntry.value:type_name -> openstorage.api.StorageResource + 276, // 437: openstorage.api.DefragNodeStatus.PoolStatusEntry.value:type_name -> openstorage.api.DefragPoolStatus + 282, // 438: openstorage.api.SdkEnumerateDefragStatusResponse.StatusEntry.value:type_name -> openstorage.api.SdkGetDefragNodeStatusResponse + 355, // 439: openstorage.api.SdkCloudBackupStatusResponse.StatusesEntry.value:type_name -> openstorage.api.SdkCloudBackupStatus + 365, // 440: openstorage.api.SdkCloudBackupSchedEnumerateResponse.CloudSchedListEntry.value:type_name -> openstorage.api.SdkCloudBackupScheduleInfo + 50, // 441: openstorage.api.SdkAutoFSTrimStatusResponse.TrimStatusEntry.value:type_name -> openstorage.api.FilesystemTrim.FilesystemTrimStatus + 99, // 442: openstorage.api.SdkAutoFSTrimUsageResponse.UsageEntry.value:type_name -> openstorage.api.FstrimVolumeUsageInfo + 406, // 443: openstorage.api.SdkFilesystemCheckListSnapshotsResponse.SnapshotsEntry.value:type_name -> openstorage.api.FilesystemCheckSnapInfo + 407, // 444: openstorage.api.SdkFilesystemCheckListVolumesResponse.VolumesEntry.value:type_name -> openstorage.api.FilesystemCheckVolInfo + 52, // 445: openstorage.api.SdkServiceCapability.OpenStorageService.type:type_name -> openstorage.api.SdkServiceCapability.OpenStorageService.Type + 436, // 446: openstorage.api.CloudMigrateStatusResponse.InfoEntry.value:type_name -> openstorage.api.CloudMigrateInfoList + 455, // 447: openstorage.api.ClusterPairsEnumerateResponse.PairsEntry.value:type_name -> openstorage.api.ClusterPairInfo + 110, // 448: openstorage.api.OpenStorageAlerts.EnumerateWithFilters:input_type -> openstorage.api.SdkAlertsEnumerateWithFiltersRequest + 112, // 449: openstorage.api.OpenStorageAlerts.Delete:input_type -> openstorage.api.SdkAlertsDeleteRequest + 378, // 450: openstorage.api.OpenStorageRole.Create:input_type -> openstorage.api.SdkRoleCreateRequest + 380, // 451: openstorage.api.OpenStorageRole.Enumerate:input_type -> openstorage.api.SdkRoleEnumerateRequest + 382, // 452: openstorage.api.OpenStorageRole.Inspect:input_type -> openstorage.api.SdkRoleInspectRequest + 384, // 453: openstorage.api.OpenStorageRole.Delete:input_type -> openstorage.api.SdkRoleDeleteRequest + 386, // 454: openstorage.api.OpenStorageRole.Update:input_type -> openstorage.api.SdkRoleUpdateRequest + 389, // 455: openstorage.api.OpenStorageFilesystemTrim.Start:input_type -> openstorage.api.SdkFilesystemTrimStartRequest + 391, // 456: openstorage.api.OpenStorageFilesystemTrim.Status:input_type -> openstorage.api.SdkFilesystemTrimStatusRequest + 393, // 457: openstorage.api.OpenStorageFilesystemTrim.AutoFSTrimStatus:input_type -> openstorage.api.SdkAutoFSTrimStatusRequest + 395, // 458: openstorage.api.OpenStorageFilesystemTrim.AutoFSTrimUsage:input_type -> openstorage.api.SdkAutoFSTrimUsageRequest + 397, // 459: openstorage.api.OpenStorageFilesystemTrim.Stop:input_type -> openstorage.api.SdkFilesystemTrimStopRequest + 401, // 460: openstorage.api.OpenStorageFilesystemTrim.AutoFSTrimPush:input_type -> openstorage.api.SdkAutoFSTrimPushRequest + 403, // 461: openstorage.api.OpenStorageFilesystemTrim.AutoFSTrimPop:input_type -> openstorage.api.SdkAutoFSTrimPopRequest + 408, // 462: openstorage.api.OpenStorageFilesystemCheck.Start:input_type -> openstorage.api.SdkFilesystemCheckStartRequest + 410, // 463: openstorage.api.OpenStorageFilesystemCheck.Status:input_type -> openstorage.api.SdkFilesystemCheckStatusRequest + 412, // 464: openstorage.api.OpenStorageFilesystemCheck.Stop:input_type -> openstorage.api.SdkFilesystemCheckStopRequest + 414, // 465: openstorage.api.OpenStorageFilesystemCheck.ListSnapshots:input_type -> openstorage.api.SdkFilesystemCheckListSnapshotsRequest + 416, // 466: openstorage.api.OpenStorageFilesystemCheck.DeleteSnapshots:input_type -> openstorage.api.SdkFilesystemCheckDeleteSnapshotsRequest + 418, // 467: openstorage.api.OpenStorageFilesystemCheck.ListVolumes:input_type -> openstorage.api.SdkFilesystemCheckListVolumesRequest + 277, // 468: openstorage.api.OpenStorageFilesystemDefrag.CreateSchedule:input_type -> openstorage.api.SdkCreateDefragScheduleRequest + 281, // 469: openstorage.api.OpenStorageFilesystemDefrag.GetNodeStatus:input_type -> openstorage.api.SdkGetDefragNodeStatusRequest + 283, // 470: openstorage.api.OpenStorageFilesystemDefrag.EnumerateNodeStatus:input_type -> openstorage.api.SdkEnumerateDefragStatusRequest + 279, // 471: openstorage.api.OpenStorageFilesystemDefrag.CleanUpSchedules:input_type -> openstorage.api.SdkCleanUpDefragSchedulesRequest + 420, // 472: openstorage.api.OpenStorageIdentity.Capabilities:input_type -> openstorage.api.SdkIdentityCapabilitiesRequest + 422, // 473: openstorage.api.OpenStorageIdentity.Version:input_type -> openstorage.api.SdkIdentityVersionRequest + 257, // 474: openstorage.api.OpenStorageCluster.InspectCurrent:input_type -> openstorage.api.SdkClusterInspectCurrentRequest + 444, // 475: openstorage.api.OpenStorageClusterPair.Create:input_type -> openstorage.api.SdkClusterPairCreateRequest + 456, // 476: openstorage.api.OpenStorageClusterPair.Inspect:input_type -> openstorage.api.SdkClusterPairInspectRequest + 459, // 477: openstorage.api.OpenStorageClusterPair.Enumerate:input_type -> openstorage.api.SdkClusterPairEnumerateRequest + 451, // 478: openstorage.api.OpenStorageClusterPair.GetToken:input_type -> openstorage.api.SdkClusterPairGetTokenRequest + 453, // 479: openstorage.api.OpenStorageClusterPair.ResetToken:input_type -> openstorage.api.SdkClusterPairResetTokenRequest + 448, // 480: openstorage.api.OpenStorageClusterPair.Delete:input_type -> openstorage.api.SdkClusterPairDeleteRequest + 249, // 481: openstorage.api.OpenStorageClusterDomains.Enumerate:input_type -> openstorage.api.SdkClusterDomainsEnumerateRequest + 251, // 482: openstorage.api.OpenStorageClusterDomains.Inspect:input_type -> openstorage.api.SdkClusterDomainInspectRequest + 253, // 483: openstorage.api.OpenStorageClusterDomains.Activate:input_type -> openstorage.api.SdkClusterDomainActivateRequest + 255, // 484: openstorage.api.OpenStorageClusterDomains.Deactivate:input_type -> openstorage.api.SdkClusterDomainDeactivateRequest + 304, // 485: openstorage.api.OpenStoragePool.Resize:input_type -> openstorage.api.SdkStoragePoolResizeRequest + 306, // 486: openstorage.api.OpenStoragePool.Rebalance:input_type -> openstorage.api.SdkStorageRebalanceRequest + 312, // 487: openstorage.api.OpenStoragePool.UpdateRebalanceJobState:input_type -> openstorage.api.SdkUpdateRebalanceJobRequest + 314, // 488: openstorage.api.OpenStoragePool.GetRebalanceJobStatus:input_type -> openstorage.api.SdkGetRebalanceJobStatusRequest + 316, // 489: openstorage.api.OpenStoragePool.EnumerateRebalanceJobs:input_type -> openstorage.api.SdkEnumerateRebalanceJobsRequest + 319, // 490: openstorage.api.OpenStoragePool.CreateRebalanceSchedule:input_type -> openstorage.api.SdkCreateRebalanceScheduleRequest + 321, // 491: openstorage.api.OpenStoragePool.GetRebalanceSchedule:input_type -> openstorage.api.SdkGetRebalanceScheduleRequest + 323, // 492: openstorage.api.OpenStoragePool.DeleteRebalanceSchedule:input_type -> openstorage.api.SdkDeleteRebalanceScheduleRequest + 286, // 493: openstorage.api.OpenStorageDiags.Collect:input_type -> openstorage.api.SdkDiagsCollectRequest + 292, // 494: openstorage.api.OpenStorageJob.Update:input_type -> openstorage.api.SdkUpdateJobRequest + 294, // 495: openstorage.api.OpenStorageJob.GetStatus:input_type -> openstorage.api.SdkGetJobStatusRequest + 290, // 496: openstorage.api.OpenStorageJob.Enumerate:input_type -> openstorage.api.SdkEnumerateJobsRequest + 262, // 497: openstorage.api.OpenStorageSchedule.Inspect:input_type -> openstorage.api.SdkInspectScheduleRequest + 264, // 498: openstorage.api.OpenStorageSchedule.Enumerate:input_type -> openstorage.api.SdkEnumerateSchedulesRequest + 266, // 499: openstorage.api.OpenStorageSchedule.Delete:input_type -> openstorage.api.SdkDeleteScheduleRequest + 259, // 500: openstorage.api.OpenStorageNode.Inspect:input_type -> openstorage.api.SdkNodeInspectRequest + 328, // 501: openstorage.api.OpenStorageNode.InspectCurrent:input_type -> openstorage.api.SdkNodeInspectCurrentRequest + 330, // 502: openstorage.api.OpenStorageNode.Enumerate:input_type -> openstorage.api.SdkNodeEnumerateRequest + 332, // 503: openstorage.api.OpenStorageNode.EnumerateWithFilters:input_type -> openstorage.api.SdkNodeEnumerateWithFiltersRequest + 245, // 504: openstorage.api.OpenStorageNode.VolumeUsageByNode:input_type -> openstorage.api.SdkNodeVolumeUsageByNodeRequest + 247, // 505: openstorage.api.OpenStorageNode.RelaxedReclaimPurge:input_type -> openstorage.api.SdkNodeRelaxedReclaimPurgeRequest + 270, // 506: openstorage.api.OpenStorageNode.DrainAttachments:input_type -> openstorage.api.SdkNodeDrainAttachmentsRequest + 300, // 507: openstorage.api.OpenStorageNode.CordonAttachments:input_type -> openstorage.api.SdkNodeCordonAttachmentsRequest + 302, // 508: openstorage.api.OpenStorageNode.UncordonAttachments:input_type -> openstorage.api.SdkNodeUncordonAttachmentsRequest + 399, // 509: openstorage.api.OpenStorageNode.VolumeBytesUsedByNode:input_type -> openstorage.api.SdkVolumeBytesUsedRequest + 137, // 510: openstorage.api.OpenStorageBucket.Create:input_type -> openstorage.api.BucketCreateRequest + 139, // 511: openstorage.api.OpenStorageBucket.Delete:input_type -> openstorage.api.BucketDeleteRequest + 141, // 512: openstorage.api.OpenStorageBucket.GrantAccess:input_type -> openstorage.api.BucketGrantAccessRequest + 143, // 513: openstorage.api.OpenStorageBucket.RevokeAccess:input_type -> openstorage.api.BucketRevokeAccessRequest + 211, // 514: openstorage.api.OpenStorageVolume.Create:input_type -> openstorage.api.SdkVolumeCreateRequest + 213, // 515: openstorage.api.OpenStorageVolume.Clone:input_type -> openstorage.api.SdkVolumeCloneRequest + 215, // 516: openstorage.api.OpenStorageVolume.Delete:input_type -> openstorage.api.SdkVolumeDeleteRequest + 217, // 517: openstorage.api.OpenStorageVolume.Inspect:input_type -> openstorage.api.SdkVolumeInspectRequest + 219, // 518: openstorage.api.OpenStorageVolume.InspectWithFilters:input_type -> openstorage.api.SdkVolumeInspectWithFiltersRequest + 221, // 519: openstorage.api.OpenStorageVolume.Update:input_type -> openstorage.api.SdkVolumeUpdateRequest + 223, // 520: openstorage.api.OpenStorageVolume.Stats:input_type -> openstorage.api.SdkVolumeStatsRequest + 225, // 521: openstorage.api.OpenStorageVolume.CapacityUsage:input_type -> openstorage.api.SdkVolumeCapacityUsageRequest + 227, // 522: openstorage.api.OpenStorageVolume.Enumerate:input_type -> openstorage.api.SdkVolumeEnumerateRequest + 229, // 523: openstorage.api.OpenStorageVolume.EnumerateWithFilters:input_type -> openstorage.api.SdkVolumeEnumerateWithFiltersRequest + 231, // 524: openstorage.api.OpenStorageVolume.SnapshotCreate:input_type -> openstorage.api.SdkVolumeSnapshotCreateRequest + 233, // 525: openstorage.api.OpenStorageVolume.SnapshotRestore:input_type -> openstorage.api.SdkVolumeSnapshotRestoreRequest + 235, // 526: openstorage.api.OpenStorageVolume.SnapshotEnumerate:input_type -> openstorage.api.SdkVolumeSnapshotEnumerateRequest + 237, // 527: openstorage.api.OpenStorageVolume.SnapshotEnumerateWithFilters:input_type -> openstorage.api.SdkVolumeSnapshotEnumerateWithFiltersRequest + 239, // 528: openstorage.api.OpenStorageVolume.SnapshotScheduleUpdate:input_type -> openstorage.api.SdkVolumeSnapshotScheduleUpdateRequest + 473, // 529: openstorage.api.OpenStorageVolume.VolumeCatalog:input_type -> openstorage.api.SdkVolumeCatalogRequest + 241, // 530: openstorage.api.OpenStorageWatch.Watch:input_type -> openstorage.api.SdkWatchRequest + 206, // 531: openstorage.api.OpenStorageMountAttach.Attach:input_type -> openstorage.api.SdkVolumeAttachRequest + 209, // 532: openstorage.api.OpenStorageMountAttach.Detach:input_type -> openstorage.api.SdkVolumeDetachRequest + 201, // 533: openstorage.api.OpenStorageMountAttach.Mount:input_type -> openstorage.api.SdkVolumeMountRequest + 204, // 534: openstorage.api.OpenStorageMountAttach.Unmount:input_type -> openstorage.api.SdkVolumeUnmountRequest + 429, // 535: openstorage.api.OpenStorageMigrate.Start:input_type -> openstorage.api.SdkCloudMigrateStartRequest + 433, // 536: openstorage.api.OpenStorageMigrate.Cancel:input_type -> openstorage.api.SdkCloudMigrateCancelRequest + 437, // 537: openstorage.api.OpenStorageMigrate.Status:input_type -> openstorage.api.SdkCloudMigrateStatusRequest + 334, // 538: openstorage.api.OpenStorageObjectstore.Inspect:input_type -> openstorage.api.SdkObjectstoreInspectRequest + 336, // 539: openstorage.api.OpenStorageObjectstore.Create:input_type -> openstorage.api.SdkObjectstoreCreateRequest + 338, // 540: openstorage.api.OpenStorageObjectstore.Delete:input_type -> openstorage.api.SdkObjectstoreDeleteRequest + 340, // 541: openstorage.api.OpenStorageObjectstore.Update:input_type -> openstorage.api.SdkObjectstoreUpdateRequest + 178, // 542: openstorage.api.OpenStorageCredentials.Create:input_type -> openstorage.api.SdkCredentialCreateRequest + 180, // 543: openstorage.api.OpenStorageCredentials.Update:input_type -> openstorage.api.SdkCredentialUpdateRequest + 190, // 544: openstorage.api.OpenStorageCredentials.Enumerate:input_type -> openstorage.api.SdkCredentialEnumerateRequest + 192, // 545: openstorage.api.OpenStorageCredentials.Inspect:input_type -> openstorage.api.SdkCredentialInspectRequest + 194, // 546: openstorage.api.OpenStorageCredentials.Delete:input_type -> openstorage.api.SdkCredentialDeleteRequest + 196, // 547: openstorage.api.OpenStorageCredentials.Validate:input_type -> openstorage.api.SdkCredentialValidateRequest + 198, // 548: openstorage.api.OpenStorageCredentials.DeleteReferences:input_type -> openstorage.api.SdkCredentialDeleteReferencesRequest + 162, // 549: openstorage.api.OpenStorageSchedulePolicy.Create:input_type -> openstorage.api.SdkSchedulePolicyCreateRequest + 164, // 550: openstorage.api.OpenStorageSchedulePolicy.Update:input_type -> openstorage.api.SdkSchedulePolicyUpdateRequest + 166, // 551: openstorage.api.OpenStorageSchedulePolicy.Enumerate:input_type -> openstorage.api.SdkSchedulePolicyEnumerateRequest + 168, // 552: openstorage.api.OpenStorageSchedulePolicy.Inspect:input_type -> openstorage.api.SdkSchedulePolicyInspectRequest + 170, // 553: openstorage.api.OpenStorageSchedulePolicy.Delete:input_type -> openstorage.api.SdkSchedulePolicyDeleteRequest + 342, // 554: openstorage.api.OpenStorageCloudBackup.Create:input_type -> openstorage.api.SdkCloudBackupCreateRequest + 344, // 555: openstorage.api.OpenStorageCloudBackup.GroupCreate:input_type -> openstorage.api.SdkCloudBackupGroupCreateRequest + 346, // 556: openstorage.api.OpenStorageCloudBackup.Restore:input_type -> openstorage.api.SdkCloudBackupRestoreRequest + 348, // 557: openstorage.api.OpenStorageCloudBackup.Delete:input_type -> openstorage.api.SdkCloudBackupDeleteRequest + 350, // 558: openstorage.api.OpenStorageCloudBackup.DeleteAll:input_type -> openstorage.api.SdkCloudBackupDeleteAllRequest + 352, // 559: openstorage.api.OpenStorageCloudBackup.EnumerateWithFilters:input_type -> openstorage.api.SdkCloudBackupEnumerateWithFiltersRequest + 356, // 560: openstorage.api.OpenStorageCloudBackup.Status:input_type -> openstorage.api.SdkCloudBackupStatusRequest + 358, // 561: openstorage.api.OpenStorageCloudBackup.Catalog:input_type -> openstorage.api.SdkCloudBackupCatalogRequest + 361, // 562: openstorage.api.OpenStorageCloudBackup.History:input_type -> openstorage.api.SdkCloudBackupHistoryRequest + 363, // 563: openstorage.api.OpenStorageCloudBackup.StateChange:input_type -> openstorage.api.SdkCloudBackupStateChangeRequest + 366, // 564: openstorage.api.OpenStorageCloudBackup.SchedCreate:input_type -> openstorage.api.SdkCloudBackupSchedCreateRequest + 368, // 565: openstorage.api.OpenStorageCloudBackup.SchedUpdate:input_type -> openstorage.api.SdkCloudBackupSchedUpdateRequest + 370, // 566: openstorage.api.OpenStorageCloudBackup.SchedDelete:input_type -> openstorage.api.SdkCloudBackupSchedDeleteRequest + 372, // 567: openstorage.api.OpenStorageCloudBackup.SchedEnumerate:input_type -> openstorage.api.SdkCloudBackupSchedEnumerateRequest + 374, // 568: openstorage.api.OpenStorageCloudBackup.Size:input_type -> openstorage.api.SdkCloudBackupSizeRequest + 146, // 569: openstorage.api.OpenStoragePolicy.Create:input_type -> openstorage.api.SdkOpenStoragePolicyCreateRequest + 148, // 570: openstorage.api.OpenStoragePolicy.Enumerate:input_type -> openstorage.api.SdkOpenStoragePolicyEnumerateRequest + 150, // 571: openstorage.api.OpenStoragePolicy.Inspect:input_type -> openstorage.api.SdkOpenStoragePolicyInspectRequest + 154, // 572: openstorage.api.OpenStoragePolicy.Update:input_type -> openstorage.api.SdkOpenStoragePolicyUpdateRequest + 152, // 573: openstorage.api.OpenStoragePolicy.Delete:input_type -> openstorage.api.SdkOpenStoragePolicyDeleteRequest + 156, // 574: openstorage.api.OpenStoragePolicy.SetDefault:input_type -> openstorage.api.SdkOpenStoragePolicySetDefaultRequest + 160, // 575: openstorage.api.OpenStoragePolicy.DefaultInspect:input_type -> openstorage.api.SdkOpenStoragePolicyDefaultInspectRequest + 158, // 576: openstorage.api.OpenStoragePolicy.Release:input_type -> openstorage.api.SdkOpenStoragePolicyReleaseRequest + 476, // 577: openstorage.api.OpenStorageVerifyChecksum.Start:input_type -> openstorage.api.SdkVerifyChecksumStartRequest + 478, // 578: openstorage.api.OpenStorageVerifyChecksum.Status:input_type -> openstorage.api.SdkVerifyChecksumStatusRequest + 480, // 579: openstorage.api.OpenStorageVerifyChecksum.Stop:input_type -> openstorage.api.SdkVerifyChecksumStopRequest + 111, // 580: openstorage.api.OpenStorageAlerts.EnumerateWithFilters:output_type -> openstorage.api.SdkAlertsEnumerateWithFiltersResponse + 113, // 581: openstorage.api.OpenStorageAlerts.Delete:output_type -> openstorage.api.SdkAlertsDeleteResponse + 379, // 582: openstorage.api.OpenStorageRole.Create:output_type -> openstorage.api.SdkRoleCreateResponse + 381, // 583: openstorage.api.OpenStorageRole.Enumerate:output_type -> openstorage.api.SdkRoleEnumerateResponse + 383, // 584: openstorage.api.OpenStorageRole.Inspect:output_type -> openstorage.api.SdkRoleInspectResponse + 385, // 585: openstorage.api.OpenStorageRole.Delete:output_type -> openstorage.api.SdkRoleDeleteResponse + 387, // 586: openstorage.api.OpenStorageRole.Update:output_type -> openstorage.api.SdkRoleUpdateResponse + 390, // 587: openstorage.api.OpenStorageFilesystemTrim.Start:output_type -> openstorage.api.SdkFilesystemTrimStartResponse + 392, // 588: openstorage.api.OpenStorageFilesystemTrim.Status:output_type -> openstorage.api.SdkFilesystemTrimStatusResponse + 394, // 589: openstorage.api.OpenStorageFilesystemTrim.AutoFSTrimStatus:output_type -> openstorage.api.SdkAutoFSTrimStatusResponse + 396, // 590: openstorage.api.OpenStorageFilesystemTrim.AutoFSTrimUsage:output_type -> openstorage.api.SdkAutoFSTrimUsageResponse + 400, // 591: openstorage.api.OpenStorageFilesystemTrim.Stop:output_type -> openstorage.api.SdkFilesystemTrimStopResponse + 402, // 592: openstorage.api.OpenStorageFilesystemTrim.AutoFSTrimPush:output_type -> openstorage.api.SdkAutoFSTrimPushResponse + 404, // 593: openstorage.api.OpenStorageFilesystemTrim.AutoFSTrimPop:output_type -> openstorage.api.SdkAutoFSTrimPopResponse + 409, // 594: openstorage.api.OpenStorageFilesystemCheck.Start:output_type -> openstorage.api.SdkFilesystemCheckStartResponse + 411, // 595: openstorage.api.OpenStorageFilesystemCheck.Status:output_type -> openstorage.api.SdkFilesystemCheckStatusResponse + 413, // 596: openstorage.api.OpenStorageFilesystemCheck.Stop:output_type -> openstorage.api.SdkFilesystemCheckStopResponse + 415, // 597: openstorage.api.OpenStorageFilesystemCheck.ListSnapshots:output_type -> openstorage.api.SdkFilesystemCheckListSnapshotsResponse + 417, // 598: openstorage.api.OpenStorageFilesystemCheck.DeleteSnapshots:output_type -> openstorage.api.SdkFilesystemCheckDeleteSnapshotsResponse + 419, // 599: openstorage.api.OpenStorageFilesystemCheck.ListVolumes:output_type -> openstorage.api.SdkFilesystemCheckListVolumesResponse + 278, // 600: openstorage.api.OpenStorageFilesystemDefrag.CreateSchedule:output_type -> openstorage.api.SdkCreateDefragScheduleResponse + 282, // 601: openstorage.api.OpenStorageFilesystemDefrag.GetNodeStatus:output_type -> openstorage.api.SdkGetDefragNodeStatusResponse + 284, // 602: openstorage.api.OpenStorageFilesystemDefrag.EnumerateNodeStatus:output_type -> openstorage.api.SdkEnumerateDefragStatusResponse + 280, // 603: openstorage.api.OpenStorageFilesystemDefrag.CleanUpSchedules:output_type -> openstorage.api.SdkCleanUpDefragSchedulesResponse + 421, // 604: openstorage.api.OpenStorageIdentity.Capabilities:output_type -> openstorage.api.SdkIdentityCapabilitiesResponse + 423, // 605: openstorage.api.OpenStorageIdentity.Version:output_type -> openstorage.api.SdkIdentityVersionResponse + 258, // 606: openstorage.api.OpenStorageCluster.InspectCurrent:output_type -> openstorage.api.SdkClusterInspectCurrentResponse + 445, // 607: openstorage.api.OpenStorageClusterPair.Create:output_type -> openstorage.api.SdkClusterPairCreateResponse + 458, // 608: openstorage.api.OpenStorageClusterPair.Inspect:output_type -> openstorage.api.SdkClusterPairInspectResponse + 461, // 609: openstorage.api.OpenStorageClusterPair.Enumerate:output_type -> openstorage.api.SdkClusterPairEnumerateResponse + 452, // 610: openstorage.api.OpenStorageClusterPair.GetToken:output_type -> openstorage.api.SdkClusterPairGetTokenResponse + 454, // 611: openstorage.api.OpenStorageClusterPair.ResetToken:output_type -> openstorage.api.SdkClusterPairResetTokenResponse + 449, // 612: openstorage.api.OpenStorageClusterPair.Delete:output_type -> openstorage.api.SdkClusterPairDeleteResponse + 250, // 613: openstorage.api.OpenStorageClusterDomains.Enumerate:output_type -> openstorage.api.SdkClusterDomainsEnumerateResponse + 252, // 614: openstorage.api.OpenStorageClusterDomains.Inspect:output_type -> openstorage.api.SdkClusterDomainInspectResponse + 254, // 615: openstorage.api.OpenStorageClusterDomains.Activate:output_type -> openstorage.api.SdkClusterDomainActivateResponse + 256, // 616: openstorage.api.OpenStorageClusterDomains.Deactivate:output_type -> openstorage.api.SdkClusterDomainDeactivateResponse + 326, // 617: openstorage.api.OpenStoragePool.Resize:output_type -> openstorage.api.SdkStoragePoolResizeResponse + 307, // 618: openstorage.api.OpenStoragePool.Rebalance:output_type -> openstorage.api.SdkStorageRebalanceResponse + 313, // 619: openstorage.api.OpenStoragePool.UpdateRebalanceJobState:output_type -> openstorage.api.SdkUpdateRebalanceJobResponse + 315, // 620: openstorage.api.OpenStoragePool.GetRebalanceJobStatus:output_type -> openstorage.api.SdkGetRebalanceJobStatusResponse + 317, // 621: openstorage.api.OpenStoragePool.EnumerateRebalanceJobs:output_type -> openstorage.api.SdkEnumerateRebalanceJobsResponse + 320, // 622: openstorage.api.OpenStoragePool.CreateRebalanceSchedule:output_type -> openstorage.api.SdkCreateRebalanceScheduleResponse + 322, // 623: openstorage.api.OpenStoragePool.GetRebalanceSchedule:output_type -> openstorage.api.SdkGetRebalanceScheduleResponse + 324, // 624: openstorage.api.OpenStoragePool.DeleteRebalanceSchedule:output_type -> openstorage.api.SdkDeleteRebalanceScheduleResponse + 287, // 625: openstorage.api.OpenStorageDiags.Collect:output_type -> openstorage.api.SdkDiagsCollectResponse + 293, // 626: openstorage.api.OpenStorageJob.Update:output_type -> openstorage.api.SdkUpdateJobResponse + 298, // 627: openstorage.api.OpenStorageJob.GetStatus:output_type -> openstorage.api.SdkGetJobStatusResponse + 291, // 628: openstorage.api.OpenStorageJob.Enumerate:output_type -> openstorage.api.SdkEnumerateJobsResponse + 263, // 629: openstorage.api.OpenStorageSchedule.Inspect:output_type -> openstorage.api.SdkInspectScheduleResponse + 265, // 630: openstorage.api.OpenStorageSchedule.Enumerate:output_type -> openstorage.api.SdkEnumerateSchedulesResponse + 267, // 631: openstorage.api.OpenStorageSchedule.Delete:output_type -> openstorage.api.SdkDeleteScheduleResponse + 327, // 632: openstorage.api.OpenStorageNode.Inspect:output_type -> openstorage.api.SdkNodeInspectResponse + 329, // 633: openstorage.api.OpenStorageNode.InspectCurrent:output_type -> openstorage.api.SdkNodeInspectCurrentResponse + 331, // 634: openstorage.api.OpenStorageNode.Enumerate:output_type -> openstorage.api.SdkNodeEnumerateResponse + 333, // 635: openstorage.api.OpenStorageNode.EnumerateWithFilters:output_type -> openstorage.api.SdkNodeEnumerateWithFiltersResponse + 246, // 636: openstorage.api.OpenStorageNode.VolumeUsageByNode:output_type -> openstorage.api.SdkNodeVolumeUsageByNodeResponse + 248, // 637: openstorage.api.OpenStorageNode.RelaxedReclaimPurge:output_type -> openstorage.api.SdkNodeRelaxedReclaimPurgeResponse + 268, // 638: openstorage.api.OpenStorageNode.DrainAttachments:output_type -> openstorage.api.SdkJobResponse + 301, // 639: openstorage.api.OpenStorageNode.CordonAttachments:output_type -> openstorage.api.SdkNodeCordonAttachmentsResponse + 303, // 640: openstorage.api.OpenStorageNode.UncordonAttachments:output_type -> openstorage.api.SdkNodeUncordonAttachmentsResponse + 398, // 641: openstorage.api.OpenStorageNode.VolumeBytesUsedByNode:output_type -> openstorage.api.SdkVolumeBytesUsedResponse + 138, // 642: openstorage.api.OpenStorageBucket.Create:output_type -> openstorage.api.BucketCreateResponse + 140, // 643: openstorage.api.OpenStorageBucket.Delete:output_type -> openstorage.api.BucketDeleteResponse + 142, // 644: openstorage.api.OpenStorageBucket.GrantAccess:output_type -> openstorage.api.BucketGrantAccessResponse + 144, // 645: openstorage.api.OpenStorageBucket.RevokeAccess:output_type -> openstorage.api.BucketRevokeAccessResponse + 212, // 646: openstorage.api.OpenStorageVolume.Create:output_type -> openstorage.api.SdkVolumeCreateResponse + 214, // 647: openstorage.api.OpenStorageVolume.Clone:output_type -> openstorage.api.SdkVolumeCloneResponse + 216, // 648: openstorage.api.OpenStorageVolume.Delete:output_type -> openstorage.api.SdkVolumeDeleteResponse + 218, // 649: openstorage.api.OpenStorageVolume.Inspect:output_type -> openstorage.api.SdkVolumeInspectResponse + 220, // 650: openstorage.api.OpenStorageVolume.InspectWithFilters:output_type -> openstorage.api.SdkVolumeInspectWithFiltersResponse + 222, // 651: openstorage.api.OpenStorageVolume.Update:output_type -> openstorage.api.SdkVolumeUpdateResponse + 224, // 652: openstorage.api.OpenStorageVolume.Stats:output_type -> openstorage.api.SdkVolumeStatsResponse + 226, // 653: openstorage.api.OpenStorageVolume.CapacityUsage:output_type -> openstorage.api.SdkVolumeCapacityUsageResponse + 228, // 654: openstorage.api.OpenStorageVolume.Enumerate:output_type -> openstorage.api.SdkVolumeEnumerateResponse + 230, // 655: openstorage.api.OpenStorageVolume.EnumerateWithFilters:output_type -> openstorage.api.SdkVolumeEnumerateWithFiltersResponse + 232, // 656: openstorage.api.OpenStorageVolume.SnapshotCreate:output_type -> openstorage.api.SdkVolumeSnapshotCreateResponse + 234, // 657: openstorage.api.OpenStorageVolume.SnapshotRestore:output_type -> openstorage.api.SdkVolumeSnapshotRestoreResponse + 236, // 658: openstorage.api.OpenStorageVolume.SnapshotEnumerate:output_type -> openstorage.api.SdkVolumeSnapshotEnumerateResponse + 238, // 659: openstorage.api.OpenStorageVolume.SnapshotEnumerateWithFilters:output_type -> openstorage.api.SdkVolumeSnapshotEnumerateWithFiltersResponse + 240, // 660: openstorage.api.OpenStorageVolume.SnapshotScheduleUpdate:output_type -> openstorage.api.SdkVolumeSnapshotScheduleUpdateResponse + 474, // 661: openstorage.api.OpenStorageVolume.VolumeCatalog:output_type -> openstorage.api.SdkVolumeCatalogResponse + 242, // 662: openstorage.api.OpenStorageWatch.Watch:output_type -> openstorage.api.SdkWatchResponse + 207, // 663: openstorage.api.OpenStorageMountAttach.Attach:output_type -> openstorage.api.SdkVolumeAttachResponse + 210, // 664: openstorage.api.OpenStorageMountAttach.Detach:output_type -> openstorage.api.SdkVolumeDetachResponse + 202, // 665: openstorage.api.OpenStorageMountAttach.Mount:output_type -> openstorage.api.SdkVolumeMountResponse + 205, // 666: openstorage.api.OpenStorageMountAttach.Unmount:output_type -> openstorage.api.SdkVolumeUnmountResponse + 431, // 667: openstorage.api.OpenStorageMigrate.Start:output_type -> openstorage.api.SdkCloudMigrateStartResponse + 434, // 668: openstorage.api.OpenStorageMigrate.Cancel:output_type -> openstorage.api.SdkCloudMigrateCancelResponse + 440, // 669: openstorage.api.OpenStorageMigrate.Status:output_type -> openstorage.api.SdkCloudMigrateStatusResponse + 335, // 670: openstorage.api.OpenStorageObjectstore.Inspect:output_type -> openstorage.api.SdkObjectstoreInspectResponse + 337, // 671: openstorage.api.OpenStorageObjectstore.Create:output_type -> openstorage.api.SdkObjectstoreCreateResponse + 339, // 672: openstorage.api.OpenStorageObjectstore.Delete:output_type -> openstorage.api.SdkObjectstoreDeleteResponse + 341, // 673: openstorage.api.OpenStorageObjectstore.Update:output_type -> openstorage.api.SdkObjectstoreUpdateResponse + 179, // 674: openstorage.api.OpenStorageCredentials.Create:output_type -> openstorage.api.SdkCredentialCreateResponse + 181, // 675: openstorage.api.OpenStorageCredentials.Update:output_type -> openstorage.api.SdkCredentialUpdateResponse + 191, // 676: openstorage.api.OpenStorageCredentials.Enumerate:output_type -> openstorage.api.SdkCredentialEnumerateResponse + 193, // 677: openstorage.api.OpenStorageCredentials.Inspect:output_type -> openstorage.api.SdkCredentialInspectResponse + 195, // 678: openstorage.api.OpenStorageCredentials.Delete:output_type -> openstorage.api.SdkCredentialDeleteResponse + 197, // 679: openstorage.api.OpenStorageCredentials.Validate:output_type -> openstorage.api.SdkCredentialValidateResponse + 199, // 680: openstorage.api.OpenStorageCredentials.DeleteReferences:output_type -> openstorage.api.SdkCredentialDeleteReferencesResponse + 163, // 681: openstorage.api.OpenStorageSchedulePolicy.Create:output_type -> openstorage.api.SdkSchedulePolicyCreateResponse + 165, // 682: openstorage.api.OpenStorageSchedulePolicy.Update:output_type -> openstorage.api.SdkSchedulePolicyUpdateResponse + 167, // 683: openstorage.api.OpenStorageSchedulePolicy.Enumerate:output_type -> openstorage.api.SdkSchedulePolicyEnumerateResponse + 169, // 684: openstorage.api.OpenStorageSchedulePolicy.Inspect:output_type -> openstorage.api.SdkSchedulePolicyInspectResponse + 171, // 685: openstorage.api.OpenStorageSchedulePolicy.Delete:output_type -> openstorage.api.SdkSchedulePolicyDeleteResponse + 343, // 686: openstorage.api.OpenStorageCloudBackup.Create:output_type -> openstorage.api.SdkCloudBackupCreateResponse + 345, // 687: openstorage.api.OpenStorageCloudBackup.GroupCreate:output_type -> openstorage.api.SdkCloudBackupGroupCreateResponse + 347, // 688: openstorage.api.OpenStorageCloudBackup.Restore:output_type -> openstorage.api.SdkCloudBackupRestoreResponse + 349, // 689: openstorage.api.OpenStorageCloudBackup.Delete:output_type -> openstorage.api.SdkCloudBackupDeleteResponse + 351, // 690: openstorage.api.OpenStorageCloudBackup.DeleteAll:output_type -> openstorage.api.SdkCloudBackupDeleteAllResponse + 354, // 691: openstorage.api.OpenStorageCloudBackup.EnumerateWithFilters:output_type -> openstorage.api.SdkCloudBackupEnumerateWithFiltersResponse + 357, // 692: openstorage.api.OpenStorageCloudBackup.Status:output_type -> openstorage.api.SdkCloudBackupStatusResponse + 359, // 693: openstorage.api.OpenStorageCloudBackup.Catalog:output_type -> openstorage.api.SdkCloudBackupCatalogResponse + 362, // 694: openstorage.api.OpenStorageCloudBackup.History:output_type -> openstorage.api.SdkCloudBackupHistoryResponse + 364, // 695: openstorage.api.OpenStorageCloudBackup.StateChange:output_type -> openstorage.api.SdkCloudBackupStateChangeResponse + 367, // 696: openstorage.api.OpenStorageCloudBackup.SchedCreate:output_type -> openstorage.api.SdkCloudBackupSchedCreateResponse + 369, // 697: openstorage.api.OpenStorageCloudBackup.SchedUpdate:output_type -> openstorage.api.SdkCloudBackupSchedUpdateResponse + 371, // 698: openstorage.api.OpenStorageCloudBackup.SchedDelete:output_type -> openstorage.api.SdkCloudBackupSchedDeleteResponse + 373, // 699: openstorage.api.OpenStorageCloudBackup.SchedEnumerate:output_type -> openstorage.api.SdkCloudBackupSchedEnumerateResponse + 375, // 700: openstorage.api.OpenStorageCloudBackup.Size:output_type -> openstorage.api.SdkCloudBackupSizeResponse + 147, // 701: openstorage.api.OpenStoragePolicy.Create:output_type -> openstorage.api.SdkOpenStoragePolicyCreateResponse + 149, // 702: openstorage.api.OpenStoragePolicy.Enumerate:output_type -> openstorage.api.SdkOpenStoragePolicyEnumerateResponse + 151, // 703: openstorage.api.OpenStoragePolicy.Inspect:output_type -> openstorage.api.SdkOpenStoragePolicyInspectResponse + 155, // 704: openstorage.api.OpenStoragePolicy.Update:output_type -> openstorage.api.SdkOpenStoragePolicyUpdateResponse + 153, // 705: openstorage.api.OpenStoragePolicy.Delete:output_type -> openstorage.api.SdkOpenStoragePolicyDeleteResponse + 157, // 706: openstorage.api.OpenStoragePolicy.SetDefault:output_type -> openstorage.api.SdkOpenStoragePolicySetDefaultResponse + 161, // 707: openstorage.api.OpenStoragePolicy.DefaultInspect:output_type -> openstorage.api.SdkOpenStoragePolicyDefaultInspectResponse + 159, // 708: openstorage.api.OpenStoragePolicy.Release:output_type -> openstorage.api.SdkOpenStoragePolicyReleaseResponse + 477, // 709: openstorage.api.OpenStorageVerifyChecksum.Start:output_type -> openstorage.api.SdkVerifyChecksumStartResponse + 479, // 710: openstorage.api.OpenStorageVerifyChecksum.Status:output_type -> openstorage.api.SdkVerifyChecksumStatusResponse + 481, // 711: openstorage.api.OpenStorageVerifyChecksum.Stop:output_type -> openstorage.api.SdkVerifyChecksumStopResponse + 580, // [580:712] is the sub-list for method output_type + 448, // [448:580] is the sub-list for method input_type + 448, // [448:448] is the sub-list for extension type_name + 448, // [448:448] is the sub-list for extension extendee + 0, // [0:448] is the sub-list for field type_name } func init() { file_api_api_proto_init() } @@ -40976,7 +42080,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[201].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkJobResponse); i { + switch v := v.(*Schedule); i { case 0: return &v.state case 1: @@ -40988,7 +42092,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[202].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NodeDrainAttachmentOptions); i { + switch v := v.(*SdkInspectScheduleRequest); i { case 0: return &v.state case 1: @@ -41000,7 +42104,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[203].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkNodeDrainAttachmentsRequest); i { + switch v := v.(*SdkInspectScheduleResponse); i { case 0: return &v.state case 1: @@ -41012,7 +42116,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[204].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NodeDrainAttachmentsJob); i { + switch v := v.(*SdkEnumerateSchedulesRequest); i { case 0: return &v.state case 1: @@ -41024,7 +42128,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[205].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CloudDriveTransferJob); i { + switch v := v.(*SdkEnumerateSchedulesResponse); i { case 0: return &v.state case 1: @@ -41036,7 +42140,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[206].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CollectDiagsJob); i { + switch v := v.(*SdkDeleteScheduleRequest); i { case 0: return &v.state case 1: @@ -41048,7 +42152,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[207].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DefragJob); i { + switch v := v.(*SdkDeleteScheduleResponse); i { case 0: return &v.state case 1: @@ -41060,7 +42164,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[208].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DefragNodeStatus); i { + switch v := v.(*SdkJobResponse); i { case 0: return &v.state case 1: @@ -41072,7 +42176,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[209].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DefragPoolStatus); i { + switch v := v.(*NodeDrainAttachmentOptions); i { case 0: return &v.state case 1: @@ -41084,7 +42188,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[210].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DiagsCollectionStatus); i { + switch v := v.(*SdkNodeDrainAttachmentsRequest); i { case 0: return &v.state case 1: @@ -41096,7 +42200,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[211].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkDiagsCollectRequest); i { + switch v := v.(*NodeDrainAttachmentsJob); i { case 0: return &v.state case 1: @@ -41108,7 +42212,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[212].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkDiagsCollectResponse); i { + switch v := v.(*CloudDriveTransferJob); i { case 0: return &v.state case 1: @@ -41120,7 +42224,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[213].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DiagsNodeSelector); i { + switch v := v.(*CollectDiagsJob); i { case 0: return &v.state case 1: @@ -41132,7 +42236,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[214].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DiagsVolumeSelector); i { + switch v := v.(*DefragJob); i { case 0: return &v.state case 1: @@ -41144,7 +42248,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[215].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkEnumerateJobsRequest); i { + switch v := v.(*DefragNodeStatus); i { case 0: return &v.state case 1: @@ -41156,7 +42260,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[216].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkEnumerateJobsResponse); i { + switch v := v.(*DefragPoolStatus); i { case 0: return &v.state case 1: @@ -41168,7 +42272,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[217].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkUpdateJobRequest); i { + switch v := v.(*SdkCreateDefragScheduleRequest); i { case 0: return &v.state case 1: @@ -41180,7 +42284,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[218].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkUpdateJobResponse); i { + switch v := v.(*SdkCreateDefragScheduleResponse); i { case 0: return &v.state case 1: @@ -41192,7 +42296,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[219].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkGetJobStatusRequest); i { + switch v := v.(*SdkCleanUpDefragSchedulesRequest); i { case 0: return &v.state case 1: @@ -41204,7 +42308,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[220].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JobAudit); i { + switch v := v.(*SdkCleanUpDefragSchedulesResponse); i { case 0: return &v.state case 1: @@ -41216,7 +42320,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[221].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JobWorkSummary); i { + switch v := v.(*SdkGetDefragNodeStatusRequest); i { case 0: return &v.state case 1: @@ -41228,7 +42332,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[222].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JobSummary); i { + switch v := v.(*SdkGetDefragNodeStatusResponse); i { case 0: return &v.state case 1: @@ -41240,7 +42344,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[223].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkGetJobStatusResponse); i { + switch v := v.(*SdkEnumerateDefragStatusRequest); i { case 0: return &v.state case 1: @@ -41252,7 +42356,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[224].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DrainAttachmentsSummary); i { + switch v := v.(*SdkEnumerateDefragStatusResponse); i { case 0: return &v.state case 1: @@ -41264,7 +42368,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[225].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkNodeCordonAttachmentsRequest); i { + switch v := v.(*DiagsCollectionStatus); i { case 0: return &v.state case 1: @@ -41276,7 +42380,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[226].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkNodeCordonAttachmentsResponse); i { + switch v := v.(*SdkDiagsCollectRequest); i { case 0: return &v.state case 1: @@ -41288,7 +42392,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[227].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkNodeUncordonAttachmentsRequest); i { + switch v := v.(*SdkDiagsCollectResponse); i { case 0: return &v.state case 1: @@ -41300,7 +42404,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[228].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkNodeUncordonAttachmentsResponse); i { + switch v := v.(*DiagsNodeSelector); i { case 0: return &v.state case 1: @@ -41312,7 +42416,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[229].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkStoragePoolResizeRequest); i { + switch v := v.(*DiagsVolumeSelector); i { case 0: return &v.state case 1: @@ -41324,7 +42428,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[230].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StorageRebalanceTriggerThreshold); i { + switch v := v.(*SdkEnumerateJobsRequest); i { case 0: return &v.state case 1: @@ -41336,7 +42440,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[231].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkStorageRebalanceRequest); i { + switch v := v.(*SdkEnumerateJobsResponse); i { case 0: return &v.state case 1: @@ -41348,7 +42452,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[232].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkStorageRebalanceResponse); i { + switch v := v.(*SdkUpdateJobRequest); i { case 0: return &v.state case 1: @@ -41360,7 +42464,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[233].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StorageRebalanceJob); i { + switch v := v.(*SdkUpdateJobResponse); i { case 0: return &v.state case 1: @@ -41372,7 +42476,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[234].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StorageRebalanceSummary); i { + switch v := v.(*SdkGetJobStatusRequest); i { case 0: return &v.state case 1: @@ -41384,7 +42488,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[235].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StorageRebalanceWorkSummary); i { + switch v := v.(*JobAudit); i { case 0: return &v.state case 1: @@ -41396,7 +42500,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[236].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StorageRebalanceAudit); i { + switch v := v.(*JobWorkSummary); i { case 0: return &v.state case 1: @@ -41408,7 +42512,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[237].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkUpdateRebalanceJobRequest); i { + switch v := v.(*JobSummary); i { case 0: return &v.state case 1: @@ -41420,7 +42524,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[238].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkUpdateRebalanceJobResponse); i { + switch v := v.(*SdkGetJobStatusResponse); i { case 0: return &v.state case 1: @@ -41432,7 +42536,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[239].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkGetRebalanceJobStatusRequest); i { + switch v := v.(*DrainAttachmentsSummary); i { case 0: return &v.state case 1: @@ -41444,7 +42548,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[240].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkGetRebalanceJobStatusResponse); i { + switch v := v.(*SdkNodeCordonAttachmentsRequest); i { case 0: return &v.state case 1: @@ -41456,7 +42560,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[241].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkEnumerateRebalanceJobsRequest); i { + switch v := v.(*SdkNodeCordonAttachmentsResponse); i { case 0: return &v.state case 1: @@ -41468,7 +42572,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[242].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkEnumerateRebalanceJobsResponse); i { + switch v := v.(*SdkNodeUncordonAttachmentsRequest); i { case 0: return &v.state case 1: @@ -41480,7 +42584,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[243].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RebalanceScheduleInfo); i { + switch v := v.(*SdkNodeUncordonAttachmentsResponse); i { case 0: return &v.state case 1: @@ -41492,7 +42596,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[244].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkCreateRebalanceScheduleRequest); i { + switch v := v.(*SdkStoragePoolResizeRequest); i { case 0: return &v.state case 1: @@ -41504,7 +42608,7 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[245].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SdkCreateRebalanceScheduleResponse); i { + switch v := v.(*StorageRebalanceTriggerThreshold); i { case 0: return &v.state case 1: @@ -41516,6 +42620,186 @@ func file_api_api_proto_init() { } } file_api_api_proto_msgTypes[246].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SdkStorageRebalanceRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_api_proto_msgTypes[247].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SdkStorageRebalanceResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_api_proto_msgTypes[248].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageRebalanceJob); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_api_proto_msgTypes[249].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageRebalanceSummary); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_api_proto_msgTypes[250].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageRebalanceWorkSummary); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_api_proto_msgTypes[251].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageRebalanceAudit); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_api_proto_msgTypes[252].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SdkUpdateRebalanceJobRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_api_proto_msgTypes[253].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SdkUpdateRebalanceJobResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_api_proto_msgTypes[254].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SdkGetRebalanceJobStatusRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_api_proto_msgTypes[255].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SdkGetRebalanceJobStatusResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_api_proto_msgTypes[256].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SdkEnumerateRebalanceJobsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_api_proto_msgTypes[257].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SdkEnumerateRebalanceJobsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_api_proto_msgTypes[258].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RebalanceScheduleInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_api_proto_msgTypes[259].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SdkCreateRebalanceScheduleRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_api_proto_msgTypes[260].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SdkCreateRebalanceScheduleResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_api_proto_msgTypes[261].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkGetRebalanceScheduleRequest); i { case 0: return &v.state @@ -41527,7 +42811,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[247].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[262].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkGetRebalanceScheduleResponse); i { case 0: return &v.state @@ -41539,7 +42823,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[248].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[263].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkDeleteRebalanceScheduleRequest); i { case 0: return &v.state @@ -41551,7 +42835,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[249].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[264].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkDeleteRebalanceScheduleResponse); i { case 0: return &v.state @@ -41563,7 +42847,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[250].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[265].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkStoragePool); i { case 0: return &v.state @@ -41575,7 +42859,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[251].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[266].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkStoragePoolResizeResponse); i { case 0: return &v.state @@ -41587,7 +42871,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[252].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[267].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkNodeInspectResponse); i { case 0: return &v.state @@ -41599,7 +42883,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[253].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[268].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkNodeInspectCurrentRequest); i { case 0: return &v.state @@ -41611,7 +42895,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[254].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[269].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkNodeInspectCurrentResponse); i { case 0: return &v.state @@ -41623,7 +42907,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[255].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[270].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkNodeEnumerateRequest); i { case 0: return &v.state @@ -41635,7 +42919,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[256].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[271].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkNodeEnumerateResponse); i { case 0: return &v.state @@ -41647,7 +42931,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[257].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[272].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkNodeEnumerateWithFiltersRequest); i { case 0: return &v.state @@ -41659,7 +42943,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[258].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[273].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkNodeEnumerateWithFiltersResponse); i { case 0: return &v.state @@ -41671,7 +42955,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[259].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[274].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkObjectstoreInspectRequest); i { case 0: return &v.state @@ -41683,7 +42967,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[260].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[275].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkObjectstoreInspectResponse); i { case 0: return &v.state @@ -41695,7 +42979,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[261].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[276].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkObjectstoreCreateRequest); i { case 0: return &v.state @@ -41707,7 +42991,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[262].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[277].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkObjectstoreCreateResponse); i { case 0: return &v.state @@ -41719,7 +43003,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[263].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[278].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkObjectstoreDeleteRequest); i { case 0: return &v.state @@ -41731,7 +43015,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[264].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[279].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkObjectstoreDeleteResponse); i { case 0: return &v.state @@ -41743,7 +43027,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[265].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[280].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkObjectstoreUpdateRequest); i { case 0: return &v.state @@ -41755,7 +43039,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[266].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[281].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkObjectstoreUpdateResponse); i { case 0: return &v.state @@ -41767,7 +43051,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[267].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[282].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupCreateRequest); i { case 0: return &v.state @@ -41779,7 +43063,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[268].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[283].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupCreateResponse); i { case 0: return &v.state @@ -41791,7 +43075,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[269].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[284].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupGroupCreateRequest); i { case 0: return &v.state @@ -41803,7 +43087,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[270].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[285].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupGroupCreateResponse); i { case 0: return &v.state @@ -41815,7 +43099,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[271].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[286].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupRestoreRequest); i { case 0: return &v.state @@ -41827,7 +43111,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[272].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[287].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupRestoreResponse); i { case 0: return &v.state @@ -41839,7 +43123,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[273].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[288].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupDeleteRequest); i { case 0: return &v.state @@ -41851,7 +43135,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[274].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[289].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupDeleteResponse); i { case 0: return &v.state @@ -41863,7 +43147,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[275].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[290].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupDeleteAllRequest); i { case 0: return &v.state @@ -41875,7 +43159,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[276].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[291].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupDeleteAllResponse); i { case 0: return &v.state @@ -41887,7 +43171,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[277].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[292].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupEnumerateWithFiltersRequest); i { case 0: return &v.state @@ -41899,7 +43183,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[278].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[293].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupInfo); i { case 0: return &v.state @@ -41911,7 +43195,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[279].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[294].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupEnumerateWithFiltersResponse); i { case 0: return &v.state @@ -41923,7 +43207,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[280].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[295].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupStatus); i { case 0: return &v.state @@ -41935,7 +43219,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[281].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[296].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupStatusRequest); i { case 0: return &v.state @@ -41947,7 +43231,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[282].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[297].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupStatusResponse); i { case 0: return &v.state @@ -41959,7 +43243,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[283].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[298].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupCatalogRequest); i { case 0: return &v.state @@ -41971,7 +43255,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[284].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[299].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupCatalogResponse); i { case 0: return &v.state @@ -41983,7 +43267,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[285].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[300].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupHistoryItem); i { case 0: return &v.state @@ -41995,7 +43279,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[286].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[301].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupHistoryRequest); i { case 0: return &v.state @@ -42007,7 +43291,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[287].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[302].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupHistoryResponse); i { case 0: return &v.state @@ -42019,7 +43303,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[288].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[303].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupStateChangeRequest); i { case 0: return &v.state @@ -42031,7 +43315,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[289].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[304].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupStateChangeResponse); i { case 0: return &v.state @@ -42043,7 +43327,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[290].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[305].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupScheduleInfo); i { case 0: return &v.state @@ -42055,7 +43339,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[291].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[306].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupSchedCreateRequest); i { case 0: return &v.state @@ -42067,7 +43351,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[292].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[307].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupSchedCreateResponse); i { case 0: return &v.state @@ -42079,7 +43363,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[293].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[308].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupSchedUpdateRequest); i { case 0: return &v.state @@ -42091,7 +43375,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[294].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[309].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupSchedUpdateResponse); i { case 0: return &v.state @@ -42103,7 +43387,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[295].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[310].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupSchedDeleteRequest); i { case 0: return &v.state @@ -42115,7 +43399,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[296].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[311].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupSchedDeleteResponse); i { case 0: return &v.state @@ -42127,7 +43411,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[297].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[312].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupSchedEnumerateRequest); i { case 0: return &v.state @@ -42139,7 +43423,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[298].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[313].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupSchedEnumerateResponse); i { case 0: return &v.state @@ -42151,7 +43435,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[299].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[314].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupSizeRequest); i { case 0: return &v.state @@ -42163,7 +43447,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[300].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[315].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudBackupSizeResponse); i { case 0: return &v.state @@ -42175,7 +43459,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[301].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[316].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkRule); i { case 0: return &v.state @@ -42187,7 +43471,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[302].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[317].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkRole); i { case 0: return &v.state @@ -42199,7 +43483,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[303].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[318].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkRoleCreateRequest); i { case 0: return &v.state @@ -42211,7 +43495,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[304].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[319].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkRoleCreateResponse); i { case 0: return &v.state @@ -42223,7 +43507,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[305].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[320].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkRoleEnumerateRequest); i { case 0: return &v.state @@ -42235,7 +43519,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[306].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[321].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkRoleEnumerateResponse); i { case 0: return &v.state @@ -42247,7 +43531,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[307].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[322].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkRoleInspectRequest); i { case 0: return &v.state @@ -42259,7 +43543,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[308].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[323].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkRoleInspectResponse); i { case 0: return &v.state @@ -42271,7 +43555,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[309].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[324].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkRoleDeleteRequest); i { case 0: return &v.state @@ -42283,7 +43567,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[310].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[325].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkRoleDeleteResponse); i { case 0: return &v.state @@ -42295,7 +43579,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[311].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[326].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkRoleUpdateRequest); i { case 0: return &v.state @@ -42307,7 +43591,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[312].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[327].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkRoleUpdateResponse); i { case 0: return &v.state @@ -42319,7 +43603,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[313].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[328].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilesystemTrim); i { case 0: return &v.state @@ -42331,7 +43615,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[314].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[329].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkFilesystemTrimStartRequest); i { case 0: return &v.state @@ -42343,7 +43627,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[315].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[330].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkFilesystemTrimStartResponse); i { case 0: return &v.state @@ -42355,7 +43639,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[316].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[331].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkFilesystemTrimStatusRequest); i { case 0: return &v.state @@ -42367,7 +43651,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[317].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[332].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkFilesystemTrimStatusResponse); i { case 0: return &v.state @@ -42379,7 +43663,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[318].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[333].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkAutoFSTrimStatusRequest); i { case 0: return &v.state @@ -42391,7 +43675,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[319].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[334].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkAutoFSTrimStatusResponse); i { case 0: return &v.state @@ -42403,7 +43687,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[320].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[335].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkAutoFSTrimUsageRequest); i { case 0: return &v.state @@ -42415,7 +43699,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[321].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[336].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkAutoFSTrimUsageResponse); i { case 0: return &v.state @@ -42427,7 +43711,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[322].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[337].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkFilesystemTrimStopRequest); i { case 0: return &v.state @@ -42439,7 +43723,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[323].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[338].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkVolumeBytesUsedResponse); i { case 0: return &v.state @@ -42451,7 +43735,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[324].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[339].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkVolumeBytesUsedRequest); i { case 0: return &v.state @@ -42463,7 +43747,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[325].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[340].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkFilesystemTrimStopResponse); i { case 0: return &v.state @@ -42475,7 +43759,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[326].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[341].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkAutoFSTrimPushRequest); i { case 0: return &v.state @@ -42487,7 +43771,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[327].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[342].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkAutoFSTrimPushResponse); i { case 0: return &v.state @@ -42499,7 +43783,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[328].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[343].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkAutoFSTrimPopRequest); i { case 0: return &v.state @@ -42511,7 +43795,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[329].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[344].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkAutoFSTrimPopResponse); i { case 0: return &v.state @@ -42523,7 +43807,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[330].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[345].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilesystemCheck); i { case 0: return &v.state @@ -42535,7 +43819,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[331].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[346].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilesystemCheckSnapInfo); i { case 0: return &v.state @@ -42547,7 +43831,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[332].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[347].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilesystemCheckVolInfo); i { case 0: return &v.state @@ -42559,7 +43843,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[333].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[348].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkFilesystemCheckStartRequest); i { case 0: return &v.state @@ -42571,7 +43855,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[334].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[349].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkFilesystemCheckStartResponse); i { case 0: return &v.state @@ -42583,7 +43867,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[335].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[350].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkFilesystemCheckStatusRequest); i { case 0: return &v.state @@ -42595,7 +43879,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[336].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[351].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkFilesystemCheckStatusResponse); i { case 0: return &v.state @@ -42607,7 +43891,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[337].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[352].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkFilesystemCheckStopRequest); i { case 0: return &v.state @@ -42619,7 +43903,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[338].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[353].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkFilesystemCheckStopResponse); i { case 0: return &v.state @@ -42631,7 +43915,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[339].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[354].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkFilesystemCheckListSnapshotsRequest); i { case 0: return &v.state @@ -42643,7 +43927,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[340].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[355].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkFilesystemCheckListSnapshotsResponse); i { case 0: return &v.state @@ -42655,7 +43939,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[341].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[356].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkFilesystemCheckDeleteSnapshotsRequest); i { case 0: return &v.state @@ -42667,7 +43951,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[342].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[357].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkFilesystemCheckDeleteSnapshotsResponse); i { case 0: return &v.state @@ -42679,7 +43963,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[343].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[358].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkFilesystemCheckListVolumesRequest); i { case 0: return &v.state @@ -42691,7 +43975,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[344].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[359].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkFilesystemCheckListVolumesResponse); i { case 0: return &v.state @@ -42703,7 +43987,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[345].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[360].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkIdentityCapabilitiesRequest); i { case 0: return &v.state @@ -42715,7 +43999,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[346].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[361].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkIdentityCapabilitiesResponse); i { case 0: return &v.state @@ -42727,7 +44011,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[347].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[362].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkIdentityVersionRequest); i { case 0: return &v.state @@ -42739,7 +44023,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[348].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[363].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkIdentityVersionResponse); i { case 0: return &v.state @@ -42751,7 +44035,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[349].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[364].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkServiceCapability); i { case 0: return &v.state @@ -42763,7 +44047,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[350].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[365].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkVersion); i { case 0: return &v.state @@ -42775,7 +44059,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[351].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[366].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StorageVersion); i { case 0: return &v.state @@ -42787,7 +44071,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[352].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[367].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CloudMigrate); i { case 0: return &v.state @@ -42799,7 +44083,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[353].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[368].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CloudMigrateStartRequest); i { case 0: return &v.state @@ -42811,7 +44095,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[354].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[369].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudMigrateStartRequest); i { case 0: return &v.state @@ -42823,7 +44107,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[355].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[370].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CloudMigrateStartResponse); i { case 0: return &v.state @@ -42835,7 +44119,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[356].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[371].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudMigrateStartResponse); i { case 0: return &v.state @@ -42847,7 +44131,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[357].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[372].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CloudMigrateCancelRequest); i { case 0: return &v.state @@ -42859,7 +44143,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[358].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[373].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudMigrateCancelRequest); i { case 0: return &v.state @@ -42871,7 +44155,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[359].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[374].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudMigrateCancelResponse); i { case 0: return &v.state @@ -42883,7 +44167,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[360].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[375].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CloudMigrateInfo); i { case 0: return &v.state @@ -42895,7 +44179,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[361].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[376].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CloudMigrateInfoList); i { case 0: return &v.state @@ -42907,7 +44191,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[362].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[377].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudMigrateStatusRequest); i { case 0: return &v.state @@ -42919,7 +44203,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[363].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[378].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CloudMigrateStatusRequest); i { case 0: return &v.state @@ -42931,7 +44215,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[364].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[379].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CloudMigrateStatusResponse); i { case 0: return &v.state @@ -42943,7 +44227,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[365].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[380].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudMigrateStatusResponse); i { case 0: return &v.state @@ -42955,7 +44239,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[366].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[381].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClusterPairMode); i { case 0: return &v.state @@ -42967,7 +44251,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[367].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[382].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClusterPairCreateRequest); i { case 0: return &v.state @@ -42979,7 +44263,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[368].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[383].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClusterPairCreateResponse); i { case 0: return &v.state @@ -42991,7 +44275,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[369].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[384].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkClusterPairCreateRequest); i { case 0: return &v.state @@ -43003,7 +44287,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[370].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[385].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkClusterPairCreateResponse); i { case 0: return &v.state @@ -43015,7 +44299,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[371].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[386].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClusterPairProcessRequest); i { case 0: return &v.state @@ -43027,7 +44311,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[372].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[387].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClusterPairProcessResponse); i { case 0: return &v.state @@ -43039,7 +44323,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[373].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[388].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkClusterPairDeleteRequest); i { case 0: return &v.state @@ -43051,7 +44335,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[374].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[389].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkClusterPairDeleteResponse); i { case 0: return &v.state @@ -43063,7 +44347,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[375].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[390].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClusterPairTokenGetResponse); i { case 0: return &v.state @@ -43075,7 +44359,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[376].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[391].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkClusterPairGetTokenRequest); i { case 0: return &v.state @@ -43087,7 +44371,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[377].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[392].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkClusterPairGetTokenResponse); i { case 0: return &v.state @@ -43099,7 +44383,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[378].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[393].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkClusterPairResetTokenRequest); i { case 0: return &v.state @@ -43111,7 +44395,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[379].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[394].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkClusterPairResetTokenResponse); i { case 0: return &v.state @@ -43123,7 +44407,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[380].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[395].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClusterPairInfo); i { case 0: return &v.state @@ -43135,7 +44419,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[381].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[396].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkClusterPairInspectRequest); i { case 0: return &v.state @@ -43147,7 +44431,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[382].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[397].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClusterPairGetResponse); i { case 0: return &v.state @@ -43159,7 +44443,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[383].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[398].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkClusterPairInspectResponse); i { case 0: return &v.state @@ -43171,7 +44455,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[384].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[399].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkClusterPairEnumerateRequest); i { case 0: return &v.state @@ -43183,7 +44467,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[385].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[400].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClusterPairsEnumerateResponse); i { case 0: return &v.state @@ -43195,7 +44479,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[386].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[401].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkClusterPairEnumerateResponse); i { case 0: return &v.state @@ -43207,7 +44491,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[387].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[402].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Catalog); i { case 0: return &v.state @@ -43219,7 +44503,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[388].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[403].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Report); i { case 0: return &v.state @@ -43231,7 +44515,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[389].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[404].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CatalogResponse); i { case 0: return &v.state @@ -43243,7 +44527,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[390].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[405].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LocateResponse); i { case 0: return &v.state @@ -43255,7 +44539,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[391].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[406].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*VolumePlacementStrategy); i { case 0: return &v.state @@ -43267,7 +44551,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[392].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[407].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReplicaPlacementSpec); i { case 0: return &v.state @@ -43279,7 +44563,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[393].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[408].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*VolumePlacementSpec); i { case 0: return &v.state @@ -43291,7 +44575,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[394].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[409].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LabelSelectorRequirement); i { case 0: return &v.state @@ -43303,7 +44587,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[395].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[410].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RestoreVolSnashotSchedule); i { case 0: return &v.state @@ -43315,7 +44599,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[396].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[411].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RestoreVolStoragePolicy); i { case 0: return &v.state @@ -43327,7 +44611,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[397].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[412].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RestoreVolumeSpec); i { case 0: return &v.state @@ -43339,7 +44623,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[398].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[413].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkVolumeCatalogRequest); i { case 0: return &v.state @@ -43351,7 +44635,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[399].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[414].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkVolumeCatalogResponse); i { case 0: return &v.state @@ -43363,7 +44647,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[400].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[415].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*VerifyChecksum); i { case 0: return &v.state @@ -43375,7 +44659,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[401].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[416].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkVerifyChecksumStartRequest); i { case 0: return &v.state @@ -43387,7 +44671,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[402].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[417].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkVerifyChecksumStartResponse); i { case 0: return &v.state @@ -43399,7 +44683,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[403].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[418].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkVerifyChecksumStatusRequest); i { case 0: return &v.state @@ -43411,7 +44695,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[404].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[419].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkVerifyChecksumStatusResponse); i { case 0: return &v.state @@ -43423,7 +44707,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[405].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[420].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkVerifyChecksumStopRequest); i { case 0: return &v.state @@ -43435,7 +44719,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[406].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[421].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkVerifyChecksumStopResponse); i { case 0: return &v.state @@ -43447,7 +44731,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[416].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[431].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Ownership_PublicAccessControl); i { case 0: return &v.state @@ -43459,7 +44743,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[417].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[432].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Ownership_AccessControl); i { case 0: return &v.state @@ -43471,7 +44755,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[454].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[471].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkServiceCapability_OpenStorageService); i { case 0: return &v.state @@ -43483,7 +44767,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[456].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[473].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudMigrateStartRequest_MigrateVolume); i { case 0: return &v.state @@ -43495,7 +44779,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[457].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[474].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudMigrateStartRequest_MigrateVolumeGroup); i { case 0: return &v.state @@ -43507,7 +44791,7 @@ func file_api_api_proto_init() { return nil } } - file_api_api_proto_msgTypes[458].Exporter = func(v interface{}, i int) interface{} { + file_api_api_proto_msgTypes[475].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SdkCloudMigrateStartRequest_MigrateAllVolumes); i { case 0: return &v.state @@ -43628,17 +44912,17 @@ func file_api_api_proto_init() { (*Job_CollectDiags)(nil), (*Job_Defrag)(nil), } - file_api_api_proto_msgTypes[221].OneofWrappers = []interface{}{ + file_api_api_proto_msgTypes[236].OneofWrappers = []interface{}{ (*JobWorkSummary_DrainAttachmentsSummary)(nil), } - file_api_api_proto_msgTypes[229].OneofWrappers = []interface{}{ + file_api_api_proto_msgTypes[244].OneofWrappers = []interface{}{ (*SdkStoragePoolResizeRequest_Size)(nil), (*SdkStoragePoolResizeRequest_Percentage)(nil), } - file_api_api_proto_msgTypes[349].OneofWrappers = []interface{}{ + file_api_api_proto_msgTypes[364].OneofWrappers = []interface{}{ (*SdkServiceCapability_Service)(nil), } - file_api_api_proto_msgTypes[354].OneofWrappers = []interface{}{ + file_api_api_proto_msgTypes[369].OneofWrappers = []interface{}{ (*SdkCloudMigrateStartRequest_Volume)(nil), (*SdkCloudMigrateStartRequest_VolumeGroup)(nil), (*SdkCloudMigrateStartRequest_AllVolumes)(nil), @@ -43649,9 +44933,9 @@ func file_api_api_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_api_api_proto_rawDesc, NumEnums: 60, - NumMessages: 465, + NumMessages: 482, NumExtensions: 0, - NumServices: 23, + NumServices: 25, }, GoTypes: file_api_api_proto_goTypes, DependencyIndexes: file_api_api_proto_depIdxs, @@ -44684,6 +45968,194 @@ var _OpenStorageFilesystemCheck_serviceDesc = grpc.ServiceDesc{ Metadata: "api/api.proto", } +// OpenStorageFilesystemDefragClient is the client API for OpenStorageFilesystemDefrag service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type OpenStorageFilesystemDefragClient interface { + // Create a schedule to run defragmentation tasks periodically + CreateSchedule(ctx context.Context, in *SdkCreateDefragScheduleRequest, opts ...grpc.CallOption) (*SdkCreateDefragScheduleResponse, error) + // Get defrag status of a node + GetNodeStatus(ctx context.Context, in *SdkGetDefragNodeStatusRequest, opts ...grpc.CallOption) (*SdkGetDefragNodeStatusResponse, error) + // Enumerate all nodes, returning defrag status of the entire cluster + EnumerateNodeStatus(ctx context.Context, in *SdkEnumerateDefragStatusRequest, opts ...grpc.CallOption) (*SdkEnumerateDefragStatusResponse, error) + // Clean up all defrag schedules and stop all operations + CleanUpSchedules(ctx context.Context, in *SdkCleanUpDefragSchedulesRequest, opts ...grpc.CallOption) (*SdkCleanUpDefragSchedulesResponse, error) +} + +type openStorageFilesystemDefragClient struct { + cc grpc.ClientConnInterface +} + +func NewOpenStorageFilesystemDefragClient(cc grpc.ClientConnInterface) OpenStorageFilesystemDefragClient { + return &openStorageFilesystemDefragClient{cc} +} + +func (c *openStorageFilesystemDefragClient) CreateSchedule(ctx context.Context, in *SdkCreateDefragScheduleRequest, opts ...grpc.CallOption) (*SdkCreateDefragScheduleResponse, error) { + out := new(SdkCreateDefragScheduleResponse) + err := c.cc.Invoke(ctx, "/openstorage.api.OpenStorageFilesystemDefrag/CreateSchedule", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *openStorageFilesystemDefragClient) GetNodeStatus(ctx context.Context, in *SdkGetDefragNodeStatusRequest, opts ...grpc.CallOption) (*SdkGetDefragNodeStatusResponse, error) { + out := new(SdkGetDefragNodeStatusResponse) + err := c.cc.Invoke(ctx, "/openstorage.api.OpenStorageFilesystemDefrag/GetNodeStatus", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *openStorageFilesystemDefragClient) EnumerateNodeStatus(ctx context.Context, in *SdkEnumerateDefragStatusRequest, opts ...grpc.CallOption) (*SdkEnumerateDefragStatusResponse, error) { + out := new(SdkEnumerateDefragStatusResponse) + err := c.cc.Invoke(ctx, "/openstorage.api.OpenStorageFilesystemDefrag/EnumerateNodeStatus", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *openStorageFilesystemDefragClient) CleanUpSchedules(ctx context.Context, in *SdkCleanUpDefragSchedulesRequest, opts ...grpc.CallOption) (*SdkCleanUpDefragSchedulesResponse, error) { + out := new(SdkCleanUpDefragSchedulesResponse) + err := c.cc.Invoke(ctx, "/openstorage.api.OpenStorageFilesystemDefrag/CleanUpSchedules", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// OpenStorageFilesystemDefragServer is the server API for OpenStorageFilesystemDefrag service. +type OpenStorageFilesystemDefragServer interface { + // Create a schedule to run defragmentation tasks periodically + CreateSchedule(context.Context, *SdkCreateDefragScheduleRequest) (*SdkCreateDefragScheduleResponse, error) + // Get defrag status of a node + GetNodeStatus(context.Context, *SdkGetDefragNodeStatusRequest) (*SdkGetDefragNodeStatusResponse, error) + // Enumerate all nodes, returning defrag status of the entire cluster + EnumerateNodeStatus(context.Context, *SdkEnumerateDefragStatusRequest) (*SdkEnumerateDefragStatusResponse, error) + // Clean up all defrag schedules and stop all operations + CleanUpSchedules(context.Context, *SdkCleanUpDefragSchedulesRequest) (*SdkCleanUpDefragSchedulesResponse, error) +} + +// UnimplementedOpenStorageFilesystemDefragServer can be embedded to have forward compatible implementations. +type UnimplementedOpenStorageFilesystemDefragServer struct { +} + +func (*UnimplementedOpenStorageFilesystemDefragServer) CreateSchedule(context.Context, *SdkCreateDefragScheduleRequest) (*SdkCreateDefragScheduleResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateSchedule not implemented") +} +func (*UnimplementedOpenStorageFilesystemDefragServer) GetNodeStatus(context.Context, *SdkGetDefragNodeStatusRequest) (*SdkGetDefragNodeStatusResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetNodeStatus not implemented") +} +func (*UnimplementedOpenStorageFilesystemDefragServer) EnumerateNodeStatus(context.Context, *SdkEnumerateDefragStatusRequest) (*SdkEnumerateDefragStatusResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EnumerateNodeStatus not implemented") +} +func (*UnimplementedOpenStorageFilesystemDefragServer) CleanUpSchedules(context.Context, *SdkCleanUpDefragSchedulesRequest) (*SdkCleanUpDefragSchedulesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CleanUpSchedules not implemented") +} + +func RegisterOpenStorageFilesystemDefragServer(s *grpc.Server, srv OpenStorageFilesystemDefragServer) { + s.RegisterService(&_OpenStorageFilesystemDefrag_serviceDesc, srv) +} + +func _OpenStorageFilesystemDefrag_CreateSchedule_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SdkCreateDefragScheduleRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OpenStorageFilesystemDefragServer).CreateSchedule(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/openstorage.api.OpenStorageFilesystemDefrag/CreateSchedule", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OpenStorageFilesystemDefragServer).CreateSchedule(ctx, req.(*SdkCreateDefragScheduleRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _OpenStorageFilesystemDefrag_GetNodeStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SdkGetDefragNodeStatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OpenStorageFilesystemDefragServer).GetNodeStatus(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/openstorage.api.OpenStorageFilesystemDefrag/GetNodeStatus", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OpenStorageFilesystemDefragServer).GetNodeStatus(ctx, req.(*SdkGetDefragNodeStatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _OpenStorageFilesystemDefrag_EnumerateNodeStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SdkEnumerateDefragStatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OpenStorageFilesystemDefragServer).EnumerateNodeStatus(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/openstorage.api.OpenStorageFilesystemDefrag/EnumerateNodeStatus", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OpenStorageFilesystemDefragServer).EnumerateNodeStatus(ctx, req.(*SdkEnumerateDefragStatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _OpenStorageFilesystemDefrag_CleanUpSchedules_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SdkCleanUpDefragSchedulesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OpenStorageFilesystemDefragServer).CleanUpSchedules(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/openstorage.api.OpenStorageFilesystemDefrag/CleanUpSchedules", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OpenStorageFilesystemDefragServer).CleanUpSchedules(ctx, req.(*SdkCleanUpDefragSchedulesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _OpenStorageFilesystemDefrag_serviceDesc = grpc.ServiceDesc{ + ServiceName: "openstorage.api.OpenStorageFilesystemDefrag", + HandlerType: (*OpenStorageFilesystemDefragServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateSchedule", + Handler: _OpenStorageFilesystemDefrag_CreateSchedule_Handler, + }, + { + MethodName: "GetNodeStatus", + Handler: _OpenStorageFilesystemDefrag_GetNodeStatus_Handler, + }, + { + MethodName: "EnumerateNodeStatus", + Handler: _OpenStorageFilesystemDefrag_EnumerateNodeStatus_Handler, + }, + { + MethodName: "CleanUpSchedules", + Handler: _OpenStorageFilesystemDefrag_CleanUpSchedules_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "api/api.proto", +} + // OpenStorageIdentityClient is the client API for OpenStorageIdentity service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. @@ -45948,6 +47420,156 @@ var _OpenStorageJob_serviceDesc = grpc.ServiceDesc{ Metadata: "api/api.proto", } +// OpenStorageScheduleClient is the client API for OpenStorageSchedule service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type OpenStorageScheduleClient interface { + // Inspect queries information of a schedule by type and ID + Inspect(ctx context.Context, in *SdkInspectScheduleRequest, opts ...grpc.CallOption) (*SdkInspectScheduleResponse, error) + // Enumerate returns all the schedules + Enumerate(ctx context.Context, in *SdkEnumerateSchedulesRequest, opts ...grpc.CallOption) (*SdkEnumerateSchedulesResponse, error) + // Delete deletes a schedule by type and ID + Delete(ctx context.Context, in *SdkDeleteScheduleRequest, opts ...grpc.CallOption) (*SdkDeleteScheduleResponse, error) +} + +type openStorageScheduleClient struct { + cc grpc.ClientConnInterface +} + +func NewOpenStorageScheduleClient(cc grpc.ClientConnInterface) OpenStorageScheduleClient { + return &openStorageScheduleClient{cc} +} + +func (c *openStorageScheduleClient) Inspect(ctx context.Context, in *SdkInspectScheduleRequest, opts ...grpc.CallOption) (*SdkInspectScheduleResponse, error) { + out := new(SdkInspectScheduleResponse) + err := c.cc.Invoke(ctx, "/openstorage.api.OpenStorageSchedule/Inspect", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *openStorageScheduleClient) Enumerate(ctx context.Context, in *SdkEnumerateSchedulesRequest, opts ...grpc.CallOption) (*SdkEnumerateSchedulesResponse, error) { + out := new(SdkEnumerateSchedulesResponse) + err := c.cc.Invoke(ctx, "/openstorage.api.OpenStorageSchedule/Enumerate", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *openStorageScheduleClient) Delete(ctx context.Context, in *SdkDeleteScheduleRequest, opts ...grpc.CallOption) (*SdkDeleteScheduleResponse, error) { + out := new(SdkDeleteScheduleResponse) + err := c.cc.Invoke(ctx, "/openstorage.api.OpenStorageSchedule/Delete", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// OpenStorageScheduleServer is the server API for OpenStorageSchedule service. +type OpenStorageScheduleServer interface { + // Inspect queries information of a schedule by type and ID + Inspect(context.Context, *SdkInspectScheduleRequest) (*SdkInspectScheduleResponse, error) + // Enumerate returns all the schedules + Enumerate(context.Context, *SdkEnumerateSchedulesRequest) (*SdkEnumerateSchedulesResponse, error) + // Delete deletes a schedule by type and ID + Delete(context.Context, *SdkDeleteScheduleRequest) (*SdkDeleteScheduleResponse, error) +} + +// UnimplementedOpenStorageScheduleServer can be embedded to have forward compatible implementations. +type UnimplementedOpenStorageScheduleServer struct { +} + +func (*UnimplementedOpenStorageScheduleServer) Inspect(context.Context, *SdkInspectScheduleRequest) (*SdkInspectScheduleResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Inspect not implemented") +} +func (*UnimplementedOpenStorageScheduleServer) Enumerate(context.Context, *SdkEnumerateSchedulesRequest) (*SdkEnumerateSchedulesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Enumerate not implemented") +} +func (*UnimplementedOpenStorageScheduleServer) Delete(context.Context, *SdkDeleteScheduleRequest) (*SdkDeleteScheduleResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") +} + +func RegisterOpenStorageScheduleServer(s *grpc.Server, srv OpenStorageScheduleServer) { + s.RegisterService(&_OpenStorageSchedule_serviceDesc, srv) +} + +func _OpenStorageSchedule_Inspect_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SdkInspectScheduleRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OpenStorageScheduleServer).Inspect(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/openstorage.api.OpenStorageSchedule/Inspect", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OpenStorageScheduleServer).Inspect(ctx, req.(*SdkInspectScheduleRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _OpenStorageSchedule_Enumerate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SdkEnumerateSchedulesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OpenStorageScheduleServer).Enumerate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/openstorage.api.OpenStorageSchedule/Enumerate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OpenStorageScheduleServer).Enumerate(ctx, req.(*SdkEnumerateSchedulesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _OpenStorageSchedule_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SdkDeleteScheduleRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OpenStorageScheduleServer).Delete(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/openstorage.api.OpenStorageSchedule/Delete", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OpenStorageScheduleServer).Delete(ctx, req.(*SdkDeleteScheduleRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _OpenStorageSchedule_serviceDesc = grpc.ServiceDesc{ + ServiceName: "openstorage.api.OpenStorageSchedule", + HandlerType: (*OpenStorageScheduleServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Inspect", + Handler: _OpenStorageSchedule_Inspect_Handler, + }, + { + MethodName: "Enumerate", + Handler: _OpenStorageSchedule_Enumerate_Handler, + }, + { + MethodName: "Delete", + Handler: _OpenStorageSchedule_Delete_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "api/api.proto", +} + // OpenStorageNodeClient is the client API for OpenStorageNode service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. diff --git a/vendor/github.com/libopenstorage/openstorage/api/api.pb.gw.go b/vendor/github.com/libopenstorage/openstorage/api/api.pb.gw.go index 1fbf6117e..234707dd1 100644 --- a/vendor/github.com/libopenstorage/openstorage/api/api.pb.gw.go +++ b/vendor/github.com/libopenstorage/openstorage/api/api.pb.gw.go @@ -704,6 +704,130 @@ func local_request_OpenStorageFilesystemCheck_ListVolumes_0(ctx context.Context, } +func request_OpenStorageFilesystemDefrag_CreateSchedule_0(ctx context.Context, marshaler runtime.Marshaler, client OpenStorageFilesystemDefragClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SdkCreateDefragScheduleRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreateSchedule(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_OpenStorageFilesystemDefrag_CreateSchedule_0(ctx context.Context, marshaler runtime.Marshaler, server OpenStorageFilesystemDefragServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SdkCreateDefragScheduleRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CreateSchedule(ctx, &protoReq) + return msg, metadata, err + +} + +func request_OpenStorageFilesystemDefrag_GetNodeStatus_0(ctx context.Context, marshaler runtime.Marshaler, client OpenStorageFilesystemDefragClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SdkGetDefragNodeStatusRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["node_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "node_id") + } + + protoReq.NodeId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "node_id", err) + } + + msg, err := client.GetNodeStatus(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_OpenStorageFilesystemDefrag_GetNodeStatus_0(ctx context.Context, marshaler runtime.Marshaler, server OpenStorageFilesystemDefragServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SdkGetDefragNodeStatusRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["node_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "node_id") + } + + protoReq.NodeId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "node_id", err) + } + + msg, err := server.GetNodeStatus(ctx, &protoReq) + return msg, metadata, err + +} + +func request_OpenStorageFilesystemDefrag_EnumerateNodeStatus_0(ctx context.Context, marshaler runtime.Marshaler, client OpenStorageFilesystemDefragClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SdkEnumerateDefragStatusRequest + var metadata runtime.ServerMetadata + + msg, err := client.EnumerateNodeStatus(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_OpenStorageFilesystemDefrag_EnumerateNodeStatus_0(ctx context.Context, marshaler runtime.Marshaler, server OpenStorageFilesystemDefragServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SdkEnumerateDefragStatusRequest + var metadata runtime.ServerMetadata + + msg, err := server.EnumerateNodeStatus(ctx, &protoReq) + return msg, metadata, err + +} + +func request_OpenStorageFilesystemDefrag_CleanUpSchedules_0(ctx context.Context, marshaler runtime.Marshaler, client OpenStorageFilesystemDefragClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SdkCleanUpDefragSchedulesRequest + var metadata runtime.ServerMetadata + + msg, err := client.CleanUpSchedules(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_OpenStorageFilesystemDefrag_CleanUpSchedules_0(ctx context.Context, marshaler runtime.Marshaler, server OpenStorageFilesystemDefragServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SdkCleanUpDefragSchedulesRequest + var metadata runtime.ServerMetadata + + msg, err := server.CleanUpSchedules(ctx, &protoReq) + return msg, metadata, err + +} + func request_OpenStorageIdentity_Capabilities_0(ctx context.Context, marshaler runtime.Marshaler, client OpenStorageIdentityClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq SdkIdentityCapabilitiesRequest var metadata runtime.ServerMetadata @@ -1686,6 +1810,230 @@ func local_request_OpenStorageJob_Enumerate_0(ctx context.Context, marshaler run } +func request_OpenStorageSchedule_Inspect_0(ctx context.Context, marshaler runtime.Marshaler, client OpenStorageScheduleClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SdkInspectScheduleRequest + var metadata runtime.ServerMetadata + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "type") + } + + e, err = runtime.Enum(val, Job_Type_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "type", err) + } + + protoReq.Type = Job_Type(e) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.Inspect(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_OpenStorageSchedule_Inspect_0(ctx context.Context, marshaler runtime.Marshaler, server OpenStorageScheduleServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SdkInspectScheduleRequest + var metadata runtime.ServerMetadata + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "type") + } + + e, err = runtime.Enum(val, Job_Type_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "type", err) + } + + protoReq.Type = Job_Type(e) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.Inspect(ctx, &protoReq) + return msg, metadata, err + +} + +func request_OpenStorageSchedule_Enumerate_0(ctx context.Context, marshaler runtime.Marshaler, client OpenStorageScheduleClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SdkEnumerateSchedulesRequest + var metadata runtime.ServerMetadata + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "type") + } + + e, err = runtime.Enum(val, Job_Type_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "type", err) + } + + protoReq.Type = Job_Type(e) + + msg, err := client.Enumerate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_OpenStorageSchedule_Enumerate_0(ctx context.Context, marshaler runtime.Marshaler, server OpenStorageScheduleServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SdkEnumerateSchedulesRequest + var metadata runtime.ServerMetadata + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "type") + } + + e, err = runtime.Enum(val, Job_Type_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "type", err) + } + + protoReq.Type = Job_Type(e) + + msg, err := server.Enumerate(ctx, &protoReq) + return msg, metadata, err + +} + +func request_OpenStorageSchedule_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client OpenStorageScheduleClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SdkDeleteScheduleRequest + var metadata runtime.ServerMetadata + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "type") + } + + e, err = runtime.Enum(val, Job_Type_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "type", err) + } + + protoReq.Type = Job_Type(e) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_OpenStorageSchedule_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server OpenStorageScheduleServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SdkDeleteScheduleRequest + var metadata runtime.ServerMetadata + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "type") + } + + e, err = runtime.Enum(val, Job_Type_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "type", err) + } + + protoReq.Type = Job_Type(e) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.Delete(ctx, &protoReq) + return msg, metadata, err + +} + func request_OpenStorageNode_Inspect_0(ctx context.Context, marshaler runtime.Marshaler, client OpenStorageNodeClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq SdkNodeInspectRequest var metadata runtime.ServerMetadata @@ -5629,6 +5977,107 @@ func RegisterOpenStorageFilesystemCheckHandlerServer(ctx context.Context, mux *r return nil } +// RegisterOpenStorageFilesystemDefragHandlerServer registers the http handlers for service OpenStorageFilesystemDefrag to "mux". +// UnaryRPC :call OpenStorageFilesystemDefragServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterOpenStorageFilesystemDefragHandlerFromEndpoint instead. +func RegisterOpenStorageFilesystemDefragHandlerServer(ctx context.Context, mux *runtime.ServeMux, server OpenStorageFilesystemDefragServer) error { + + mux.Handle("POST", pattern_OpenStorageFilesystemDefrag_CreateSchedule_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_OpenStorageFilesystemDefrag_CreateSchedule_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_OpenStorageFilesystemDefrag_CreateSchedule_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_OpenStorageFilesystemDefrag_GetNodeStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_OpenStorageFilesystemDefrag_GetNodeStatus_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_OpenStorageFilesystemDefrag_GetNodeStatus_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_OpenStorageFilesystemDefrag_EnumerateNodeStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_OpenStorageFilesystemDefrag_EnumerateNodeStatus_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_OpenStorageFilesystemDefrag_EnumerateNodeStatus_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_OpenStorageFilesystemDefrag_CleanUpSchedules_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_OpenStorageFilesystemDefrag_CleanUpSchedules_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_OpenStorageFilesystemDefrag_CleanUpSchedules_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + // RegisterOpenStorageIdentityHandlerServer registers the http handlers for service OpenStorageIdentity to "mux". // UnaryRPC :call OpenStorageIdentityServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -6085,7 +6534,85 @@ func RegisterOpenStoragePoolHandlerServer(ctx context.Context, mux *runtime.Serv }) - mux.Handle("POST", pattern_OpenStoragePool_CreateRebalanceSchedule_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("POST", pattern_OpenStoragePool_CreateRebalanceSchedule_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_OpenStoragePool_CreateRebalanceSchedule_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_OpenStoragePool_CreateRebalanceSchedule_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_OpenStoragePool_GetRebalanceSchedule_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_OpenStoragePool_GetRebalanceSchedule_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_OpenStoragePool_GetRebalanceSchedule_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_OpenStoragePool_DeleteRebalanceSchedule_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_OpenStoragePool_DeleteRebalanceSchedule_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_OpenStoragePool_DeleteRebalanceSchedule_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterOpenStorageDiagsHandlerServer registers the http handlers for service OpenStorageDiags to "mux". +// UnaryRPC :call OpenStorageDiagsServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterOpenStorageDiagsHandlerFromEndpoint instead. +func RegisterOpenStorageDiagsHandlerServer(ctx context.Context, mux *runtime.ServeMux, server OpenStorageDiagsServer) error { + + mux.Handle("POST", pattern_OpenStorageDiags_Collect_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -6096,7 +6623,7 @@ func RegisterOpenStoragePoolHandlerServer(ctx context.Context, mux *runtime.Serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_OpenStoragePool_CreateRebalanceSchedule_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_OpenStorageDiags_Collect_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -6104,11 +6631,20 @@ func RegisterOpenStoragePoolHandlerServer(ctx context.Context, mux *runtime.Serv return } - forward_OpenStoragePool_CreateRebalanceSchedule_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_OpenStorageDiags_Collect_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_OpenStoragePool_GetRebalanceSchedule_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + return nil +} + +// RegisterOpenStorageJobHandlerServer registers the http handlers for service OpenStorageJob to "mux". +// UnaryRPC :call OpenStorageJobServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterOpenStorageJobHandlerFromEndpoint instead. +func RegisterOpenStorageJobHandlerServer(ctx context.Context, mux *runtime.ServeMux, server OpenStorageJobServer) error { + + mux.Handle("PUT", pattern_OpenStorageJob_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -6119,7 +6655,7 @@ func RegisterOpenStoragePoolHandlerServer(ctx context.Context, mux *runtime.Serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_OpenStoragePool_GetRebalanceSchedule_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_OpenStorageJob_Update_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -6127,11 +6663,11 @@ func RegisterOpenStoragePoolHandlerServer(ctx context.Context, mux *runtime.Serv return } - forward_OpenStoragePool_GetRebalanceSchedule_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_OpenStorageJob_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("DELETE", pattern_OpenStoragePool_DeleteRebalanceSchedule_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_OpenStorageJob_GetStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -6142,7 +6678,7 @@ func RegisterOpenStoragePoolHandlerServer(ctx context.Context, mux *runtime.Serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_OpenStoragePool_DeleteRebalanceSchedule_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_OpenStorageJob_GetStatus_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -6150,20 +6686,11 @@ func RegisterOpenStoragePoolHandlerServer(ctx context.Context, mux *runtime.Serv return } - forward_OpenStoragePool_DeleteRebalanceSchedule_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_OpenStorageJob_GetStatus_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - return nil -} - -// RegisterOpenStorageDiagsHandlerServer registers the http handlers for service OpenStorageDiags to "mux". -// UnaryRPC :call OpenStorageDiagsServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterOpenStorageDiagsHandlerFromEndpoint instead. -func RegisterOpenStorageDiagsHandlerServer(ctx context.Context, mux *runtime.ServeMux, server OpenStorageDiagsServer) error { - - mux.Handle("POST", pattern_OpenStorageDiags_Collect_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_OpenStorageJob_Enumerate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -6174,7 +6701,7 @@ func RegisterOpenStorageDiagsHandlerServer(ctx context.Context, mux *runtime.Ser runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_OpenStorageDiags_Collect_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_OpenStorageJob_Enumerate_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -6182,20 +6709,20 @@ func RegisterOpenStorageDiagsHandlerServer(ctx context.Context, mux *runtime.Ser return } - forward_OpenStorageDiags_Collect_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_OpenStorageJob_Enumerate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) return nil } -// RegisterOpenStorageJobHandlerServer registers the http handlers for service OpenStorageJob to "mux". -// UnaryRPC :call OpenStorageJobServer directly. +// RegisterOpenStorageScheduleHandlerServer registers the http handlers for service OpenStorageSchedule to "mux". +// UnaryRPC :call OpenStorageScheduleServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterOpenStorageJobHandlerFromEndpoint instead. -func RegisterOpenStorageJobHandlerServer(ctx context.Context, mux *runtime.ServeMux, server OpenStorageJobServer) error { +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterOpenStorageScheduleHandlerFromEndpoint instead. +func RegisterOpenStorageScheduleHandlerServer(ctx context.Context, mux *runtime.ServeMux, server OpenStorageScheduleServer) error { - mux.Handle("PUT", pattern_OpenStorageJob_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_OpenStorageSchedule_Inspect_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -6206,7 +6733,7 @@ func RegisterOpenStorageJobHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_OpenStorageJob_Update_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_OpenStorageSchedule_Inspect_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -6214,11 +6741,11 @@ func RegisterOpenStorageJobHandlerServer(ctx context.Context, mux *runtime.Serve return } - forward_OpenStorageJob_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_OpenStorageSchedule_Inspect_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_OpenStorageJob_GetStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_OpenStorageSchedule_Enumerate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -6229,7 +6756,7 @@ func RegisterOpenStorageJobHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_OpenStorageJob_GetStatus_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_OpenStorageSchedule_Enumerate_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -6237,11 +6764,11 @@ func RegisterOpenStorageJobHandlerServer(ctx context.Context, mux *runtime.Serve return } - forward_OpenStorageJob_GetStatus_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_OpenStorageSchedule_Enumerate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_OpenStorageJob_Enumerate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("DELETE", pattern_OpenStorageSchedule_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -6252,7 +6779,7 @@ func RegisterOpenStorageJobHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_OpenStorageJob_Enumerate_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_OpenStorageSchedule_Delete_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -6260,7 +6787,7 @@ func RegisterOpenStorageJobHandlerServer(ctx context.Context, mux *runtime.Serve return } - forward_OpenStorageJob_Enumerate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_OpenStorageSchedule_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -8859,6 +9386,147 @@ var ( forward_OpenStorageFilesystemCheck_ListVolumes_0 = runtime.ForwardResponseMessage ) +// RegisterOpenStorageFilesystemDefragHandlerFromEndpoint is same as RegisterOpenStorageFilesystemDefragHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterOpenStorageFilesystemDefragHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterOpenStorageFilesystemDefragHandler(ctx, mux, conn) +} + +// RegisterOpenStorageFilesystemDefragHandler registers the http handlers for service OpenStorageFilesystemDefrag to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterOpenStorageFilesystemDefragHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterOpenStorageFilesystemDefragHandlerClient(ctx, mux, NewOpenStorageFilesystemDefragClient(conn)) +} + +// RegisterOpenStorageFilesystemDefragHandlerClient registers the http handlers for service OpenStorageFilesystemDefrag +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "OpenStorageFilesystemDefragClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "OpenStorageFilesystemDefragClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "OpenStorageFilesystemDefragClient" to call the correct interceptors. +func RegisterOpenStorageFilesystemDefragHandlerClient(ctx context.Context, mux *runtime.ServeMux, client OpenStorageFilesystemDefragClient) error { + + mux.Handle("POST", pattern_OpenStorageFilesystemDefrag_CreateSchedule_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_OpenStorageFilesystemDefrag_CreateSchedule_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_OpenStorageFilesystemDefrag_CreateSchedule_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_OpenStorageFilesystemDefrag_GetNodeStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_OpenStorageFilesystemDefrag_GetNodeStatus_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_OpenStorageFilesystemDefrag_GetNodeStatus_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_OpenStorageFilesystemDefrag_EnumerateNodeStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_OpenStorageFilesystemDefrag_EnumerateNodeStatus_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_OpenStorageFilesystemDefrag_EnumerateNodeStatus_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_OpenStorageFilesystemDefrag_CleanUpSchedules_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_OpenStorageFilesystemDefrag_CleanUpSchedules_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_OpenStorageFilesystemDefrag_CleanUpSchedules_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_OpenStorageFilesystemDefrag_CreateSchedule_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "filesystem-defrag", "schedule"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_OpenStorageFilesystemDefrag_GetNodeStatus_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "filesystem-defrag", "status", "node_id"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_OpenStorageFilesystemDefrag_EnumerateNodeStatus_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "filesystem-defrag", "status"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_OpenStorageFilesystemDefrag_CleanUpSchedules_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "filesystem-defrag", "schedules"}, "", runtime.AssumeColonVerbOpt(true))) +) + +var ( + forward_OpenStorageFilesystemDefrag_CreateSchedule_0 = runtime.ForwardResponseMessage + + forward_OpenStorageFilesystemDefrag_GetNodeStatus_0 = runtime.ForwardResponseMessage + + forward_OpenStorageFilesystemDefrag_EnumerateNodeStatus_0 = runtime.ForwardResponseMessage + + forward_OpenStorageFilesystemDefrag_CleanUpSchedules_0 = runtime.ForwardResponseMessage +) + // RegisterOpenStorageIdentityHandlerFromEndpoint is same as RegisterOpenStorageIdentityHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterOpenStorageIdentityHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { @@ -9774,6 +10442,123 @@ var ( forward_OpenStorageJob_Enumerate_0 = runtime.ForwardResponseMessage ) +// RegisterOpenStorageScheduleHandlerFromEndpoint is same as RegisterOpenStorageScheduleHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterOpenStorageScheduleHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterOpenStorageScheduleHandler(ctx, mux, conn) +} + +// RegisterOpenStorageScheduleHandler registers the http handlers for service OpenStorageSchedule to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterOpenStorageScheduleHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterOpenStorageScheduleHandlerClient(ctx, mux, NewOpenStorageScheduleClient(conn)) +} + +// RegisterOpenStorageScheduleHandlerClient registers the http handlers for service OpenStorageSchedule +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "OpenStorageScheduleClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "OpenStorageScheduleClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "OpenStorageScheduleClient" to call the correct interceptors. +func RegisterOpenStorageScheduleHandlerClient(ctx context.Context, mux *runtime.ServeMux, client OpenStorageScheduleClient) error { + + mux.Handle("GET", pattern_OpenStorageSchedule_Inspect_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_OpenStorageSchedule_Inspect_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_OpenStorageSchedule_Inspect_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_OpenStorageSchedule_Enumerate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_OpenStorageSchedule_Enumerate_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_OpenStorageSchedule_Enumerate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_OpenStorageSchedule_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_OpenStorageSchedule_Delete_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_OpenStorageSchedule_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_OpenStorageSchedule_Inspect_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "schedules", "type", "id"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_OpenStorageSchedule_Enumerate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "schedules", "type"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_OpenStorageSchedule_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "schedules", "type", "id"}, "", runtime.AssumeColonVerbOpt(true))) +) + +var ( + forward_OpenStorageSchedule_Inspect_0 = runtime.ForwardResponseMessage + + forward_OpenStorageSchedule_Enumerate_0 = runtime.ForwardResponseMessage + + forward_OpenStorageSchedule_Delete_0 = runtime.ForwardResponseMessage +) + // RegisterOpenStorageNodeHandlerFromEndpoint is same as RegisterOpenStorageNodeHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterOpenStorageNodeHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { diff --git a/vendor/github.com/libopenstorage/openstorage/api/api.proto b/vendor/github.com/libopenstorage/openstorage/api/api.proto index 16f8b8d20..4088deafd 100644 --- a/vendor/github.com/libopenstorage/openstorage/api/api.proto +++ b/vendor/github.com/libopenstorage/openstorage/api/api.proto @@ -236,6 +236,8 @@ message StorageResource { bool pool_metadata_dev = 15; // Cloud drive type string cloud_drive_type = 16; + // volume spec that created this drive + string volume_spec = 17; } // StoragePool groups different storage devices based on their CosType @@ -413,6 +415,7 @@ message PureBlockSpec { message PureFileSpec { string export_rules = 1; string full_vol_name = 2; + string nfs_endpoint = 3; } // ProxySpec defines how this volume will reflect an external data source. @@ -1905,6 +1908,43 @@ service OpenStorageFilesystemCheck { } } +// ## OpenStorageFilesystemDefrag Service +// This service provides APIs to manage filesystem defragmentation schedules/jobs on a cluster. +service OpenStorageFilesystemDefrag { + // Create a schedule to run defragmentation tasks periodically + rpc CreateSchedule(SdkCreateDefragScheduleRequest) + returns (SdkCreateDefragScheduleResponse){ + option(google.api.http) = { + post: "/v1/filesystem-defrag/schedule" + body: "*" + }; + } + + // Get defrag status of a node + rpc GetNodeStatus(SdkGetDefragNodeStatusRequest) + returns (SdkGetDefragNodeStatusResponse){ + option(google.api.http) = { + get: "/v1/filesystem-defrag/status/{node_id}" + }; + } + + // Enumerate all nodes, returning defrag status of the entire cluster + rpc EnumerateNodeStatus(SdkEnumerateDefragStatusRequest) + returns (SdkEnumerateDefragStatusResponse){ + option(google.api.http) = { + get: "/v1/filesystem-defrag/status" + }; + } + + // Clean up all defrag schedules and stop all operations + rpc CleanUpSchedules(SdkCleanUpDefragSchedulesRequest) + returns (SdkCleanUpDefragSchedulesResponse) { + option(google.api.http) = { + delete: "/v1/filesystem-defrag/schedules" + }; + } +} + // OpenStorageIdentity service provides methods to obtain information // about the cluster service OpenStorageIdentity { @@ -2167,6 +2207,34 @@ service OpenStorageJob { } } +// OpenstorageSchedule is a service that provides a common set of APIs for services +// that use the scheduled job framework +service OpenStorageSchedule { + // Inspect queries information of a schedule by type and ID + rpc Inspect(SdkInspectScheduleRequest) + returns (SdkInspectScheduleResponse) { + option(google.api.http) = { + get: "/v1/schedules/{type}/{id}" + }; + } + + // Enumerate returns all the schedules + rpc Enumerate(SdkEnumerateSchedulesRequest) + returns (SdkEnumerateSchedulesResponse) { + option(google.api.http) = { + get: "/v1/schedules/{type}" + }; + } + + // Delete deletes a schedule by type and ID + rpc Delete(SdkDeleteScheduleRequest) + returns (SdkDeleteScheduleResponse) { + option(google.api.http) = { + delete: "/v1/schedules/{type}/{id}" + }; + } +} + // OpenStorageNode is a service used to manage nodes in the cluster service OpenStorageNode { // Inspect returns information about the specified node @@ -4045,6 +4113,65 @@ message Job { google.protobuf.Timestamp last_update_time = 6; } +// Schedule is a generic schedule object that can encapsulate different +// types of scheduled jobs which follow the schedule framework of APIs +message Schedule { + // ID of the schedule + string id = 1; + // StartTime is the scheduled time to start a run + // Valid formats: + // daily=HH:mm e.g. daily=19:15 + // weekly=weekday@HH:mm e.g. weekly=Sunday@19:15 + // monthly=dd@HH:mm e.g. monthly=22@19:15 + string start_time = 2; + // MaxDurationMinutes defines the time limit of one run in minutes + uint32 max_duration_minutes = 3; + // Type is the schedule type (type of scheduled tasks) + Job.Type type = 4; + // Tasks is the tasks to be run in this schedule (must be of same job type) + repeated Job tasks = 5; + // CreateTime is the time the schedule was created + google.protobuf.Timestamp create_time = 6; + // LastUpdateTime is the time the schedule was updated + google.protobuf.Timestamp last_update_time = 7; +} + +// Defines a request to inspect schedule +message SdkInspectScheduleRequest { + // ID of the schedule + string id = 1; + // Type is schedule type + Job.Type type = 2; +} + +// Defines a response of schedule information +message SdkInspectScheduleResponse { + Schedule schedule = 1; +} + +// Defines a request to enumerate all schedules of a type +message SdkEnumerateSchedulesRequest { + // Type is schedule type + Job.Type type = 1; +} + +// Defines a response containing list of schedules +message SdkEnumerateSchedulesResponse { + repeated Schedule schedules = 1; +} + +// Defines a request to delete a schedule +message SdkDeleteScheduleRequest { + // ID of the schedule + string id = 1; + // Type is schedule type + Job.Type type = 2; +} + +// Empty response +message SdkDeleteScheduleResponse { +} + // Defines a response for an SDK request that spins up a new job // to perform the request message SdkJobResponse { @@ -4113,8 +4240,8 @@ message CollectDiagsJob { // DefragJob describes a job to run defragmentation on cluster nodes message DefragJob { - // MaxDurationHours defines the time limit in hours - double max_duration_hours = 1; + // MaxDurationMinutes defines the time limit in minutes + uint32 max_duration_minutes = 1; // MaxNodesInParallel defines the maximum number of nodes running the defrag job in parallel uint32 max_nodes_in_parallel = 2; // IncludeNodes is a list of node UUID: if provided, will only run the job on these nodes; @@ -4125,14 +4252,16 @@ message DefragJob { // if not provided, will run on all nodes // cannot coexist with IncludeNodes repeated string exclude_nodes = 4; - // NodeSelector is a list of node label `key=value` pairs separated by comma, + // NodeSelector is a list of node label `key=value` pairs, // which selects the nodes to be run on for the job // can coexist with ExcludeNodes but cannot coexist with IncludeNodes - repeated string node_selector = 5; + repeated LabelSelectorRequirement node_selector = 5; // CurrentRunningNodes stores the nodes on which the job is currently running repeated string current_running_nodes = 6; // ScheduleId is the ID of the schedule which started this job string schedule_id = 7; + // ScheduleOneIterationOnly is true when the defragJob is run by a one-iteration-only schedule + bool schedule_one_iteration_only = 8; } // DefragNodeStatus describes the defragmentation status of a node @@ -4141,6 +4270,8 @@ message DefragNodeStatus { map pool_status = 1; // RunningSchedule is the defrag schedule being run on the node string running_schedule = 2; + // LastUpdateTime is the time when DefragNodeStatus or any DefragPoolStatus was last updated on this node + google.protobuf.Timestamp last_update_time = 3; } // DefragNodeStatus describes the defragmentation status of a pool @@ -4163,7 +4294,61 @@ message DefragPoolStatus { int64 last_offset = 7; // ProgressPercentage describes the progress of the lastest defrag job (current or last run) on this pool // percentage = bytes completed / sum of file sizes - int32 progress_percentage = 8; + uint32 progress_percentage = 8; +} + +// Defines a request to create a defrag schedule +message SdkCreateDefragScheduleRequest { + // DefragTask is the defragmentation task run by the schedule + DefragJob defrag_task = 1; + // StartTime is the scheduled time to start a run + // Valid formats: + // daily=HH:mm e.g. daily=19:15 + // weekly=weekday@HH:mm e.g. weekly=Sunday@19:15 + // monthly=dd@HH:mm e.g. monthly=22@19:15 + string start_time = 2; +} + +// Defines a response of defrag schedule creation +message SdkCreateDefragScheduleResponse { + // Schedule is the newly created schedule + Schedule schedule = 1; +} + +// Defines a request to clean up defrag schedules +message SdkCleanUpDefragSchedulesRequest { +} + +// Defines a response of defrag schedules clean-up +message SdkCleanUpDefragSchedulesResponse { +} + +// Defines a request to query defrag status of a node +message SdkGetDefragNodeStatusRequest { + // NodeId is uuid of the node + string node_id = 1; +} + +// Defines a response of defrag node status +message SdkGetDefragNodeStatusResponse { + // DefragNodeStatus stores the defrag status of the node + DefragNodeStatus defrag_node_status = 1; + // DataIp is the IP address of this node + string data_ip = 2; + // SchedulerNodeName is name of the node in scheduler context + string scheduler_node_name = 3; + // PoolUsage is a map with pool UUID as the key and pool usage percentage as the value + map pool_usage = 4; +} + +// Defines a request to get defrag status of the entire cluster +message SdkEnumerateDefragStatusRequest { +} + +// Defines a response of defrag status of the entire cluster +message SdkEnumerateDefragStatusResponse { + // Status is a map with node uuid as the key and defrag node status as the value + map status = 1; } message DiagsCollectionStatus { @@ -4361,6 +4546,8 @@ message SdkStoragePoolResizeRequest { SdkStoragePool.ResizeOperationType operation_type = 3; // SkipWaitForCleanVolumes would skip the wait for all volumes on the pool to be clean before doing a resize bool skip_wait_for_clean_volumes = 4; + // ForceAddDrive would force pool expand with add drive for the storage pool + bool force_add_drive = 5; } message StorageRebalanceTriggerThreshold { @@ -4425,6 +4612,8 @@ message SdkStorageRebalanceRequest { STORAGE_REBALANCE = 0; // VolumePlacementFix mode: scan all volumes for incorrect placement and fix them VOLUME_PLACEMENT_FIX = 1; + // PoolDrain mode: drain all volumes & snapshots on the source pools (optionally to target pools) + POOL_DRAIN = 2; } } @@ -5661,7 +5850,7 @@ message SdkVersion { // SDK version major value of this specification Major = 0; // SDK version minor value of this specification - Minor = 176; + Minor = 182; // SDK version patch value of this specification Patch = 0; } diff --git a/vendor/github.com/libopenstorage/openstorage/api/client/cluster/client.go b/vendor/github.com/libopenstorage/openstorage/api/client/cluster/client.go index 06d4e4f14..33af982a2 100644 --- a/vendor/github.com/libopenstorage/openstorage/api/client/cluster/client.go +++ b/vendor/github.com/libopenstorage/openstorage/api/client/cluster/client.go @@ -10,9 +10,11 @@ import ( "github.com/libopenstorage/openstorage/api/client" "github.com/libopenstorage/openstorage/cluster" "github.com/libopenstorage/openstorage/pkg/clusterdomain" + "github.com/libopenstorage/openstorage/pkg/defrag" "github.com/libopenstorage/openstorage/pkg/diags" "github.com/libopenstorage/openstorage/pkg/job" "github.com/libopenstorage/openstorage/pkg/nodedrain" + "github.com/libopenstorage/openstorage/pkg/schedule" "github.com/libopenstorage/openstorage/pkg/storagepool" sched "github.com/libopenstorage/openstorage/schedpolicy" "github.com/libopenstorage/openstorage/secrets" @@ -33,8 +35,10 @@ type clusterClient struct { clusterdomain.NullClusterDomainManager storagepool.UnsupportedPoolProvider job.UnsupportedJobProvider + schedule.UnsupportedScheduleProvider nodedrain.UnsupportedNodeDrainProvider diags.UnsupportedDiagsProvider + defrag.UnsupportedDefragProvider c *client.Client } diff --git a/vendor/github.com/libopenstorage/openstorage/api/spec/spec_handler.go b/vendor/github.com/libopenstorage/openstorage/api/spec/spec_handler.go index a5a119668..681ebadd0 100644 --- a/vendor/github.com/libopenstorage/openstorage/api/spec/spec_handler.go +++ b/vendor/github.com/libopenstorage/openstorage/api/spec/spec_handler.go @@ -2,6 +2,7 @@ package spec import ( "fmt" + "net" "regexp" "strconv" "strings" @@ -648,6 +649,17 @@ func (d *specHandler) UpdateSpecFromOpts(opts map[string]string, spec *api.Volum spec.ProxySpec.PureFileSpec = &api.PureFileSpec{} } spec.ProxySpec.PureFileSpec.ExportRules = v + case api.SpecPureNFSEnpoint: + if spec.ProxySpec == nil { + spec.ProxySpec = &api.ProxySpec{} + } + if spec.ProxySpec.PureFileSpec == nil { + spec.ProxySpec.PureFileSpec = &api.PureFileSpec{} + } + if net.ParseIP(v) == nil { + return nil, nil, nil, fmt.Errorf("invalid Pure NFS endpoint: %v", v) + } + spec.ProxySpec.PureFileSpec.NfsEndpoint = v case api.SpecIoThrottleRdIOPS: if spec.IoThrottle == nil { spec.IoThrottle = &api.IoThrottle{} diff --git a/vendor/github.com/libopenstorage/openstorage/cluster/cluster.go b/vendor/github.com/libopenstorage/openstorage/cluster/cluster.go index 3ff2de738..91edb2f8a 100644 --- a/vendor/github.com/libopenstorage/openstorage/cluster/cluster.go +++ b/vendor/github.com/libopenstorage/openstorage/cluster/cluster.go @@ -13,9 +13,11 @@ import ( "github.com/libopenstorage/openstorage/osdconfig" "github.com/libopenstorage/openstorage/pkg/auth" "github.com/libopenstorage/openstorage/pkg/clusterdomain" + "github.com/libopenstorage/openstorage/pkg/defrag" "github.com/libopenstorage/openstorage/pkg/diags" "github.com/libopenstorage/openstorage/pkg/job" "github.com/libopenstorage/openstorage/pkg/nodedrain" + "github.com/libopenstorage/openstorage/pkg/schedule" sched "github.com/libopenstorage/openstorage/schedpolicy" "github.com/libopenstorage/openstorage/secrets" ) @@ -55,10 +57,14 @@ type ClusterServerConfiguration struct { ConfigStoragePoolProvider api.OpenStoragePoolServer // holds implementation to the JobProvider interface ConfigJobProvider job.Provider + // holds the implementation to the SDK OpenStorageSchedule interface + ConfigScheduleProvider schedule.Provider // holds implementation to the NodeDrainProvider interface ConfigNodeDrainProvider nodedrain.Provider // holds the actual implementation to the SDK OpenStorageDiags interface ConfigDiagsProvider diags.Provider + // holds the implementation to the SDK OpenStorageDefrag interface + ConfigDefragProvider defrag.Provider } // NodeEntry is used to discover other nodes in the cluster @@ -401,8 +407,10 @@ type Cluster interface { objectstore.ObjectStore api.OpenStoragePoolServer job.Provider + schedule.Provider nodedrain.Provider diags.Provider + defrag.Provider } // NullClusterListener is a NULL implementation of ClusterListener functions diff --git a/vendor/github.com/libopenstorage/openstorage/cluster/cluster_not_supported.go b/vendor/github.com/libopenstorage/openstorage/cluster/cluster_not_supported.go index a72c3fae0..440127638 100644 --- a/vendor/github.com/libopenstorage/openstorage/cluster/cluster_not_supported.go +++ b/vendor/github.com/libopenstorage/openstorage/cluster/cluster_not_supported.go @@ -8,8 +8,10 @@ import ( "github.com/libopenstorage/openstorage/objectstore" "github.com/libopenstorage/openstorage/osdconfig" "github.com/libopenstorage/openstorage/pkg/clusterdomain" + "github.com/libopenstorage/openstorage/pkg/defrag" "github.com/libopenstorage/openstorage/pkg/diags" "github.com/libopenstorage/openstorage/pkg/job" + "github.com/libopenstorage/openstorage/pkg/schedule" "github.com/libopenstorage/openstorage/pkg/nodedrain" "github.com/libopenstorage/openstorage/pkg/storagepool" "github.com/libopenstorage/openstorage/schedpolicy" @@ -32,8 +34,10 @@ type NullClusterManager struct { clusterdomain.NullClusterDomainManager storagepool.UnsupportedPoolProvider job.UnsupportedJobProvider + schedule.UnsupportedScheduleProvider nodedrain.UnsupportedNodeDrainProvider diags.UnsupportedDiagsProvider + defrag.UnsupportedDefragProvider } func NewDefaultClusterManager() Cluster { diff --git a/vendor/github.com/libopenstorage/openstorage/pkg/defrag/defrag.go b/vendor/github.com/libopenstorage/openstorage/pkg/defrag/defrag.go new file mode 100644 index 000000000..f1a0f3e3e --- /dev/null +++ b/vendor/github.com/libopenstorage/openstorage/pkg/defrag/defrag.go @@ -0,0 +1,62 @@ +package defrag + +import ( + "context" + + "github.com/libopenstorage/openstorage/api" + "github.com/libopenstorage/openstorage/api/errors" +) + +// Provider is a collection of APIs for performing different kinds of defrag +// operations on a node +type Provider interface { + // Create a schedule to run defragmentation tasks periodically + CreateDefragSchedule(ctx context.Context, req *api.SdkCreateDefragScheduleRequest) ( + *api.SdkCreateDefragScheduleResponse, error, + ) + // Clean up defrag schedules and stop all defrag operations + CleanUpDefragSchedules(ctx context.Context, req *api.SdkCleanUpDefragSchedulesRequest) ( + *api.SdkCleanUpDefragSchedulesResponse, error, + ) + // Get defrag status of a node + GetDefragNodeStatus(ctx context.Context, req *api.SdkGetDefragNodeStatusRequest) ( + *api.SdkGetDefragNodeStatusResponse, error, + ) + // Enumerate all nodes, returning defrag status of the entire cluster + EnumerateDefragStatus(ctx context.Context, req *api.SdkEnumerateDefragStatusRequest) ( + *api.SdkEnumerateDefragStatusResponse, error, + ) +} + +// NewDefaultNodeDrainProvider does not any defrag related operations +func NewDefaultDefragProvider() Provider { + return &UnsupportedDefragProvider{} +} + +// UnsupportedDefragProvider unsupported implementation of defrag. +type UnsupportedDefragProvider struct { +} + +func (u *UnsupportedDefragProvider) CreateDefragSchedule( + ctx context.Context, req *api.SdkCreateDefragScheduleRequest, +) (*api.SdkCreateDefragScheduleResponse, error) { + return nil, &errors.ErrNotSupported{} +} + +func (u *UnsupportedDefragProvider) CleanUpDefragSchedules( + ctx context.Context, req *api.SdkCleanUpDefragSchedulesRequest, +) (*api.SdkCleanUpDefragSchedulesResponse, error) { + return nil, &errors.ErrNotSupported{} +} + +func (u *UnsupportedDefragProvider) GetDefragNodeStatus( + ctx context.Context, req *api.SdkGetDefragNodeStatusRequest, +) (*api.SdkGetDefragNodeStatusResponse, error) { + return nil, &errors.ErrNotSupported{} +} + +func (u *UnsupportedDefragProvider) EnumerateDefragStatus( + ctx context.Context, req *api.SdkEnumerateDefragStatusRequest, +) (*api.SdkEnumerateDefragStatusResponse, error) { + return nil, &errors.ErrNotSupported{} +} diff --git a/vendor/github.com/libopenstorage/openstorage/pkg/schedule/schedule.go b/vendor/github.com/libopenstorage/openstorage/pkg/schedule/schedule.go new file mode 100644 index 000000000..bd074d63a --- /dev/null +++ b/vendor/github.com/libopenstorage/openstorage/pkg/schedule/schedule.go @@ -0,0 +1,45 @@ +package schedule + +import ( + "context" + + "github.com/libopenstorage/openstorage/api" + "github.com/libopenstorage/openstorage/api/errors" +) + +// Provider implements the APIs for creating and querying schedules +type Provider interface { + // InspectSchedule queries a schedule by type and ID + InspectSchedule(ctx context.Context, in *api.SdkInspectScheduleRequest) (*api.SdkInspectScheduleResponse, error) + // EnumerateSchedules returns all the schedules of a type + EnumerateSchedules(ctx context.Context, in *api.SdkEnumerateSchedulesRequest) (*api.SdkEnumerateSchedulesResponse, error) + // DeleteSchedule deletes a schedule by type and ID + DeleteSchedule(ctx context.Context, in *api.SdkDeleteScheduleRequest) (*api.SdkDeleteScheduleResponse, error) +} + +// NewDefaultScheduleProvider does not support schedules +func NewDefaultScheduleProvider() Provider { + return &UnsupportedScheduleProvider{} +} + +// UnsupportedJobProvider unsupported implementation of schedule APIs +type UnsupportedScheduleProvider struct { +} + +func (u *UnsupportedScheduleProvider) InspectSchedule( + ctx context.Context, in *api.SdkInspectScheduleRequest, +) (*api.SdkInspectScheduleResponse, error) { + return nil, &errors.ErrNotSupported{} +} + +func (u *UnsupportedScheduleProvider) EnumerateSchedules( + ctx context.Context, in *api.SdkEnumerateSchedulesRequest, +) (*api.SdkEnumerateSchedulesResponse, error) { + return nil, &errors.ErrNotSupported{} +} + +func (u *UnsupportedScheduleProvider) DeleteSchedule( + ctx context.Context, in *api.SdkDeleteScheduleRequest, +) (*api.SdkDeleteScheduleResponse, error) { + return nil, &errors.ErrNotSupported{} +} diff --git a/vendor/github.com/libopenstorage/operator/drivers/storage/portworx/util/util.go b/vendor/github.com/libopenstorage/operator/drivers/storage/portworx/util/util.go index 40d3270f2..7d4849808 100644 --- a/vendor/github.com/libopenstorage/operator/drivers/storage/portworx/util/util.go +++ b/vendor/github.com/libopenstorage/operator/drivers/storage/portworx/util/util.go @@ -84,6 +84,8 @@ const ( EnvKeyKubeletDir = "KUBELET_DIR" // OS name for windows node WindowsOsName = "windows" + // Dummy Secret value for authentication when Security is disabled + DummySecretValue = "dummy-secret-value" // AnnotationIsPKS annotation indicating whether it is a PKS cluster AnnotationIsPKS = pxAnnotationPrefix + "/is-pks" @@ -833,7 +835,7 @@ func GetStorageNodes( } nodeClient := api.NewOpenStorageNodeClient(sdkConn) - ctx, err := SetupContextWithToken(context.Background(), cluster, k8sClient) + ctx, err := SetupContextWithToken(context.Background(), cluster, k8sClient, false) if err != nil { return sdkConn, nil, err } @@ -1151,16 +1153,25 @@ func AuthEnabled(spec *corev1.StorageClusterSpec) bool { } // SetupContextWithToken Gets token or from secret for authenticating with the SDK server -func SetupContextWithToken(ctx context.Context, cluster *corev1.StorageCluster, k8sClient client.Client) (context.Context, error) { +func SetupContextWithToken(ctx context.Context, cluster *corev1.StorageCluster, k8sClient client.Client, skipSecurityCheck bool) (context.Context, error) { // auth not declared in cluster spec - if !AuthEnabled(&cluster.Spec) { + // if security enabled check is skipped, proceed without returning context + if !AuthEnabled(&cluster.Spec) && !skipSecurityCheck { return ctx, nil } pxAppsSecret, err := GetSecretValue(ctx, cluster, k8sClient, SecurityPXSystemSecretsSecretName, SecurityAppsSecretKey) if err != nil { - return ctx, fmt.Errorf("failed to get portworx apps secret: %v", err.Error()) + if !skipSecurityCheck { + return ctx, fmt.Errorf("failed to get portworx apps secret: %v", err.Error()) + } + // if security enabled check is skipped and secret is not present, proceed with dummy secret value + // this is case of fresh install where security was never enabled + if errors.IsNotFound(err) && skipSecurityCheck { + pxAppsSecret = DummySecretValue + } } + if pxAppsSecret == "" { return ctx, nil } @@ -1387,7 +1398,7 @@ func CountStorageNodes( k8sClient client.Client, ) (int, error) { nodeClient := api.NewOpenStorageNodeClient(sdkConn) - ctx, err := SetupContextWithToken(context.Background(), cluster, k8sClient) + ctx, err := SetupContextWithToken(context.Background(), cluster, k8sClient, false) if err != nil { return -1, err } @@ -1415,23 +1426,23 @@ func CountStorageNodes( if node.Status == api.Status_STATUS_DECOMMISSION { continue } - v := node.NodeLabels[NodeLabelPortworxVersion] - nodeVersion, err := version.NewVersion(v) + useQuorumFlag, err = ShouldUseQuorumFlag(node) if err != nil { - logrus.Warnf("Failed to parse node version %s for node %s: %v", v, node.Id, err) + logrus.Errorf("failed to determine if quorum flag should be used: %v", err) useQuorumFlag = false useClusterDomain = false break } - if nodeVersion.LessThan(MinimumPxVersionQuorumFlag) { - logrus.Tracef("Node %s is older than %s. Not using quorum member flag", node.Id, MinimumPxVersionQuorumFlag.String()) - useQuorumFlag = false + + if !useQuorumFlag { useClusterDomain = false break } - if nodeVersion.LessThan(MinimumPxVersionClusterDomain) { - logrus.Tracef("Node %s is older than %s. Cannot using cluster domain field", node.Id, MinimumPxVersionClusterDomain.String()) - useClusterDomain = false + + useClusterDomain, err = ShouldUseClusterDomain(node) + if err != nil { + logrus.Errorf("failed to determine if cluster domain should be used: %v", err) + break } } @@ -1523,7 +1534,7 @@ func getStorageNodeMappingFromRPC( k8sClient client.Client, ) (map[string]string, map[string]string, error) { nodeClient := api.NewOpenStorageNodeClient(sdkConn) - ctx, err := SetupContextWithToken(context.Background(), cluster, k8sClient) + ctx, err := SetupContextWithToken(context.Background(), cluster, k8sClient, false) if err != nil { return nil, nil, err } @@ -1903,6 +1914,37 @@ func isVersionSupported(current, target string) bool { return currentVersion.Core().GreaterThanOrEqual(targetVersion) } -func IsK3sClusterExt(ext string) bool { - return strings.HasPrefix(ext[1:], "k3s") +func IsK3sOrRke2ClusterExt(ext string) bool { + return strings.HasPrefix(ext[1:], "k3s") || strings.HasPrefix(ext[1:], "rke2") +} + +// ShouldUseQuorumFlag checks if the node should use the quorum member flag to decide storage status +func ShouldUseQuorumFlag(node *api.StorageNode) (bool, error) { + v := node.NodeLabels[NodeLabelPortworxVersion] + nodeVersion, err := version.NewVersion(v) + if err != nil { + return false, fmt.Errorf("failed to parse node version %s for node %s: %v", v, node.Id, err) + } + + // Check if the node is older than the minimum version that supports quorum member flag + if nodeVersion.LessThan(MinimumPxVersionQuorumFlag) { + logrus.Tracef("Node %s is older than %s. Not using quorum member flag", node.Id, MinimumPxVersionQuorumFlag.String()) + return false, nil + } + return true, nil +} + +// ShouldUseClusterDomain checks if the node should use the cluster domain field to decide storage status +func ShouldUseClusterDomain(node *api.StorageNode) (bool, error) { + v := node.NodeLabels[NodeLabelPortworxVersion] + nodeVersion, err := version.NewVersion(v) + if err != nil { + return false, fmt.Errorf("failed to parse node version %s for node %s: %v", v, node.Id, err) + } + // Check if the node is older than the minimum version that supports cluster domain field + if nodeVersion.LessThan(MinimumPxVersionClusterDomain) { + logrus.Tracef("Node %s is older than %s. Cannot using cluster domain field", node.Id, MinimumPxVersionClusterDomain.String()) + return false, nil + } + return true, nil } diff --git a/vendor/github.com/libopenstorage/operator/pkg/constants/metadata.go b/vendor/github.com/libopenstorage/operator/pkg/constants/metadata.go index 91938e8c2..d4871759f 100644 --- a/vendor/github.com/libopenstorage/operator/pkg/constants/metadata.go +++ b/vendor/github.com/libopenstorage/operator/pkg/constants/metadata.go @@ -15,12 +15,18 @@ const ( LabelValueTrue = "true" // AnnotationGarbageCollection is the annotation to let operator clean up external objects on uninstallation. AnnotationGarbageCollection = OperatorPrefix + "/garbage-collection" + // AnnotationEvictVMsDuringUpdate is the annotation to let operator evict VMs during upgrade + AnnotationEvictVMsDuringUpdate = OperatorPrefix + "/evict-vms-during-update" // AnnotationNodeLabels is the storage pod annotation that contains node labels AnnotationNodeLabels = OperatorPrefix + "/node-labels" // AnnotationDisableStorage annotation to disable the storage pods from running (default: false) AnnotationDisableStorage = OperatorPrefix + "/disable-storage" // AnnotationReconcileObject annotation to toggle reconciliation of operator created objects AnnotationReconcileObject = OperatorPrefix + "/reconcile" + // AnnotationControllerRevisionHashKey has the controller revision hash for which a VM live migration was triggered + AnnotationControllerRevisionHashKey = OperatorPrefix + "/controller-revision-hash" + // AnnotationVMIMigrationSourceNode has the source node for the VM live migration triggered by the operator + AnnotationVMIMigrationSourceNode = OperatorPrefix + "/vmi-migration-source-node" // AnnotationClusterAPIMachine is the annotation key name for the name of the // machine that's backing the k8s node AnnotationClusterAPIMachine = "cluster.k8s.io/machine" @@ -39,6 +45,8 @@ const ( // the custom registry, there is a list of hardcoded common registries, however the list // may not be complete, users can use this annotation to add more. AnnotationCommonImageRegistries = OperatorPrefix + "/common-image-registries" + // AnnotationUnschedulable tells Stork to consider the node unschedulable + AnnotationUnschedulable = OperatorPrefix + "/unschedulable" // OperatorLabelManagedByKey is a label key that is added to any object that is // managed the Portworx operator. OperatorLabelManagedByKey = OperatorPrefix + "/managed-by" diff --git a/vendor/github.com/libopenstorage/operator/pkg/mock/kubevirtmanager.mock.go b/vendor/github.com/libopenstorage/operator/pkg/mock/kubevirtmanager.mock.go new file mode 100644 index 000000000..b73bc239a --- /dev/null +++ b/vendor/github.com/libopenstorage/operator/pkg/mock/kubevirtmanager.mock.go @@ -0,0 +1,77 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/libopenstorage/operator/pkg/controller/storagecluster (interfaces: KubevirtManager) + +// Package mock is a generated GoMock package. +package mock + +import ( + reflect "reflect" + + gomock "github.com/golang/mock/gomock" + v1 "k8s.io/api/core/v1" +) + +// MockKubevirtManager is a mock of KubevirtManager interface. +type MockKubevirtManager struct { + ctrl *gomock.Controller + recorder *MockKubevirtManagerMockRecorder +} + +// MockKubevirtManagerMockRecorder is the mock recorder for MockKubevirtManager. +type MockKubevirtManagerMockRecorder struct { + mock *MockKubevirtManager +} + +// NewMockKubevirtManager creates a new mock instance. +func NewMockKubevirtManager(ctrl *gomock.Controller) *MockKubevirtManager { + mock := &MockKubevirtManager{ctrl: ctrl} + mock.recorder = &MockKubevirtManagerMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockKubevirtManager) EXPECT() *MockKubevirtManagerMockRecorder { + return m.recorder +} + +// ClusterHasVMPods mocks base method. +func (m *MockKubevirtManager) ClusterHasVMPods() (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ClusterHasVMPods") + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ClusterHasVMPods indicates an expected call of ClusterHasVMPods. +func (mr *MockKubevirtManagerMockRecorder) ClusterHasVMPods() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ClusterHasVMPods", reflect.TypeOf((*MockKubevirtManager)(nil).ClusterHasVMPods)) +} + +// GetVMPodsToEvictByNode mocks base method. +func (m *MockKubevirtManager) GetVMPodsToEvictByNode() (map[string][]v1.Pod, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetVMPodsToEvictByNode") + ret0, _ := ret[0].(map[string][]v1.Pod) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetVMPodsToEvictByNode indicates an expected call of GetVMPodsToEvictByNode. +func (mr *MockKubevirtManagerMockRecorder) GetVMPodsToEvictByNode() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetVMPodsToEvictByNode", reflect.TypeOf((*MockKubevirtManager)(nil).GetVMPodsToEvictByNode)) +} + +// StartEvictingVMPods mocks base method. +func (m *MockKubevirtManager) StartEvictingVMPods(arg0 []v1.Pod, arg1 string, arg2 func(string)) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "StartEvictingVMPods", arg0, arg1, arg2) +} + +// StartEvictingVMPods indicates an expected call of StartEvictingVMPods. +func (mr *MockKubevirtManagerMockRecorder) StartEvictingVMPods(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StartEvictingVMPods", reflect.TypeOf((*MockKubevirtManager)(nil).StartEvictingVMPods), arg0, arg1, arg2) +} diff --git a/vendor/github.com/libopenstorage/operator/pkg/mock/openstoragesdk.mock.go b/vendor/github.com/libopenstorage/operator/pkg/mock/openstoragesdk.mock.go index eae26e912..2e564c603 100644 --- a/vendor/github.com/libopenstorage/operator/pkg/mock/openstoragesdk.mock.go +++ b/vendor/github.com/libopenstorage/operator/pkg/mock/openstoragesdk.mock.go @@ -1,5 +1,5 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: github.com/libopenstorage/openstorage/api (interfaces: OpenStorageRoleServer,OpenStorageNodeServer,OpenStorageClusterServer,OpenStorageNodeClient,OpenStorageVolumeServer,OpenStorageClusterDomainsServer,OpenStorageClusterDomainsClient) +// Source: github.com/libopenstorage/openstorage/api (interfaces: OpenStorageRoleServer,OpenStorageNodeServer,OpenStorageClusterServer,OpenStorageNodeClient,OpenStorageVolumeServer,OpenStorageClusterDomainsServer) // Package mock is a generated GoMock package. package mock @@ -890,106 +890,3 @@ func (mr *MockOpenStorageClusterDomainsServerMockRecorder) Inspect(arg0, arg1 in mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Inspect", reflect.TypeOf((*MockOpenStorageClusterDomainsServer)(nil).Inspect), arg0, arg1) } - -// MockOpenStorageClusterDomainsClient is a mock of OpenStorageClusterDomainsClient interface. -type MockOpenStorageClusterDomainsClient struct { - ctrl *gomock.Controller - recorder *MockOpenStorageClusterDomainsClientMockRecorder -} - -// MockOpenStorageClusterDomainsClientMockRecorder is the mock recorder for MockOpenStorageClusterDomainsClient. -type MockOpenStorageClusterDomainsClientMockRecorder struct { - mock *MockOpenStorageClusterDomainsClient -} - -// NewMockOpenStorageClusterDomainsClient creates a new mock instance. -func NewMockOpenStorageClusterDomainsClient(ctrl *gomock.Controller) *MockOpenStorageClusterDomainsClient { - mock := &MockOpenStorageClusterDomainsClient{ctrl: ctrl} - mock.recorder = &MockOpenStorageClusterDomainsClientMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockOpenStorageClusterDomainsClient) EXPECT() *MockOpenStorageClusterDomainsClientMockRecorder { - return m.recorder -} - -// Activate mocks base method. -func (m *MockOpenStorageClusterDomainsClient) Activate(arg0 context.Context, arg1 *api.SdkClusterDomainActivateRequest, arg2 ...grpc.CallOption) (*api.SdkClusterDomainActivateResponse, error) { - m.ctrl.T.Helper() - varargs := []interface{}{arg0, arg1} - for _, a := range arg2 { - varargs = append(varargs, a) - } - ret := m.ctrl.Call(m, "Activate", varargs...) - ret0, _ := ret[0].(*api.SdkClusterDomainActivateResponse) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// Activate indicates an expected call of Activate. -func (mr *MockOpenStorageClusterDomainsClientMockRecorder) Activate(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - varargs := append([]interface{}{arg0, arg1}, arg2...) - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Activate", reflect.TypeOf((*MockOpenStorageClusterDomainsClient)(nil).Activate), varargs...) -} - -// Deactivate mocks base method. -func (m *MockOpenStorageClusterDomainsClient) Deactivate(arg0 context.Context, arg1 *api.SdkClusterDomainDeactivateRequest, arg2 ...grpc.CallOption) (*api.SdkClusterDomainDeactivateResponse, error) { - m.ctrl.T.Helper() - varargs := []interface{}{arg0, arg1} - for _, a := range arg2 { - varargs = append(varargs, a) - } - ret := m.ctrl.Call(m, "Deactivate", varargs...) - ret0, _ := ret[0].(*api.SdkClusterDomainDeactivateResponse) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// Deactivate indicates an expected call of Deactivate. -func (mr *MockOpenStorageClusterDomainsClientMockRecorder) Deactivate(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - varargs := append([]interface{}{arg0, arg1}, arg2...) - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Deactivate", reflect.TypeOf((*MockOpenStorageClusterDomainsClient)(nil).Deactivate), varargs...) -} - -// Enumerate mocks base method. -func (m *MockOpenStorageClusterDomainsClient) Enumerate(arg0 context.Context, arg1 *api.SdkClusterDomainsEnumerateRequest, arg2 ...grpc.CallOption) (*api.SdkClusterDomainsEnumerateResponse, error) { - m.ctrl.T.Helper() - varargs := []interface{}{arg0, arg1} - for _, a := range arg2 { - varargs = append(varargs, a) - } - ret := m.ctrl.Call(m, "Enumerate", varargs...) - ret0, _ := ret[0].(*api.SdkClusterDomainsEnumerateResponse) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// Enumerate indicates an expected call of Enumerate. -func (mr *MockOpenStorageClusterDomainsClientMockRecorder) Enumerate(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - varargs := append([]interface{}{arg0, arg1}, arg2...) - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Enumerate", reflect.TypeOf((*MockOpenStorageClusterDomainsClient)(nil).Enumerate), varargs...) -} - -// Inspect mocks base method. -func (m *MockOpenStorageClusterDomainsClient) Inspect(arg0 context.Context, arg1 *api.SdkClusterDomainInspectRequest, arg2 ...grpc.CallOption) (*api.SdkClusterDomainInspectResponse, error) { - m.ctrl.T.Helper() - varargs := []interface{}{arg0, arg1} - for _, a := range arg2 { - varargs = append(varargs, a) - } - ret := m.ctrl.Call(m, "Inspect", varargs...) - ret0, _ := ret[0].(*api.SdkClusterDomainInspectResponse) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// Inspect indicates an expected call of Inspect. -func (mr *MockOpenStorageClusterDomainsClientMockRecorder) Inspect(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - varargs := append([]interface{}{arg0, arg1}, arg2...) - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Inspect", reflect.TypeOf((*MockOpenStorageClusterDomainsClient)(nil).Inspect), varargs...) -} diff --git a/vendor/github.com/libopenstorage/operator/pkg/util/k8s/node.go b/vendor/github.com/libopenstorage/operator/pkg/util/k8s/node.go index 6dc1db375..9eec88580 100644 --- a/vendor/github.com/libopenstorage/operator/pkg/util/k8s/node.go +++ b/vendor/github.com/libopenstorage/operator/pkg/util/k8s/node.go @@ -8,7 +8,7 @@ import ( "github.com/sirupsen/logrus" v1 "k8s.io/api/core/v1" - cluster_v1beta1 "sigs.k8s.io/cluster-api/api/v1beta1" + cluster_v1alpha1 "sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1" "sigs.k8s.io/controller-runtime/pkg/client" corev1 "github.com/libopenstorage/operator/pkg/apis/core/v1" @@ -32,7 +32,7 @@ type NodeInfo struct { func IsNodeBeingDeleted(node *v1.Node, cl client.Client) (bool, error) { // check if node is managed by a cluster API machine and if the machine is marked for deletion if machineName, present := node.Annotations[constants.AnnotationClusterAPIMachine]; present && len(machineName) > 0 { - machine := &cluster_v1beta1.Machine{} + machine := &cluster_v1alpha1.Machine{} err := cl.Get(context.TODO(), client.ObjectKey{Name: machineName, Namespace: "default"}, machine) if err != nil { return false, fmt.Errorf("failed to get machine: default/%s due to: %v", machineName, err) diff --git a/vendor/github.com/libopenstorage/operator/pkg/util/test/util.go b/vendor/github.com/libopenstorage/operator/pkg/util/test/util.go index 674ff43da..ea5273669 100644 --- a/vendor/github.com/libopenstorage/operator/pkg/util/test/util.go +++ b/vendor/github.com/libopenstorage/operator/pkg/util/test/util.go @@ -20,6 +20,7 @@ import ( "regexp" "strconv" "strings" + "sync" "testing" "time" @@ -67,7 +68,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/kubernetes/scheme" affinityhelper "k8s.io/component-helpers/scheduling/corev1/nodeaffinity" - cluster_v1beta1 "sigs.k8s.io/cluster-api/api/v1beta1" + cluster_v1alpha1 "sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/fake" ) @@ -115,8 +116,8 @@ const ( // PxOperatorMasterVersion is a tag for PX Operator master version PxOperatorMasterVersion = "99.9.9" - // AksPVCControllerSecurePort is the PVC controller secure port. - AksPVCControllerSecurePort = "10261" + // CustomPVCControllerSecurePort is the PVC controller secure port. + CustomPVCControllerSecurePort = "10261" pxAnnotationPrefix = "portworx.io" @@ -187,6 +188,14 @@ const ( defaultCheckFreshInstallTimeout = 120 * time.Second defaultCheckFreshInstallInterval = 5 * time.Second + // Node Wiper constants + defaultNodeWiperValidationTimeout = 2 * time.Minute + defaultNodeWiperValidationInterval = 5 * time.Second + // this is required to set as portworx package is not exporting the default image + defaultNodeWiperImage = "portworx/px-node-wiper:2.13.2" + pxVersionsConfigmapName = "px-versions" + VersionConfigMapKey = "versions" + etcHostsFile = "/etc/hosts" tempEtcHostsMarker = "### px-operator unit-test" ) @@ -205,6 +214,7 @@ var ( opVer23_7, _ = version.NewVersion("23.7.0-") opVer23_8, _ = version.NewVersion("23.8.0-") opVer23_10, _ = version.NewVersion("23.10.0-") + opVer23_10_2, _ = version.NewVersion("23.10.2-") OpVer23_10_3, _ = version.NewVersion("23.10.3-") opVer24_1_0, _ = version.NewVersion("24.1.0-") @@ -219,6 +229,7 @@ var ( pxVer2_13, _ = version.NewVersion("2.13") pxVer3_0, _ = version.NewVersion("3.0") + pxVer3_1, _ = version.NewVersion("3.1") // minimumPxVersionCCMJAVA minimum PX version to install ccm-java minimumPxVersionCCMJAVA, _ = version.NewVersion("2.8") @@ -231,6 +242,12 @@ func MockDriver(mockCtrl *gomock.Controller) *mock.MockDriver { return mock.NewMockDriver(mockCtrl) } +func NoopKubevirtManager(mockCtrl *gomock.Controller) *mock.MockKubevirtManager { + kubevirtMock := mock.NewMockKubevirtManager(mockCtrl) + kubevirtMock.EXPECT().ClusterHasVMPods().Return(false, nil).AnyTimes() + return kubevirtMock +} + // FakeK8sClient creates a fake controller-runtime Kubernetes client. Also // adds the CRDs defined in this repository to the scheme func FakeK8sClient(initObjects ...runtime.Object) client.Client { @@ -241,7 +258,7 @@ func FakeK8sClient(initObjects ...runtime.Object) client.Client { if err := monitoringv1.AddToScheme(s); err != nil { logrus.Error(err) } - if err := cluster_v1beta1.AddToScheme(s); err != nil { + if err := cluster_v1alpha1.AddToScheme(s); err != nil { logrus.Error(err) } if err := ocp_configv1.AddToScheme(s); err != nil { @@ -566,6 +583,13 @@ func UninstallStorageCluster(cluster *corev1.StorageCluster, kubeconfig ...strin return nil, true, err } + if cluster.Spec.DeleteStrategy.Type == corev1.UninstallAndWipeStorageClusterStrategyType { + if err := validateNodeWiper(cluster, defaultNodeWiperValidationTimeout, defaultNodeWiperValidationInterval, false); err != nil { + logrus.Errorf("Failed to validate node wiper: Err: [%v]", err) + return nil, true, err + } + } + return nil, false, nil } @@ -576,6 +600,169 @@ func UninstallStorageCluster(cluster *corev1.StorageCluster, kubeconfig ...strin return nil } +func validateNodeWiper(cluster *corev1.StorageCluster, timeout time.Duration, interval time.Duration, checkRunningState bool) error { + + logrus.Debugf("Validating NodeWiper pods") + labels := map[string]string{} + labels["name"] = "px-node-wiper" + + // Get storage node list + expectedPxNodeList, err := GetExpectedPxNodeList(cluster) + if err != nil { + return fmt.Errorf("failed to get expected storage node list: Err: [%v]", err) + } + expectedPxNodeNameList := ConvertNodeListToNodeNameList(expectedPxNodeList) + + // Validate the pods are running & matches count with storage nodes + f := func() (interface{}, bool, error) { + pods, err := coreops.Instance().GetPods(cluster.Namespace, labels) + if err != nil || pods == nil { + return nil, true, fmt.Errorf("failed to get NodeWiper pods for StorageCluster [%s]: Err: [%v]", cluster.Name, err) + } + if len(pods.Items) != len(expectedPxNodeNameList) { + return nil, true, fmt.Errorf("expected pods: [%v]. actual pods: Err: [%v]", len(expectedPxNodeNameList), len(pods.Items)) + } + logrus.Debugf("NodeWiper pod count matches storageNodes: [%d]", len(pods.Items)) + return nil, false, nil + } + if _, err := task.DoRetryWithTimeout(f, timeout, interval); err != nil { + return fmt.Errorf("failed to match NodeWiper pod count for StorageCluster [%s]: Err: [%v]", cluster.Name, err) + } + + pods, err := coreops.Instance().GetPods(cluster.Namespace, labels) + if err != nil { + return fmt.Errorf("failed to get NodeWiper pods for StorageCluster [%s]: Err: [%v]", cluster.Name, err) + } + if checkRunningState { + var podsReady []string + var podsNotReady []string + var wg sync.WaitGroup + + for _, pod := range pods.Items { + wg.Add(1) + go func(p v1.Pod) { + defer wg.Done() + f := func() (interface{}, bool, error) { + logrus.Debugf("NodeWiper pod [%s] ; State: [%s]", p.Name, p.Status.Phase) + if !coreops.Instance().IsPodRunning(p) { + return nil, true, fmt.Errorf("err: NodeWiper pod [%s] is not running yet", p.Name) + } + return nil, false, nil + } + if _, err := task.DoRetryWithTimeout(f, timeout, interval/2); err != nil { + logrus.Errorf("err: NodeWiper pod [%s] timed out to be ready", p.Name) + podsNotReady = append(podsNotReady, p.Name) + } else { + logrus.Infof("NodeWiper pod [%s] is Running!", p.Name) + podsReady = append(podsReady, p.Name) + } + }(pod) + } + wg.Wait() + + if len(podsReady) != len(expectedPxNodeNameList) { + return fmt.Errorf("failed to get following NodeWiper pods ready on storageNodes: Err: [%s]", podsNotReady) + } + logrus.Debugf("All NodeWiper pods are ready on storageNodes: [%s]", podsReady) + } + + // Validate images are correct + opVersion, err := GetPxOperatorVersion() + if err != nil { + return fmt.Errorf("failed to get operator version, Err: %v", err) + } + k8sVersion, err := GetK8SVersion() + if err != nil { + return fmt.Errorf("failed to get k8s version, Err: %v", err) + } + + // check if px-versions config-map exists + var pxImageList map[string]string + config, _ := coreops.Instance().GetConfigMap(pxVersionsConfigmapName, cluster.Namespace) + if config != nil { + logrus.Debugf("px-versions config-map found, fetching images from config-map") + pxImageList, err = GetImagesFromConfigMap(config) + if err != nil { + return fmt.Errorf("failed to get images from config-map: Err: [%v]", err) + } + } else { + pxSpecURL := reconstructSpecURL(cluster) + pxImageList, err = GetImagesFromVersionURL(pxSpecURL, k8sVersion) + if err != nil { + return fmt.Errorf("failed to get images from version URL: Err: [%v]", err) + } + } + + pxVersion := GetPortworxVersion(cluster) + + var nodeWiperImage string + if opVersion.GreaterThanOrEqual(opVer23_10_2) { + if pxVersion.GreaterThanOrEqual(pxVer3_1) { + nodeWiperImage = cluster.Spec.Image + } else { + nodeWiperImage = pxImageList["nodeWiper"] + } + } else if opVersion.LessThan(opVer23_10_2) { + if pxVersion.LessThan(pxVer3_1) { + nodeWiperImage = pxImageList["nodeWiper"] + } else { + nodeWiperImage = defaultNodeWiperImage + } + } + logrus.Debugf("Expected nodeWiper image: [%s]", nodeWiperImage) + err = validateContainerImageInsidePods(cluster, nodeWiperImage, "px-node-wiper", pods) + if err != nil { + return fmt.Errorf("failed to validate NodeWiper image: Err: [%v]", err) + } + logrus.Debugf("NodeWiper images match!") + + return nil +} + +func GetImagesFromConfigMap(config *v1.ConfigMap) (map[string]string, error) { + pxImageList := map[string]string{} + versionData, ok := config.Data[VersionConfigMapKey] + if !ok { + // If the exact key does not exist, just take the first one + // as only one key is expected + for _, value := range config.Data { + versionData = value + break + } + } + // We try to look for key:value pairs in the configmap data + // If the value is not found, we ignore it + for _, line := range strings.Split(versionData, "\n") { + splitLine := strings.SplitN(strings.TrimSpace(line), ":", 2) + if len(splitLine) != 2 { + continue + } + key, value := splitLine[0], splitLine[1] + pxImageList[key] = strings.TrimSpace(value) + } + + return pxImageList, nil +} + +func reconstructSpecURL(cluster *corev1.StorageCluster) string { + var pxUrl string + pxImage := cluster.Spec.Image + pxVersionStr := strings.Split(pxImage, ":")[len(strings.Split(pxImage, ":"))-1] + _, err := version.NewSemver(pxVersionStr) + if err != nil { + logrus.WithError(err).Warnf("Invalid PX version [%s] extracted from image name", pxVersionStr) + for _, env := range cluster.Spec.Env { + if env.Name == PxReleaseManifestURLEnvVarName { + pxUrl = strings.TrimSuffix(env.Value, "/version") + } + } + } else { + pxUrl = fmt.Sprintf("https://install.portworx.com/%s", pxVersionStr) + } + logrus.Debugf("Reconstructed PX spec URL: [%s]", pxUrl) + return pxUrl +} + func validateTelemetrySecret(cluster *corev1.StorageCluster, timeout, interval time.Duration, force bool) error { t := func() (interface{}, bool, error) { secret, err := coreops.Instance().GetSecret("pure-telemetry-certs", cluster.Namespace) @@ -1623,7 +1810,7 @@ func GetExpectedPxNodeList(cluster *corev1.StorageCluster) ([]v1.Node, error) { NodeAffinity: cluster.Spec.Placement.NodeAffinity.DeepCopy(), } } else { - if IsK3sCluster() || IsPxDeployedOnMaster(cluster) { + if IsK3sOrRke2Cluster() || IsPxDeployedOnMaster(cluster) { runOnMaster = true } @@ -1702,8 +1889,8 @@ func GetFullVersion() (*version.Version, string, error) { return ver, "", err } -// IsK3sCluster returns true or false, based on this kubernetes cluster is k3s or not -func IsK3sCluster() bool { +// IsK3sOrRke2Cluster returns true or false, based on this kubernetes cluster is k3s or rke2 or not +func IsK3sOrRke2Cluster() bool { // Get k8s version ext _, ext, _ := GetFullVersion() @@ -2958,6 +3145,7 @@ func validatePvcControllerPorts(cluster *corev1.StorageCluster, pvcControllerDep return nil, true, fmt.Errorf("failed to get %s deployment pods, Err: %v", pvcControllerDeployment.Name, err) } + opVersion, err := GetPxOperatorVersion() numberOfPods := 0 // Go through every PVC Controller pod and look for --port and --secure-port commands in portworx-pvc-controller-manager pods and match it to the pvc-controller-port and pvc-controller-secure-port passed in StorageCluster annotations for _, pod := range pods { @@ -2968,8 +3156,8 @@ func validatePvcControllerPorts(cluster *corev1.StorageCluster, pvcControllerDep for _, containerCommand := range container.Command { if strings.Contains(containerCommand, "--secure-port") { if len(pvcSecurePort) == 0 { - if isAKS(cluster) { - if strings.Split(containerCommand, "=")[1] != AksPVCControllerSecurePort { + if isAKS(cluster) || (err == nil && opVersion.GreaterThanOrEqual(opVer24_1_0) && IsK3sOrRke2Cluster()) { + if strings.Split(containerCommand, "=")[1] != CustomPVCControllerSecurePort { return nil, true, fmt.Errorf("failed to validate secure-port, secure-port is missing in the PVC Controler pod %s", pod.Name) } } else { @@ -3322,7 +3510,7 @@ func ValidateSecurity(cluster *corev1.StorageCluster, previouslyEnabled bool, ti // ValidateSecurityEnabled validates PX Security components are enabled/running as expected func ValidateSecurityEnabled(cluster *corev1.StorageCluster, storkDp *appsv1.Deployment, timeout, interval time.Duration) error { - logrus.Info("Validate PX Security components are enabled") + logrus.Info("Validate PX Security components are enabled...") t := func() (interface{}, bool, error) { // Validate Stork ENV vars, if Stork is enabled @@ -3365,12 +3553,13 @@ func ValidateSecurityEnabled(cluster *corev1.StorageCluster, storkDp *appsv1.Dep return fmt.Errorf("failed to validate PX Auth is enabled on PX nodes, Err: %v", err) } + logrus.Info("Successfully validated PX Security components are enabled") return nil } // ValidateSecurityDisabled validates PX Security components are disabled/uninstalled as expected func ValidateSecurityDisabled(cluster *corev1.StorageCluster, storkDp *appsv1.Deployment, previouslyEnabled bool, timeout, interval time.Duration) error { - logrus.Info("Validate PX Security components are not disabled") + logrus.Info("Validate PX Security components are disabled/uninstalled...") t := func() (interface{}, bool, error) { // Validate Stork ENV vars, if Stork is enabled @@ -3428,6 +3617,7 @@ func ValidateSecurityDisabled(cluster *corev1.StorageCluster, storkDp *appsv1.De return fmt.Errorf("failed to validate PX Auth is disabled on PX nodes, Err: %v", err) } + logrus.Info("Successfully validated PX Security components are disabled/uninstalled") return nil } diff --git a/vendor/github.com/libopenstorage/operator/pkg/util/util.go b/vendor/github.com/libopenstorage/operator/pkg/util/util.go index 6a41f6432..3d715cb79 100644 --- a/vendor/github.com/libopenstorage/operator/pkg/util/util.go +++ b/vendor/github.com/libopenstorage/operator/pkg/util/util.go @@ -37,8 +37,10 @@ const ( FailedValidationReason = "FailedValidation" // FailedComponentReason is added to an event when setting up or removing a component fails. FailedComponentReason = "FailedComponent" - // UpdatePausedReason is added to an event when operator pauses update of the storage cluster. + // UpdatePausedReason is added to an event when operator pauses update of the storage cluster or node. UpdatePausedReason = "UpdatePaused" + // FailedToEvictVM indicates that the eviction of a virtual machine failed during PX update + FailedToEvictVM = "FailedToEvictVM" // ClusterOnlineReason is added to an event when a cluster comes online ClusterOnlineReason = "ClusterOnline" // MigrationPendingReason is added to an event when the migration is in pending state. @@ -81,6 +83,10 @@ const ( StoragePartitioningEnvKey = "ENABLE_ASG_STORAGE_PARTITIONING" // DefaultStorageClusterUniqueLabelKey is the controller revision hash of storage cluster DefaultStorageClusterUniqueLabelKey = apps.ControllerRevisionHashLabelKey + // InvalidMinAvailable is added to an event when minAvailable value for PodDisruptionBudget provided by the user is invalid + InvalidMinAvailable = "InvalidMinAvailable" + // ValidMinAvailable is added to an event when minAvailable value for PodDisruptionBudget is valid + ValidMinAvailable = "ValidMinAvailable" ) var ( diff --git a/vendor/github.com/libopenstorage/stork/pkg/apis/stork/v1alpha1/action.go b/vendor/github.com/libopenstorage/stork/pkg/apis/stork/v1alpha1/action.go index f3d62aec5..4f21435d9 100644 --- a/vendor/github.com/libopenstorage/stork/pkg/apis/stork/v1alpha1/action.go +++ b/vendor/github.com/libopenstorage/stork/pkg/apis/stork/v1alpha1/action.go @@ -34,27 +34,108 @@ type Action struct { // ActionSpec specifies the type of Action type ActionSpec struct { - ActionType ActionType `json:"actionType"` + ActionType ActionType `json:"actionType"` + ActionParameter ActionParameter `json:"actionParameter"` } // ActionType lists the various actions that can be performed type ActionType string const ( - // to start apps on destination cluster + // ActionTypeNearSyncFailover action type to start apps on destination cluster in nearsync DR case + ActionTypeNearSyncFailover ActionType = "nearsyncFailover" + // ActionTypeFailover action type to start apps in destination cluster for sync and async DRs ActionTypeFailover ActionType = "failover" + // ActionTypeFailback action type to migrate back to source and start apps in source + ActionTypeFailback ActionType = "failback" ) -// ActionStatus is the current status of the Action -type ActionStatus string +// ActionParameter lists the parameters required to perform the action +type ActionParameter ActionParameterItem + +type ActionParameterItem struct { + FailoverParameter FailoverParameter `json:"failoverParameter,omitempty"` + FailbackParameter FailbackParameter `json:"failbackParameter,omitempty"` +} + +type FailoverParameter struct { + FailoverNamespaces []string `json:"failoverNamespaces"` + MigrationScheduleReference string `json:"migrationScheduleReference"` + SkipSourceOperations *bool `json:"skipSourceOperations"` +} + +type FailbackParameter struct { + FailbackNamespaces []string `json:"failbackNamespaces"` + MigrationScheduleReference string `json:"migrationScheduleReference"` +} + +// ActionStatusType is the current status of the Action +type ActionStatusType string const ( + // ActionStatusInitial means Action CR has been created + ActionStatusInitial ActionStatusType = "" // ActionStatusScheduled means Action is yet to start - ActionStatusScheduled ActionStatus = "Scheduled" + ActionStatusScheduled ActionStatusType = "Scheduled" // ActionStatusInProgress means Action is in progress - ActionStatusInProgress ActionStatus = "In-Progress" + ActionStatusInProgress ActionStatusType = "In-Progress" // ActionStatusFailed means that Action has failed - ActionStatusFailed ActionStatus = "Failed" + ActionStatusFailed ActionStatusType = "Failed" // ActionStatusSuccessful means Action has completed successfully - ActionStatusSuccessful ActionStatus = "Successful" + ActionStatusSuccessful ActionStatusType = "Successful" + // ActionStatusRollbackSuccessful means Rollback has completed successfully + ActionStatusRollbackSuccessful ActionStatusType = "RollbackSuccessful" + // ActionStatusRollbackInProgress means Rollback failed + ActionStatusRollbackFailed ActionStatusType = "RollbackFailed" ) + +// ActionStageType is the stage of the action +type ActionStageType string + +const ( + // ActionStageInitial for when action is created + ActionStageInitial ActionStageType = "" + // ActionStageScaleDownDestination for scaling down apps in destination + ActionStageScaleDownDestination ActionStageType = "ScaleDownDestination" + // ActionStageScaleDownSource for scaling down apps in source + ActionStageScaleDownSource ActionStageType = "ScaleDownSource" + // ActionStageScaleUpDestination for scaling apps in destination + ActionStageScaleUpDestination ActionStageType = "ScaleUpDestination" + // ActionStageScaleUpSource for scaling apps in source + ActionStageScaleUpSource ActionStageType = "ScaleUpSource" + // ActionStageLastMileMigration for doing a last migration before failover/failback to ensure data integrity + ActionStageLastMileMigration ActionStageType = "LastMileMigration" + // ActionStageWaitAfterScaleDown for waiting after scaling down of apps + ActionStageWaitAfterScaleDown ActionStageType = "WaitAfterScaleDown" + // ActionStageFinal is the final stage for action + ActionStageFinal ActionStageType = "Final" +) + +// ActionStatus is the status of action operation +type ActionStatus struct { + Stage ActionStageType `json:"stage"` + Status ActionStatusType `json:"status"` + FinishTimestamp meta.Time `json:"finishTimestamp"` + Summary *ActionSummary `json:"summary"` + Reason string `json:"reason"` +} + +// ActionSummary lists the summary of the action +type ActionSummary ActionSummaryItem + +// ActionSummaryItem has summary for each action type +type ActionSummaryItem struct { + FailoverSummaryItem []*FailoverSummary `json:"failoverSummary,omitempty"` + FailbackSummaryItem []*FailbackSummary `json:"failbackSummary,omitempty"` +} + +type FailoverSummary struct { + Namespace string `json:"namespace"` + Status ActionStatusType `json:"status"` + Reason string `json:"reason"` +} +type FailbackSummary struct { + Namespace string `json:"namespace"` + Status ActionStatusType `json:"status"` + Reason string `json:"reason"` +} diff --git a/vendor/github.com/libopenstorage/stork/pkg/migration/controllers/migrationschedule.go b/vendor/github.com/libopenstorage/stork/pkg/migration/controllers/migrationschedule.go index c77b76840..13e1245a5 100644 --- a/vendor/github.com/libopenstorage/stork/pkg/migration/controllers/migrationschedule.go +++ b/vendor/github.com/libopenstorage/stork/pkg/migration/controllers/migrationschedule.go @@ -149,50 +149,58 @@ func (m *MigrationScheduleController) handle(ctx context.Context, migrationSched err.Error()) return nil } - if migrationSchedule.Spec.AutoSuspend { - var remoteMigrSched *stork_api.MigrationSchedule - remoteMigrSched, err = remoteOps.GetMigrationSchedule(migrationSchedule.Name, migrationSchedule.Namespace) - if errors.IsNotFound(err) { - namespace, err := core.Instance().GetNamespace(migrationSchedule.Namespace) - if err != nil { - return err - } - namespace.ResourceVersion = "" - _, err = coreOps.CreateNamespace(namespace) - if err != nil && !errors.IsAlreadyExists(err) { - return err - } - // create new migrationschedule on remote cluster - remoteMigrSched = migrationSchedule.DeepCopy() - remoteMigrSched.ResourceVersion = "" - remoteMigrSched.UID = "" - if remoteMigrSched.Annotations == nil { - remoteMigrSched.Annotations = make(map[string]string) - } - remoteMigrSched.Annotations[StorkMigrationScheduleCopied] = "true" - suspend := true - remoteMigrSched.Spec.Suspend = &suspend - remoteMigrSched.Status = stork_api.MigrationScheduleStatus{} - if _, err := remoteOps.CreateMigrationSchedule(remoteMigrSched); err != nil { - return err - } - } else if err != nil { + // create migrationSchedule in remote cluster irrespective of autoSuspend value + var remoteMigrSched *stork_api.MigrationSchedule + remoteMigrSched, err = remoteOps.GetMigrationSchedule(migrationSchedule.Name, migrationSchedule.Namespace) + if errors.IsNotFound(err) { + namespace, err := core.Instance().GetNamespace(migrationSchedule.Namespace) + if err != nil { return err } - if remoteMigrSched.Status.ApplicationActivated { - suspend := true - migrationSchedule.Spec.Suspend = &suspend - msg := "Suspending migration schedule since migrated apps on remote cluster are active" - m.recorder.Event(migrationSchedule, - v1.EventTypeWarning, - "Suspended", - msg) - log.MigrationScheduleLog(migrationSchedule).Warn(msg) - // deactivate apps in namespace - // TODO: suspend deploy/sts,crds - return m.client.Update(context.TODO(), migrationSchedule) + namespace.ResourceVersion = "" + _, err = coreOps.CreateNamespace(namespace) + if err != nil && !errors.IsAlreadyExists(err) { + return err + } + // create new migrationSchedule on remote cluster + var remoteMigrSchedObj = migrationSchedule.DeepCopy() + remoteMigrSchedObj.ResourceVersion = "" + remoteMigrSchedObj.UID = "" + if remoteMigrSchedObj.Annotations == nil { + remoteMigrSchedObj.Annotations = make(map[string]string) + } + remoteMigrSchedObj.Annotations[StorkMigrationScheduleCopied] = "true" + suspend := true + remoteMigrSchedObj.Spec.Suspend = &suspend + remoteMigrSchedObj.Status = stork_api.MigrationScheduleStatus{} + if remoteMigrSched, err = remoteOps.CreateMigrationSchedule(remoteMigrSchedObj); err != nil { + return err } + } else if err != nil { + return err + } + if remoteMigrSched.GetAnnotations() == nil || remoteMigrSched.GetAnnotations()[StorkMigrationScheduleCopied] != "true" { + // handling the corner case where user has already created a migrationSchedule with the same name + // and namespace in remote cluster before upgrading to stork 24.2.0 + // we will fail the migrationSchedule in this case + err = fmt.Errorf("a non static-copy migrationSchedule with the same name and namespace found in the remote cluster") + m.recorder.Event(migrationSchedule, + v1.EventTypeWarning, + string(stork_api.MigrationStatusFailed), + err.Error()) + return err + } + if migrationSchedule.Spec.AutoSuspend && remoteMigrSched.Status.ApplicationActivated { + suspend := true + migrationSchedule.Spec.Suspend = &suspend + msg := "Suspending migration schedule since migrated apps on remote cluster are active" + m.recorder.Event(migrationSchedule, + v1.EventTypeWarning, + "Suspended", + msg) + log.MigrationScheduleLog(migrationSchedule).Warn(msg) + return m.client.Update(context.TODO(), migrationSchedule) } } // First update the status of any pending migrations diff --git a/vendor/github.com/libopenstorage/stork/pkg/resourceutils/listResources.go b/vendor/github.com/libopenstorage/stork/pkg/resourceutils/listResources.go new file mode 100644 index 000000000..063e1af9d --- /dev/null +++ b/vendor/github.com/libopenstorage/stork/pkg/resourceutils/listResources.go @@ -0,0 +1,61 @@ +package resourceutils + +import ( + "context" + "fmt" + "strings" + + "github.com/libopenstorage/stork/pkg/resourcecollector" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime/schema" + k8sdynamic "k8s.io/client-go/dynamic" + "k8s.io/client-go/rest" +) + +func GetGVKsRelevantForScaling() []metav1.GroupVersionKind { + return []metav1.GroupVersionKind{ + {Group: "apps", Version: "v1", Kind: "StatefulSet"}, + {Group: "apps", Version: "v1", Kind: "Deployment"}, + {Group: "apps", Version: "v1", Kind: "ReplicaSet"}, + {Group: "apps.openshift.io", Version: "v1", Kind: "DeploymentConfig"}, + {Group: "ibp.com", Version: "v1alpha1", Kind: "IBPPeer"}, + {Group: "ibp.com", Version: "v1alpha1", Kind: "IBPCA"}, + {Group: "ibp.com", Version: "v1alpha1", Kind: "IBPOrderer"}, + {Group: "ibp.com", Version: "v1alpha1", Kind: "IBPConsole"}, + } +} + +var cronJobGVK = metav1.GroupVersionKind{Group: "batch", Version: "v1", Kind: "CronJob"} + +func GenerateDynamicClientForGVK(resourceType metav1.GroupVersionKind, namespace string, config *rest.Config) (k8sdynamic.ResourceInterface, error) { + var client k8sdynamic.ResourceInterface + ruleset := resourcecollector.GetDefaultRuleSet() + configClient, err := k8sdynamic.NewForConfig(config) + if err != nil { + return nil, err + } + gvk := schema.FromAPIVersionAndKind(resourceType.Group+"/"+resourceType.Version, resourceType.Kind) + resourceInterface := configClient.Resource(gvk.GroupVersion().WithResource(ruleset.Pluralize(strings.ToLower(gvk.Kind)))) + client = resourceInterface.Namespace(namespace) + return client, nil +} + +func ListResourcesByGVK(resourceType metav1.GroupVersionKind, namespace string, config *rest.Config) (*unstructured.UnstructuredList, k8sdynamic.ResourceInterface, error) { + //Setup dynamic client to get resources based on gvk + client, err := GenerateDynamicClientForGVK(resourceType, namespace, config) + if err != nil { + return nil, nil, err + } + opts := &metav1.ListOptions{ + TypeMeta: metav1.TypeMeta{ + Kind: resourceType.Kind, + APIVersion: resourceType.Group + "/" + resourceType.Version}, + } + objects, err := client.List(context.TODO(), *opts) + if err != nil && !errors.IsNotFound(err) { + return nil, nil, fmt.Errorf("error listing the resources of the type: %v in namespace: %v -> %v", strings.ToLower(resourceType.String()), namespace, err) + } + return objects, client, nil +} diff --git a/vendor/github.com/libopenstorage/stork/pkg/resourceutils/scaledownduringdr.go b/vendor/github.com/libopenstorage/stork/pkg/resourceutils/scaledownduringdr.go new file mode 100644 index 000000000..1ef168449 --- /dev/null +++ b/vendor/github.com/libopenstorage/stork/pkg/resourceutils/scaledownduringdr.go @@ -0,0 +1,272 @@ +package resourceutils + +import ( + "context" + "fmt" + "strconv" + "strings" + + "github.com/libopenstorage/stork/pkg/apis/stork/v1alpha1" + migration "github.com/libopenstorage/stork/pkg/migration/controllers" + "github.com/portworx/sched-ops/k8s/core" + storkops "github.com/portworx/sched-ops/k8s/stork" + log "github.com/sirupsen/logrus" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + k8sdynamic "k8s.io/client-go/dynamic" + "k8s.io/client-go/rest" +) + +func ScaleDownGivenResources(namespaces []string, resourceMap map[string]map[metav1.GroupVersionKind]map[string]string, config *rest.Config) error { + storkClient, err := storkops.NewForConfig(config) + if err != nil { + return err + } + crdList, err := storkClient.ListApplicationRegistrations() + if err != nil { + return err + } + + for _, ns := range namespaces { + // 1. ApplicationResources + for _, gvk := range GetGVKsRelevantForScaling() { + resources, dynamicClient, err := ListResourcesByGVK(gvk, ns, config) + if err != nil { + return err + } + if resources == nil { + continue + } + for _, object := range resources.Items { + if _, present := resourceMap[ns][gvk][object.GetName()]; present { + err := scaleDownApplicationResource(dynamicClient, object, gvk) + if err != nil { + return err + } + } + } + } + + // 2. CronJobs + resources, dynamicClient, err := ListResourcesByGVK(cronJobGVK, ns, config) + if err != nil { + return err + } + if resources != nil { + for _, object := range resources.Items { + if _, present := resourceMap[ns][cronJobGVK][object.GetName()]; present { + err := scaleCronJob(dynamicClient, object, true) + if err != nil { + return err + } + } + } + } + + // 3. CRD Resources + for _, applicationRegistration := range crdList.Items { + for _, crd := range applicationRegistration.Resources { + gvk := crd.GroupVersionKind + resources, dynamicClient, err := ListResourcesByGVK(gvk, ns, config) + if err != nil { + return err + } + if resources == nil { + continue + } + for _, object := range resources.Items { + if _, present := resourceMap[ns][gvk][object.GetName()]; present { + err := scaleDownCRDResource(dynamicClient, object, crd, config) + if err != nil { + return err + } + } + } + } + } + } + return nil +} + +func scaleDownApplicationResource(dynamicClient k8sdynamic.ResourceInterface, object unstructured.Unstructured, resourceType metav1.GroupVersionKind) error { + content := object.UnstructuredContent() + currentReplicas, found, err := unstructured.NestedInt64(content, "spec", "replicas") + if err != nil { + return err + } + if !found { + currentReplicas = 1 + } + annotations, found, err := unstructured.NestedStringMap(content, "metadata", "annotations") + if err != nil { + return err + } + if !found { + annotations = make(map[string]string) + } + migrationReplicasAnnotationValue, replicaAnnotationIsPresent := annotations[migration.StorkMigrationReplicasAnnotation] + if currentReplicas == 0 && replicaAnnotationIsPresent { + //If the actual replica count is 0 and migrationReplicas annotation is more than 0, then don't override the migrationReplicaAnnotation value. + migrationReplicas, err := strconv.ParseInt(migrationReplicasAnnotationValue, 10, 64) + if err != nil { + return err + } + if migrationReplicas > 0 { + currentReplicas = migrationReplicas + } + } + //we set the actual replica count to 0 to scale down the resource on target cluster + err = unstructured.SetNestedField(content, int64(0), "spec", "replicas") + if err != nil { + return err + } + annotations[migration.StorkMigrationReplicasAnnotation] = strconv.FormatInt(currentReplicas, 10) + err = unstructured.SetNestedStringMap(content, annotations, "metadata", "annotations") + if err != nil { + return err + } + opts := &metav1.UpdateOptions{ + TypeMeta: metav1.TypeMeta{ + Kind: resourceType.Kind, + APIVersion: resourceType.Group + "/" + resourceType.Version}, + } + _, err = dynamicClient.Update(context.TODO(), &object, *opts, "") + if err != nil { + return fmt.Errorf("unable to update resource %v %v/%v: %v", strings.ToLower(resourceType.Kind), object.GetNamespace(), object.GetName(), err) + } + log.Infof("successfully updated resource %v %v/%v \n", strings.ToLower(resourceType.Kind), object.GetNamespace(), object.GetName()) + return nil +} + +func scaleCronJob(dynamicClient k8sdynamic.ResourceInterface, object unstructured.Unstructured, suspendValue bool) error { + content := object.UnstructuredContent() + err := unstructured.SetNestedField(content, suspendValue, "spec", "suspend") + if err != nil { + return err + } + opts := &metav1.UpdateOptions{ + TypeMeta: metav1.TypeMeta{ + Kind: cronJobGVK.Kind, + APIVersion: cronJobGVK.Group + "/" + cronJobGVK.Version}, + } + _, err = dynamicClient.Update(context.TODO(), &object, *opts, "") + if err != nil { + return fmt.Errorf("unable to update resource %v %v/%v: %v", strings.ToLower(cronJobGVK.Kind), object.GetNamespace(), object.GetName(), err) + } + log.Infof("successfully updated resource %v %v/%v \n", strings.ToLower(cronJobGVK.Kind), object.GetNamespace(), object.GetName()) + return nil +} + +func scaleDownCRDResource(dynamicClient k8sdynamic.ResourceInterface, object unstructured.Unstructured, crd v1alpha1.ApplicationResource, config *rest.Config) error { + content := object.UnstructuredContent() + annotations, found, err := unstructured.NestedStringMap(content, "metadata", "annotations") + if err != nil { + return err + } + if !found { + annotations = make(map[string]string) + } + if crd.SuspendOptions.Path != "" { + crd.NestedSuspendOptions = append(crd.NestedSuspendOptions, crd.SuspendOptions) + } + if len(crd.NestedSuspendOptions) == 0 { + return nil + } + for _, suspend := range crd.NestedSuspendOptions { + specPath := strings.Split(suspend.Path, ".") + if len(specPath) > 1 { + var val string + SuspendAnnotationValue, suspendAnnotationIsPresent := annotations[migration.StorkAnnotationPrefix+suspend.Path] + var disableVersion interface{} + if suspend.Type == "int" { + currentValue, found, err := unstructured.NestedInt64(content, specPath...) + if err != nil || !found { + return fmt.Errorf("unable to find suspend path, err: %v", err) + } + disableVersion = int64(0) + if currentValue == 0 && suspendAnnotationIsPresent { + // suspendAnnotation has value set as {currVal + "," + suspend.Value} + // we need to extract only the currVal from it + annotationValue := strings.Split(SuspendAnnotationValue, ",")[0] + intValue, err := strconv.ParseInt(annotationValue, 10, 64) + if err != nil { + return err + } + if intValue > 0 { + // If the actual value is 0 and suspend annotation value is more than 0, + // then don't override the annotation. + currentValue = intValue + } + } + val = fmt.Sprintf("%v", currentValue) + } else if suspend.Type == "string" { + currentValue, _, err := unstructured.NestedString(content, specPath...) + if err != nil { + return fmt.Errorf("unable to find suspend path, err: %v", err) + } + disableVersion = suspend.Value + if currentValue == suspend.Value && suspendAnnotationIsPresent { + annotationValue := strings.Split(SuspendAnnotationValue, ",")[0] + if annotationValue != "" { + // If the actual value is equal to suspend.Value (i.e. 0 value) and suspend path annotation value is not an empty string, + // then don't override the annotation + currentValue = annotationValue + } + } + val = currentValue + } else if suspend.Type == "bool" { + if val, err := strconv.ParseBool(suspend.Value); err != nil { + disableVersion = true + } else { + log.Warnf("failed to parse suspend.Value %v. going ahead with default bool disable value of true", suspend.Value) + disableVersion = val + } + } else { + return fmt.Errorf("invalid type %v to suspend cr", suspend.Type) + } + // scale down the CRD resource by setting the suspendPath value to disableVersion + if err := unstructured.SetNestedField(content, disableVersion, specPath...); err != nil { + return err + } + annotations[migration.StorkAnnotationPrefix+suspend.Path] = val + "," + suspend.Value + } + } + err = unstructured.SetNestedStringMap(content, annotations, "metadata", "annotations") + if err != nil { + return err + } + opts := &metav1.UpdateOptions{ + TypeMeta: metav1.TypeMeta{ + Kind: crd.Kind, + APIVersion: crd.Group + "/" + crd.Version}, + } + _, err = dynamicClient.Update(context.TODO(), &object, *opts, "") + if err != nil { + return fmt.Errorf("unable to update resource %v %v/%v: %v", strings.ToLower(crd.Kind), object.GetNamespace(), object.GetName(), err) + } + log.Infof("successfully updated resource %v %v/%v \n", strings.ToLower(crd.Kind), object.GetNamespace(), object.GetName()) + + // Delete pods corresponding to the CRD as well + if crd.PodsPath == "" { + return nil + } + podPath := strings.Split(crd.PodsPath, ".") + pods, found, err := unstructured.NestedStringSlice(object.Object, podPath...) + if err != nil { + return fmt.Errorf("error getting pods for %v %v/%v : %v", strings.ToLower(crd.Kind), object.GetNamespace(), object.GetName(), err) + } + if !found { + return nil + } + coreClient, err := core.NewForConfig(config) + if err != nil { + return err + } + for _, pod := range pods { + err = coreClient.DeletePod(object.GetNamespace(), pod, true) + if err != nil { + return fmt.Errorf("error deleting pod %v for %v %v/%v : %v", pod, strings.ToLower(crd.Kind), object.GetNamespace(), object.GetName(), err) + } + } + return nil +} diff --git a/vendor/github.com/libopenstorage/stork/pkg/resourceutils/scaleupduringdr.go b/vendor/github.com/libopenstorage/stork/pkg/resourceutils/scaleupduringdr.go new file mode 100644 index 000000000..c4d427210 --- /dev/null +++ b/vendor/github.com/libopenstorage/stork/pkg/resourceutils/scaleupduringdr.go @@ -0,0 +1,347 @@ +package resourceutils + +import ( + "context" + "encoding/json" + "fmt" + "strconv" + "strings" + + "github.com/libopenstorage/stork/pkg/apis/stork/v1alpha1" + migration "github.com/libopenstorage/stork/pkg/migration/controllers" + "github.com/libopenstorage/stork/pkg/resourcecollector" + "github.com/portworx/sched-ops/k8s/core" + storkops "github.com/portworx/sched-ops/k8s/stork" + log "github.com/sirupsen/logrus" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + k8sdynamic "k8s.io/client-go/dynamic" + "k8s.io/client-go/rest" +) + +func ScaleUpResourcesInNamespace(namespace string, dryRun bool, config *rest.Config) (map[metav1.GroupVersionKind]map[string]string, error) { + resourceReplicaMap := make(map[metav1.GroupVersionKind]map[string]string) + // 1. ApplicationResources + err := processActivatingApplicationResources(resourceReplicaMap, namespace, dryRun, config) + if err != nil { + return nil, err + } + // 2. CronJobs + err = processActivatingCronJobs(resourceReplicaMap, namespace, dryRun, config) + if err != nil { + return nil, err + } + // 3. CRD Resources + err = processActivatingCRDResources(resourceReplicaMap, namespace, dryRun, config) + if err != nil { + return nil, err + } + //4. Stash CM resources + if !dryRun { + // call this function only during actual scaleUp scenario + err = scaleUpStashCMResources(namespace, config) + if err != nil { + return nil, err + } + } + return resourceReplicaMap, nil +} + +func processActivatingApplicationResources(resourceReplicaMap map[metav1.GroupVersionKind]map[string]string, ns string, dryRun bool, config *rest.Config) error { + for _, gvk := range GetGVKsRelevantForScaling() { + //Initialise resourceKind -> resources/replicas maps + resourceReplicaMap[gvk] = make(map[string]string) + resources, dynamicClient, err := ListResourcesByGVK(gvk, ns, config) + if err != nil { + return err + } + if resources == nil { + continue + } + for _, object := range resources.Items { + content := object.UnstructuredContent() + replicaSetGVK := metav1.GroupVersionKind{Group: "apps", Version: "v1", Kind: "ReplicaSet"} + if gvk == replicaSetGVK { + ownerReferences, _, err := unstructured.NestedSlice(content, "metadata", "ownerReferences") + if err != nil { + return fmt.Errorf("error getting the ownerReferences for the replicaSet: %v/%v -> %v", object.GetNamespace(), object.GetName(), err) + } + if ownerReferences != nil { + // only collect replicaSets without owners + continue + } + } + annotations, found, err := unstructured.NestedStringMap(content, "metadata", "annotations") + if err != nil { + return fmt.Errorf("error getting the annotations of the resource %v %v/%v: %v", strings.ToLower(gvk.Kind), object.GetNamespace(), object.GetName(), err) + } + if !found { + continue + } + // only if replica annotation exists, we will be activating this resource + if val, present := annotations[migration.StorkMigrationReplicasAnnotation]; present { + if !dryRun { + // actual activation i.e. scaling up of resources is controlled by the dryRun flag + err := scaleUpApplicationResources(dynamicClient, object, val, gvk) + if err != nil { + return err + } + } + resourceReplicaMap[gvk][object.GetName()] = val + } + } + } + return nil +} + +func processActivatingCronJobs(resourceReplicaMap map[metav1.GroupVersionKind]map[string]string, ns string, dryRun bool, config *rest.Config) error { + resourceReplicaMap[cronJobGVK] = make(map[string]string) + resources, dynamicClient, err := ListResourcesByGVK(cronJobGVK, ns, config) + if err != nil { + return err + } + if resources != nil { + for _, object := range resources.Items { + content := object.UnstructuredContent() + annotations, found, err := unstructured.NestedStringMap(content, "metadata", "annotations") + if err != nil { + return fmt.Errorf("error getting the annotations of the resource %v %v/%v: %v", strings.ToLower(cronJobGVK.Kind), object.GetNamespace(), object.GetName(), err) + } + if !found { + continue + } + // pick only if stork-migrated annotation exists in the resource + if val, present := annotations[migration.StorkMigrationAnnotation]; present { + if !dryRun { + err := scaleCronJob(dynamicClient, object, false) + if err != nil { + return err + } + } + resourceReplicaMap[cronJobGVK][object.GetName()] = val + } + } + } + return nil +} + +func processActivatingCRDResources(resourceReplicaMap map[metav1.GroupVersionKind]map[string]string, ns string, dryRun bool, config *rest.Config) error { + storkClient, err := storkops.NewForConfig(config) + if err != nil { + return err + } + crdList, err := storkClient.ListApplicationRegistrations() + if err != nil { + return err + } + for _, applicationRegistration := range crdList.Items { + for _, crd := range applicationRegistration.Resources { + gvk := crd.GroupVersionKind + // Initialise namespace/resourceKind -> resources/replicas maps + resourceReplicaMap[gvk] = make(map[string]string) + resources, dynamicClient, err := ListResourcesByGVK(gvk, ns, config) + if err != nil { + return err + } + if resources == nil { + continue + } + for _, object := range resources.Items { + content := object.UnstructuredContent() + annotations, found, err := unstructured.NestedStringMap(content, "metadata", "annotations") + if err != nil { + return fmt.Errorf("error getting the annotations of the resource %v %v/%v: %v", strings.ToLower(gvk.Kind), object.GetNamespace(), object.GetName(), err) + } + if !found { + continue + } + // only if replica annotation exists, we will be activating this resource + if crd.SuspendOptions.Path != "" { + crd.NestedSuspendOptions = append(crd.NestedSuspendOptions, crd.SuspendOptions) + } + if len(crd.NestedSuspendOptions) == 0 { + continue + } + for _, suspend := range crd.NestedSuspendOptions { + specPath := strings.Split(suspend.Path, ".") + if len(specPath) > 1 { + var replicas interface{} + if suspend.Type == "int" || suspend.Type == "string" { + var suspendAnnotationValue string + if val, present := annotations[migration.StorkAnnotationPrefix+suspend.Path]; present { + suspendAnnotationValue = strings.Split(val, ",")[0] + resourceReplicaMap[gvk][object.GetName()] = suspendAnnotationValue + replicas = suspendAnnotationValue + if suspend.Type == "int" { + parsedReplicas, err := strconv.Atoi(suspendAnnotationValue) + if err != nil { + return fmt.Errorf("error parsing replicas for %v %v/%v: %v", strings.ToLower(crd.Kind), object.GetNamespace(), object.GetName(), err) + } + replicas = int64(parsedReplicas) + } + } else if val, present := annotations[migration.StorkMigrationCRDActivateAnnotation]; present { + suspendAnnotationValue = val + replicas = suspendAnnotationValue + if suspend.Type == "int" { + parsedReplicas, err := strconv.Atoi(suspendAnnotationValue) + if err != nil { + return fmt.Errorf("error parsing replicas for %v %v/%v: %v", strings.ToLower(crd.Kind), object.GetNamespace(), object.GetName(), err) + } + replicas = int64(parsedReplicas) + } + } else { + // Neither of the 2 relevant annotations found. So we will not be activating this resource + continue + } + if !dryRun { + err := scaleUpCRDResources(dynamicClient, object, crd.Kind, suspend, replicas) + if err != nil { + return err + } + } + resourceReplicaMap[gvk][object.GetName()] = suspendAnnotationValue + } else if suspend.Type == "bool" { + suspendVal, err := strconv.ParseBool(suspend.Value) + if err != nil { + return fmt.Errorf("invalid suspend.Value provided for resource Kind %v : %v", crd.Kind, err) + } + // pick only if stork-migrated annotation exists in the resource + if _, present := annotations[migration.StorkMigrationAnnotation]; present { + // since we want to activate the resource we will take opposite of the suspend value + replicas = !suspendVal + if !dryRun { + err := scaleUpCRDResources(dynamicClient, object, crd.Kind, suspend, replicas) + if err != nil { + return err + } + } + resourceReplicaMap[gvk][object.GetName()] = strconv.FormatBool(!suspendVal) + } + } + } + } + } + } + } + return nil +} + +func scaleUpApplicationResources(dynamicClient k8sdynamic.ResourceInterface, object unstructured.Unstructured, replicaAnnotationValue string, resourceType metav1.GroupVersionKind) error { + parsedReplicas, err := strconv.Atoi(replicaAnnotationValue) + if err != nil { + return fmt.Errorf("error parsing replicas annotation value for %v %v/%v: %v", strings.ToLower(resourceType.Kind), object.GetNamespace(), object.GetName(), err) + } + content := object.UnstructuredContent() + err = unstructured.SetNestedField(content, int64(parsedReplicas), "spec", "replicas") + if err != nil { + return err + } + opts := &metav1.UpdateOptions{ + TypeMeta: metav1.TypeMeta{ + Kind: resourceType.Kind, + APIVersion: resourceType.Group + "/" + resourceType.Version}, + } + _, err = dynamicClient.Update(context.TODO(), &object, *opts, "") + if err != nil { + return fmt.Errorf("unable to scale up resource %v %v/%v: %v", strings.ToLower(resourceType.Kind), object.GetNamespace(), object.GetName(), err) + } + log.Infof("successfully updated resource %v %v/%v \n", strings.ToLower(resourceType.Kind), object.GetNamespace(), object.GetName()) + return nil +} + +func scaleUpCRDResources(dynamicClient k8sdynamic.ResourceInterface, object unstructured.Unstructured, resourceKind string, suspend v1alpha1.SuspendOptions, replicaAnnotationValue interface{}) error { + specPath := strings.Split(suspend.Path, ".") + err := unstructured.SetNestedField(object.Object, replicaAnnotationValue, specPath...) + if err != nil { + return fmt.Errorf("error updating \"%v\" for %v %v/%v to %v : %v", suspend.Path, strings.ToLower(resourceKind), object.GetNamespace(), object.GetName(), replicaAnnotationValue, err) + } + _, err = dynamicClient.Update(context.TODO(), &object, metav1.UpdateOptions{}, "") + if err != nil { + return fmt.Errorf("error updating CR %v %v/%v: %v", strings.ToLower(resourceKind), object.GetNamespace(), object.GetName(), err) + } + log.Infof("Updated CR for %v %v/%v", strings.ToLower(resourceKind), object.GetNamespace(), object.GetName()) + return nil +} + +func scaleUpStashCMResources(namespace string, config *rest.Config) error { + pvcToPVCOwnerMapping := make(map[string][]metav1.OwnerReference) + // List the configmaps with label "stash-cr" enabled + coreClient, err := core.NewForConfig(config) + if err != nil { + return err + } + dynamicClient, err := k8sdynamic.NewForConfig(config) + if err != nil { + return err + } + configMaps, err := coreClient.ListConfigMap(namespace, metav1.ListOptions{LabelSelector: StashCRLabel}) + if err != nil { + return err + } + ruleset := resourcecollector.GetDefaultRuleSet() + // Create the CRs in the same namespace if those don't exist + for _, configMap := range configMaps.Items { + objBytes := []byte(configMap.Data[StashedCMCRKey]) + unstructuredObj := &unstructured.Unstructured{} + err := unstructuredObj.UnmarshalJSON(objBytes) + if err != nil { + return fmt.Errorf("error converting string to Unstructured object: %s", err.Error()) + } + resource := &metav1.APIResource{ + Name: ruleset.Pluralize(strings.ToLower(unstructuredObj.GetKind())), + Namespaced: len(unstructuredObj.GetNamespace()) > 0, + } + var resourceClient k8sdynamic.ResourceInterface + if resource.Namespaced { + resourceClient = dynamicClient.Resource( + unstructuredObj.GetObjectKind().GroupVersionKind().GroupVersion().WithResource(resource.Name)).Namespace(unstructuredObj.GetNamespace()) + } else { + resourceClient = dynamicClient.Resource( + unstructuredObj.GetObjectKind().GroupVersionKind().GroupVersion().WithResource(resource.Name)) + } + // Create the CR + _, err = resourceClient.Create(context.TODO(), unstructuredObj, metav1.CreateOptions{}) + if err != nil && !errors.IsAlreadyExists(err) { + if errors.IsAlreadyExists(err) { + log.Warnf("error creating resource %s/%s from stashed configmap : %v as it already exists\n", unstructuredObj.GetKind(), unstructuredObj.GetName(), err) + } else { + return fmt.Errorf("error creating resource %s/%s from stashed configmap : %v", unstructuredObj.GetKind(), unstructuredObj.GetName(), err) + } + } + // Get the CR + newResourceUnstructured, err := resourceClient.Get(context.TODO(), unstructuredObj.GetName(), metav1.GetOptions{}) + if err != nil { + return err + } + // Get the owner-references stored for PVCs and modify it to new resource's UID. + ownedPVCs := configMap.Data[StashedCMOwnedPVCKey] + nestedMap := make(map[string]metav1.OwnerReference) + err = json.Unmarshal([]byte(ownedPVCs), &nestedMap) + if err != nil { + return err + } + for pvcName, ownerReference := range nestedMap { + ownerReference.UID = newResourceUnstructured.GetUID() + pvcToPVCOwnerMapping[pvcName] = append(pvcToPVCOwnerMapping[pvcName], ownerReference) + } + log.Infof("Successfully created the CRs from the stashed configmaps %s/%s", unstructuredObj.GetKind(), unstructuredObj.GetName()) + } + // Find PVCs in the namespace which are owned by previous CR, need to modify the owner reference to new CRs for those + pvcList, err := coreClient.GetPersistentVolumeClaims(namespace, nil) + if err != nil { + return err + } + for _, pvc := range pvcList.Items { + if newOwnerReferences, ok := pvcToPVCOwnerMapping[pvc.GetName()]; ok { + ownerReferences := pvc.GetOwnerReferences() + ownerReferences = append(ownerReferences, newOwnerReferences...) + pvc.SetOwnerReferences(ownerReferences) + _, err = coreClient.UpdatePersistentVolumeClaim(&pvc) + if err != nil { + return err + } + } + } + return nil +} diff --git a/vendor/github.com/libopenstorage/stork/pkg/schedule/schedule.go b/vendor/github.com/libopenstorage/stork/pkg/schedule/schedule.go index 1a584ccac..5d7c97a07 100644 --- a/vendor/github.com/libopenstorage/stork/pkg/schedule/schedule.go +++ b/vendor/github.com/libopenstorage/stork/pkg/schedule/schedule.go @@ -148,6 +148,87 @@ func checkTrigger( return false, nil } +func hasTriggered( + lastTrigger time.Time, + lastTriggerEarliest time.Time, + now time.Time, +) (bool, error) { + // Check if the last trigger falls between the allowed earliest trigger time and now + if lastTrigger.Before(lastTriggerEarliest) || lastTrigger.After(now) { + return false, nil + } + return true, nil +} + +func AlreadyTriggered( + policyName string, + namespace string, + policyType stork_api.SchedulePolicyType, + lastTrigger meta.Time, +) (bool, error) { + schedulePolicy, err := getSchedulePolicy(policyName, namespace) + if err != nil { + return false, err + } + + if err := ValidateSchedulePolicy(schedulePolicy); err != nil { + return false, err + } + + now := GetCurrentTime() + switch policyType { + case stork_api.SchedulePolicyTypeInterval: + if schedulePolicy.Policy.Interval == nil { + return false, nil + } + duration := time.Duration(schedulePolicy.Policy.Interval.IntervalMinutes) * time.Minute + // Triggerred if last trigger is within the duration from now + earliestTrigger := now.Add(-duration) + return hasTriggered(lastTrigger.Time, earliestTrigger, now) + + case stork_api.SchedulePolicyTypeDaily: + if schedulePolicy.Policy.Daily == nil { + return false, nil + } + + policyHour, policyMinute, err := schedulePolicy.Policy.Daily.GetHourMinute() + if err != nil { + return false, err + } + + nextTrigger := time.Date(now.Year(), now.Month(), now.Day(), policyHour, policyMinute, 0, 0, time.Local) + earliestTrigger := nextTrigger.AddDate(0, 0, -1) + return hasTriggered(lastTrigger.Time, earliestTrigger, now) + + case stork_api.SchedulePolicyTypeWeekly: + if schedulePolicy.Policy.Weekly == nil { + return false, nil + } + policyHour, policyMinute, err := schedulePolicy.Policy.Weekly.GetHourMinute() + if err != nil { + return false, err + } + nextTrigger := time.Date(now.Year(), now.Month(), now.Day(), policyHour, policyMinute, 0, 0, time.Local) + earliestTrigger := nextTrigger.AddDate(0, 0, -7) + + return hasTriggered(lastTrigger.Time, earliestTrigger, now) + + case stork_api.SchedulePolicyTypeMonthly: + if schedulePolicy.Policy.Monthly == nil { + return false, nil + } + policyHour, policyMinute, err := schedulePolicy.Policy.Monthly.GetHourMinute() + if err != nil { + return false, err + } + nextTrigger := time.Date(now.Year(), now.Month(), schedulePolicy.Policy.Monthly.Date, policyHour, policyMinute, 0, 0, time.Local) + earliestTrigger := nextTrigger.AddDate(0, -1, 0) + return hasTriggered(lastTrigger.Time, earliestTrigger, now) + + } + return false, nil +} + // ValidateSchedulePolicy Validate if a given schedule policy is valid func ValidateSchedulePolicy(policy *stork_api.SchedulePolicy) error { if policy == nil { diff --git a/vendor/github.com/libopenstorage/stork/pkg/storkctl/action.go b/vendor/github.com/libopenstorage/stork/pkg/storkctl/action.go index 9ade95263..0ac7d4384 100644 --- a/vendor/github.com/libopenstorage/stork/pkg/storkctl/action.go +++ b/vendor/github.com/libopenstorage/stork/pkg/storkctl/action.go @@ -2,115 +2,207 @@ package storkctl import ( "fmt" + "github.com/libopenstorage/stork/pkg/utils" "strings" "time" storkv1 "github.com/libopenstorage/stork/pkg/apis/stork/v1alpha1" + migration "github.com/libopenstorage/stork/pkg/migration/controllers" storkops "github.com/portworx/sched-ops/k8s/stork" "github.com/spf13/cobra" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/validation" "k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/kubectl/pkg/cmd/util" ) const ( failoverCommand = "failover" + failbackCommand = "failback" nameTimeSuffixFormat string = "2006-01-02-150405" actionWaitTimeout time.Duration = 10 * time.Minute actionWaitInterval time.Duration = 10 * time.Second ) -func newTriggerCommand(cmdFactory Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { - triggerCommands := &cobra.Command{ - Use: "trigger", - Short: "trigger actions", - Hidden: true, - } +var mockTime *time.Time - triggerCommands.AddCommand( - newFailoverCommand(cmdFactory, ioStreams), - ) - return triggerCommands +// setMockTime is used in tests to update the time +func setMockTime(mt *time.Time) { + mockTime = mt } -func newFailoverCommand(cmdFactory Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { - failoverCommand := &cobra.Command{ +// GetCurrentTime returns the current time as per the scheduler +func GetCurrentTime() time.Time { + if mockTime != nil { + return *mockTime + } + return time.Now() +} + +func newPerformFailoverCommand(cmdFactory Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { + var referenceMigrationSchedule string + var skipSourceOperations bool + var includeNamespaceList []string + var excludeNamespaceList []string + performFailoverCommand := &cobra.Command{ Use: failoverCommand, - Short: "Initiate failover for the given namespaces", + Short: "Initiate failover of the given migration schedule", Run: func(c *cobra.Command, args []string) { - namespaces, err := cmdFactory.GetAllNamespaces() + // namespace of the MigrationSchedule is provided by the user using the -n / --namespace global flag + migrationScheduleNs := cmdFactory.GetNamespace() + namespaceList, err := validationsForPerformDRCommands(storkv1.ActionTypeFailover, migrationScheduleNs, referenceMigrationSchedule, includeNamespaceList, excludeNamespaceList, skipSourceOperations) if err != nil { util.CheckErr(err) return } - failedToStart := false - for _, namespace := range namespaces { - if incompleteAction := getAnyIncompleteAction(namespace); incompleteAction != nil { - if !failedToStart { - printMsg("Failed to start failover as there pending actions for following namespaces:", ioStreams.Out) - failedToStart = true - } - printMsg(fmt.Sprintf( - "Namespace %v has action %v in state %v", - namespace, incompleteAction.Name, incompleteAction.Status), - ioStreams.Out) - } + actionParameters := storkv1.ActionParameter{ + FailoverParameter: storkv1.FailoverParameter{ + FailoverNamespaces: namespaceList, + MigrationScheduleReference: referenceMigrationSchedule, + SkipSourceOperations: &skipSourceOperations, + }, } - if failedToStart { + err = createActionCR(storkv1.ActionTypeFailover, migrationScheduleNs, referenceMigrationSchedule, actionParameters, ioStreams) + if err != nil { + util.CheckErr(err) return } - for _, namespace := range namespaces { - action := storkv1.Action{ - ObjectMeta: metav1.ObjectMeta{ - Name: newActionName(storkv1.ActionTypeFailover), - Namespace: namespace, - }, - Spec: storkv1.ActionSpec{ - ActionType: storkv1.ActionTypeFailover, - }, - Status: storkv1.ActionStatusScheduled, - } - _, err = storkops.Instance().CreateAction(&action) - if err != nil { - printMsg( - fmt.Sprintf( - "Failed to start failover for namespace %v due to error %v", - namespace, err), - ioStreams.ErrOut) - continue - } - printMsg(fmt.Sprintf("Started failover for namespace %v", namespace), ioStreams.Out) - printMsg(getDescribeActionMessage(&action), ioStreams.Out) - } }, } - return failoverCommand + performFailoverCommand.Flags().BoolVar(&skipSourceOperations, "skip-source-operations", false, "If present, operations performed on the source cluster will be skipped, and applications on the current cluster will be scaled up") + performFailoverCommand.Flags().StringVarP(&referenceMigrationSchedule, "migration-reference", "m", "", "Specify the MigrationSchedule to failover. Also specify the namespace of this MigrationSchedule using the -n flag") + performFailoverCommand.Flags().StringSliceVar(&includeNamespaceList, "include-namespaces", nil, "Specify the comma-separated list of subset namespaces to be failed over. By default, all namespaces part of the MigrationSchedule are failed over") + performFailoverCommand.Flags().StringSliceVar(&excludeNamespaceList, "exclude-namespaces", nil, "Specify the comma-separated list of subset namespaces to be skipped during the failover. By default, all namespaces part of the MigrationSchedule are failed over") + return performFailoverCommand } -func isActionIncomplete(action *storkv1.Action) bool { - return action.Status == storkv1.ActionStatusScheduled || action.Status == storkv1.ActionStatusInProgress +func newPerformFailbackCommand(cmdFactory Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { + var referenceMigrationSchedule string + var includeNamespaceList []string + var excludeNamespaceList []string + performFailbackCommand := &cobra.Command{ + Use: failbackCommand, + Short: "Initiate failback of the given migration schedule", + Run: func(c *cobra.Command, args []string) { + // namespace of the MigrationSchedule is provided by the user using the -n / --namespace global flag + migrationScheduleNs := cmdFactory.GetNamespace() + namespaceList, err := validationsForPerformDRCommands(storkv1.ActionTypeFailback, migrationScheduleNs, referenceMigrationSchedule, includeNamespaceList, excludeNamespaceList, false) + if err != nil { + util.CheckErr(err) + return + } + actionParameters := storkv1.ActionParameter{ + FailbackParameter: storkv1.FailbackParameter{ + FailbackNamespaces: namespaceList, + MigrationScheduleReference: referenceMigrationSchedule, + }, + } + err = createActionCR(storkv1.ActionTypeFailback, migrationScheduleNs, referenceMigrationSchedule, actionParameters, ioStreams) + if err != nil { + util.CheckErr(err) + return + } + }, + } + performFailbackCommand.Flags().StringVarP(&referenceMigrationSchedule, "migration-reference", "m", "", "Specify the MigrationSchedule to failback. Also specify the namespace of this MigrationSchedule using the -n flag") + performFailbackCommand.Flags().StringSliceVar(&includeNamespaceList, "include-namespaces", nil, "Specify the comma-separated list of subset namespaces to be failed back. By default, all namespaces part of the MigrationSchedule are failed back") + performFailbackCommand.Flags().StringSliceVar(&excludeNamespaceList, "exclude-namespaces", nil, "Specify the comma-separated list of subset namespaces to be skipped during the failback. By default, all namespaces part of the MigrationSchedule are failed back") + return performFailbackCommand } -// check if there is already an Action scheduled or in-progress -func getAnyIncompleteAction(namespace string) *storkv1.Action { - actionList, err := storkops.Instance().ListActions(namespace) +// validationsForPerformDRCommands performs the validations for failover/failback and returns the resultant namespaceList +func validationsForPerformDRCommands(actionType storkv1.ActionType, migrationScheduleNs string, referenceMigrationSchedule string, includeNamespaceList []string, excludeNamespaceList []string, skipSourceOperations bool) ([]string, error) { + var namespaceList []string + if len(referenceMigrationSchedule) == 0 { + return nil, fmt.Errorf("reference MigrationSchedule name needs to be provided for %s", actionType) + } + + migrSchedObj, err := storkops.Instance().GetMigrationSchedule(referenceMigrationSchedule, migrationScheduleNs) if err != nil { - util.CheckErr(err) - return nil + return nil, fmt.Errorf("unable to find the reference MigrationSchedule %v in the %v namespace", referenceMigrationSchedule, migrationScheduleNs) } - for _, action := range actionList.Items { - if isActionIncomplete(&action) { - return &action + + if actionType == storkv1.ActionTypeFailover { + // MigrationSchedule provided to failover must be a static copy + if migrSchedObj.GetAnnotations() == nil || migrSchedObj.GetAnnotations()[migration.StorkMigrationScheduleCopied] != "true" { + return nil, fmt.Errorf("ensure that `storkctl perform failover` is run in the cluster you want to failover to") + } + } + + // clusterPair specified in the reference MigrationSchedule should always exist in the destination cluster in failback + // for failover only if skipSourceOperations flag is provided, cluster-pair presence is optional + if !(actionType == storkv1.ActionTypeFailover && skipSourceOperations) { + clusterPair := migrSchedObj.Spec.Template.Spec.ClusterPair + _, err = storkops.Instance().GetClusterPair(clusterPair, migrationScheduleNs) + if err != nil { + return nil, fmt.Errorf("unable to find the ClusterPair %v in the %v namespace", clusterPair, migrationScheduleNs) } } + + migrationNamespaceList := migrSchedObj.Spec.Template.Spec.Namespaces + migrationNamespaceSelectors := migrSchedObj.Spec.Template.Spec.NamespaceSelectors + // update the migrationNamespaces list by fetching namespaces based on provided label selectors + migrationNamespaces, err := utils.GetMergedNamespacesWithLabelSelector(migrationNamespaceList, migrationNamespaceSelectors) + if err != nil { + return nil, fmt.Errorf("unable to get the namespaces based on the --namespace-selectors in the provided MigrationSchedule: %v", err) + } + // at most one of exclude-namespaces or include-namespaces can be provided + if len(includeNamespaceList) != 0 && len(excludeNamespaceList) != 0 { + return nil, fmt.Errorf("can provide only one of --include-namespaces or --exclude-namespaces values at once") + } else if len(includeNamespaceList) != 0 { + if isSubList, _, nonSubsetStrings := utils.IsSubList(includeNamespaceList, migrationNamespaces); isSubList { + // Branch 1: Only failover/failback some of the namespaces being migrated by the given migrationSchedule + namespaceList = includeNamespaceList + } else { + return nil, fmt.Errorf("provided namespaces %v are not a subset of the namespaces being migrated by the given MigrationSchedule", nonSubsetStrings) + } + } else if len(excludeNamespaceList) != 0 { + if isSubList, _, nonSubsetStrings := utils.IsSubList(excludeNamespaceList, migrationNamespaces); isSubList { + // Branch 2: Exclude some of the namespaces being migrated by the given migrationSchedule from failover/failback + namespaceList = utils.ExcludeListAFromListB(excludeNamespaceList, migrationNamespaces) + } else { + return nil, fmt.Errorf("provided namespaces %v are not a subset of the namespaces being migrated by the given MigrationSchedule", nonSubsetStrings) + } + } else { + // Branch 3: Failover/Failback all the namespaces being migrated by the given migrationSchedule + namespaceList = migrationNamespaces + } + return namespaceList, nil +} + +func createActionCR(actionType storkv1.ActionType, migrationScheduleNs string, referenceMigrationSchedule string, actionParameters storkv1.ActionParameter, ioStreams genericclioptions.IOStreams) error { + actionName := getActionName(actionType, referenceMigrationSchedule) + actionObj := storkv1.Action{ + ObjectMeta: metav1.ObjectMeta{ + Name: actionName, + Namespace: migrationScheduleNs, + }, + Spec: storkv1.ActionSpec{ + ActionType: actionType, + ActionParameter: actionParameters, + }, + Status: storkv1.ActionStatus{Status: storkv1.ActionStatusInitial}, + } + action, err := storkops.Instance().CreateAction(&actionObj) + migrationScheduleName := migrationScheduleNs + "/" + referenceMigrationSchedule + if err != nil { + return fmt.Errorf("failed to start %s for MigrationSchedule %v : %v", actionType, migrationScheduleName, err) + } + printMsg(fmt.Sprintf("Started %s for MigrationSchedule %v", actionType, migrationScheduleName), ioStreams.Out) + printMsg(getActionStatusMessage(action), ioStreams.Out) return nil } -func newActionName(action storkv1.ActionType) string { - return strings.Join([]string{string(action), time.Now().Format(nameTimeSuffixFormat)}, "-") +func getActionStatusMessage(action *storkv1.Action) string { + return fmt.Sprintf("To check %v status use the command : `storkctl get %v %v -n %v`", action.Spec.ActionType, action.Spec.ActionType, action.Name, action.Namespace) } -func getDescribeActionMessage(action *storkv1.Action) string { - return "To check Action status use: " + - fmt.Sprintf("kubectl describe action %v -n %v", action.Name, action.Namespace) +func getActionName(actionType storkv1.ActionType, referenceResourceName string) string { + actionPrefix := string(actionType) + actionSuffix := GetCurrentTime().Format(nameTimeSuffixFormat) + lenAffixes := len(actionPrefix) + len(actionSuffix) + 2 // +2 for the 2 '-'s + if len(referenceResourceName) >= validation.DNS1123SubdomainMaxLength-lenAffixes { + referenceResourceName = referenceResourceName[:validation.DNS1123SubdomainMaxLength-lenAffixes] + } + return strings.Join([]string{actionPrefix, referenceResourceName, actionSuffix}, "-") } diff --git a/vendor/github.com/libopenstorage/stork/pkg/storkctl/actionstatus.go b/vendor/github.com/libopenstorage/stork/pkg/storkctl/actionstatus.go new file mode 100644 index 000000000..775c956d9 --- /dev/null +++ b/vendor/github.com/libopenstorage/stork/pkg/storkctl/actionstatus.go @@ -0,0 +1,185 @@ +package storkctl + +import ( + "fmt" + + storkv1 "github.com/libopenstorage/stork/pkg/apis/stork/v1alpha1" + storkops "github.com/portworx/sched-ops/k8s/stork" + "github.com/spf13/cobra" + metav1beta1 "k8s.io/apimachinery/pkg/apis/meta/v1beta1" + "k8s.io/cli-runtime/pkg/genericclioptions" + "k8s.io/kubectl/pkg/cmd/util" + "k8s.io/kubernetes/pkg/printers" +) + +var drActionColumns = []string{"NAME", "CREATED", "STAGE", "STATUS", "MORE INFO"} + +func newGetFailoverStatusCommand(cmdFactory Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { + getFailoverCommand := &cobra.Command{ + Use: failoverCommand, + Short: "Get the status of failover actions", + Run: func(c *cobra.Command, args []string) { + getDRActionStatus(cmdFactory, ioStreams, storkv1.ActionTypeFailover, c, args) + }, + } + return getFailoverCommand +} + +func newGetFailbackStatusCommand(cmdFactory Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { + getFailbackCommand := &cobra.Command{ + Use: failbackCommand, + Short: "Get the status of failback actions", + Run: func(c *cobra.Command, args []string) { + getDRActionStatus(cmdFactory, ioStreams, storkv1.ActionTypeFailback, c, args) + }, + } + return getFailbackCommand +} + +func getDRActionStatus(cmdFactory Factory, ioStreams genericclioptions.IOStreams, actionType storkv1.ActionType, c *cobra.Command, args []string) { + var actions *storkv1.ActionList + var filteredActionList *storkv1.ActionList + var err error + // user has to provide the namespace from which they want to get list of actions using -n flag + namespace := cmdFactory.GetNamespace() + if len(args) > 0 { + // name of action has been specified + actions = new(storkv1.ActionList) + for _, actionName := range args { + action, err := storkops.Instance().GetAction(actionName, namespace) + if err != nil { + util.CheckErr(err) + return + } + actions.Items = append(actions.Items, *action) + } + } else { + // fetch all the actions in the given namespace + actions, err = storkops.Instance().ListActions(namespace) + if err != nil { + util.CheckErr(err) + return + } + } + + // filter it down to actions with given actionType + filteredActionList = new(storkv1.ActionList) + for _, action := range actions.Items { + if action.Spec.ActionType == actionType { + filteredActionList.Items = append(filteredActionList.Items, action) + } + } + + if len(filteredActionList.Items) == 0 { + handleEmptyList(ioStreams.Out) + return + } + + if err := printObjects(c, filteredActionList, cmdFactory, drActionColumns, drActionPrinter, ioStreams.Out); err != nil { + util.CheckErr(err) + return + } +} + +func drActionPrinter(actionList *storkv1.ActionList, options printers.GenerateOptions) ([]metav1beta1.TableRow, error) { + if actionList == nil { + return nil, nil + } + + rows := make([]metav1beta1.TableRow, 0) + for _, action := range actionList.Items { + var row metav1beta1.TableRow + creationTime := toTimeString(action.CreationTimestamp.Time) + additionalInfo := action.Status.Reason + if action.Status.Summary != nil { + totalNamespaces := len(action.Status.Summary.FailoverSummaryItem) + len(action.Status.Summary.FailbackSummaryItem) + successfulNamespaces := 0 + rollbackSuccessfulNamespaces := 0 + rollbackFailedNamespaces := 0 + if len(action.Status.Summary.FailoverSummaryItem) > 0 { + // find out number of successfully scaled up namespaces + for _, item := range action.Status.Summary.FailoverSummaryItem { + if item.Status == storkv1.ActionStatusSuccessful { + successfulNamespaces++ + } else if item.Status == storkv1.ActionStatusRollbackSuccessful { + rollbackSuccessfulNamespaces++ + } else if item.Status == storkv1.ActionStatusRollbackFailed { + rollbackFailedNamespaces++ + } + } + } else if len(action.Status.Summary.FailbackSummaryItem) > 0 { + // find out number of successfully scaled up namespaces + for _, item := range action.Status.Summary.FailbackSummaryItem { + if item.Status == storkv1.ActionStatusSuccessful { + successfulNamespaces++ + } else if item.Status == storkv1.ActionStatusRollbackSuccessful { + rollbackSuccessfulNamespaces++ + } else if item.Status == storkv1.ActionStatusRollbackFailed { + rollbackFailedNamespaces++ + } + } + } else { + continue + } + if rollbackSuccessfulNamespaces > 0 || rollbackFailedNamespaces > 0 { + additionalInfo = fmt.Sprintf("Rolled back Apps in : %d/%d namespaces", rollbackSuccessfulNamespaces, totalNamespaces) + // In case of rollback we have a failure reason as well + if action.Status.Reason != "" { + additionalInfo += " ; " + action.Status.Reason + } + } else { + additionalInfo = fmt.Sprintf("Scaled up Apps in : %d/%d namespaces", successfulNamespaces, totalNamespaces) + } + } + row = getRow(&action, + []interface{}{action.Name, + creationTime, + prettyDRStageNames(action.Status.Stage, action.Spec.ActionType), + action.Status.Status, + additionalInfo, + }, + ) + rows = append(rows, row) + } + return rows, nil +} + +func prettyDRStageNames(stage storkv1.ActionStageType, actionType storkv1.ActionType) string { + switch stage { + case storkv1.ActionStageInitial: + return "Validations" + case storkv1.ActionStageScaleDownSource: + return "Scale Down (on source)" + case storkv1.ActionStageScaleDownDestination: + return "Scale Down (on destination)" + case storkv1.ActionStageWaitAfterScaleDown: + if actionType == storkv1.ActionTypeFailover { + return "Waiting for Apps to Scale Down (on source)" + } else if actionType == storkv1.ActionTypeFailback { + return "Waiting for Apps to Scale Down (on destination)" + } + case storkv1.ActionStageLastMileMigration: + if actionType == storkv1.ActionTypeFailover { + return "Last Mile Migration (from source -> destination)" + } else if actionType == storkv1.ActionTypeFailback { + return "Last Mile Migration (from destination -> source)" + } + case storkv1.ActionStageScaleUpSource: + if actionType == storkv1.ActionTypeFailover { + return "Rolling Back Scale Down (on source)" + } else if actionType == storkv1.ActionTypeFailback { + return "Scale Up (on source)" + } + case storkv1.ActionStageScaleUpDestination: + if actionType == storkv1.ActionTypeFailover { + return "Scale Up (on destination)" + } else if actionType == storkv1.ActionTypeFailback { + return "Rolling Back Scale Down (on destination)" + } + case storkv1.ActionStageFinal: + return "Completed" + default: + return string(stage) + } + return string(stage) +} diff --git a/vendor/github.com/libopenstorage/stork/pkg/storkctl/common.go b/vendor/github.com/libopenstorage/stork/pkg/storkctl/common.go index 799350d98..e53d12553 100644 --- a/vendor/github.com/libopenstorage/stork/pkg/storkctl/common.go +++ b/vendor/github.com/libopenstorage/stork/pkg/storkctl/common.go @@ -8,7 +8,7 @@ import ( apiextensionsclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - discovery "k8s.io/client-go/discovery" + "k8s.io/client-go/discovery" "k8s.io/utils/strings/slices" ) diff --git a/vendor/github.com/libopenstorage/stork/pkg/storkctl/get.go b/vendor/github.com/libopenstorage/stork/pkg/storkctl/get.go index 2de27d2b1..ec2192656 100644 --- a/vendor/github.com/libopenstorage/stork/pkg/storkctl/get.go +++ b/vendor/github.com/libopenstorage/stork/pkg/storkctl/get.go @@ -35,6 +35,8 @@ func newGetCommand(cmdFactory Factory, ioStreams genericclioptions.IOStreams) *c newGetApplicationCloneCommand(cmdFactory, ioStreams), newGetBackupLocationCommand(cmdFactory, ioStreams), newGetapplicationRegistrationCommand(cmdFactory, ioStreams), + newGetFailoverStatusCommand(cmdFactory, ioStreams), + newGetFailbackStatusCommand(cmdFactory, ioStreams), ) return getCommands diff --git a/vendor/github.com/libopenstorage/stork/pkg/storkctl/migration.go b/vendor/github.com/libopenstorage/stork/pkg/storkctl/migration.go index e08d7b6e3..cf5a951d6 100644 --- a/vendor/github.com/libopenstorage/stork/pkg/storkctl/migration.go +++ b/vendor/github.com/libopenstorage/stork/pkg/storkctl/migration.go @@ -4,6 +4,7 @@ import ( "bufio" "bytes" "fmt" + "github.com/libopenstorage/stork/pkg/utils" "io" "log" "os" @@ -186,8 +187,10 @@ func newActivateMigrationsCommand(cmdFactory Factory, ioStreams genericclioption util.CheckErr(err) return } + // MigrationSchedule will only be relevant if it migrates at least one of the activation namespaces + // Only for such migrationSchedules we will need to update applicationActivated:true for _, migrSched := range migrationSchedules.Items { - isMigrSchedRelevant, err := doesMigrationScheduleMigrateNamespaces(migrSched, activationNamespaces) + isMigrSchedRelevant, err := utils.DoesMigrationScheduleMigrateNamespaces(migrSched, activationNamespaces) if err != nil { util.CheckErr(err) return @@ -210,29 +213,6 @@ func newActivateMigrationsCommand(cmdFactory Factory, ioStreams genericclioption return activateMigrationCommand } -// MigrationSchedule will only be relevant if it migrates at least one of the activation namespaces -// Only for such migrationSchedules we will need to update applicationActivated:true -func doesMigrationScheduleMigrateNamespaces(migrSched storkv1.MigrationSchedule, activationNs []string) (bool, error) { - namespaceList := migrSched.Spec.Template.Spec.Namespaces - namespaceSelectors := migrSched.Spec.Template.Spec.NamespaceSelectors - migrationNamespaces, err := getMigrationNamespaces(namespaceList, namespaceSelectors) - if err != nil { - return false, fmt.Errorf("unable to get the namespaces based on the provided --namespace-selectors : %v", err) - } - activationNamespacesSet := make(map[string]bool) - for _, ns := range activationNs { - activationNamespacesSet[ns] = true - } - found := false - for _, ns := range migrationNamespaces { - if activationNamespacesSet[ns] { - found = true - break - } - } - return found, nil -} - func newDeactivateMigrationsCommand(cmdFactory Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { var allNamespaces bool @@ -280,7 +260,7 @@ func newDeactivateMigrationsCommand(cmdFactory Factory, ioStreams genericcliopti return } for _, migrSched := range migrationSchedules.Items { - isMigrSchedRelevant, err := doesMigrationScheduleMigrateNamespaces(migrSched, deactivationNamespaces) + isMigrSchedRelevant, err := utils.DoesMigrationScheduleMigrateNamespaces(migrSched, deactivationNamespaces) if err != nil { util.CheckErr(err) return diff --git a/vendor/github.com/libopenstorage/stork/pkg/storkctl/migrationschedule.go b/vendor/github.com/libopenstorage/stork/pkg/storkctl/migrationschedule.go index cf6c959d8..4c1c9c6dc 100644 --- a/vendor/github.com/libopenstorage/stork/pkg/storkctl/migrationschedule.go +++ b/vendor/github.com/libopenstorage/stork/pkg/storkctl/migrationschedule.go @@ -2,15 +2,13 @@ package storkctl import ( "fmt" + "github.com/libopenstorage/stork/pkg/utils" "k8s.io/apimachinery/pkg/api/errors" "strings" "time" storkv1 "github.com/libopenstorage/stork/pkg/apis/stork/v1alpha1" - "github.com/libopenstorage/stork/pkg/k8sutils" - "github.com/portworx/sched-ops/k8s/core" storkops "github.com/portworx/sched-ops/k8s/stork" - "github.com/sirupsen/logrus" "github.com/spf13/cobra" meta "k8s.io/apimachinery/pkg/apis/meta/v1" metav1beta1 "k8s.io/apimachinery/pkg/apis/meta/v1beta1" @@ -70,13 +68,7 @@ func newCreateMigrationScheduleCommand(cmdFactory Factory, ioStreams genericclio var transformSpecs []string var includeOptionalResourceTypes []string - // We fetch the value of adminNamespace from the stork-controller-cm created in kube-system namespace - adminNs, err := k8sutils.GetConfigValue(k8sutils.StorkControllerConfigMapName, meta.NamespaceSystem, k8sutils.AdminNsKey) - if err != nil { - logrus.Warnf("Error in reading %v cm for the key %v, switching to default value : %v", - k8sutils.StorkControllerConfigMapName, k8sutils.AdminNsKey, err) - adminNs = k8sutils.DefaultAdminNamespace - } + adminNs := utils.GetAdminNamespace() if len(args) != 1 { util.CheckErr(fmt.Errorf("exactly one name needs to be provided for migration schedule name")) @@ -121,7 +113,7 @@ func newCreateMigrationScheduleCommand(cmdFactory Factory, ioStreams genericclio } // get the namespaces being migrated by also fetching namespaces based on provided label selectors - migrationNamespaces, err := getMigrationNamespaces(namespaceList, namespaceSelectors) + migrationNamespaces, err := utils.GetMergedNamespacesWithLabelSelector(namespaceList, namespaceSelectors) if err != nil { util.CheckErr(fmt.Errorf("unable to get the namespaces based on the provided --namespace-selectors : %v", err)) return @@ -574,32 +566,6 @@ func validateNamespaceList(migrationScheduleNs string, migrationNamespaces []str return nil } -func getMigrationNamespaces(namespaceList []string, namespaceSelectors map[string]string) ([]string, error) { - if len(namespaceSelectors) == 0 { - return namespaceList, nil - } - uniqueNamespaces := make(map[string]bool) - for _, ns := range namespaceList { - uniqueNamespaces[ns] = true - } - - for key, val := range namespaceSelectors { - namespaces, err := core.Instance().ListNamespaces(map[string]string{key: val}) - if err != nil { - return nil, err - } - for _, namespace := range namespaces.Items { - uniqueNamespaces[namespace.GetName()] = true - } - } - - migrationNamespaces := make([]string, 0, len(uniqueNamespaces)) - for namespace := range uniqueNamespaces { - migrationNamespaces = append(migrationNamespaces, namespace) - } - return migrationNamespaces, nil -} - func validateTransformSpec(migrationNamespaces []string, transformSpec string) error { for _, ns := range migrationNamespaces { resTransform, err := storkops.Instance().GetResourceTransformation(transformSpec, ns) diff --git a/vendor/github.com/libopenstorage/stork/pkg/storkctl/perform.go b/vendor/github.com/libopenstorage/stork/pkg/storkctl/perform.go new file mode 100644 index 000000000..56c3da4c8 --- /dev/null +++ b/vendor/github.com/libopenstorage/stork/pkg/storkctl/perform.go @@ -0,0 +1,19 @@ +package storkctl + +import ( + "github.com/spf13/cobra" + "k8s.io/cli-runtime/pkg/genericclioptions" +) + +func newPerformCommand(cmdFactory Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { + performCommands := &cobra.Command{ + Use: "perform", + Short: "perform actions", + } + + performCommands.AddCommand( + newPerformFailoverCommand(cmdFactory, ioStreams), + newPerformFailbackCommand(cmdFactory, ioStreams), + ) + return performCommands +} diff --git a/vendor/github.com/libopenstorage/stork/pkg/storkctl/storkctl.go b/vendor/github.com/libopenstorage/stork/pkg/storkctl/storkctl.go index 3666d6084..653b47965 100644 --- a/vendor/github.com/libopenstorage/stork/pkg/storkctl/storkctl.go +++ b/vendor/github.com/libopenstorage/stork/pkg/storkctl/storkctl.go @@ -37,7 +37,7 @@ func NewCommand(cmdFactory Factory, in io.Reader, out io.Writer, errOut io.Write newSuspendCommand(cmdFactory, ioStreams), newResumeCommand(cmdFactory, ioStreams), newVersionCommand(cmdFactory, ioStreams), - newTriggerCommand(cmdFactory, ioStreams), + newPerformCommand(cmdFactory, ioStreams), ) cmds.PersistentFlags().AddGoFlagSet(flag.CommandLine) diff --git a/vendor/github.com/libopenstorage/stork/pkg/utils/utils.go b/vendor/github.com/libopenstorage/stork/pkg/utils/utils.go index 5faedf0c5..fdfd0f4ad 100644 --- a/vendor/github.com/libopenstorage/stork/pkg/utils/utils.go +++ b/vendor/github.com/libopenstorage/stork/pkg/utils/utils.go @@ -5,6 +5,7 @@ import ( "encoding/gob" "encoding/json" "fmt" + "github.com/libopenstorage/stork/pkg/k8sutils" "os" "strings" "time" @@ -347,3 +348,100 @@ func addResourceVersion(patchBytes []byte, resourceVersion string) ([]byte, erro } return versionBytes, nil } + +func GetMergedNamespacesWithLabelSelector(namespaceList []string, namespaceSelectors map[string]string) ([]string, error) { + if len(namespaceSelectors) == 0 { + return namespaceList, nil + } + uniqueNamespaces := make(map[string]bool) + for _, ns := range namespaceList { + uniqueNamespaces[ns] = true + } + + for key, val := range namespaceSelectors { + namespaces, err := core.Instance().ListNamespaces(map[string]string{key: val}) + if err != nil { + return nil, err + } + for _, namespace := range namespaces.Items { + uniqueNamespaces[namespace.GetName()] = true + } + } + + migrationNamespaces := make([]string, 0, len(uniqueNamespaces)) + for namespace := range uniqueNamespaces { + migrationNamespaces = append(migrationNamespaces, namespace) + } + return migrationNamespaces, nil +} + +// IsSubList returns true if the first slice is sublist of the second slice. +// Returns -> +// bool isSubList : list A is a subset of list B +// []string subsetStrings : strings common in both list A and list B +// []string nonSubsetStrings : strings present only in list A and not in list B +func IsSubList(listA []string, listB []string) (bool, []string, []string) { + // subsetStrings -> strings found in both A and B + // nonSubsetStrings -> strings found in A, but not in B + nonSubsetStrings := make([]string, 0) + subsetStrings := make([]string, 0) + superset := make(map[string]bool) + for _, str := range listB { + superset[str] = true + } + for _, str := range listA { + if !superset[str] { + nonSubsetStrings = append(nonSubsetStrings, str) + } else { + subsetStrings = append(subsetStrings, str) + } + } + return len(nonSubsetStrings) == 0, subsetStrings, nonSubsetStrings +} + +// ExcludeListAFromListB takes 2 slices of strings as input and returns subset of B which is disjoint from A +func ExcludeListAFromListB(listA []string, listB []string) []string { + nonCommonStrings := make([]string, 0) + setA := make(map[string]bool) + for _, str := range listA { + setA[str] = true + } + for _, str := range listB { + if !setA[str] { + nonCommonStrings = append(nonCommonStrings, str) + } + } + return nonCommonStrings +} + +// GetAdminNamespace we fetch the value of adminNamespace from the stork-controller-cm created in kube-system namespace +func GetAdminNamespace() string { + adminNs, err := k8sutils.GetConfigValue(k8sutils.StorkControllerConfigMapName, metav1.NamespaceSystem, k8sutils.AdminNsKey) + if err != nil { + logrus.Warnf("Error in reading %v cm for the key %v, switching to default value : %v", + k8sutils.StorkControllerConfigMapName, k8sutils.AdminNsKey, err) + adminNs = k8sutils.DefaultAdminNamespace + } + return adminNs +} + +func DoesMigrationScheduleMigrateNamespaces(migrationSchedule stork_api.MigrationSchedule, activatedNSList []string) (bool, error) { + namespaceList := migrationSchedule.Spec.Template.Spec.Namespaces + namespaceSelectors := migrationSchedule.Spec.Template.Spec.NamespaceSelectors + migrationNamespaces, err := GetMergedNamespacesWithLabelSelector(namespaceList, namespaceSelectors) + if err != nil { + return false, fmt.Errorf("unable to get the namespaces based on the provided --namespace-selectors : %v", err) + } + activationNamespacesSet := make(map[string]bool) + for _, ns := range activatedNSList { + activationNamespacesSet[ns] = true + } + found := false + for _, ns := range migrationNamespaces { + if activationNamespacesSet[ns] { + found = true + break + } + } + return found, nil +} diff --git a/vendor/github.com/montanaflynn/stats/.gitignore b/vendor/github.com/montanaflynn/stats/.gitignore index 96b11286e..e0a38e1c1 100644 --- a/vendor/github.com/montanaflynn/stats/.gitignore +++ b/vendor/github.com/montanaflynn/stats/.gitignore @@ -1,2 +1,5 @@ coverage.out -.directory \ No newline at end of file +release-notes.txt +.directory +.chglog +.vscode \ No newline at end of file diff --git a/vendor/github.com/montanaflynn/stats/.travis.yml b/vendor/github.com/montanaflynn/stats/.travis.yml deleted file mode 100644 index 8148ff536..000000000 --- a/vendor/github.com/montanaflynn/stats/.travis.yml +++ /dev/null @@ -1,16 +0,0 @@ -language: go -go: - - stable - - master -before_install: - - go get github.com/mattn/goveralls -script: - - go test -v -covermode=count -coverprofile=coverage.out -after_success: - - $GOPATH/bin/goveralls -coverprofile=coverage.out -service=travis-ci -notifications: - email: - recipients: - - montana@montanaflynn.me - on_success: change - on_failure: always diff --git a/vendor/github.com/montanaflynn/stats/CHANGELOG.md b/vendor/github.com/montanaflynn/stats/CHANGELOG.md index 532f6ed3f..76cc20bff 100644 --- a/vendor/github.com/montanaflynn/stats/CHANGELOG.md +++ b/vendor/github.com/montanaflynn/stats/CHANGELOG.md @@ -1,64 +1,521 @@ -# Change Log + +## [Unreleased] -## [0.2.0](https://github.com/montanaflynn/stats/tree/0.2.0) -### Merged pull requests: + +## [v0.7.0] - 2023-01-08 +### Add +- Add geometric distribution functions ([#75](https://github.com/montanaflynn/stats/issues/75)) +- Add GitHub action go workflow -- Fixed typographical error, changed accomdate to accommodate in README. [\#5](https://github.com/montanaflynn/stats/pull/5) ([saromanov](https://github.com/orthographic-pedant)) +### Remove +- Remove travis CI config -### Package changes: +### Update +- Update changelog with v0.7.0 changes +- Update github action go workflow +- Update geometric distribution tests -- Add `Correlation` function -- Add `Covariance` function -- Add `StandardDeviation` function to be the same as `StandardDeviationPopulation` -- Change `Variance` function to be the same as `PopulationVariation` -- Add helper methods to `Float64Data` -- Add `Float64Data` type to use instead of `[]float64` -- Add `Series` type which references to `[]Coordinate` -## [0.1.0](https://github.com/montanaflynn/stats/tree/0.1.0) + +## [v0.6.6] - 2021-04-26 +### Add +- Add support for string and io.Reader in LoadRawData (pr [#68](https://github.com/montanaflynn/stats/issues/68)) +- Add latest versions of Go to test against -Several functions were renamed in this release. They will still function but may be deprecated in the future. +### Update +- Update changelog with v0.6.6 changes -### Package changes: +### Use +- Use math.Sqrt in StandardDeviation (PR [#64](https://github.com/montanaflynn/stats/issues/64)) -- Rename `VarP` to `PopulationVariance` -- Rename `VarS` to `SampleVariance` -- Rename `LinReg` to `LinearRegression` -- Rename `ExpReg` to `ExponentialRegression` -- Rename `LogReg` to `LogarithmicRegression` -- Rename `StdDevP` to `StandardDeviationPopulation` -- Rename `StdDevS` to `StandardDeviationSample` -## [0.0.9](https://github.com/montanaflynn/stats/tree/0.0.9) + +## [v0.6.5] - 2021-02-21 +### Add +- Add Float64Data.Quartiles documentation +- Add Quartiles method to Float64Data type (issue [#60](https://github.com/montanaflynn/stats/issues/60)) -### Closed issues: +### Fix +- Fix make release changelog command and add changelog history -- Functions have unexpected side effects [\#3](https://github.com/montanaflynn/stats/issues/3) -- Percentile is not calculated correctly [\#2](https://github.com/montanaflynn/stats/issues/2) +### Update +- Update changelog with v0.6.5 changes +- Update changelog with v0.6.4 changes +- Update README.md links to CHANGELOG.md and DOCUMENTATION.md +- Update README.md and Makefile with new release commands -### Merged pull requests: -- Sample [\#4](https://github.com/montanaflynn/stats/pull/4) ([saromanov](https://github.com/saromanov)) + +## [v0.6.4] - 2021-01-13 +### Fix +- Fix failing tests due to precision errors on arm64 ([#58](https://github.com/montanaflynn/stats/issues/58)) -### Package changes: +### Update +- Update changelog with v0.6.4 changes +- Update examples directory to include a README.md used for synopsis +- Update go.mod to include go version where modules are enabled by default +- Update changelog with v0.6.3 changes + + +## [v0.6.3] - 2020-02-18 +### Add +- Add creating and committing changelog to Makefile release directive +- Add release-notes.txt and .chglog directory to .gitignore + +### Update +- Update exported tests to use import for better example documentation +- Update documentation using godoc2md +- Update changelog with v0.6.2 release + + + +## [v0.6.2] - 2020-02-18 +### Fix +- Fix linting errcheck warnings in go benchmarks + +### Update +- Update Makefile release directive to use correct release name + + + +## [v0.6.1] - 2020-02-18 +### Add +- Add StableSample function signature to readme + +### Fix +- Fix linting warnings for normal distribution functions formatting and tests + +### Update +- Update documentation links and rename DOC.md to DOCUMENTATION.md +- Update README with link to pkg.go.dev reference and release section +- Update Makefile with new changelog, docs, and release directives +- Update DOC.md links to GitHub source code +- Update doc.go comment and add DOC.md package reference file +- Update changelog using git-chglog + + + +## [v0.6.0] - 2020-02-17 +### Add +- Add Normal Distribution Functions ([#56](https://github.com/montanaflynn/stats/issues/56)) +- Add previous versions of Go to travis CI config +- Add check for distinct values in Mode function ([#51](https://github.com/montanaflynn/stats/issues/51)) +- Add StableSample function ([#48](https://github.com/montanaflynn/stats/issues/48)) +- Add doc.go file to show description and usage on godoc.org +- Add comments to new error and legacy error variables +- Add ExampleRound function to tests +- Add go.mod file for module support +- Add Sigmoid, SoftMax and Entropy methods and tests +- Add Entropy documentation, example and benchmarks +- Add Entropy function ([#44](https://github.com/montanaflynn/stats/issues/44)) + +### Fix +- Fix percentile when only one element ([#47](https://github.com/montanaflynn/stats/issues/47)) +- Fix AutoCorrelation name in comments and remove unneeded Sprintf + +### Improve +- Improve documentation section with command comments + +### Remove +- Remove very old versions of Go in travis CI config +- Remove boolean comparison to get rid of gometalinter warning + +### Update +- Update license dates +- Update Distance functions signatures to use Float64Data +- Update Sigmoid examples +- Update error names with backward compatibility + +### Use +- Use relative link to examples/main.go +- Use a single var block for exported errors + + + +## [v0.5.0] - 2019-01-16 +### Add +- Add Sigmoid and Softmax functions + +### Fix +- Fix syntax highlighting and add CumulativeSum func + + + +## [v0.4.0] - 2019-01-14 +### Add +- Add goreport badge and documentation section to README.md +- Add Examples to test files +- Add AutoCorrelation and nist tests +- Add String method to statsErr type +- Add Y coordinate error for ExponentialRegression +- Add syntax highlighting ([#43](https://github.com/montanaflynn/stats/issues/43)) +- Add CumulativeSum ([#40](https://github.com/montanaflynn/stats/issues/40)) +- Add more tests and rename distance files +- Add coverage and benchmarks to azure pipeline +- Add go tests to azure pipeline + +### Change +- Change travis tip alias to master +- Change codecov to coveralls for code coverage + +### Fix +- Fix a few lint warnings +- Fix example error + +### Improve +- Improve test coverage of distance functions + +### Only +- Only run travis on stable and tip versions +- Only check code coverage on tip + +### Remove +- Remove azure CI pipeline +- Remove unnecessary type conversions + +### Return +- Return EmptyInputErr instead of EmptyInput + +### Set +- Set up CI with Azure Pipelines + + + +## [0.3.0] - 2017-12-02 +### Add +- Add Chebyshev, Manhattan, Euclidean and Minkowski distance functions ([#35](https://github.com/montanaflynn/stats/issues/35)) +- Add function for computing chebyshev distance. ([#34](https://github.com/montanaflynn/stats/issues/34)) +- Add support for time.Duration +- Add LoadRawData to docs and examples +- Add unit test for edge case that wasn't covered +- Add unit tests for edge cases that weren't covered +- Add pearson alias delegating to correlation +- Add CovariancePopulation to Float64Data +- Add pearson product-moment correlation coefficient +- Add population covariance +- Add random slice benchmarks +- Add all applicable functions as methods to Float64Data type +- Add MIT license badge +- Add link to examples/methods.go +- Add Protips for usage and documentation sections +- Add tests for rounding up +- Add webdoc target and remove linting from test target +- Add example usage and consolidate contributing information + +### Added +- Added MedianAbsoluteDeviation + +### Annotation +- Annotation spelling error + +### Auto +- auto commit +- auto commit + +### Calculate +- Calculate correlation with sdev and covp + +### Clean +- Clean up README.md and add info for offline docs + +### Consolidated +- Consolidated all error values. + +### Fix +- Fix Percentile logic +- Fix InterQuartileRange method test +- Fix zero percent bug and add test +- Fix usage example output typos + +### Improve +- Improve bounds checking in Percentile +- Improve error log messaging + +### Imput +- Imput -> Input + +### Include +- Include alternative way to set Float64Data in example + +### Make +- Make various changes to README.md + +### Merge +- Merge branch 'master' of github.com:montanaflynn/stats +- Merge master + +### Mode +- Mode calculation fix and tests + +### Realized +- Realized the obvious efficiency gains of ignoring the unique numbers at the beginning of the slice. Benchmark joy ensued. + +### Refactor +- Refactor testing of Round() +- Refactor setting Coordinate y field using Exp in place of Pow +- Refactor Makefile and add docs target + +### Remove +- Remove deep links to types and functions + +### Rename +- Rename file from types to data + +### Retrieve +- Retrieve InterQuartileRange for the Float64Data. + +### Split +- Split up stats.go into separate files + +### Support +- Support more types on LoadRawData() ([#36](https://github.com/montanaflynn/stats/issues/36)) + +### Switch +- Switch default and check targets + +### Update +- Update Readme +- Update example methods and some text +- Update README and include Float64Data type method examples + +### Pull Requests +- Merge pull request [#32](https://github.com/montanaflynn/stats/issues/32) from a-robinson/percentile +- Merge pull request [#30](https://github.com/montanaflynn/stats/issues/30) from montanaflynn/fix-test +- Merge pull request [#29](https://github.com/montanaflynn/stats/issues/29) from edupsousa/master +- Merge pull request [#27](https://github.com/montanaflynn/stats/issues/27) from andrey-yantsen/fix-percentile-out-of-bounds +- Merge pull request [#25](https://github.com/montanaflynn/stats/issues/25) from kazhuravlev/patch-1 +- Merge pull request [#22](https://github.com/montanaflynn/stats/issues/22) from JanBerktold/time-duration +- Merge pull request [#24](https://github.com/montanaflynn/stats/issues/24) from alouche/master +- Merge pull request [#21](https://github.com/montanaflynn/stats/issues/21) from brydavis/master +- Merge pull request [#19](https://github.com/montanaflynn/stats/issues/19) from ginodeis/mode-bug +- Merge pull request [#17](https://github.com/montanaflynn/stats/issues/17) from Kunde21/master +- Merge pull request [#3](https://github.com/montanaflynn/stats/issues/3) from montanaflynn/master +- Merge pull request [#2](https://github.com/montanaflynn/stats/issues/2) from montanaflynn/master +- Merge pull request [#13](https://github.com/montanaflynn/stats/issues/13) from toashd/pearson +- Merge pull request [#12](https://github.com/montanaflynn/stats/issues/12) from alixaxel/MAD +- Merge pull request [#1](https://github.com/montanaflynn/stats/issues/1) from montanaflynn/master +- Merge pull request [#11](https://github.com/montanaflynn/stats/issues/11) from Kunde21/modeMemReduce +- Merge pull request [#10](https://github.com/montanaflynn/stats/issues/10) from Kunde21/ModeRewrite + + + +## [0.2.0] - 2015-10-14 +### Add +- Add Makefile with gometalinter, testing, benchmarking and coverage report targets +- Add comments describing functions and structs +- Add Correlation func +- Add Covariance func +- Add tests for new function shortcuts +- Add StandardDeviation function as a shortcut to StandardDeviationPopulation +- Add Float64Data and Series types + +### Change +- Change Sample to return a standard []float64 type + +### Fix +- Fix broken link to Makefile +- Fix broken link and simplify code coverage reporting command +- Fix go vet warning about printf type placeholder +- Fix failing codecov test coverage reporting +- Fix link to CHANGELOG.md + +### Fixed +- Fixed typographical error, changed accomdate to accommodate in README. + +### Include +- Include Variance and StandardDeviation shortcuts + +### Pass +- Pass gometalinter + +### Refactor +- Refactor Variance function to be the same as population variance + +### Release +- Release version 0.2.0 + +### Remove +- Remove unneeded do packages and update cover URL +- Remove sudo from pip install + +### Reorder +- Reorder functions and sections + +### Revert +- Revert to legacy containers to preserve go1.1 testing + +### Switch +- Switch from legacy to container-based CI infrastructure + +### Update +- Update contributing instructions and mention Makefile + +### Pull Requests +- Merge pull request [#5](https://github.com/montanaflynn/stats/issues/5) from orthographic-pedant/spell_check/accommodate + + + +## [0.1.0] - 2015-08-19 +### Add +- Add CONTRIBUTING.md + +### Rename +- Rename functions while preserving backwards compatibility + + + +## 0.0.9 - 2015-08-18 +### Add - Add HarmonicMean func - Add GeometricMean func +- Add .gitignore to avoid commiting test coverage report - Add Outliers stuct and QuantileOutliers func - Add Interquartile Range, Midhinge and Trimean examples - Add Trimean - Add Midhinge - Add Inter Quartile Range +- Add a unit test to check for an empty slice error - Add Quantiles struct and Quantile func -- Add Nearest Rank method of calculating percentiles -- Add errors for all functions -- Add sample -- Add Linear, Exponential and Logarithmic Regression -- Add sample and population variance and deviation -- Add Percentile and Float64ToInt -- Add Round -- Add Standard deviation -- Add Sum -- Add Min and Ma- x -- Add Mean, Median and Mode +- Add more tests and fix a typo +- Add Golang 1.5 to build tests +- Add a standard MIT license file +- Add basic benchmarking +- Add regression models +- Add codecov token +- Add codecov +- Add check for slices with a single item +- Add coverage tests +- Add back previous Go versions to Travis CI +- Add Travis CI +- Add GoDoc badge +- Add Percentile and Float64ToInt functions +- Add another rounding test for whole numbers +- Add build status badge +- Add code coverage badge +- Add test for NaN, achieving 100% code coverage +- Add round function +- Add standard deviation function +- Add sum function + +### Add +- add tests for sample +- add sample + +### Added +- Added sample and population variance and deviation functions +- Added README + +### Adjust +- Adjust API ordering + +### Avoid +- Avoid unintended consequence of using sort + +### Better +- Better performing min/max +- Better description + +### Change +- Change package path to potentially fix a bug in earlier versions of Go + +### Clean +- Clean up README and add some more information +- Clean up test error + +### Consistent +- Consistent empty slice error messages +- Consistent var naming +- Consistent func declaration + +### Convert +- Convert ints to floats + +### Duplicate +- Duplicate packages for all versions + +### Export +- Export Coordinate struct fields + +### First +- First commit + +### Fix +- Fix copy pasta mistake testing the wrong function +- Fix error message +- Fix usage output and edit API doc section +- Fix testing edgecase where map was in wrong order +- Fix usage example +- Fix usage examples + +### Include +- Include the Nearest Rank method of calculating percentiles + +### More +- More commenting + +### Move +- Move GoDoc link to top + +### Redirect +- Redirect kills newer versions of Go + +### Refactor +- Refactor code and error checking + +### Remove +- Remove unnecassary typecasting in sum func +- Remove cover since it doesn't work for later versions of go +- Remove golint and gocoveralls + +### Rename +- Rename StandardDev to StdDev +- Rename StandardDev to StdDev + +### Return +- Return errors for all functions + +### Run +- Run go fmt to clean up formatting + +### Simplify +- Simplify min/max function + +### Start +- Start with minimal tests + +### Switch +- Switch wercker to travis and update todos + +### Table +- table testing style + +### Update +- Update README and move the example main.go into it's own file +- Update TODO list +- Update README +- Update usage examples and todos + +### Use +- Use codecov the recommended way +- Use correct string formatting types + +### Pull Requests +- Merge pull request [#4](https://github.com/montanaflynn/stats/issues/4) from saromanov/sample + + +[Unreleased]: https://github.com/montanaflynn/stats/compare/v0.7.0...HEAD +[v0.7.0]: https://github.com/montanaflynn/stats/compare/v0.6.6...v0.7.0 +[v0.6.6]: https://github.com/montanaflynn/stats/compare/v0.6.5...v0.6.6 +[v0.6.5]: https://github.com/montanaflynn/stats/compare/v0.6.4...v0.6.5 +[v0.6.4]: https://github.com/montanaflynn/stats/compare/v0.6.3...v0.6.4 +[v0.6.3]: https://github.com/montanaflynn/stats/compare/v0.6.2...v0.6.3 +[v0.6.2]: https://github.com/montanaflynn/stats/compare/v0.6.1...v0.6.2 +[v0.6.1]: https://github.com/montanaflynn/stats/compare/v0.6.0...v0.6.1 +[v0.6.0]: https://github.com/montanaflynn/stats/compare/v0.5.0...v0.6.0 +[v0.5.0]: https://github.com/montanaflynn/stats/compare/v0.4.0...v0.5.0 +[v0.4.0]: https://github.com/montanaflynn/stats/compare/0.3.0...v0.4.0 +[0.3.0]: https://github.com/montanaflynn/stats/compare/0.2.0...0.3.0 +[0.2.0]: https://github.com/montanaflynn/stats/compare/0.1.0...0.2.0 +[0.1.0]: https://github.com/montanaflynn/stats/compare/0.0.9...0.1.0 diff --git a/vendor/github.com/montanaflynn/stats/DOCUMENTATION.md b/vendor/github.com/montanaflynn/stats/DOCUMENTATION.md new file mode 100644 index 000000000..b56788946 --- /dev/null +++ b/vendor/github.com/montanaflynn/stats/DOCUMENTATION.md @@ -0,0 +1,1237 @@ + + +# stats +`import "github.com/montanaflynn/stats"` + +* [Overview](#pkg-overview) +* [Index](#pkg-index) +* [Examples](#pkg-examples) +* [Subdirectories](#pkg-subdirectories) + +## Overview +Package stats is a well tested and comprehensive +statistics library package with no dependencies. + +Example Usage: + + + // start with some source data to use + data := []float64{1.0, 2.1, 3.2, 4.823, 4.1, 5.8} + + // you could also use different types like this + // data := stats.LoadRawData([]int{1, 2, 3, 4, 5}) + // data := stats.LoadRawData([]interface{}{1.1, "2", 3}) + // etc... + + median, _ := stats.Median(data) + fmt.Println(median) // 3.65 + + roundedMedian, _ := stats.Round(median, 0) + fmt.Println(roundedMedian) // 4 + +MIT License Copyright (c) 2014-2020 Montana Flynn (https://montanaflynn.com) + + + + +## Index +* [Variables](#pkg-variables) +* [func AutoCorrelation(data Float64Data, lags int) (float64, error)](#AutoCorrelation) +* [func ChebyshevDistance(dataPointX, dataPointY Float64Data) (distance float64, err error)](#ChebyshevDistance) +* [func Correlation(data1, data2 Float64Data) (float64, error)](#Correlation) +* [func Covariance(data1, data2 Float64Data) (float64, error)](#Covariance) +* [func CovariancePopulation(data1, data2 Float64Data) (float64, error)](#CovariancePopulation) +* [func CumulativeSum(input Float64Data) ([]float64, error)](#CumulativeSum) +* [func Entropy(input Float64Data) (float64, error)](#Entropy) +* [func EuclideanDistance(dataPointX, dataPointY Float64Data) (distance float64, err error)](#EuclideanDistance) +* [func GeometricMean(input Float64Data) (float64, error)](#GeometricMean) +* [func HarmonicMean(input Float64Data) (float64, error)](#HarmonicMean) +* [func InterQuartileRange(input Float64Data) (float64, error)](#InterQuartileRange) +* [func ManhattanDistance(dataPointX, dataPointY Float64Data) (distance float64, err error)](#ManhattanDistance) +* [func Max(input Float64Data) (max float64, err error)](#Max) +* [func Mean(input Float64Data) (float64, error)](#Mean) +* [func Median(input Float64Data) (median float64, err error)](#Median) +* [func MedianAbsoluteDeviation(input Float64Data) (mad float64, err error)](#MedianAbsoluteDeviation) +* [func MedianAbsoluteDeviationPopulation(input Float64Data) (mad float64, err error)](#MedianAbsoluteDeviationPopulation) +* [func Midhinge(input Float64Data) (float64, error)](#Midhinge) +* [func Min(input Float64Data) (min float64, err error)](#Min) +* [func MinkowskiDistance(dataPointX, dataPointY Float64Data, lambda float64) (distance float64, err error)](#MinkowskiDistance) +* [func Mode(input Float64Data) (mode []float64, err error)](#Mode) +* [func Ncr(n, r int) int](#Ncr) +* [func NormBoxMullerRvs(loc float64, scale float64, size int) []float64](#NormBoxMullerRvs) +* [func NormCdf(x float64, loc float64, scale float64) float64](#NormCdf) +* [func NormEntropy(loc float64, scale float64) float64](#NormEntropy) +* [func NormFit(data []float64) [2]float64](#NormFit) +* [func NormInterval(alpha float64, loc float64, scale float64) [2]float64](#NormInterval) +* [func NormIsf(p float64, loc float64, scale float64) (x float64)](#NormIsf) +* [func NormLogCdf(x float64, loc float64, scale float64) float64](#NormLogCdf) +* [func NormLogPdf(x float64, loc float64, scale float64) float64](#NormLogPdf) +* [func NormLogSf(x float64, loc float64, scale float64) float64](#NormLogSf) +* [func NormMean(loc float64, scale float64) float64](#NormMean) +* [func NormMedian(loc float64, scale float64) float64](#NormMedian) +* [func NormMoment(n int, loc float64, scale float64) float64](#NormMoment) +* [func NormPdf(x float64, loc float64, scale float64) float64](#NormPdf) +* [func NormPpf(p float64, loc float64, scale float64) (x float64)](#NormPpf) +* [func NormPpfRvs(loc float64, scale float64, size int) []float64](#NormPpfRvs) +* [func NormSf(x float64, loc float64, scale float64) float64](#NormSf) +* [func NormStats(loc float64, scale float64, moments string) []float64](#NormStats) +* [func NormStd(loc float64, scale float64) float64](#NormStd) +* [func NormVar(loc float64, scale float64) float64](#NormVar) +* [func Pearson(data1, data2 Float64Data) (float64, error)](#Pearson) +* [func Percentile(input Float64Data, percent float64) (percentile float64, err error)](#Percentile) +* [func PercentileNearestRank(input Float64Data, percent float64) (percentile float64, err error)](#PercentileNearestRank) +* [func PopulationVariance(input Float64Data) (pvar float64, err error)](#PopulationVariance) +* [func Round(input float64, places int) (rounded float64, err error)](#Round) +* [func Sample(input Float64Data, takenum int, replacement bool) ([]float64, error)](#Sample) +* [func SampleVariance(input Float64Data) (svar float64, err error)](#SampleVariance) +* [func Sigmoid(input Float64Data) ([]float64, error)](#Sigmoid) +* [func SoftMax(input Float64Data) ([]float64, error)](#SoftMax) +* [func StableSample(input Float64Data, takenum int) ([]float64, error)](#StableSample) +* [func StandardDeviation(input Float64Data) (sdev float64, err error)](#StandardDeviation) +* [func StandardDeviationPopulation(input Float64Data) (sdev float64, err error)](#StandardDeviationPopulation) +* [func StandardDeviationSample(input Float64Data) (sdev float64, err error)](#StandardDeviationSample) +* [func StdDevP(input Float64Data) (sdev float64, err error)](#StdDevP) +* [func StdDevS(input Float64Data) (sdev float64, err error)](#StdDevS) +* [func Sum(input Float64Data) (sum float64, err error)](#Sum) +* [func Trimean(input Float64Data) (float64, error)](#Trimean) +* [func VarP(input Float64Data) (sdev float64, err error)](#VarP) +* [func VarS(input Float64Data) (sdev float64, err error)](#VarS) +* [func Variance(input Float64Data) (sdev float64, err error)](#Variance) +* [type Coordinate](#Coordinate) + * [func ExpReg(s []Coordinate) (regressions []Coordinate, err error)](#ExpReg) + * [func LinReg(s []Coordinate) (regressions []Coordinate, err error)](#LinReg) + * [func LogReg(s []Coordinate) (regressions []Coordinate, err error)](#LogReg) +* [type Float64Data](#Float64Data) + * [func LoadRawData(raw interface{}) (f Float64Data)](#LoadRawData) + * [func (f Float64Data) AutoCorrelation(lags int) (float64, error)](#Float64Data.AutoCorrelation) + * [func (f Float64Data) Correlation(d Float64Data) (float64, error)](#Float64Data.Correlation) + * [func (f Float64Data) Covariance(d Float64Data) (float64, error)](#Float64Data.Covariance) + * [func (f Float64Data) CovariancePopulation(d Float64Data) (float64, error)](#Float64Data.CovariancePopulation) + * [func (f Float64Data) CumulativeSum() ([]float64, error)](#Float64Data.CumulativeSum) + * [func (f Float64Data) Entropy() (float64, error)](#Float64Data.Entropy) + * [func (f Float64Data) GeometricMean() (float64, error)](#Float64Data.GeometricMean) + * [func (f Float64Data) Get(i int) float64](#Float64Data.Get) + * [func (f Float64Data) HarmonicMean() (float64, error)](#Float64Data.HarmonicMean) + * [func (f Float64Data) InterQuartileRange() (float64, error)](#Float64Data.InterQuartileRange) + * [func (f Float64Data) Len() int](#Float64Data.Len) + * [func (f Float64Data) Less(i, j int) bool](#Float64Data.Less) + * [func (f Float64Data) Max() (float64, error)](#Float64Data.Max) + * [func (f Float64Data) Mean() (float64, error)](#Float64Data.Mean) + * [func (f Float64Data) Median() (float64, error)](#Float64Data.Median) + * [func (f Float64Data) MedianAbsoluteDeviation() (float64, error)](#Float64Data.MedianAbsoluteDeviation) + * [func (f Float64Data) MedianAbsoluteDeviationPopulation() (float64, error)](#Float64Data.MedianAbsoluteDeviationPopulation) + * [func (f Float64Data) Midhinge(d Float64Data) (float64, error)](#Float64Data.Midhinge) + * [func (f Float64Data) Min() (float64, error)](#Float64Data.Min) + * [func (f Float64Data) Mode() ([]float64, error)](#Float64Data.Mode) + * [func (f Float64Data) Pearson(d Float64Data) (float64, error)](#Float64Data.Pearson) + * [func (f Float64Data) Percentile(p float64) (float64, error)](#Float64Data.Percentile) + * [func (f Float64Data) PercentileNearestRank(p float64) (float64, error)](#Float64Data.PercentileNearestRank) + * [func (f Float64Data) PopulationVariance() (float64, error)](#Float64Data.PopulationVariance) + * [func (f Float64Data) Quartile(d Float64Data) (Quartiles, error)](#Float64Data.Quartile) + * [func (f Float64Data) QuartileOutliers() (Outliers, error)](#Float64Data.QuartileOutliers) + * [func (f Float64Data) Quartiles() (Quartiles, error)](#Float64Data.Quartiles) + * [func (f Float64Data) Sample(n int, r bool) ([]float64, error)](#Float64Data.Sample) + * [func (f Float64Data) SampleVariance() (float64, error)](#Float64Data.SampleVariance) + * [func (f Float64Data) Sigmoid() ([]float64, error)](#Float64Data.Sigmoid) + * [func (f Float64Data) SoftMax() ([]float64, error)](#Float64Data.SoftMax) + * [func (f Float64Data) StandardDeviation() (float64, error)](#Float64Data.StandardDeviation) + * [func (f Float64Data) StandardDeviationPopulation() (float64, error)](#Float64Data.StandardDeviationPopulation) + * [func (f Float64Data) StandardDeviationSample() (float64, error)](#Float64Data.StandardDeviationSample) + * [func (f Float64Data) Sum() (float64, error)](#Float64Data.Sum) + * [func (f Float64Data) Swap(i, j int)](#Float64Data.Swap) + * [func (f Float64Data) Trimean(d Float64Data) (float64, error)](#Float64Data.Trimean) + * [func (f Float64Data) Variance() (float64, error)](#Float64Data.Variance) +* [type Outliers](#Outliers) + * [func QuartileOutliers(input Float64Data) (Outliers, error)](#QuartileOutliers) +* [type Quartiles](#Quartiles) + * [func Quartile(input Float64Data) (Quartiles, error)](#Quartile) +* [type Series](#Series) + * [func ExponentialRegression(s Series) (regressions Series, err error)](#ExponentialRegression) + * [func LinearRegression(s Series) (regressions Series, err error)](#LinearRegression) + * [func LogarithmicRegression(s Series) (regressions Series, err error)](#LogarithmicRegression) + +#### Examples +* [AutoCorrelation](#example_AutoCorrelation) +* [ChebyshevDistance](#example_ChebyshevDistance) +* [Correlation](#example_Correlation) +* [CumulativeSum](#example_CumulativeSum) +* [Entropy](#example_Entropy) +* [LinearRegression](#example_LinearRegression) +* [LoadRawData](#example_LoadRawData) +* [Max](#example_Max) +* [Median](#example_Median) +* [Min](#example_Min) +* [Round](#example_Round) +* [Sigmoid](#example_Sigmoid) +* [SoftMax](#example_SoftMax) +* [Sum](#example_Sum) + +#### Package files +[correlation.go](/src/github.com/montanaflynn/stats/correlation.go) [cumulative_sum.go](/src/github.com/montanaflynn/stats/cumulative_sum.go) [data.go](/src/github.com/montanaflynn/stats/data.go) [deviation.go](/src/github.com/montanaflynn/stats/deviation.go) [distances.go](/src/github.com/montanaflynn/stats/distances.go) [doc.go](/src/github.com/montanaflynn/stats/doc.go) [entropy.go](/src/github.com/montanaflynn/stats/entropy.go) [errors.go](/src/github.com/montanaflynn/stats/errors.go) [legacy.go](/src/github.com/montanaflynn/stats/legacy.go) [load.go](/src/github.com/montanaflynn/stats/load.go) [max.go](/src/github.com/montanaflynn/stats/max.go) [mean.go](/src/github.com/montanaflynn/stats/mean.go) [median.go](/src/github.com/montanaflynn/stats/median.go) [min.go](/src/github.com/montanaflynn/stats/min.go) [mode.go](/src/github.com/montanaflynn/stats/mode.go) [norm.go](/src/github.com/montanaflynn/stats/norm.go) [outlier.go](/src/github.com/montanaflynn/stats/outlier.go) [percentile.go](/src/github.com/montanaflynn/stats/percentile.go) [quartile.go](/src/github.com/montanaflynn/stats/quartile.go) [ranksum.go](/src/github.com/montanaflynn/stats/ranksum.go) [regression.go](/src/github.com/montanaflynn/stats/regression.go) [round.go](/src/github.com/montanaflynn/stats/round.go) [sample.go](/src/github.com/montanaflynn/stats/sample.go) [sigmoid.go](/src/github.com/montanaflynn/stats/sigmoid.go) [softmax.go](/src/github.com/montanaflynn/stats/softmax.go) [sum.go](/src/github.com/montanaflynn/stats/sum.go) [util.go](/src/github.com/montanaflynn/stats/util.go) [variance.go](/src/github.com/montanaflynn/stats/variance.go) + + + +## Variables +``` go +var ( + // ErrEmptyInput Input must not be empty + ErrEmptyInput = statsError{"Input must not be empty."} + // ErrNaN Not a number + ErrNaN = statsError{"Not a number."} + // ErrNegative Must not contain negative values + ErrNegative = statsError{"Must not contain negative values."} + // ErrZero Must not contain zero values + ErrZero = statsError{"Must not contain zero values."} + // ErrBounds Input is outside of range + ErrBounds = statsError{"Input is outside of range."} + // ErrSize Must be the same length + ErrSize = statsError{"Must be the same length."} + // ErrInfValue Value is infinite + ErrInfValue = statsError{"Value is infinite."} + // ErrYCoord Y Value must be greater than zero + ErrYCoord = statsError{"Y Value must be greater than zero."} +) +``` +These are the package-wide error values. +All error identification should use these values. +https://github.com/golang/go/wiki/Errors#naming + +``` go +var ( + EmptyInputErr = ErrEmptyInput + NaNErr = ErrNaN + NegativeErr = ErrNegative + ZeroErr = ErrZero + BoundsErr = ErrBounds + SizeErr = ErrSize + InfValue = ErrInfValue + YCoordErr = ErrYCoord + EmptyInput = ErrEmptyInput +) +``` +Legacy error names that didn't start with Err + + + +## func [AutoCorrelation](/correlation.go?s=853:918#L38) +``` go +func AutoCorrelation(data Float64Data, lags int) (float64, error) +``` +AutoCorrelation is the correlation of a signal with a delayed copy of itself as a function of delay + + + +## func [ChebyshevDistance](/distances.go?s=368:456#L20) +``` go +func ChebyshevDistance(dataPointX, dataPointY Float64Data) (distance float64, err error) +``` +ChebyshevDistance computes the Chebyshev distance between two data sets + + + +## func [Correlation](/correlation.go?s=112:171#L8) +``` go +func Correlation(data1, data2 Float64Data) (float64, error) +``` +Correlation describes the degree of relationship between two sets of data + + + +## func [Covariance](/variance.go?s=1284:1342#L53) +``` go +func Covariance(data1, data2 Float64Data) (float64, error) +``` +Covariance is a measure of how much two sets of data change + + + +## func [CovariancePopulation](/variance.go?s=1864:1932#L81) +``` go +func CovariancePopulation(data1, data2 Float64Data) (float64, error) +``` +CovariancePopulation computes covariance for entire population between two variables. + + + +## func [CumulativeSum](/cumulative_sum.go?s=81:137#L4) +``` go +func CumulativeSum(input Float64Data) ([]float64, error) +``` +CumulativeSum calculates the cumulative sum of the input slice + + + +## func [Entropy](/entropy.go?s=77:125#L6) +``` go +func Entropy(input Float64Data) (float64, error) +``` +Entropy provides calculation of the entropy + + + +## func [EuclideanDistance](/distances.go?s=836:924#L36) +``` go +func EuclideanDistance(dataPointX, dataPointY Float64Data) (distance float64, err error) +``` +EuclideanDistance computes the Euclidean distance between two data sets + + + +## func [GeometricMean](/mean.go?s=319:373#L18) +``` go +func GeometricMean(input Float64Data) (float64, error) +``` +GeometricMean gets the geometric mean for a slice of numbers + + + +## func [HarmonicMean](/mean.go?s=717:770#L40) +``` go +func HarmonicMean(input Float64Data) (float64, error) +``` +HarmonicMean gets the harmonic mean for a slice of numbers + + + +## func [InterQuartileRange](/quartile.go?s=821:880#L45) +``` go +func InterQuartileRange(input Float64Data) (float64, error) +``` +InterQuartileRange finds the range between Q1 and Q3 + + + +## func [ManhattanDistance](/distances.go?s=1277:1365#L50) +``` go +func ManhattanDistance(dataPointX, dataPointY Float64Data) (distance float64, err error) +``` +ManhattanDistance computes the Manhattan distance between two data sets + + + +## func [Max](/max.go?s=78:130#L8) +``` go +func Max(input Float64Data) (max float64, err error) +``` +Max finds the highest number in a slice + + + +## func [Mean](/mean.go?s=77:122#L6) +``` go +func Mean(input Float64Data) (float64, error) +``` +Mean gets the average of a slice of numbers + + + +## func [Median](/median.go?s=85:143#L6) +``` go +func Median(input Float64Data) (median float64, err error) +``` +Median gets the median number in a slice of numbers + + + +## func [MedianAbsoluteDeviation](/deviation.go?s=125:197#L6) +``` go +func MedianAbsoluteDeviation(input Float64Data) (mad float64, err error) +``` +MedianAbsoluteDeviation finds the median of the absolute deviations from the dataset median + + + +## func [MedianAbsoluteDeviationPopulation](/deviation.go?s=360:442#L11) +``` go +func MedianAbsoluteDeviationPopulation(input Float64Data) (mad float64, err error) +``` +MedianAbsoluteDeviationPopulation finds the median of the absolute deviations from the population median + + + +## func [Midhinge](/quartile.go?s=1075:1124#L55) +``` go +func Midhinge(input Float64Data) (float64, error) +``` +Midhinge finds the average of the first and third quartiles + + + +## func [Min](/min.go?s=78:130#L6) +``` go +func Min(input Float64Data) (min float64, err error) +``` +Min finds the lowest number in a set of data + + + +## func [MinkowskiDistance](/distances.go?s=2152:2256#L75) +``` go +func MinkowskiDistance(dataPointX, dataPointY Float64Data, lambda float64) (distance float64, err error) +``` +MinkowskiDistance computes the Minkowski distance between two data sets + +Arguments: + + + dataPointX: First set of data points + dataPointY: Second set of data points. Length of both data + sets must be equal. + lambda: aka p or city blocks; With lambda = 1 + returned distance is manhattan distance and + lambda = 2; it is euclidean distance. Lambda + reaching to infinite - distance would be chebysev + distance. + +Return: + + + Distance or error + + + +## func [Mode](/mode.go?s=85:141#L4) +``` go +func Mode(input Float64Data) (mode []float64, err error) +``` +Mode gets the mode [most frequent value(s)] of a slice of float64s + + + +## func [Ncr](/norm.go?s=7384:7406#L239) +``` go +func Ncr(n, r int) int +``` +Ncr is an N choose R algorithm. +Aaron Cannon's algorithm. + + + +## func [NormBoxMullerRvs](/norm.go?s=667:736#L23) +``` go +func NormBoxMullerRvs(loc float64, scale float64, size int) []float64 +``` +NormBoxMullerRvs generates random variates using the Box–Muller transform. +For more information please visit: http://mathworld.wolfram.com/Box-MullerTransformation.html + + + +## func [NormCdf](/norm.go?s=1826:1885#L52) +``` go +func NormCdf(x float64, loc float64, scale float64) float64 +``` +NormCdf is the cumulative distribution function. + + + +## func [NormEntropy](/norm.go?s=5773:5825#L180) +``` go +func NormEntropy(loc float64, scale float64) float64 +``` +NormEntropy is the differential entropy of the RV. + + + +## func [NormFit](/norm.go?s=6058:6097#L187) +``` go +func NormFit(data []float64) [2]float64 +``` +NormFit returns the maximum likelihood estimators for the Normal Distribution. +Takes array of float64 values. +Returns array of Mean followed by Standard Deviation. + + + +## func [NormInterval](/norm.go?s=6976:7047#L221) +``` go +func NormInterval(alpha float64, loc float64, scale float64) [2]float64 +``` +NormInterval finds endpoints of the range that contains alpha percent of the distribution. + + + +## func [NormIsf](/norm.go?s=4330:4393#L137) +``` go +func NormIsf(p float64, loc float64, scale float64) (x float64) +``` +NormIsf is the inverse survival function (inverse of sf). + + + +## func [NormLogCdf](/norm.go?s=2016:2078#L57) +``` go +func NormLogCdf(x float64, loc float64, scale float64) float64 +``` +NormLogCdf is the log of the cumulative distribution function. + + + +## func [NormLogPdf](/norm.go?s=1590:1652#L47) +``` go +func NormLogPdf(x float64, loc float64, scale float64) float64 +``` +NormLogPdf is the log of the probability density function. + + + +## func [NormLogSf](/norm.go?s=2423:2484#L67) +``` go +func NormLogSf(x float64, loc float64, scale float64) float64 +``` +NormLogSf is the log of the survival function. + + + +## func [NormMean](/norm.go?s=6560:6609#L206) +``` go +func NormMean(loc float64, scale float64) float64 +``` +NormMean is the mean/expected value of the distribution. + + + +## func [NormMedian](/norm.go?s=6431:6482#L201) +``` go +func NormMedian(loc float64, scale float64) float64 +``` +NormMedian is the median of the distribution. + + + +## func [NormMoment](/norm.go?s=4694:4752#L146) +``` go +func NormMoment(n int, loc float64, scale float64) float64 +``` +NormMoment approximates the non-central (raw) moment of order n. +For more information please visit: https://math.stackexchange.com/questions/1945448/methods-for-finding-raw-moments-of-the-normal-distribution + + + +## func [NormPdf](/norm.go?s=1357:1416#L42) +``` go +func NormPdf(x float64, loc float64, scale float64) float64 +``` +NormPdf is the probability density function. + + + +## func [NormPpf](/norm.go?s=2854:2917#L75) +``` go +func NormPpf(p float64, loc float64, scale float64) (x float64) +``` +NormPpf is the point percentile function. +This is based on Peter John Acklam's inverse normal CDF. +algorithm: http://home.online.no/~pjacklam/notes/invnorm/ (no longer visible). +For more information please visit: https://stackedboxes.org/2017/05/01/acklams-normal-quantile-function/ + + + +## func [NormPpfRvs](/norm.go?s=247:310#L12) +``` go +func NormPpfRvs(loc float64, scale float64, size int) []float64 +``` +NormPpfRvs generates random variates using the Point Percentile Function. +For more information please visit: https://demonstrations.wolfram.com/TheMethodOfInverseTransforms/ + + + +## func [NormSf](/norm.go?s=2250:2308#L62) +``` go +func NormSf(x float64, loc float64, scale float64) float64 +``` +NormSf is the survival function (also defined as 1 - cdf, but sf is sometimes more accurate). + + + +## func [NormStats](/norm.go?s=5277:5345#L162) +``` go +func NormStats(loc float64, scale float64, moments string) []float64 +``` +NormStats returns the mean, variance, skew, and/or kurtosis. +Mean(‘m’), variance(‘v’), skew(‘s’), and/or kurtosis(‘k’). +Takes string containing any of 'mvsk'. +Returns array of m v s k in that order. + + + +## func [NormStd](/norm.go?s=6814:6862#L216) +``` go +func NormStd(loc float64, scale float64) float64 +``` +NormStd is the standard deviation of the distribution. + + + +## func [NormVar](/norm.go?s=6675:6723#L211) +``` go +func NormVar(loc float64, scale float64) float64 +``` +NormVar is the variance of the distribution. + + + +## func [Pearson](/correlation.go?s=655:710#L33) +``` go +func Pearson(data1, data2 Float64Data) (float64, error) +``` +Pearson calculates the Pearson product-moment correlation coefficient between two variables + + + +## func [Percentile](/percentile.go?s=98:181#L8) +``` go +func Percentile(input Float64Data, percent float64) (percentile float64, err error) +``` +Percentile finds the relative standing in a slice of floats + + + +## func [PercentileNearestRank](/percentile.go?s=1079:1173#L54) +``` go +func PercentileNearestRank(input Float64Data, percent float64) (percentile float64, err error) +``` +PercentileNearestRank finds the relative standing in a slice of floats using the Nearest Rank method + + + +## func [PopulationVariance](/variance.go?s=828:896#L31) +``` go +func PopulationVariance(input Float64Data) (pvar float64, err error) +``` +PopulationVariance finds the amount of variance within a population + + + +## func [Round](/round.go?s=88:154#L6) +``` go +func Round(input float64, places int) (rounded float64, err error) +``` +Round a float to a specific decimal place or precision + + + +## func [Sample](/sample.go?s=112:192#L9) +``` go +func Sample(input Float64Data, takenum int, replacement bool) ([]float64, error) +``` +Sample returns sample from input with replacement or without + + + +## func [SampleVariance](/variance.go?s=1058:1122#L42) +``` go +func SampleVariance(input Float64Data) (svar float64, err error) +``` +SampleVariance finds the amount of variance within a sample + + + +## func [Sigmoid](/sigmoid.go?s=228:278#L9) +``` go +func Sigmoid(input Float64Data) ([]float64, error) +``` +Sigmoid returns the input values in the range of -1 to 1 +along the sigmoid or s-shaped curve, commonly used in +machine learning while training neural networks as an +activation function. + + + +## func [SoftMax](/softmax.go?s=206:256#L8) +``` go +func SoftMax(input Float64Data) ([]float64, error) +``` +SoftMax returns the input values in the range of 0 to 1 +with sum of all the probabilities being equal to one. It +is commonly used in machine learning neural networks. + + + +## func [StableSample](/sample.go?s=974:1042#L50) +``` go +func StableSample(input Float64Data, takenum int) ([]float64, error) +``` +StableSample like stable sort, it returns samples from input while keeps the order of original data. + + + +## func [StandardDeviation](/deviation.go?s=695:762#L27) +``` go +func StandardDeviation(input Float64Data) (sdev float64, err error) +``` +StandardDeviation the amount of variation in the dataset + + + +## func [StandardDeviationPopulation](/deviation.go?s=892:969#L32) +``` go +func StandardDeviationPopulation(input Float64Data) (sdev float64, err error) +``` +StandardDeviationPopulation finds the amount of variation from the population + + + +## func [StandardDeviationSample](/deviation.go?s=1254:1327#L46) +``` go +func StandardDeviationSample(input Float64Data) (sdev float64, err error) +``` +StandardDeviationSample finds the amount of variation from a sample + + + +## func [StdDevP](/legacy.go?s=339:396#L14) +``` go +func StdDevP(input Float64Data) (sdev float64, err error) +``` +StdDevP is a shortcut to StandardDeviationPopulation + + + +## func [StdDevS](/legacy.go?s=497:554#L19) +``` go +func StdDevS(input Float64Data) (sdev float64, err error) +``` +StdDevS is a shortcut to StandardDeviationSample + + + +## func [Sum](/sum.go?s=78:130#L6) +``` go +func Sum(input Float64Data) (sum float64, err error) +``` +Sum adds all the numbers of a slice together + + + +## func [Trimean](/quartile.go?s=1320:1368#L65) +``` go +func Trimean(input Float64Data) (float64, error) +``` +Trimean finds the average of the median and the midhinge + + + +## func [VarP](/legacy.go?s=59:113#L4) +``` go +func VarP(input Float64Data) (sdev float64, err error) +``` +VarP is a shortcut to PopulationVariance + + + +## func [VarS](/legacy.go?s=193:247#L9) +``` go +func VarS(input Float64Data) (sdev float64, err error) +``` +VarS is a shortcut to SampleVariance + + + +## func [Variance](/variance.go?s=659:717#L26) +``` go +func Variance(input Float64Data) (sdev float64, err error) +``` +Variance the amount of variation in the dataset + + + + +## type [Coordinate](/regression.go?s=143:183#L9) +``` go +type Coordinate struct { + X, Y float64 +} + +``` +Coordinate holds the data in a series + + + + + + + +### func [ExpReg](/legacy.go?s=791:856#L29) +``` go +func ExpReg(s []Coordinate) (regressions []Coordinate, err error) +``` +ExpReg is a shortcut to ExponentialRegression + + +### func [LinReg](/legacy.go?s=643:708#L24) +``` go +func LinReg(s []Coordinate) (regressions []Coordinate, err error) +``` +LinReg is a shortcut to LinearRegression + + +### func [LogReg](/legacy.go?s=944:1009#L34) +``` go +func LogReg(s []Coordinate) (regressions []Coordinate, err error) +``` +LogReg is a shortcut to LogarithmicRegression + + + + + +## type [Float64Data](/data.go?s=80:106#L4) +``` go +type Float64Data []float64 +``` +Float64Data is a named type for []float64 with helper methods + + + + + + + +### func [LoadRawData](/load.go?s=119:168#L9) +``` go +func LoadRawData(raw interface{}) (f Float64Data) +``` +LoadRawData parses and converts a slice of mixed data types to floats + + + + + +### func (Float64Data) [AutoCorrelation](/data.go?s=3257:3320#L91) +``` go +func (f Float64Data) AutoCorrelation(lags int) (float64, error) +``` +AutoCorrelation is the correlation of a signal with a delayed copy of itself as a function of delay + + + + +### func (Float64Data) [Correlation](/data.go?s=3058:3122#L86) +``` go +func (f Float64Data) Correlation(d Float64Data) (float64, error) +``` +Correlation describes the degree of relationship between two sets of data + + + + +### func (Float64Data) [Covariance](/data.go?s=4801:4864#L141) +``` go +func (f Float64Data) Covariance(d Float64Data) (float64, error) +``` +Covariance is a measure of how much two sets of data change + + + + +### func (Float64Data) [CovariancePopulation](/data.go?s=4983:5056#L146) +``` go +func (f Float64Data) CovariancePopulation(d Float64Data) (float64, error) +``` +CovariancePopulation computes covariance for entire population between two variables + + + + +### func (Float64Data) [CumulativeSum](/data.go?s=883:938#L28) +``` go +func (f Float64Data) CumulativeSum() ([]float64, error) +``` +CumulativeSum returns the cumulative sum of the data + + + + +### func (Float64Data) [Entropy](/data.go?s=5480:5527#L162) +``` go +func (f Float64Data) Entropy() (float64, error) +``` +Entropy provides calculation of the entropy + + + + +### func (Float64Data) [GeometricMean](/data.go?s=1332:1385#L40) +``` go +func (f Float64Data) GeometricMean() (float64, error) +``` +GeometricMean returns the median of the data + + + + +### func (Float64Data) [Get](/data.go?s=129:168#L7) +``` go +func (f Float64Data) Get(i int) float64 +``` +Get item in slice + + + + +### func (Float64Data) [HarmonicMean](/data.go?s=1460:1512#L43) +``` go +func (f Float64Data) HarmonicMean() (float64, error) +``` +HarmonicMean returns the mode of the data + + + + +### func (Float64Data) [InterQuartileRange](/data.go?s=3755:3813#L106) +``` go +func (f Float64Data) InterQuartileRange() (float64, error) +``` +InterQuartileRange finds the range between Q1 and Q3 + + + + +### func (Float64Data) [Len](/data.go?s=217:247#L10) +``` go +func (f Float64Data) Len() int +``` +Len returns length of slice + + + + +### func (Float64Data) [Less](/data.go?s=318:358#L13) +``` go +func (f Float64Data) Less(i, j int) bool +``` +Less returns if one number is less than another + + + + +### func (Float64Data) [Max](/data.go?s=645:688#L22) +``` go +func (f Float64Data) Max() (float64, error) +``` +Max returns the maximum number in the data + + + + +### func (Float64Data) [Mean](/data.go?s=1005:1049#L31) +``` go +func (f Float64Data) Mean() (float64, error) +``` +Mean returns the mean of the data + + + + +### func (Float64Data) [Median](/data.go?s=1111:1157#L34) +``` go +func (f Float64Data) Median() (float64, error) +``` +Median returns the median of the data + + + + +### func (Float64Data) [MedianAbsoluteDeviation](/data.go?s=1630:1693#L46) +``` go +func (f Float64Data) MedianAbsoluteDeviation() (float64, error) +``` +MedianAbsoluteDeviation the median of the absolute deviations from the dataset median + + + + +### func (Float64Data) [MedianAbsoluteDeviationPopulation](/data.go?s=1842:1915#L51) +``` go +func (f Float64Data) MedianAbsoluteDeviationPopulation() (float64, error) +``` +MedianAbsoluteDeviationPopulation finds the median of the absolute deviations from the population median + + + + +### func (Float64Data) [Midhinge](/data.go?s=3912:3973#L111) +``` go +func (f Float64Data) Midhinge(d Float64Data) (float64, error) +``` +Midhinge finds the average of the first and third quartiles + + + + +### func (Float64Data) [Min](/data.go?s=536:579#L19) +``` go +func (f Float64Data) Min() (float64, error) +``` +Min returns the minimum number in the data + + + + +### func (Float64Data) [Mode](/data.go?s=1217:1263#L37) +``` go +func (f Float64Data) Mode() ([]float64, error) +``` +Mode returns the mode of the data + + + + +### func (Float64Data) [Pearson](/data.go?s=3455:3515#L96) +``` go +func (f Float64Data) Pearson(d Float64Data) (float64, error) +``` +Pearson calculates the Pearson product-moment correlation coefficient between two variables. + + + + +### func (Float64Data) [Percentile](/data.go?s=2696:2755#L76) +``` go +func (f Float64Data) Percentile(p float64) (float64, error) +``` +Percentile finds the relative standing in a slice of floats + + + + +### func (Float64Data) [PercentileNearestRank](/data.go?s=2869:2939#L81) +``` go +func (f Float64Data) PercentileNearestRank(p float64) (float64, error) +``` +PercentileNearestRank finds the relative standing using the Nearest Rank method + + + + +### func (Float64Data) [PopulationVariance](/data.go?s=4495:4553#L131) +``` go +func (f Float64Data) PopulationVariance() (float64, error) +``` +PopulationVariance finds the amount of variance within a population + + + + +### func (Float64Data) [Quartile](/data.go?s=3610:3673#L101) +``` go +func (f Float64Data) Quartile(d Float64Data) (Quartiles, error) +``` +Quartile returns the three quartile points from a slice of data + + + + +### func (Float64Data) [QuartileOutliers](/data.go?s=2542:2599#L71) +``` go +func (f Float64Data) QuartileOutliers() (Outliers, error) +``` +QuartileOutliers finds the mild and extreme outliers + + + + +### func (Float64Data) [Quartiles](/data.go?s=5628:5679#L167) +``` go +func (f Float64Data) Quartiles() (Quartiles, error) +``` +Quartiles returns the three quartile points from instance of Float64Data + + + + +### func (Float64Data) [Sample](/data.go?s=4208:4269#L121) +``` go +func (f Float64Data) Sample(n int, r bool) ([]float64, error) +``` +Sample returns sample from input with replacement or without + + + + +### func (Float64Data) [SampleVariance](/data.go?s=4652:4706#L136) +``` go +func (f Float64Data) SampleVariance() (float64, error) +``` +SampleVariance finds the amount of variance within a sample + + + + +### func (Float64Data) [Sigmoid](/data.go?s=5169:5218#L151) +``` go +func (f Float64Data) Sigmoid() ([]float64, error) +``` +Sigmoid returns the input values along the sigmoid or s-shaped curve + + + + +### func (Float64Data) [SoftMax](/data.go?s=5359:5408#L157) +``` go +func (f Float64Data) SoftMax() ([]float64, error) +``` +SoftMax returns the input values in the range of 0 to 1 +with sum of all the probabilities being equal to one. + + + + +### func (Float64Data) [StandardDeviation](/data.go?s=2026:2083#L56) +``` go +func (f Float64Data) StandardDeviation() (float64, error) +``` +StandardDeviation the amount of variation in the dataset + + + + +### func (Float64Data) [StandardDeviationPopulation](/data.go?s=2199:2266#L61) +``` go +func (f Float64Data) StandardDeviationPopulation() (float64, error) +``` +StandardDeviationPopulation finds the amount of variation from the population + + + + +### func (Float64Data) [StandardDeviationSample](/data.go?s=2382:2445#L66) +``` go +func (f Float64Data) StandardDeviationSample() (float64, error) +``` +StandardDeviationSample finds the amount of variation from a sample + + + + +### func (Float64Data) [Sum](/data.go?s=764:807#L25) +``` go +func (f Float64Data) Sum() (float64, error) +``` +Sum returns the total of all the numbers in the data + + + + +### func (Float64Data) [Swap](/data.go?s=425:460#L16) +``` go +func (f Float64Data) Swap(i, j int) +``` +Swap switches out two numbers in slice + + + + +### func (Float64Data) [Trimean](/data.go?s=4059:4119#L116) +``` go +func (f Float64Data) Trimean(d Float64Data) (float64, error) +``` +Trimean finds the average of the median and the midhinge + + + + +### func (Float64Data) [Variance](/data.go?s=4350:4398#L126) +``` go +func (f Float64Data) Variance() (float64, error) +``` +Variance the amount of variation in the dataset + + + + +## type [Outliers](/outlier.go?s=73:139#L4) +``` go +type Outliers struct { + Mild Float64Data + Extreme Float64Data +} + +``` +Outliers holds mild and extreme outliers found in data + + + + + + + +### func [QuartileOutliers](/outlier.go?s=197:255#L10) +``` go +func QuartileOutliers(input Float64Data) (Outliers, error) +``` +QuartileOutliers finds the mild and extreme outliers + + + + + +## type [Quartiles](/quartile.go?s=75:136#L6) +``` go +type Quartiles struct { + Q1 float64 + Q2 float64 + Q3 float64 +} + +``` +Quartiles holds the three quartile points + + + + + + + +### func [Quartile](/quartile.go?s=205:256#L13) +``` go +func Quartile(input Float64Data) (Quartiles, error) +``` +Quartile returns the three quartile points from a slice of data + + + + + +## type [Series](/regression.go?s=76:100#L6) +``` go +type Series []Coordinate +``` +Series is a container for a series of data + + + + + + + +### func [ExponentialRegression](/regression.go?s=1089:1157#L50) +``` go +func ExponentialRegression(s Series) (regressions Series, err error) +``` +ExponentialRegression returns an exponential regression on data series + + +### func [LinearRegression](/regression.go?s=262:325#L14) +``` go +func LinearRegression(s Series) (regressions Series, err error) +``` +LinearRegression finds the least squares linear regression on data series + + +### func [LogarithmicRegression](/regression.go?s=1903:1971#L85) +``` go +func LogarithmicRegression(s Series) (regressions Series, err error) +``` +LogarithmicRegression returns an logarithmic regression on data series + + + + + + + + + +- - - +Generated by [godoc2md](http://godoc.org/github.com/davecheney/godoc2md) diff --git a/vendor/github.com/montanaflynn/stats/LICENSE b/vendor/github.com/montanaflynn/stats/LICENSE index 664818176..159096129 100644 --- a/vendor/github.com/montanaflynn/stats/LICENSE +++ b/vendor/github.com/montanaflynn/stats/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2014-2015 Montana Flynn (https://anonfunction.com) +Copyright (c) 2014-2020 Montana Flynn (https://montanaflynn.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/github.com/montanaflynn/stats/Makefile b/vendor/github.com/montanaflynn/stats/Makefile index 87844f485..969df1280 100644 --- a/vendor/github.com/montanaflynn/stats/Makefile +++ b/vendor/github.com/montanaflynn/stats/Makefile @@ -1,13 +1,9 @@ .PHONY: all -doc: - godoc `pwd` - -webdoc: - godoc -http=:44444 +default: test lint format: - go fmt + go fmt . test: go test -race @@ -22,8 +18,17 @@ coverage: go tool cover -html="coverage.out" lint: format - go get github.com/alecthomas/gometalinter - gometalinter --install - gometalinter + golangci-lint run . + +docs: + godoc2md github.com/montanaflynn/stats | sed -e s#src/target/##g > DOCUMENTATION.md + +release: + git-chglog --output CHANGELOG.md --next-tag ${TAG} + git add CHANGELOG.md + git commit -m "Update changelog with ${TAG} changes" + git tag ${TAG} + git-chglog $(TAG) | tail -n +4 | gsed '1s/^/$(TAG)\n/gm' > release-notes.txt + git push origin master ${TAG} + hub release create --copy -F release-notes.txt ${TAG} -default: lint test diff --git a/vendor/github.com/montanaflynn/stats/README.md b/vendor/github.com/montanaflynn/stats/README.md index 5f8a9291b..d9ca440fd 100644 --- a/vendor/github.com/montanaflynn/stats/README.md +++ b/vendor/github.com/montanaflynn/stats/README.md @@ -1,8 +1,10 @@ -# Stats [![][travis-svg]][travis-url] [![][coveralls-svg]][coveralls-url] [![][godoc-svg]][godoc-url] [![][license-svg]][license-url] +# Stats - Golang Statistics Package -A statistics package with many functions missing from the Golang standard library. See the [CHANGELOG.md](https://github.com/montanaflynn/stats/blob/master/CHANGELOG.md) for API changes and tagged releases you can vendor into your projects. +[![][travis-svg]][travis-url] [![][coveralls-svg]][coveralls-url] [![][goreport-svg]][goreport-url] [![][godoc-svg]][godoc-url] [![][pkggodev-svg]][pkggodev-url] [![][license-svg]][license-url] -> Statistics are used much like a drunk uses a lamppost: for support, not illumination. **- Vin Scully** +A well tested and comprehensive Golang statistics library / package / module with no dependencies. + +If you have any suggestions, problems or bug reports please [create an issue](https://github.com/montanaflynn/stats/issues) and I'll do my best to accommodate you. In addition simply starring the repo would show your support for the project and be very much appreciated! ## Installation @@ -10,79 +12,199 @@ A statistics package with many functions missing from the Golang standard librar go get github.com/montanaflynn/stats ``` -**Protip:** `go get -u github.com/montanaflynn/stats` updates stats to the latest version. - -## Usage - -The [entire API documentation](http://godoc.org/github.com/montanaflynn/stats) is available on GoDoc.org - -You can view docs offline with the following commands: - -``` -godoc ./ -godoc ./ Median -godoc ./ Float64Data -``` - -**Protip:** Generate HTML docs with `godoc -http=:4444` +## Example Usage -## Example - -All the functions can be seen in [examples/main.go](https://github.com/montanaflynn/stats/blob/master/examples/main.go) but here's a little taste: +All the functions can be seen in [examples/main.go](examples/main.go) but here's a little taste: ```go -// start with the some source data to use -var data = []float64{1, 2, 3, 4, 4, 5} +// start with some source data to use +data := []float64{1.0, 2.1, 3.2, 4.823, 4.1, 5.8} + +// you could also use different types like this +// data := stats.LoadRawData([]int{1, 2, 3, 4, 5}) +// data := stats.LoadRawData([]interface{}{1.1, "2", 3}) +// etc... median, _ := stats.Median(data) -fmt.Println(median) // 3.5 +fmt.Println(median) // 3.65 roundedMedian, _ := stats.Round(median, 0) fmt.Println(roundedMedian) // 4 ``` -**Protip:** You can [call methods](https://github.com/montanaflynn/stats/blob/master/examples/methods.go) on the data if using the Float64Data type: +## Documentation -``` -var d stats.Float64Data = data +The entire API documentation is available on [GoDoc.org](http://godoc.org/github.com/montanaflynn/stats) or [pkg.go.dev](https://pkg.go.dev/github.com/montanaflynn/stats). + +You can also view docs offline with the following commands: -max, _ := d.Max() -fmt.Println(max) // 5 +``` +# Command line +godoc . # show all exported apis +godoc . Median # show a single function +godoc -ex . Round # show function with example +godoc . Float64Data # show the type and methods + +# Local website +godoc -http=:4444 # start the godoc server on port 4444 +open http://localhost:4444/pkg/github.com/montanaflynn/stats/ ``` -## Contributing +The exported API is as follows: -If you have any suggestions, criticism or bug reports please [create an issue](https://github.com/montanaflynn/stats/issues) and I'll do my best to accommodate you. In addition simply starring the repo would show your support for the project and be very much appreciated! +```go +var ( + ErrEmptyInput = statsError{"Input must not be empty."} + ErrNaN = statsError{"Not a number."} + ErrNegative = statsError{"Must not contain negative values."} + ErrZero = statsError{"Must not contain zero values."} + ErrBounds = statsError{"Input is outside of range."} + ErrSize = statsError{"Must be the same length."} + ErrInfValue = statsError{"Value is infinite."} + ErrYCoord = statsError{"Y Value must be greater than zero."} +) + +func Round(input float64, places int) (rounded float64, err error) {} + +type Float64Data []float64 + +func LoadRawData(raw interface{}) (f Float64Data) {} + +func AutoCorrelation(data Float64Data, lags int) (float64, error) {} +func ChebyshevDistance(dataPointX, dataPointY Float64Data) (distance float64, err error) {} +func Correlation(data1, data2 Float64Data) (float64, error) {} +func Covariance(data1, data2 Float64Data) (float64, error) {} +func CovariancePopulation(data1, data2 Float64Data) (float64, error) {} +func CumulativeSum(input Float64Data) ([]float64, error) {} +func Entropy(input Float64Data) (float64, error) {} +func EuclideanDistance(dataPointX, dataPointY Float64Data) (distance float64, err error) {} +func GeometricMean(input Float64Data) (float64, error) {} +func HarmonicMean(input Float64Data) (float64, error) {} +func InterQuartileRange(input Float64Data) (float64, error) {} +func ManhattanDistance(dataPointX, dataPointY Float64Data) (distance float64, err error) {} +func Max(input Float64Data) (max float64, err error) {} +func Mean(input Float64Data) (float64, error) {} +func Median(input Float64Data) (median float64, err error) {} +func MedianAbsoluteDeviation(input Float64Data) (mad float64, err error) {} +func MedianAbsoluteDeviationPopulation(input Float64Data) (mad float64, err error) {} +func Midhinge(input Float64Data) (float64, error) {} +func Min(input Float64Data) (min float64, err error) {} +func MinkowskiDistance(dataPointX, dataPointY Float64Data, lambda float64) (distance float64, err error) {} +func Mode(input Float64Data) (mode []float64, err error) {} +func NormBoxMullerRvs(loc float64, scale float64, size int) []float64 {} +func NormCdf(x float64, loc float64, scale float64) float64 {} +func NormEntropy(loc float64, scale float64) float64 {} +func NormFit(data []float64) [2]float64{} +func NormInterval(alpha float64, loc float64, scale float64 ) [2]float64 {} +func NormIsf(p float64, loc float64, scale float64) (x float64) {} +func NormLogCdf(x float64, loc float64, scale float64) float64 {} +func NormLogPdf(x float64, loc float64, scale float64) float64 {} +func NormLogSf(x float64, loc float64, scale float64) float64 {} +func NormMean(loc float64, scale float64) float64 {} +func NormMedian(loc float64, scale float64) float64 {} +func NormMoment(n int, loc float64, scale float64) float64 {} +func NormPdf(x float64, loc float64, scale float64) float64 {} +func NormPpf(p float64, loc float64, scale float64) (x float64) {} +func NormPpfRvs(loc float64, scale float64, size int) []float64 {} +func NormSf(x float64, loc float64, scale float64) float64 {} +func NormStats(loc float64, scale float64, moments string) []float64 {} +func NormStd(loc float64, scale float64) float64 {} +func NormVar(loc float64, scale float64) float64 {} +func Pearson(data1, data2 Float64Data) (float64, error) {} +func Percentile(input Float64Data, percent float64) (percentile float64, err error) {} +func PercentileNearestRank(input Float64Data, percent float64) (percentile float64, err error) {} +func PopulationVariance(input Float64Data) (pvar float64, err error) {} +func Sample(input Float64Data, takenum int, replacement bool) ([]float64, error) {} +func SampleVariance(input Float64Data) (svar float64, err error) {} +func Sigmoid(input Float64Data) ([]float64, error) {} +func SoftMax(input Float64Data) ([]float64, error) {} +func StableSample(input Float64Data, takenum int) ([]float64, error) {} +func StandardDeviation(input Float64Data) (sdev float64, err error) {} +func StandardDeviationPopulation(input Float64Data) (sdev float64, err error) {} +func StandardDeviationSample(input Float64Data) (sdev float64, err error) {} +func StdDevP(input Float64Data) (sdev float64, err error) {} +func StdDevS(input Float64Data) (sdev float64, err error) {} +func Sum(input Float64Data) (sum float64, err error) {} +func Trimean(input Float64Data) (float64, error) {} +func VarP(input Float64Data) (sdev float64, err error) {} +func VarS(input Float64Data) (sdev float64, err error) {} +func Variance(input Float64Data) (sdev float64, err error) {} +func ProbGeom(a int, b int, p float64) (prob float64, err error) {} +func ExpGeom(p float64) (exp float64, err error) {} +func VarGeom(p float64) (exp float64, err error) {} + +type Coordinate struct { + X, Y float64 +} + +type Series []Coordinate + +func ExponentialRegression(s Series) (regressions Series, err error) {} +func LinearRegression(s Series) (regressions Series, err error) {} +func LogarithmicRegression(s Series) (regressions Series, err error) {} + +type Outliers struct { + Mild Float64Data + Extreme Float64Data +} + +type Quartiles struct { + Q1 float64 + Q2 float64 + Q3 float64 +} + +func Quartile(input Float64Data) (Quartiles, error) {} +func QuartileOutliers(input Float64Data) (Outliers, error) {} +``` -### Pull Requests +## Contributing -Pull request are always welcome no matter how big or small. Here's an easy way to do it: +Pull request are always welcome no matter how big or small. I've included a [Makefile](https://github.com/montanaflynn/stats/blob/master/Makefile) that has a lot of helper targets for common actions such as linting, testing, code coverage reporting and more. -1. Fork it and clone your fork +1. Fork the repo and clone your fork 2. Create new branch (`git checkout -b some-thing`) 3. Make the desired changes 4. Ensure tests pass (`go test -cover` or `make test`) -5. Commit changes (`git commit -am 'Did something'`) -6. Push branch (`git push origin some-thing`) -7. Submit pull request +5. Run lint and fix problems (`go vet .` or `make lint`) +6. Commit changes (`git commit -am 'Did something'`) +7. Push branch (`git push origin some-thing`) +8. Submit pull request To make things as seamless as possible please also consider the following steps: -- Update `README.md` to include new public types or functions in the documentation section. -- Update `examples/main.go` with a simple example of the new feature. -- Keep 100% code coverage (you can check with `make coverage`). -- Run [`gometalinter`](https://github.com/alecthomas/gometalinter) and make your code pass. -- Squash needless commits into single units of work with `git rebase -i new-feature`. +- Update `examples/main.go` with a simple example of the new feature +- Update `README.md` documentation section with any new exported API +- Keep 100% code coverage (you can check with `make coverage`) +- Squash commits into single units of work with `git rebase -i new-feature` + +## Releasing + +To release a new version we should update the [CHANGELOG.md](/CHANGELOG.md) and [DOCUMENTATION.md](/DOCUMENTATION.md). -#### Makefile +First install the tools used to generate the markdown files: -I've included a [Makefile](https://github.com/montanaflynn/stats/blob/master/Makefile) that has a lot of helper targets for common actions such as linting, testing, code coverage reporting and more. +``` +go get github.com/davecheney/godoc2md +go get github.com/golangci/golangci-lint/cmd/golangci-lint +``` -**Protip:** `watch -n 1 make check` will continuously format and test your code. +Then you can run these `make` directives: + +``` +# Generate DOCUMENTATION.md +make docs +``` + +Then we can create a [CHANGELOG.md](/CHANGELOG.md) a new git tag and a github release: + +``` +make release TAG=v0.x.x +``` ## MIT License -Copyright (c) 2014-2015 Montana Flynn +Copyright (c) 2014-2021 Montana Flynn (https://montanaflynn.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: @@ -96,8 +218,14 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI [coveralls-url]: https://coveralls.io/r/montanaflynn/stats?branch=master [coveralls-svg]: https://img.shields.io/coveralls/montanaflynn/stats.svg +[goreport-url]: https://goreportcard.com/report/github.com/montanaflynn/stats +[goreport-svg]: https://goreportcard.com/badge/github.com/montanaflynn/stats + [godoc-url]: https://godoc.org/github.com/montanaflynn/stats [godoc-svg]: https://godoc.org/github.com/montanaflynn/stats?status.svg +[pkggodev-url]: https://pkg.go.dev/github.com/montanaflynn/stats +[pkggodev-svg]: https://gistcdn.githack.com/montanaflynn/b02f1d78d8c0de8435895d7e7cd0d473/raw/17f2a5a69f1323ecd42c00e0683655da96d9ecc8/badge.svg + [license-url]: https://github.com/montanaflynn/stats/blob/master/LICENSE [license-svg]: https://img.shields.io/badge/license-MIT-blue.svg diff --git a/vendor/github.com/montanaflynn/stats/correlation.go b/vendor/github.com/montanaflynn/stats/correlation.go index d759bf8c4..4acab94dc 100644 --- a/vendor/github.com/montanaflynn/stats/correlation.go +++ b/vendor/github.com/montanaflynn/stats/correlation.go @@ -1,6 +1,8 @@ package stats -import "math" +import ( + "math" +) // Correlation describes the degree of relationship between two sets of data func Correlation(data1, data2 Float64Data) (float64, error) { @@ -9,7 +11,7 @@ func Correlation(data1, data2 Float64Data) (float64, error) { l2 := data2.Len() if l1 == 0 || l2 == 0 { - return math.NaN(), EmptyInput + return math.NaN(), EmptyInputErr } if l1 != l2 { @@ -27,7 +29,32 @@ func Correlation(data1, data2 Float64Data) (float64, error) { return covp / (sdev1 * sdev2), nil } -// Pearson calculates the Pearson product-moment correlation coefficient between two variables. +// Pearson calculates the Pearson product-moment correlation coefficient between two variables func Pearson(data1, data2 Float64Data) (float64, error) { return Correlation(data1, data2) } + +// AutoCorrelation is the correlation of a signal with a delayed copy of itself as a function of delay +func AutoCorrelation(data Float64Data, lags int) (float64, error) { + if len(data) < 1 { + return 0, EmptyInputErr + } + + mean, _ := Mean(data) + + var result, q float64 + + for i := 0; i < lags; i++ { + v := (data[0] - mean) * (data[0] - mean) + for i := 1; i < len(data); i++ { + delta0 := data[i-1] - mean + delta1 := data[i] - mean + q += (delta0*delta1 - q) / float64(i+1) + v += (delta1*delta1 - v) / float64(i+1) + } + + result = q / v + } + + return result, nil +} diff --git a/vendor/github.com/montanaflynn/stats/data.go b/vendor/github.com/montanaflynn/stats/data.go index faaffeff8..b86f0d84d 100644 --- a/vendor/github.com/montanaflynn/stats/data.go +++ b/vendor/github.com/montanaflynn/stats/data.go @@ -87,6 +87,11 @@ func (f Float64Data) Correlation(d Float64Data) (float64, error) { return Correlation(f, d) } +// AutoCorrelation is the correlation of a signal with a delayed copy of itself as a function of delay +func (f Float64Data) AutoCorrelation(lags int) (float64, error) { + return AutoCorrelation(f, lags) +} + // Pearson calculates the Pearson product-moment correlation coefficient between two variables. func (f Float64Data) Pearson(d Float64Data) (float64, error) { return Pearson(f, d) @@ -137,7 +142,28 @@ func (f Float64Data) Covariance(d Float64Data) (float64, error) { return Covariance(f, d) } -// CovariancePopulation computes covariance for entire population between two variables. +// CovariancePopulation computes covariance for entire population between two variables func (f Float64Data) CovariancePopulation(d Float64Data) (float64, error) { return CovariancePopulation(f, d) } + +// Sigmoid returns the input values along the sigmoid or s-shaped curve +func (f Float64Data) Sigmoid() ([]float64, error) { + return Sigmoid(f) +} + +// SoftMax returns the input values in the range of 0 to 1 +// with sum of all the probabilities being equal to one. +func (f Float64Data) SoftMax() ([]float64, error) { + return SoftMax(f) +} + +// Entropy provides calculation of the entropy +func (f Float64Data) Entropy() (float64, error) { + return Entropy(f) +} + +// Quartiles returns the three quartile points from instance of Float64Data +func (f Float64Data) Quartiles() (Quartiles, error) { + return Quartile(f) +} diff --git a/vendor/github.com/montanaflynn/stats/deviation.go b/vendor/github.com/montanaflynn/stats/deviation.go index 539c02bcf..e69a19f60 100644 --- a/vendor/github.com/montanaflynn/stats/deviation.go +++ b/vendor/github.com/montanaflynn/stats/deviation.go @@ -10,7 +10,7 @@ func MedianAbsoluteDeviation(input Float64Data) (mad float64, err error) { // MedianAbsoluteDeviationPopulation finds the median of the absolute deviations from the population median func MedianAbsoluteDeviationPopulation(input Float64Data) (mad float64, err error) { if input.Len() == 0 { - return math.NaN(), EmptyInput + return math.NaN(), EmptyInputErr } i := copyslice(input) @@ -32,26 +32,26 @@ func StandardDeviation(input Float64Data) (sdev float64, err error) { func StandardDeviationPopulation(input Float64Data) (sdev float64, err error) { if input.Len() == 0 { - return math.NaN(), EmptyInput + return math.NaN(), EmptyInputErr } // Get the population variance vp, _ := PopulationVariance(input) // Return the population standard deviation - return math.Pow(vp, 0.5), nil + return math.Sqrt(vp), nil } // StandardDeviationSample finds the amount of variation from a sample func StandardDeviationSample(input Float64Data) (sdev float64, err error) { if input.Len() == 0 { - return math.NaN(), EmptyInput + return math.NaN(), EmptyInputErr } // Get the sample variance vs, _ := SampleVariance(input) // Return the sample standard deviation - return math.Pow(vs, 0.5), nil + return math.Sqrt(vs), nil } diff --git a/vendor/github.com/montanaflynn/stats/distances.go b/vendor/github.com/montanaflynn/stats/distances.go index 965fffa6e..c2b7d8f8e 100644 --- a/vendor/github.com/montanaflynn/stats/distances.go +++ b/vendor/github.com/montanaflynn/stats/distances.go @@ -5,9 +5,9 @@ import ( ) // Validate data for distance calculation -func validateData(dataPointX, dataPointY []float64) error { +func validateData(dataPointX, dataPointY Float64Data) error { if len(dataPointX) == 0 || len(dataPointY) == 0 { - return EmptyInput + return EmptyInputErr } if len(dataPointX) != len(dataPointY) { @@ -17,7 +17,7 @@ func validateData(dataPointX, dataPointY []float64) error { } // ChebyshevDistance computes the Chebyshev distance between two data sets -func ChebyshevDistance(dataPointX, dataPointY []float64) (distance float64, err error) { +func ChebyshevDistance(dataPointX, dataPointY Float64Data) (distance float64, err error) { err = validateData(dataPointX, dataPointY) if err != nil { return math.NaN(), err @@ -32,10 +32,8 @@ func ChebyshevDistance(dataPointX, dataPointY []float64) (distance float64, err return distance, nil } -// // EuclideanDistance computes the Euclidean distance between two data sets -// -func EuclideanDistance(dataPointX, dataPointY []float64) (distance float64, err error) { +func EuclideanDistance(dataPointX, dataPointY Float64Data) (distance float64, err error) { err = validateData(dataPointX, dataPointY) if err != nil { @@ -48,10 +46,8 @@ func EuclideanDistance(dataPointX, dataPointY []float64) (distance float64, err return math.Sqrt(distance), nil } -// // ManhattanDistance computes the Manhattan distance between two data sets -// -func ManhattanDistance(dataPointX, dataPointY []float64) (distance float64, err error) { +func ManhattanDistance(dataPointX, dataPointY Float64Data) (distance float64, err error) { err = validateData(dataPointX, dataPointY) if err != nil { return math.NaN(), err @@ -63,10 +59,9 @@ func ManhattanDistance(dataPointX, dataPointY []float64) (distance float64, err return distance, nil } +// MinkowskiDistance computes the Minkowski distance between two data sets // -// MinkowskiDistance computes the Minkowski distance between two data sets. -// -// Input: +// Arguments: // dataPointX: First set of data points // dataPointY: Second set of data points. Length of both data // sets must be equal. @@ -75,10 +70,9 @@ func ManhattanDistance(dataPointX, dataPointY []float64) (distance float64, err // lambda = 2; it is euclidean distance. Lambda // reaching to infinite - distance would be chebysev // distance. -// Output: +// Return: // Distance or error -// -func MinkowskiDistance(dataPointX, dataPointY []float64, lambda float64) (distance float64, err error) { +func MinkowskiDistance(dataPointX, dataPointY Float64Data, lambda float64) (distance float64, err error) { err = validateData(dataPointX, dataPointY) if err != nil { return math.NaN(), err diff --git a/vendor/github.com/montanaflynn/stats/doc.go b/vendor/github.com/montanaflynn/stats/doc.go new file mode 100644 index 000000000..facb8d57b --- /dev/null +++ b/vendor/github.com/montanaflynn/stats/doc.go @@ -0,0 +1,23 @@ +/* +Package stats is a well tested and comprehensive +statistics library package with no dependencies. + +Example Usage: + + // start with some source data to use + data := []float64{1.0, 2.1, 3.2, 4.823, 4.1, 5.8} + + // you could also use different types like this + // data := stats.LoadRawData([]int{1, 2, 3, 4, 5}) + // data := stats.LoadRawData([]interface{}{1.1, "2", 3}) + // etc... + + median, _ := stats.Median(data) + fmt.Println(median) // 3.65 + + roundedMedian, _ := stats.Round(median, 0) + fmt.Println(roundedMedian) // 4 + +MIT License Copyright (c) 2014-2020 Montana Flynn (https://montanaflynn.com) +*/ +package stats diff --git a/vendor/github.com/montanaflynn/stats/entropy.go b/vendor/github.com/montanaflynn/stats/entropy.go new file mode 100644 index 000000000..95263b0fc --- /dev/null +++ b/vendor/github.com/montanaflynn/stats/entropy.go @@ -0,0 +1,31 @@ +package stats + +import "math" + +// Entropy provides calculation of the entropy +func Entropy(input Float64Data) (float64, error) { + input, err := normalize(input) + if err != nil { + return math.NaN(), err + } + var result float64 + for i := 0; i < input.Len(); i++ { + v := input.Get(i) + if v == 0 { + continue + } + result += (v * math.Log(v)) + } + return -result, nil +} + +func normalize(input Float64Data) (Float64Data, error) { + sum, err := input.Sum() + if err != nil { + return Float64Data{}, err + } + for i := 0; i < input.Len(); i++ { + input[i] = input[i] / sum + } + return input, nil +} diff --git a/vendor/github.com/montanaflynn/stats/errors.go b/vendor/github.com/montanaflynn/stats/errors.go index 0bb32f0dd..95f82ff7b 100644 --- a/vendor/github.com/montanaflynn/stats/errors.go +++ b/vendor/github.com/montanaflynn/stats/errors.go @@ -1,22 +1,35 @@ package stats -type statsErr struct { +type statsError struct { err string } -func (s statsErr) Error() string { +func (s statsError) Error() string { + return s.err +} + +func (s statsError) String() string { return s.err } // These are the package-wide error values. // All error identification should use these values. +// https://github.com/golang/go/wiki/Errors#naming var ( - EmptyInput = statsErr{"Input must not be empty."} - SampleSize = statsErr{"Samples number must be less than input length."} - NaNErr = statsErr{"Not a number"} - NegativeErr = statsErr{"Slice must not contain negative values."} - ZeroErr = statsErr{"Slice must not contain zero values."} - BoundsErr = statsErr{"Input is outside of range."} - SizeErr = statsErr{"Slices must be the same length."} - InfValue = statsErr{"Value is infinite."} + // ErrEmptyInput Input must not be empty + ErrEmptyInput = statsError{"Input must not be empty."} + // ErrNaN Not a number + ErrNaN = statsError{"Not a number."} + // ErrNegative Must not contain negative values + ErrNegative = statsError{"Must not contain negative values."} + // ErrZero Must not contain zero values + ErrZero = statsError{"Must not contain zero values."} + // ErrBounds Input is outside of range + ErrBounds = statsError{"Input is outside of range."} + // ErrSize Must be the same length + ErrSize = statsError{"Must be the same length."} + // ErrInfValue Value is infinite + ErrInfValue = statsError{"Value is infinite."} + // ErrYCoord Y Value must be greater than zero + ErrYCoord = statsError{"Y Value must be greater than zero."} ) diff --git a/vendor/github.com/montanaflynn/stats/geometric_distribution.go b/vendor/github.com/montanaflynn/stats/geometric_distribution.go new file mode 100644 index 000000000..db785dda2 --- /dev/null +++ b/vendor/github.com/montanaflynn/stats/geometric_distribution.go @@ -0,0 +1,42 @@ +package stats + +import ( + "math" +) + +// ProbGeom generates the probability for a geometric random variable +// with parameter p to achieve success in the interval of [a, b] trials +// See https://en.wikipedia.org/wiki/Geometric_distribution for more information +func ProbGeom(a int, b int, p float64) (prob float64, err error) { + if (a > b) || (a < 1) { + return math.NaN(), ErrBounds + } + + prob = 0 + q := 1 - p // probability of failure + + for k := a + 1; k <= b; k++ { + prob = prob + p*math.Pow(q, float64(k-1)) + } + + return prob, nil +} + +// ProbGeom generates the expectation or average number of trials +// for a geometric random variable with parameter p +func ExpGeom(p float64) (exp float64, err error) { + if (p > 1) || (p < 0) { + return math.NaN(), ErrNegative + } + + return 1 / p, nil +} + +// ProbGeom generates the variance for number for a +// geometric random variable with parameter p +func VarGeom(p float64) (exp float64, err error) { + if (p > 1) || (p < 0) { + return math.NaN(), ErrNegative + } + return (1 - p) / math.Pow(p, 2), nil +} diff --git a/vendor/github.com/montanaflynn/stats/legacy.go b/vendor/github.com/montanaflynn/stats/legacy.go index 17557abd9..0f3d1e8bb 100644 --- a/vendor/github.com/montanaflynn/stats/legacy.go +++ b/vendor/github.com/montanaflynn/stats/legacy.go @@ -34,3 +34,16 @@ func ExpReg(s []Coordinate) (regressions []Coordinate, err error) { func LogReg(s []Coordinate) (regressions []Coordinate, err error) { return LogarithmicRegression(s) } + +// Legacy error names that didn't start with Err +var ( + EmptyInputErr = ErrEmptyInput + NaNErr = ErrNaN + NegativeErr = ErrNegative + ZeroErr = ErrZero + BoundsErr = ErrBounds + SizeErr = ErrSize + InfValue = ErrInfValue + YCoordErr = ErrYCoord + EmptyInput = ErrEmptyInput +) diff --git a/vendor/github.com/montanaflynn/stats/load.go b/vendor/github.com/montanaflynn/stats/load.go index b5789e56f..0eb0e2729 100644 --- a/vendor/github.com/montanaflynn/stats/load.go +++ b/vendor/github.com/montanaflynn/stats/load.go @@ -1,7 +1,10 @@ package stats import ( + "bufio" + "io" "strconv" + "strings" "time" ) @@ -154,6 +157,18 @@ func LoadRawData(raw interface{}) (f Float64Data) { for i := 0; i < len(t); i++ { r = append(r, t[i]) } + case string: + for _, v := range strings.Fields(t) { + r = append(r, v) + } + case io.Reader: + scanner := bufio.NewScanner(t) + for scanner.Scan() { + l := scanner.Text() + for _, v := range strings.Fields(l) { + r = append(r, v) + } + } } for _, v := range r { diff --git a/vendor/github.com/montanaflynn/stats/max.go b/vendor/github.com/montanaflynn/stats/max.go index d0fdd42b4..bb8c83c32 100644 --- a/vendor/github.com/montanaflynn/stats/max.go +++ b/vendor/github.com/montanaflynn/stats/max.go @@ -1,13 +1,15 @@ package stats -import "math" +import ( + "math" +) // Max finds the highest number in a slice func Max(input Float64Data) (max float64, err error) { // Return an error if there are no numbers if input.Len() == 0 { - return math.NaN(), EmptyInput + return math.NaN(), EmptyInputErr } // Get the first value as the starting point diff --git a/vendor/github.com/montanaflynn/stats/mean.go b/vendor/github.com/montanaflynn/stats/mean.go index 944bb6572..a78d299ae 100644 --- a/vendor/github.com/montanaflynn/stats/mean.go +++ b/vendor/github.com/montanaflynn/stats/mean.go @@ -6,7 +6,7 @@ import "math" func Mean(input Float64Data) (float64, error) { if input.Len() == 0 { - return math.NaN(), EmptyInput + return math.NaN(), EmptyInputErr } sum, _ := input.Sum() @@ -19,7 +19,7 @@ func GeometricMean(input Float64Data) (float64, error) { l := input.Len() if l == 0 { - return math.NaN(), EmptyInput + return math.NaN(), EmptyInputErr } // Get the product of all the numbers @@ -41,7 +41,7 @@ func HarmonicMean(input Float64Data) (float64, error) { l := input.Len() if l == 0 { - return math.NaN(), EmptyInput + return math.NaN(), EmptyInputErr } // Get the sum of all the numbers reciprocals and return an diff --git a/vendor/github.com/montanaflynn/stats/median.go b/vendor/github.com/montanaflynn/stats/median.go index 4bc9918a3..a678c3653 100644 --- a/vendor/github.com/montanaflynn/stats/median.go +++ b/vendor/github.com/montanaflynn/stats/median.go @@ -14,7 +14,7 @@ func Median(input Float64Data) (median float64, err error) { // For odd numbers we just use the middle number l := len(c) if l == 0 { - return math.NaN(), EmptyInput + return math.NaN(), EmptyInputErr } else if l%2 == 0 { median, _ = Mean(c[l/2-1 : l/2+1]) } else { diff --git a/vendor/github.com/montanaflynn/stats/min.go b/vendor/github.com/montanaflynn/stats/min.go index 4383852e1..bf7e70acf 100644 --- a/vendor/github.com/montanaflynn/stats/min.go +++ b/vendor/github.com/montanaflynn/stats/min.go @@ -10,7 +10,7 @@ func Min(input Float64Data) (min float64, err error) { // Return an error if there are no numbers if l == 0 { - return math.NaN(), EmptyInput + return math.NaN(), EmptyInputErr } // Get the first value as the starting point diff --git a/vendor/github.com/montanaflynn/stats/mode.go b/vendor/github.com/montanaflynn/stats/mode.go index 1160faf28..a7cf9f7a4 100644 --- a/vendor/github.com/montanaflynn/stats/mode.go +++ b/vendor/github.com/montanaflynn/stats/mode.go @@ -7,7 +7,7 @@ func Mode(input Float64Data) (mode []float64, err error) { if l == 1 { return input, nil } else if l == 0 { - return nil, EmptyInput + return nil, EmptyInputErr } c := sortedCopyDif(input) @@ -39,7 +39,7 @@ func Mode(input Float64Data) (mode []float64, err error) { // Since length must be greater than 1, // check for slices of distinct values - if maxCnt == 1 { + if maxCnt == 1 || len(mode)*maxCnt == l && maxCnt != l { return Float64Data{}, nil } diff --git a/vendor/github.com/montanaflynn/stats/norm.go b/vendor/github.com/montanaflynn/stats/norm.go new file mode 100644 index 000000000..4eb8eb8b9 --- /dev/null +++ b/vendor/github.com/montanaflynn/stats/norm.go @@ -0,0 +1,254 @@ +package stats + +import ( + "math" + "math/rand" + "strings" + "time" +) + +// NormPpfRvs generates random variates using the Point Percentile Function. +// For more information please visit: https://demonstrations.wolfram.com/TheMethodOfInverseTransforms/ +func NormPpfRvs(loc float64, scale float64, size int) []float64 { + rand.Seed(time.Now().UnixNano()) + var toReturn []float64 + for i := 0; i < size; i++ { + toReturn = append(toReturn, NormPpf(rand.Float64(), loc, scale)) + } + return toReturn +} + +// NormBoxMullerRvs generates random variates using the Box–Muller transform. +// For more information please visit: http://mathworld.wolfram.com/Box-MullerTransformation.html +func NormBoxMullerRvs(loc float64, scale float64, size int) []float64 { + rand.Seed(time.Now().UnixNano()) + var toReturn []float64 + for i := 0; i < int(float64(size/2)+float64(size%2)); i++ { + // u1 and u2 are uniformly distributed random numbers between 0 and 1. + u1 := rand.Float64() + u2 := rand.Float64() + // x1 and x2 are normally distributed random numbers. + x1 := loc + (scale * (math.Sqrt(-2*math.Log(u1)) * math.Cos(2*math.Pi*u2))) + toReturn = append(toReturn, x1) + if (i+1)*2 <= size { + x2 := loc + (scale * (math.Sqrt(-2*math.Log(u1)) * math.Sin(2*math.Pi*u2))) + toReturn = append(toReturn, x2) + } + } + return toReturn +} + +// NormPdf is the probability density function. +func NormPdf(x float64, loc float64, scale float64) float64 { + return (math.Pow(math.E, -(math.Pow(x-loc, 2))/(2*math.Pow(scale, 2)))) / (scale * math.Sqrt(2*math.Pi)) +} + +// NormLogPdf is the log of the probability density function. +func NormLogPdf(x float64, loc float64, scale float64) float64 { + return math.Log((math.Pow(math.E, -(math.Pow(x-loc, 2))/(2*math.Pow(scale, 2)))) / (scale * math.Sqrt(2*math.Pi))) +} + +// NormCdf is the cumulative distribution function. +func NormCdf(x float64, loc float64, scale float64) float64 { + return 0.5 * (1 + math.Erf((x-loc)/(scale*math.Sqrt(2)))) +} + +// NormLogCdf is the log of the cumulative distribution function. +func NormLogCdf(x float64, loc float64, scale float64) float64 { + return math.Log(0.5 * (1 + math.Erf((x-loc)/(scale*math.Sqrt(2))))) +} + +// NormSf is the survival function (also defined as 1 - cdf, but sf is sometimes more accurate). +func NormSf(x float64, loc float64, scale float64) float64 { + return 1 - 0.5*(1+math.Erf((x-loc)/(scale*math.Sqrt(2)))) +} + +// NormLogSf is the log of the survival function. +func NormLogSf(x float64, loc float64, scale float64) float64 { + return math.Log(1 - 0.5*(1+math.Erf((x-loc)/(scale*math.Sqrt(2))))) +} + +// NormPpf is the point percentile function. +// This is based on Peter John Acklam's inverse normal CDF. +// algorithm: http://home.online.no/~pjacklam/notes/invnorm/ (no longer visible). +// For more information please visit: https://stackedboxes.org/2017/05/01/acklams-normal-quantile-function/ +func NormPpf(p float64, loc float64, scale float64) (x float64) { + const ( + a1 = -3.969683028665376e+01 + a2 = 2.209460984245205e+02 + a3 = -2.759285104469687e+02 + a4 = 1.383577518672690e+02 + a5 = -3.066479806614716e+01 + a6 = 2.506628277459239e+00 + + b1 = -5.447609879822406e+01 + b2 = 1.615858368580409e+02 + b3 = -1.556989798598866e+02 + b4 = 6.680131188771972e+01 + b5 = -1.328068155288572e+01 + + c1 = -7.784894002430293e-03 + c2 = -3.223964580411365e-01 + c3 = -2.400758277161838e+00 + c4 = -2.549732539343734e+00 + c5 = 4.374664141464968e+00 + c6 = 2.938163982698783e+00 + + d1 = 7.784695709041462e-03 + d2 = 3.224671290700398e-01 + d3 = 2.445134137142996e+00 + d4 = 3.754408661907416e+00 + + plow = 0.02425 + phigh = 1 - plow + ) + + if p < 0 || p > 1 { + return math.NaN() + } else if p == 0 { + return -math.Inf(0) + } else if p == 1 { + return math.Inf(0) + } + + if p < plow { + q := math.Sqrt(-2 * math.Log(p)) + x = (((((c1*q+c2)*q+c3)*q+c4)*q+c5)*q + c6) / + ((((d1*q+d2)*q+d3)*q+d4)*q + 1) + } else if phigh < p { + q := math.Sqrt(-2 * math.Log(1-p)) + x = -(((((c1*q+c2)*q+c3)*q+c4)*q+c5)*q + c6) / + ((((d1*q+d2)*q+d3)*q+d4)*q + 1) + } else { + q := p - 0.5 + r := q * q + x = (((((a1*r+a2)*r+a3)*r+a4)*r+a5)*r + a6) * q / + (((((b1*r+b2)*r+b3)*r+b4)*r+b5)*r + 1) + } + + e := 0.5*math.Erfc(-x/math.Sqrt2) - p + u := e * math.Sqrt(2*math.Pi) * math.Exp(x*x/2) + x = x - u/(1+x*u/2) + + return x*scale + loc +} + +// NormIsf is the inverse survival function (inverse of sf). +func NormIsf(p float64, loc float64, scale float64) (x float64) { + if -NormPpf(p, loc, scale) == 0 { + return 0 + } + return -NormPpf(p, loc, scale) +} + +// NormMoment approximates the non-central (raw) moment of order n. +// For more information please visit: https://math.stackexchange.com/questions/1945448/methods-for-finding-raw-moments-of-the-normal-distribution +func NormMoment(n int, loc float64, scale float64) float64 { + toReturn := 0.0 + for i := 0; i < n+1; i++ { + if (n-i)%2 == 0 { + toReturn += float64(Ncr(n, i)) * (math.Pow(loc, float64(i))) * (math.Pow(scale, float64(n-i))) * + (float64(factorial(n-i)) / ((math.Pow(2.0, float64((n-i)/2))) * + float64(factorial((n-i)/2)))) + } + } + return toReturn +} + +// NormStats returns the mean, variance, skew, and/or kurtosis. +// Mean(‘m’), variance(‘v’), skew(‘s’), and/or kurtosis(‘k’). +// Takes string containing any of 'mvsk'. +// Returns array of m v s k in that order. +func NormStats(loc float64, scale float64, moments string) []float64 { + var toReturn []float64 + if strings.ContainsAny(moments, "m") { + toReturn = append(toReturn, loc) + } + if strings.ContainsAny(moments, "v") { + toReturn = append(toReturn, math.Pow(scale, 2)) + } + if strings.ContainsAny(moments, "s") { + toReturn = append(toReturn, 0.0) + } + if strings.ContainsAny(moments, "k") { + toReturn = append(toReturn, 0.0) + } + return toReturn +} + +// NormEntropy is the differential entropy of the RV. +func NormEntropy(loc float64, scale float64) float64 { + return math.Log(scale * math.Sqrt(2*math.Pi*math.E)) +} + +// NormFit returns the maximum likelihood estimators for the Normal Distribution. +// Takes array of float64 values. +// Returns array of Mean followed by Standard Deviation. +func NormFit(data []float64) [2]float64 { + sum := 0.00 + for i := 0; i < len(data); i++ { + sum += data[i] + } + mean := sum / float64(len(data)) + stdNumerator := 0.00 + for i := 0; i < len(data); i++ { + stdNumerator += math.Pow(data[i]-mean, 2) + } + return [2]float64{mean, math.Sqrt((stdNumerator) / (float64(len(data))))} +} + +// NormMedian is the median of the distribution. +func NormMedian(loc float64, scale float64) float64 { + return loc +} + +// NormMean is the mean/expected value of the distribution. +func NormMean(loc float64, scale float64) float64 { + return loc +} + +// NormVar is the variance of the distribution. +func NormVar(loc float64, scale float64) float64 { + return math.Pow(scale, 2) +} + +// NormStd is the standard deviation of the distribution. +func NormStd(loc float64, scale float64) float64 { + return scale +} + +// NormInterval finds endpoints of the range that contains alpha percent of the distribution. +func NormInterval(alpha float64, loc float64, scale float64) [2]float64 { + q1 := (1.0 - alpha) / 2 + q2 := (1.0 + alpha) / 2 + a := NormPpf(q1, loc, scale) + b := NormPpf(q2, loc, scale) + return [2]float64{a, b} +} + +// factorial is the naive factorial algorithm. +func factorial(x int) int { + if x == 0 { + return 1 + } + return x * factorial(x-1) +} + +// Ncr is an N choose R algorithm. +// Aaron Cannon's algorithm. +func Ncr(n, r int) int { + if n <= 1 || r == 0 || n == r { + return 1 + } + if newR := n - r; newR < r { + r = newR + } + if r == 1 { + return n + } + ret := int(n - r + 1) + for i, j := ret+1, int(2); j <= r; i, j = i+1, j+1 { + ret = ret * i / j + } + return ret +} diff --git a/vendor/github.com/montanaflynn/stats/outlier.go b/vendor/github.com/montanaflynn/stats/outlier.go index e969180ea..7c9795bd3 100644 --- a/vendor/github.com/montanaflynn/stats/outlier.go +++ b/vendor/github.com/montanaflynn/stats/outlier.go @@ -9,7 +9,7 @@ type Outliers struct { // QuartileOutliers finds the mild and extreme outliers func QuartileOutliers(input Float64Data) (Outliers, error) { if input.Len() == 0 { - return Outliers{}, EmptyInput + return Outliers{}, EmptyInputErr } // Start by sorting a copy of the slice diff --git a/vendor/github.com/montanaflynn/stats/percentile.go b/vendor/github.com/montanaflynn/stats/percentile.go index 1dfb2c6d6..f5641783e 100644 --- a/vendor/github.com/montanaflynn/stats/percentile.go +++ b/vendor/github.com/montanaflynn/stats/percentile.go @@ -6,9 +6,13 @@ import ( // Percentile finds the relative standing in a slice of floats func Percentile(input Float64Data, percent float64) (percentile float64, err error) { + length := input.Len() + if length == 0 { + return math.NaN(), EmptyInputErr + } - if input.Len() == 0 { - return math.NaN(), EmptyInput + if length == 1 { + return input[0], nil } if percent <= 0 || percent > 100 { @@ -54,7 +58,7 @@ func PercentileNearestRank(input Float64Data, percent float64) (percentile float // Return an error for empty slices if il == 0 { - return math.NaN(), EmptyInput + return math.NaN(), EmptyInputErr } // Return error for less than 0 or greater than 100 percentages diff --git a/vendor/github.com/montanaflynn/stats/quartile.go b/vendor/github.com/montanaflynn/stats/quartile.go index 29bb3a37a..40bbf6e57 100644 --- a/vendor/github.com/montanaflynn/stats/quartile.go +++ b/vendor/github.com/montanaflynn/stats/quartile.go @@ -14,7 +14,7 @@ func Quartile(input Float64Data) (Quartiles, error) { il := input.Len() if il == 0 { - return Quartiles{}, EmptyInput + return Quartiles{}, EmptyInputErr } // Start by sorting a copy of the slice @@ -44,7 +44,7 @@ func Quartile(input Float64Data) (Quartiles, error) { // InterQuartileRange finds the range between Q1 and Q3 func InterQuartileRange(input Float64Data) (float64, error) { if input.Len() == 0 { - return math.NaN(), EmptyInput + return math.NaN(), EmptyInputErr } qs, _ := Quartile(input) iqr := qs.Q3 - qs.Q1 @@ -54,7 +54,7 @@ func InterQuartileRange(input Float64Data) (float64, error) { // Midhinge finds the average of the first and third quartiles func Midhinge(input Float64Data) (float64, error) { if input.Len() == 0 { - return math.NaN(), EmptyInput + return math.NaN(), EmptyInputErr } qs, _ := Quartile(input) mh := (qs.Q1 + qs.Q3) / 2 @@ -64,7 +64,7 @@ func Midhinge(input Float64Data) (float64, error) { // Trimean finds the average of the median and the midhinge func Trimean(input Float64Data) (float64, error) { if input.Len() == 0 { - return math.NaN(), EmptyInput + return math.NaN(), EmptyInputErr } c := sortedCopy(input) diff --git a/vendor/github.com/montanaflynn/stats/ranksum.go b/vendor/github.com/montanaflynn/stats/ranksum.go new file mode 100644 index 000000000..fc424ef4e --- /dev/null +++ b/vendor/github.com/montanaflynn/stats/ranksum.go @@ -0,0 +1,183 @@ +package stats + +// import "math" +// +// // WilcoxonRankSum tests the null hypothesis that two sets +// // of data are drawn from the same distribution. It does +// // not handle ties between measurements in x and y. +// // +// // Parameters: +// // data1 Float64Data: First set of data points. +// // data2 Float64Data: Second set of data points. +// // Length of both data samples must be equal. +// // +// // Return: +// // statistic float64: The test statistic under the +// // large-sample approximation that the +// // rank sum statistic is normally distributed. +// // pvalue float64: The two-sided p-value of the test +// // err error: Any error from the input data parameters +// // +// // https://en.wikipedia.org/wiki/Wilcoxon_rank-sum_test +// func WilcoxonRankSum(data1, data2 Float64Data) (float64, float64, error) { +// +// l1 := data1.Len() +// l2 := data2.Len() +// +// if l1 == 0 || l2 == 0 { +// return math.NaN(), math.NaN(), EmptyInputErr +// } +// +// if l1 != l2 { +// return math.NaN(), math.NaN(), SizeErr +// } +// +// alldata := Float64Data{} +// alldata = append(alldata, data1...) +// alldata = append(alldata, data2...) +// +// // ranked := +// +// return 0.0, 0.0, nil +// } +// +// // x, y = map(np.asarray, (x, y)) +// // n1 = len(x) +// // n2 = len(y) +// // alldata = np.concatenate((x, y)) +// // ranked = rankdata(alldata) +// // x = ranked[:n1] +// // s = np.sum(x, axis=0) +// // expected = n1 * (n1+n2+1) / 2.0 +// // z = (s - expected) / np.sqrt(n1*n2*(n1+n2+1)/12.0) +// // prob = 2 * distributions.norm.sf(abs(z)) +// // +// // return RanksumsResult(z, prob) +// +// // def rankdata(a, method='average'): +// // """ +// // Assign ranks to data, dealing with ties appropriately. +// // Ranks begin at 1. The `method` argument controls how ranks are assigned +// // to equal values. See [1]_ for further discussion of ranking methods. +// // Parameters +// // ---------- +// // a : array_like +// // The array of values to be ranked. The array is first flattened. +// // method : str, optional +// // The method used to assign ranks to tied elements. +// // The options are 'average', 'min', 'max', 'dense' and 'ordinal'. +// // 'average': +// // The average of the ranks that would have been assigned to +// // all the tied values is assigned to each value. +// // 'min': +// // The minimum of the ranks that would have been assigned to all +// // the tied values is assigned to each value. (This is also +// // referred to as "competition" ranking.) +// // 'max': +// // The maximum of the ranks that would have been assigned to all +// // the tied values is assigned to each value. +// // 'dense': +// // Like 'min', but the rank of the next highest element is assigned +// // the rank immediately after those assigned to the tied elements. +// // 'ordinal': +// // All values are given a distinct rank, corresponding to the order +// // that the values occur in `a`. +// // The default is 'average'. +// // Returns +// // ------- +// // ranks : ndarray +// // An array of length equal to the size of `a`, containing rank +// // scores. +// // References +// // ---------- +// // .. [1] "Ranking", https://en.wikipedia.org/wiki/Ranking +// // Examples +// // -------- +// // >>> from scipy.stats import rankdata +// // >>> rankdata([0, 2, 3, 2]) +// // array([ 1. , 2.5, 4. , 2.5]) +// // """ +// // +// // arr = np.ravel(np.asarray(a)) +// // algo = 'quicksort' +// // sorter = np.argsort(arr, kind=algo) +// // +// // inv = np.empty(sorter.size, dtype=np.intp) +// // inv[sorter] = np.arange(sorter.size, dtype=np.intp) +// // +// // +// // arr = arr[sorter] +// // obs = np.r_[True, arr[1:] != arr[:-1]] +// // dense = obs.cumsum()[inv] +// // +// // +// // # cumulative counts of each unique value +// // count = np.r_[np.nonzero(obs)[0], len(obs)] +// // +// // # average method +// // return .5 * (count[dense] + count[dense - 1] + 1) +// +// type rankable interface { +// Len() int +// RankEqual(int, int) bool +// } +// +// func StandardRank(d rankable) []float64 { +// r := make([]float64, d.Len()) +// var k int +// for i := range r { +// if i == 0 || !d.RankEqual(i, i-1) { +// k = i + 1 +// } +// r[i] = float64(k) +// } +// return r +// } +// +// func ModifiedRank(d rankable) []float64 { +// r := make([]float64, d.Len()) +// for i := range r { +// k := i + 1 +// for j := i + 1; j < len(r) && d.RankEqual(i, j); j++ { +// k = j + 1 +// } +// r[i] = float64(k) +// } +// return r +// } +// +// func DenseRank(d rankable) []float64 { +// r := make([]float64, d.Len()) +// var k int +// for i := range r { +// if i == 0 || !d.RankEqual(i, i-1) { +// k++ +// } +// r[i] = float64(k) +// } +// return r +// } +// +// func OrdinalRank(d rankable) []float64 { +// r := make([]float64, d.Len()) +// for i := range r { +// r[i] = float64(i + 1) +// } +// return r +// } +// +// func FractionalRank(d rankable) []float64 { +// r := make([]float64, d.Len()) +// for i := 0; i < len(r); { +// var j int +// f := float64(i + 1) +// for j = i + 1; j < len(r) && d.RankEqual(i, j); j++ { +// f += float64(j + 1) +// } +// f /= float64(j - i) +// for ; i < j; i++ { +// r[i] = f +// } +// } +// return r +// } diff --git a/vendor/github.com/montanaflynn/stats/regression.go b/vendor/github.com/montanaflynn/stats/regression.go index a37a74060..401d95120 100644 --- a/vendor/github.com/montanaflynn/stats/regression.go +++ b/vendor/github.com/montanaflynn/stats/regression.go @@ -14,7 +14,7 @@ type Coordinate struct { func LinearRegression(s Series) (regressions Series, err error) { if len(s) == 0 { - return nil, EmptyInput + return nil, EmptyInputErr } // Placeholder for the math to be done @@ -44,19 +44,21 @@ func LinearRegression(s Series) (regressions Series, err error) { } return regressions, nil - } // ExponentialRegression returns an exponential regression on data series func ExponentialRegression(s Series) (regressions Series, err error) { if len(s) == 0 { - return nil, EmptyInput + return nil, EmptyInputErr } var sum [6]float64 for i := 0; i < len(s); i++ { + if s[i].Y < 0 { + return nil, YCoordErr + } sum[0] += s[i].X sum[1] += s[i].Y sum[2] += s[i].X * s[i].X * s[i].Y @@ -77,14 +79,13 @@ func ExponentialRegression(s Series) (regressions Series, err error) { } return regressions, nil - } // LogarithmicRegression returns an logarithmic regression on data series func LogarithmicRegression(s Series) (regressions Series, err error) { if len(s) == 0 { - return nil, EmptyInput + return nil, EmptyInputErr } var sum [4]float64 @@ -109,5 +110,4 @@ func LogarithmicRegression(s Series) (regressions Series, err error) { } return regressions, nil - } diff --git a/vendor/github.com/montanaflynn/stats/sample.go b/vendor/github.com/montanaflynn/stats/sample.go index a52f6dcaa..40166af6a 100644 --- a/vendor/github.com/montanaflynn/stats/sample.go +++ b/vendor/github.com/montanaflynn/stats/sample.go @@ -1,12 +1,15 @@ package stats -import "math/rand" +import ( + "math/rand" + "sort" +) // Sample returns sample from input with replacement or without func Sample(input Float64Data, takenum int, replacement bool) ([]float64, error) { if input.Len() == 0 { - return nil, EmptyInput + return nil, EmptyInputErr } length := input.Len() @@ -42,3 +45,32 @@ func Sample(input Float64Data, takenum int, replacement bool) ([]float64, error) return nil, BoundsErr } + +// StableSample like stable sort, it returns samples from input while keeps the order of original data. +func StableSample(input Float64Data, takenum int) ([]float64, error) { + if input.Len() == 0 { + return nil, EmptyInputErr + } + + length := input.Len() + + if takenum <= length { + + rand.Seed(unixnano()) + + perm := rand.Perm(length) + perm = perm[0:takenum] + // Sort perm before applying + sort.Ints(perm) + result := Float64Data{} + + for _, idx := range perm { + result = append(result, input[idx]) + } + + return result, nil + + } + + return nil, BoundsErr +} diff --git a/vendor/github.com/montanaflynn/stats/sigmoid.go b/vendor/github.com/montanaflynn/stats/sigmoid.go new file mode 100644 index 000000000..5f2559d81 --- /dev/null +++ b/vendor/github.com/montanaflynn/stats/sigmoid.go @@ -0,0 +1,18 @@ +package stats + +import "math" + +// Sigmoid returns the input values in the range of -1 to 1 +// along the sigmoid or s-shaped curve, commonly used in +// machine learning while training neural networks as an +// activation function. +func Sigmoid(input Float64Data) ([]float64, error) { + if input.Len() == 0 { + return Float64Data{}, EmptyInput + } + s := make([]float64, len(input)) + for i, v := range input { + s[i] = 1 / (1 + math.Exp(-v)) + } + return s, nil +} diff --git a/vendor/github.com/montanaflynn/stats/softmax.go b/vendor/github.com/montanaflynn/stats/softmax.go new file mode 100644 index 000000000..85072642b --- /dev/null +++ b/vendor/github.com/montanaflynn/stats/softmax.go @@ -0,0 +1,25 @@ +package stats + +import "math" + +// SoftMax returns the input values in the range of 0 to 1 +// with sum of all the probabilities being equal to one. It +// is commonly used in machine learning neural networks. +func SoftMax(input Float64Data) ([]float64, error) { + if input.Len() == 0 { + return Float64Data{}, EmptyInput + } + + s := 0.0 + c, _ := Max(input) + for _, e := range input { + s += math.Exp(e - c) + } + + sm := make([]float64, len(input)) + for i, v := range input { + sm[i] = math.Exp(v-c) / s + } + + return sm, nil +} diff --git a/vendor/github.com/montanaflynn/stats/sum.go b/vendor/github.com/montanaflynn/stats/sum.go index 53485f17c..15b611d17 100644 --- a/vendor/github.com/montanaflynn/stats/sum.go +++ b/vendor/github.com/montanaflynn/stats/sum.go @@ -6,7 +6,7 @@ import "math" func Sum(input Float64Data) (sum float64, err error) { if input.Len() == 0 { - return math.NaN(), EmptyInput + return math.NaN(), EmptyInputErr } // Add em up diff --git a/vendor/github.com/montanaflynn/stats/variance.go b/vendor/github.com/montanaflynn/stats/variance.go index 13e7031aa..a6445690d 100644 --- a/vendor/github.com/montanaflynn/stats/variance.go +++ b/vendor/github.com/montanaflynn/stats/variance.go @@ -6,7 +6,7 @@ import "math" func _variance(input Float64Data, sample int) (variance float64, err error) { if input.Len() == 0 { - return math.NaN(), EmptyInput + return math.NaN(), EmptyInputErr } // Sum the square of the mean subtracted from each number @@ -56,7 +56,7 @@ func Covariance(data1, data2 Float64Data) (float64, error) { l2 := data2.Len() if l1 == 0 || l2 == 0 { - return math.NaN(), EmptyInput + return math.NaN(), EmptyInputErr } if l1 != l2 { @@ -84,7 +84,7 @@ func CovariancePopulation(data1, data2 Float64Data) (float64, error) { l2 := data2.Len() if l1 == 0 || l2 == 0 { - return math.NaN(), EmptyInput + return math.NaN(), EmptyInputErr } if l1 != l2 { diff --git a/vendor/github.com/portworx/px-backup-api/pkg/apis/v1/api.pb.go b/vendor/github.com/portworx/px-backup-api/pkg/apis/v1/api.pb.go index c848c62bc..9dfb67c53 100644 --- a/vendor/github.com/portworx/px-backup-api/pkg/apis/v1/api.pb.go +++ b/vendor/github.com/portworx/px-backup-api/pkg/apis/v1/api.pb.go @@ -185,6 +185,36 @@ func (S3Config_Sse) EnumDescriptor() ([]byte, []int) { return fileDescriptor_9943feda3d652502, []int{7, 0} } +type S3Config_AzureEnvironmentType_Type int32 + +const ( + S3Config_AzureEnvironmentType_Invalid S3Config_AzureEnvironmentType_Type = 0 + // Azure public environment + S3Config_AzureEnvironmentType_AZURE_GLOBAL S3Config_AzureEnvironmentType_Type = 1 + // Azure china environment + S3Config_AzureEnvironmentType_AZURE_CHINA S3Config_AzureEnvironmentType_Type = 2 +) + +var S3Config_AzureEnvironmentType_Type_name = map[int32]string{ + 0: "Invalid", + 1: "AZURE_GLOBAL", + 2: "AZURE_CHINA", +} + +var S3Config_AzureEnvironmentType_Type_value = map[string]int32{ + "Invalid": 0, + "AZURE_GLOBAL": 1, + "AZURE_CHINA": 2, +} + +func (x S3Config_AzureEnvironmentType_Type) String() string { + return proto.EnumName(S3Config_AzureEnvironmentType_Type_name, int32(x)) +} + +func (S3Config_AzureEnvironmentType_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_9943feda3d652502, []int{7, 0, 0} +} + type CloudCredentialInfo_Type int32 const ( @@ -1297,6 +1327,7 @@ type ClusterInfo struct { TenantId string `protobuf:"bytes,15,opt,name=tenant_id,json=tenantId,proto3" json:"tenant_id,omitempty"` ServiceToken string `protobuf:"bytes,16,opt,name=service_token,json=serviceToken,proto3" json:"servicetoken" secure:"true"` Provider ClusterInfo_Provider `protobuf:"varint,17,opt,name=provider,proto3,enum=ClusterInfo_Provider" json:"provider,omitempty"` + K8SVersion string `protobuf:"bytes,18,opt,name=k8s_version,json=k8sVersion,proto3" json:"k8s_version,omitempty"` } func (m *ClusterInfo) Reset() { *m = ClusterInfo{} } @@ -1451,6 +1482,13 @@ func (m *ClusterInfo) GetProvider() ClusterInfo_Provider { return ClusterInfo_Invalid } +func (m *ClusterInfo) GetK8SVersion() string { + if m != nil { + return m.K8SVersion + } + return "" +} + // Message for maintaining status of the cluster. type ClusterInfo_StatusInfo struct { Status ClusterInfo_StatusInfo_Status `protobuf:"varint,1,opt,name=status,proto3,enum=ClusterInfo_StatusInfo_Status" json:"status,omitempty"` @@ -1796,6 +1834,11 @@ type S3Config struct { // Server side encryption type name // Currently supporting only SSE-S3 and SSE-KMS type alone. SseType S3Config_Sse `protobuf:"varint,6,opt,name=sse_type,json=sseType,proto3,enum=S3Config_Sse" json:"sse_type,omitempty"` + // Azure environment type + // Currently supporting only AZURE_GLOBAL and AZURE_CHINA + AzureEnvironment *S3Config_AzureEnvironmentType `protobuf:"bytes,7,opt,name=azure_environment,json=azureEnvironment,proto3" json:"azure_environment,omitempty"` + // Azure resource group name. This is needed in the case of azure immutable bucket to get the retention period (optional) + AzureResourceGroupName string `protobuf:"bytes,8,opt,name=azure_resource_group_name,json=azureResourceGroupName,proto3" json:"azure_resource_group_name,omitempty"` } func (m *S3Config) Reset() { *m = S3Config{} } @@ -1873,6 +1916,64 @@ func (m *S3Config) GetSseType() S3Config_Sse { return S3Config_Invalid } +func (m *S3Config) GetAzureEnvironment() *S3Config_AzureEnvironmentType { + if m != nil { + return m.AzureEnvironment + } + return nil +} + +func (m *S3Config) GetAzureResourceGroupName() string { + if m != nil { + return m.AzureResourceGroupName + } + return "" +} + +type S3Config_AzureEnvironmentType struct { + Type S3Config_AzureEnvironmentType_Type `protobuf:"varint,1,opt,name=type,proto3,enum=S3Config_AzureEnvironmentType_Type" json:"type,omitempty"` +} + +func (m *S3Config_AzureEnvironmentType) Reset() { *m = S3Config_AzureEnvironmentType{} } +func (m *S3Config_AzureEnvironmentType) String() string { return proto.CompactTextString(m) } +func (*S3Config_AzureEnvironmentType) ProtoMessage() {} +func (*S3Config_AzureEnvironmentType) Descriptor() ([]byte, []int) { + return fileDescriptor_9943feda3d652502, []int{7, 0} +} +func (m *S3Config_AzureEnvironmentType) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *S3Config_AzureEnvironmentType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_S3Config_AzureEnvironmentType.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *S3Config_AzureEnvironmentType) XXX_Merge(src proto.Message) { + xxx_messageInfo_S3Config_AzureEnvironmentType.Merge(m, src) +} +func (m *S3Config_AzureEnvironmentType) XXX_Size() int { + return m.Size() +} +func (m *S3Config_AzureEnvironmentType) XXX_DiscardUnknown() { + xxx_messageInfo_S3Config_AzureEnvironmentType.DiscardUnknown(m) +} + +var xxx_messageInfo_S3Config_AzureEnvironmentType proto.InternalMessageInfo + +func (m *S3Config_AzureEnvironmentType) GetType() S3Config_AzureEnvironmentType_Type { + if m != nil { + return m.Type + } + return S3Config_AzureEnvironmentType_Invalid +} + type AzureConfig struct { AccountName string `protobuf:"bytes,1,opt,name=account_name,json=accountName,proto3" json:"account_name,omitempty"` AccountKey string `protobuf:"bytes,2,opt,name=account_key,json=accountKey,proto3" json:"accountkey" secure:"true"` @@ -4090,6 +4191,8 @@ type BackupInfo_Volume struct { PvcId string `protobuf:"bytes,12,opt,name=pvc_id,json=pvcId,proto3" json:"pvc_id,omitempty"` Provisioner string `protobuf:"bytes,13,opt,name=provisioner,proto3" json:"provisioner,omitempty"` Volumesnapshot string `protobuf:"bytes,14,opt,name=volumesnapshot,proto3" json:"volumesnapshot,omitempty"` + // As part of restrictive PSA setting, if an UID or GID is used during backup then same value should be used during restore (optional) + JobSecurityContext *BackupInfo_Volume_JobSecurityContext `protobuf:"bytes,15,opt,name=job_security_context,json=jobSecurityContext,proto3" json:"job_security_context,omitempty"` } func (m *BackupInfo_Volume) Reset() { *m = BackupInfo_Volume{} } @@ -4223,6 +4326,65 @@ func (m *BackupInfo_Volume) GetVolumesnapshot() string { return "" } +func (m *BackupInfo_Volume) GetJobSecurityContext() *BackupInfo_Volume_JobSecurityContext { + if m != nil { + return m.JobSecurityContext + } + return nil +} + +type BackupInfo_Volume_JobSecurityContext struct { + RunAsUser int64 `protobuf:"varint,1,opt,name=runAsUser,proto3" json:"runAsUser,omitempty"` + RunAsGroup int64 `protobuf:"varint,2,opt,name=runAsGroup,proto3" json:"runAsGroup,omitempty"` +} + +func (m *BackupInfo_Volume_JobSecurityContext) Reset() { *m = BackupInfo_Volume_JobSecurityContext{} } +func (m *BackupInfo_Volume_JobSecurityContext) String() string { return proto.CompactTextString(m) } +func (*BackupInfo_Volume_JobSecurityContext) ProtoMessage() {} +func (*BackupInfo_Volume_JobSecurityContext) Descriptor() ([]byte, []int) { + return fileDescriptor_9943feda3d652502, []int{20, 5, 1} +} +func (m *BackupInfo_Volume_JobSecurityContext) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BackupInfo_Volume_JobSecurityContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_BackupInfo_Volume_JobSecurityContext.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *BackupInfo_Volume_JobSecurityContext) XXX_Merge(src proto.Message) { + xxx_messageInfo_BackupInfo_Volume_JobSecurityContext.Merge(m, src) +} +func (m *BackupInfo_Volume_JobSecurityContext) XXX_Size() int { + return m.Size() +} +func (m *BackupInfo_Volume_JobSecurityContext) XXX_DiscardUnknown() { + xxx_messageInfo_BackupInfo_Volume_JobSecurityContext.DiscardUnknown(m) +} + +var xxx_messageInfo_BackupInfo_Volume_JobSecurityContext proto.InternalMessageInfo + +func (m *BackupInfo_Volume_JobSecurityContext) GetRunAsUser() int64 { + if m != nil { + return m.RunAsUser + } + return 0 +} + +func (m *BackupInfo_Volume_JobSecurityContext) GetRunAsGroup() int64 { + if m != nil { + return m.RunAsGroup + } + return 0 +} + // Message for maintaining status of the object. type BackupInfo_StatusInfo struct { Status BackupInfo_StatusInfo_Status `protobuf:"varint,1,opt,name=status,proto3,enum=BackupInfo_StatusInfo_Status" json:"status,omitempty"` @@ -5370,6 +5532,10 @@ type EnumerateOptions struct { Owners []string `protobuf:"bytes,9,rep,name=owners,proto3" json:"owners,omitempty"` // filter to use backupObjectType on object BackupObjectType string `protobuf:"bytes,10,opt,name=backup_object_type,json=backupObjectType,proto3" json:"backup_object_type,omitempty"` + // filter based on the object status. + // Need to pass the string value of the status field of the object ( backup /restore ) + // For example, {"Success", "Failed"} + Status []string `protobuf:"bytes,11,rep,name=status,proto3" json:"status,omitempty"` } func (m *EnumerateOptions) Reset() { *m = EnumerateOptions{} } @@ -5475,6 +5641,13 @@ func (m *EnumerateOptions) GetBackupObjectType() string { return "" } +func (m *EnumerateOptions) GetStatus() []string { + if m != nil { + return m.Status + } + return nil +} + // Define SchedulePolicyCreateRequest struct type SchedulePolicyCreateRequest struct { *CreateMetadata `protobuf:"bytes,1,opt,name=metadata,proto3,embedded=metadata" json:"metadata,omitempty"` @@ -6390,6 +6563,8 @@ type BackupScheduleUpdateRequest struct { PostExecRuleRef *ObjectRef `protobuf:"bytes,16,opt,name=post_exec_rule_ref,json=postExecRuleRef,proto3" json:"post_exec_rule_ref,omitempty"` // volume snapshot class mapping for csi based backup (optional) VolumeSnapshotClassMapping map[string]string `protobuf:"bytes,17,rep,name=volume_snapshot_class_mapping,json=volumeSnapshotClassMapping,proto3" json:"volume_snapshot_class_mapping,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Skip auto rules for VirtualMachine Backup Object type + SkipVmAutoExecRules bool `protobuf:"varint,18,opt,name=skip_vm_auto_exec_rules,json=skipVmAutoExecRules,proto3" json:"skip_vm_auto_exec_rules,omitempty"` } func (m *BackupScheduleUpdateRequest) Reset() { *m = BackupScheduleUpdateRequest{} } @@ -6537,6 +6712,13 @@ func (m *BackupScheduleUpdateRequest) GetVolumeSnapshotClassMapping() map[string return nil } +func (m *BackupScheduleUpdateRequest) GetSkipVmAutoExecRules() bool { + if m != nil { + return m.SkipVmAutoExecRules + } + return false +} + // Define BackupScheduleUpdateResponse struct type BackupScheduleUpdateResponse struct { } @@ -10483,6 +10665,8 @@ func (m *MetricsInspectRequest) GetOrgId() string { type MetricsInspectResponse struct { Stats []*MetricsInspectResponse_Stats `protobuf:"bytes,1,rep,name=stats,proto3" json:"stats,omitempty"` + // Time at which last stats data was synced in epoch time format + LastSyncTime int64 `protobuf:"varint,2,opt,name=last_sync_time,json=lastSyncTime,proto3" json:"last_sync_time,omitempty"` } func (m *MetricsInspectResponse) Reset() { *m = MetricsInspectResponse{} } @@ -10525,12 +10709,20 @@ func (m *MetricsInspectResponse) GetStats() []*MetricsInspectResponse_Stats { return nil } +func (m *MetricsInspectResponse) GetLastSyncTime() int64 { + if m != nil { + return m.LastSyncTime + } + return 0 +} + type MetricsInspectResponse_Stats struct { Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"` NumNamespaces uint64 `protobuf:"varint,2,opt,name=num_namespaces,json=numNamespaces,proto3" json:"num_namespaces,omitempty"` TotalBackupSize uint64 `protobuf:"varint,3,opt,name=total_backup_size,json=totalBackupSize,proto3" json:"total_backup_size,omitempty"` NumSchedules uint64 `protobuf:"varint,4,opt,name=num_schedules,json=numSchedules,proto3" json:"num_schedules,omitempty"` ClusterRef *ObjectRef `protobuf:"bytes,5,opt,name=cluster_ref,json=clusterRef,proto3" json:"cluster_ref,omitempty"` + TotalNamespaces uint64 `protobuf:"varint,6,opt,name=total_namespaces,json=totalNamespaces,proto3" json:"total_namespaces,omitempty"` } func (m *MetricsInspectResponse_Stats) Reset() { *m = MetricsInspectResponse_Stats{} } @@ -10601,6 +10793,13 @@ func (m *MetricsInspectResponse_Stats) GetClusterRef() *ObjectRef { return nil } +func (m *MetricsInspectResponse_Stats) GetTotalNamespaces() uint64 { + if m != nil { + return m.TotalNamespaces + } + return 0 +} + // Request message structure for backup create type BackupCreateRequest struct { *CreateMetadata `protobuf:"bytes,1,opt,name=metadata,proto3,embedded=metadata" json:"metadata,omitempty"` @@ -16189,6 +16388,7 @@ func init() { proto.RegisterEnum("ClusterInfo_StatusInfo_Status", ClusterInfo_StatusInfo_Status_name, ClusterInfo_StatusInfo_Status_value) proto.RegisterEnum("ClusterInfo_BackupShareStatusInfo_Status", ClusterInfo_BackupShareStatusInfo_Status_name, ClusterInfo_BackupShareStatusInfo_Status_value) proto.RegisterEnum("S3Config_Sse", S3Config_Sse_name, S3Config_Sse_value) + proto.RegisterEnum("S3Config_AzureEnvironmentType_Type", S3Config_AzureEnvironmentType_Type_name, S3Config_AzureEnvironmentType_Type_value) proto.RegisterEnum("CloudCredentialInfo_Type", CloudCredentialInfo_Type_name, CloudCredentialInfo_Type_value) proto.RegisterEnum("BackupScheduleInfo_ReclaimPolicyType", BackupScheduleInfo_ReclaimPolicyType_name, BackupScheduleInfo_ReclaimPolicyType_value) proto.RegisterEnum("BackupScheduleInfo_BackupType_Type", BackupScheduleInfo_BackupType_Type_name, BackupScheduleInfo_BackupType_Type_value) @@ -16232,6 +16432,7 @@ func init() { proto.RegisterType((*IBMConfig)(nil), "IBMConfig") proto.RegisterType((*RancherConfig)(nil), "RancherConfig") proto.RegisterType((*S3Config)(nil), "S3Config") + proto.RegisterType((*S3Config_AzureEnvironmentType)(nil), "S3Config.AzureEnvironmentType") proto.RegisterType((*AzureConfig)(nil), "AzureConfig") proto.RegisterType((*GoogleConfig)(nil), "GoogleConfig") proto.RegisterType((*CloudCredentialInfo)(nil), "CloudCredentialInfo") @@ -16266,6 +16467,7 @@ func init() { proto.RegisterType((*BackupInfo_BackupSchedule)(nil), "BackupInfo.BackupSchedule") proto.RegisterType((*BackupInfo_Volume)(nil), "BackupInfo.Volume") proto.RegisterMapType((map[string]string)(nil), "BackupInfo.Volume.OptionsEntry") + proto.RegisterType((*BackupInfo_Volume_JobSecurityContext)(nil), "BackupInfo.Volume.JobSecurityContext") proto.RegisterType((*BackupInfo_StatusInfo)(nil), "BackupInfo.StatusInfo") proto.RegisterType((*BackupInfo_BackupObjectType)(nil), "BackupInfo.BackupObjectType") proto.RegisterType((*BackupObject)(nil), "BackupObject") @@ -16503,707 +16705,722 @@ func init() { func init() { proto.RegisterFile("pkg/apis/v1/api.proto", fileDescriptor_9943feda3d652502) } var fileDescriptor_9943feda3d652502 = []byte{ - // 11188 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x59, 0x6c, 0x24, 0x47, - 0x96, 0x58, 0xd7, 0x41, 0xb2, 0xea, 0x55, 0x91, 0x2c, 0x06, 0xaf, 0xea, 0x6c, 0x5e, 0x9d, 0x52, - 0xdf, 0xea, 0x6c, 0x89, 0x52, 0x4b, 0x9a, 0x96, 0x46, 0x33, 0x64, 0x1f, 0x6a, 0x4a, 0x7d, 0x50, - 0x49, 0x1d, 0x33, 0xd2, 0x60, 0x0b, 0xc9, 0xaa, 0x24, 0x99, 0xd3, 0x55, 0x95, 0x35, 0x99, 0x59, - 0x54, 0xb3, 0x65, 0x79, 0xe7, 0x5a, 0xaf, 0x3d, 0xd8, 0x1d, 0x8f, 0x67, 0x30, 0xbb, 0xd8, 0x0b, - 0x0b, 0x78, 0x3f, 0x6c, 0xc0, 0x30, 0x6c, 0x63, 0x0d, 0xf8, 0x58, 0xc3, 0xf0, 0x8f, 0xd7, 0x0b, - 0x03, 0x5e, 0x0c, 0x60, 0x18, 0xde, 0x0f, 0xa3, 0x6d, 0xcf, 0x18, 0x58, 0x40, 0x0b, 0xc3, 0x80, - 0xd6, 0x1e, 0xfb, 0xd3, 0x88, 0x2b, 0x33, 0x22, 0x33, 0xb2, 0xaa, 0xc8, 0xe2, 0xb4, 0xc6, 0xf0, - 0x7c, 0x55, 0x65, 0x9c, 0x2f, 0x5e, 0xbc, 0x78, 0xf1, 0xde, 0x8b, 0x17, 0x2f, 0x60, 0xb6, 0xf3, - 0x60, 0xf7, 0x8a, 0xd5, 0x71, 0xfc, 0x2b, 0xfb, 0xcf, 0xe1, 0x5f, 0xa3, 0xe3, 0xb9, 0x81, 0xab, - 0x2d, 0xec, 0xba, 0xee, 0x6e, 0xd3, 0xc6, 0x29, 0x57, 0xac, 0x76, 0xdb, 0x0d, 0xac, 0xc0, 0x71, - 0xdb, 0x3e, 0xcb, 0x5d, 0x66, 0xb9, 0xe4, 0x6b, 0xbb, 0xbb, 0x73, 0x25, 0x70, 0x5a, 0xb6, 0x1f, - 0x58, 0xad, 0x0e, 0x2b, 0x70, 0x79, 0xd7, 0x09, 0xf6, 0xba, 0xdb, 0x46, 0xdd, 0x6d, 0x5d, 0xd9, - 0x75, 0x77, 0xdd, 0xa8, 0x24, 0xfe, 0x22, 0x1f, 0xe4, 0x1f, 0x2b, 0x5e, 0x15, 0x81, 0xa8, 0xbb, - 0xad, 0x96, 0xdb, 0x66, 0x39, 0xf4, 0xa7, 0x7e, 0x79, 0xd7, 0x6e, 0x5f, 0x76, 0x3b, 0x76, 0xdb, - 0xea, 0x38, 0xfb, 0xab, 0x57, 0xdc, 0x0e, 0x81, 0x26, 0x09, 0x99, 0xbe, 0x06, 0xe8, 0xbe, 0xb7, - 0x6b, 0xb5, 0x9d, 0x47, 0x24, 0xf9, 0xfe, 0xf6, 0x57, 0xed, 0x7a, 0x80, 0x2e, 0x41, 0xa1, 0x65, - 0x07, 0x56, 0xc3, 0x0a, 0xac, 0x6a, 0x66, 0x25, 0x73, 0xbe, 0xb4, 0x5a, 0x34, 0xee, 0xb2, 0x84, - 0xf5, 0xfc, 0x8f, 0x1e, 0x2f, 0x67, 0xcc, 0xb0, 0x80, 0xfe, 0x53, 0x80, 0xd2, 0xf5, 0x66, 0xd7, - 0x0f, 0x6c, 0x6f, 0xa3, 0xbd, 0xe3, 0xa2, 0x17, 0xa0, 0xd8, 0x79, 0x58, 0xab, 0xbb, 0xed, 0x1d, - 0x67, 0x37, 0xac, 0xbd, 0xf9, 0xa5, 0xeb, 0x24, 0x61, 0xbd, 0xfc, 0xc9, 0xe3, 0xe5, 0x42, 0xe7, - 0x21, 0xcd, 0x36, 0x0b, 0x9d, 0x87, 0x34, 0x1d, 0x7d, 0x01, 0xe0, 0x41, 0x77, 0xdb, 0x66, 0xd5, - 0xb2, 0x2b, 0x99, 0xf3, 0xc5, 0xf5, 0xe5, 0x4f, 0x1e, 0x2f, 0x0b, 0xa9, 0x9f, 0x3e, 0x5e, 0x1e, - 0xf7, 0xed, 0x7a, 0xd7, 0xb3, 0xaf, 0xe9, 0x81, 0xd7, 0xb5, 0x75, 0x53, 0xc8, 0x44, 0x17, 0xa0, - 0x52, 0x6f, 0xba, 0xdd, 0x46, 0xad, 0xee, 0xd9, 0x0d, 0xbb, 0x1d, 0x38, 0x56, 0xb3, 0x9a, 0xc3, - 0xcd, 0x98, 0x93, 0x24, 0xfd, 0x7a, 0x98, 0x8c, 0xae, 0xc0, 0xa8, 0x1f, 0x58, 0x41, 0xd7, 0xaf, - 0xe6, 0x09, 0x78, 0xf3, 0x86, 0x00, 0xbf, 0xb1, 0x45, 0xb2, 0xf0, 0x5f, 0x93, 0x15, 0x43, 0x67, - 0x60, 0xa2, 0x61, 0x37, 0xed, 0xc0, 0xae, 0x6d, 0x5b, 0xf5, 0x07, 0xdd, 0x8e, 0x5f, 0x1d, 0x59, - 0xc9, 0x9c, 0x2f, 0x98, 0xe3, 0x34, 0x75, 0x9d, 0x26, 0xa2, 0x73, 0x30, 0xc9, 0x8a, 0x79, 0xb6, - 0x1f, 0xb8, 0x9e, 0xed, 0x57, 0x47, 0x49, 0x39, 0x56, 0xdb, 0x64, 0xa9, 0xe8, 0x29, 0x18, 0xc7, - 0xff, 0x1e, 0xd4, 0xf6, 0x6d, 0xcf, 0x77, 0xdc, 0x76, 0x75, 0x8c, 0x00, 0x5a, 0x26, 0x89, 0xef, - 0xd2, 0x34, 0xf4, 0x2a, 0xcc, 0xc4, 0x07, 0x54, 0xf3, 0xec, 0x9d, 0x6a, 0x81, 0xc0, 0x0c, 0x06, - 0x9d, 0x2b, 0xd3, 0xde, 0x31, 0x51, 0x6c, 0x80, 0xa6, 0xbd, 0x83, 0x5e, 0x84, 0x8a, 0xd5, 0x68, - 0x30, 0x78, 0x6b, 0xfe, 0x9e, 0xe5, 0xd9, 0xd5, 0x22, 0xa9, 0x59, 0x36, 0x28, 0xbc, 0x5b, 0x38, - 0xcd, 0x9c, 0xb0, 0x1a, 0x0d, 0xe1, 0x1b, 0xd7, 0x6b, 0xd8, 0x4d, 0xb9, 0x1e, 0xa8, 0xea, 0x35, - 0xec, 0xa6, 0x58, 0xef, 0x03, 0xa8, 0x8a, 0x75, 0x6a, 0x14, 0x73, 0x35, 0xa7, 0xbd, 0xe3, 0x56, - 0x4b, 0xa4, 0xbe, 0x2e, 0x61, 0x59, 0xa8, 0x2b, 0x20, 0x7c, 0x76, 0x5b, 0x95, 0x8c, 0xce, 0x43, - 0xc5, 0xfd, 0xb0, 0x6d, 0x7b, 0xb5, 0x5d, 0xcf, 0xed, 0x76, 0x6a, 0x4d, 0xc7, 0x0f, 0xaa, 0xe5, - 0x95, 0xdc, 0xf9, 0xa2, 0x39, 0x41, 0xd2, 0x5f, 0xc7, 0xc9, 0x77, 0x1c, 0x3f, 0x40, 0xeb, 0x30, - 0xdf, 0x69, 0x5a, 0xc1, 0x8e, 0xeb, 0xb5, 0xe2, 0x78, 0x1b, 0x4f, 0xe0, 0x6d, 0x96, 0x17, 0x95, - 0x51, 0x67, 0xc0, 0x74, 0x60, 0x37, 0xed, 0x8e, 0xeb, 0x05, 0xb5, 0x3a, 0x05, 0xb9, 0xe6, 0x34, - 0xaa, 0x13, 0x64, 0x8e, 0xa6, 0x78, 0x16, 0x1f, 0x4c, 0x03, 0x9d, 0x82, 0x62, 0x60, 0xb7, 0xad, - 0x76, 0x80, 0x4b, 0x4d, 0x92, 0x52, 0x05, 0x9a, 0xb0, 0xd1, 0x40, 0xb7, 0x60, 0xdc, 0xb7, 0xbd, - 0x7d, 0xa7, 0x6e, 0xd7, 0x02, 0xf7, 0x81, 0xdd, 0xae, 0x56, 0x08, 0x69, 0x9f, 0xfe, 0xe4, 0xf1, - 0x72, 0x99, 0x65, 0x90, 0xf4, 0x24, 0x71, 0xf3, 0xec, 0xb7, 0x71, 0x36, 0x7a, 0x0e, 0x0a, 0x1d, - 0xcf, 0xdd, 0x77, 0x1a, 0xb6, 0x57, 0x9d, 0x5a, 0xc9, 0x9c, 0x9f, 0x58, 0x9d, 0x95, 0xf0, 0xb9, - 0xc9, 0x32, 0xcd, 0xb0, 0x98, 0xf6, 0xaf, 0x33, 0x00, 0x02, 0x12, 0x5f, 0x0c, 0xa9, 0x3e, 0x43, - 0xea, 0x2f, 0xa5, 0x50, 0x3d, 0xfb, 0x1b, 0x12, 0xff, 0x1c, 0x8c, 0x7a, 0xb6, 0xe5, 0xbb, 0x6d, - 0xba, 0x2a, 0x4d, 0xf6, 0xa5, 0xef, 0xc2, 0x28, 0x2d, 0x89, 0x4a, 0x30, 0xb6, 0xd1, 0xde, 0xb7, - 0x9a, 0x4e, 0xa3, 0x72, 0x02, 0x01, 0x8c, 0xde, 0x6f, 0x37, 0x9d, 0xb6, 0x5d, 0xc9, 0xe0, 0x8c, - 0xfb, 0x3b, 0x3b, 0xe4, 0x23, 0x8b, 0xa6, 0x60, 0xfc, 0x06, 0x59, 0x06, 0x9b, 0x76, 0xbb, 0xe1, - 0xb4, 0x77, 0x2b, 0x39, 0x9c, 0xcf, 0x3f, 0xf2, 0xb8, 0xe2, 0x2d, 0xcb, 0x69, 0xda, 0x8d, 0xca, - 0x08, 0xce, 0xd8, 0xea, 0xd6, 0xeb, 0xb6, 0xef, 0x57, 0x46, 0xb5, 0x3f, 0xce, 0xc0, 0xac, 0x92, - 0x5c, 0xd0, 0x5a, 0x6c, 0x48, 0x17, 0xfa, 0x93, 0xd8, 0xa0, 0xa3, 0x33, 0xd5, 0xa3, 0x9b, 0x00, - 0xd8, 0x68, 0x6f, 0x7a, 0xee, 0xae, 0x87, 0x61, 0xcb, 0x08, 0x40, 0x67, 0x45, 0xa0, 0x73, 0x08, - 0xc1, 0xc4, 0xa6, 0xe5, 0x61, 0x92, 0xe2, 0x69, 0x79, 0xfd, 0x2e, 0x14, 0xf8, 0x34, 0xc9, 0xad, - 0x8e, 0x41, 0x6e, 0xed, 0xbd, 0xad, 0x4a, 0x06, 0x15, 0x61, 0x64, 0xed, 0x51, 0xd7, 0xc3, 0xe8, - 0x02, 0x18, 0x7d, 0x9d, 0xec, 0x1a, 0x95, 0x1c, 0xce, 0xdf, 0x58, 0xbf, 0x5b, 0xc9, 0xe3, 0x5a, - 0xa6, 0xd5, 0xae, 0xef, 0xd9, 0x5e, 0x65, 0x44, 0xff, 0x46, 0x06, 0xc6, 0xd9, 0x78, 0x8f, 0xc0, - 0xb7, 0xd1, 0x75, 0x28, 0xd5, 0x23, 0x6c, 0x91, 0xe1, 0xe3, 0x45, 0x2e, 0x60, 0x70, 0x7d, 0x1a, - 0x57, 0xf9, 0xe4, 0xf1, 0x32, 0x2f, 0x88, 0x57, 0xb3, 0x29, 0xd6, 0xd2, 0x5f, 0x83, 0x02, 0x67, - 0xed, 0x68, 0x15, 0xca, 0x16, 0x19, 0x2a, 0xa3, 0xf4, 0x0c, 0xa1, 0xf4, 0x49, 0x5c, 0x9f, 0xa6, - 0x93, 0x64, 0x93, 0x7d, 0x10, 0xb2, 0xd6, 0x1f, 0x42, 0x71, 0xed, 0xbd, 0x2d, 0xd6, 0xc0, 0x33, - 0x00, 0xac, 0x81, 0x07, 0xf6, 0x01, 0xab, 0x3e, 0xfe, 0xc9, 0xe3, 0xe5, 0x22, 0x4d, 0x7d, 0x60, - 0x1f, 0x98, 0xec, 0xef, 0x9b, 0xf6, 0x01, 0xfa, 0x3c, 0x80, 0x6f, 0xd7, 0x3d, 0x3b, 0x20, 0xa5, - 0xe9, 0x8e, 0xb1, 0x84, 0x4b, 0xd3, 0xd4, 0x07, 0xf6, 0x41, 0x72, 0x4d, 0xb1, 0xbc, 0x37, 0xed, - 0x03, 0x7d, 0x1d, 0x8a, 0x1b, 0xeb, 0x77, 0x59, 0xcf, 0x57, 0x61, 0xcc, 0xea, 0x38, 0x42, 0xb7, - 0x0b, 0x9f, 0x3c, 0x5e, 0xe6, 0x49, 0xc9, 0x66, 0x46, 0xad, 0x8e, 0x83, 0xdb, 0x78, 0x00, 0xe3, - 0x6c, 0x3a, 0x58, 0x3b, 0xe7, 0xa1, 0x60, 0xb7, 0x1b, 0x1d, 0xd7, 0x69, 0x07, 0xac, 0x21, 0xb2, - 0xdf, 0xf1, 0x34, 0x33, 0xfc, 0x87, 0x9e, 0x85, 0x11, 0x8a, 0x25, 0x0a, 0xb8, 0xf6, 0xc9, 0xe3, - 0xe5, 0x91, 0x14, 0x46, 0x40, 0xd3, 0xf5, 0xbf, 0x91, 0x85, 0xc2, 0xd6, 0xf3, 0xac, 0x23, 0x2d, - 0xde, 0x91, 0xd0, 0x34, 0x21, 0xe9, 0x5d, 0x47, 0x24, 0x69, 0xfc, 0x85, 0x96, 0xa1, 0xd4, 0x70, - 0x7c, 0x6b, 0xbb, 0x69, 0xd7, 0x7c, 0x9f, 0x6e, 0x8e, 0x05, 0x13, 0x58, 0xd2, 0x96, 0xdf, 0x44, - 0xcf, 0x00, 0xe2, 0x05, 0x3a, 0x56, 0xb0, 0x57, 0xf3, 0x83, 0x83, 0xa6, 0x4d, 0xf6, 0xc8, 0x82, - 0x59, 0x61, 0x39, 0x9b, 0x56, 0xb0, 0xb7, 0x85, 0xd3, 0xf9, 0x26, 0x66, 0xed, 0xda, 0xb5, 0x7a, - 0xd3, 0xf2, 0xe9, 0x9e, 0xc8, 0x36, 0x31, 0x6b, 0xd7, 0xbe, 0x8e, 0xd3, 0x30, 0x42, 0x7c, 0xdf, - 0xae, 0x05, 0x07, 0x1d, 0x9b, 0xec, 0x85, 0x13, 0xab, 0xe3, 0x06, 0x1f, 0x84, 0xb1, 0xe5, 0xdb, - 0xe6, 0x98, 0xef, 0xdb, 0x6f, 0x1f, 0x74, 0x6c, 0xfd, 0x12, 0xe4, 0xb6, 0x7c, 0x3b, 0xc1, 0x4b, - 0xb6, 0xb6, 0x6e, 0xd6, 0xb6, 0x9e, 0xa7, 0xbc, 0x04, 0xff, 0x7f, 0xf3, 0xee, 0x56, 0x25, 0xab, - 0x7f, 0x3d, 0x07, 0x25, 0xb2, 0x50, 0x18, 0x3a, 0x4e, 0x13, 0xd2, 0x73, 0xbb, 0xed, 0xa0, 0xd6, - 0xb6, 0x5a, 0x36, 0x43, 0x49, 0x89, 0xa5, 0xdd, 0xb3, 0x5a, 0x36, 0xfa, 0x22, 0xf0, 0x4f, 0x81, - 0x5e, 0x88, 0x84, 0xc1, 0x92, 0x95, 0x33, 0xcd, 0x33, 0x31, 0xc1, 0xdd, 0x82, 0xf1, 0x7a, 0xd3, - 0xb1, 0xdb, 0x41, 0x8d, 0x52, 0x11, 0x15, 0x2f, 0x28, 0x2b, 0xa7, 0x19, 0x34, 0x5d, 0xc1, 0xca, - 0x69, 0xf6, 0x16, 0xc9, 0x46, 0xd7, 0xa0, 0xc8, 0xda, 0x71, 0x1a, 0x04, 0xbb, 0xc5, 0xf5, 0x45, - 0x4c, 0x25, 0x34, 0xd1, 0x69, 0x24, 0xeb, 0xb3, 0xac, 0x8d, 0x06, 0xae, 0x1b, 0xed, 0x35, 0x23, - 0x51, 0x5d, 0x9a, 0xa8, 0xac, 0x1b, 0x6e, 0x45, 0x77, 0x60, 0xd2, 0xef, 0x6e, 0xfb, 0x75, 0xcf, - 0x21, 0xe2, 0x20, 0x6e, 0x61, 0x94, 0xb4, 0xf0, 0xd4, 0x27, 0x8f, 0x97, 0x27, 0xc4, 0x2c, 0x55, - 0x3b, 0x52, 0x81, 0x8d, 0x86, 0xbe, 0x03, 0x65, 0xca, 0x9f, 0xd8, 0x14, 0x2c, 0x02, 0x74, 0x3c, - 0x17, 0xb3, 0x21, 0xdc, 0x30, 0x9d, 0x80, 0x22, 0x4b, 0xd9, 0x68, 0xa0, 0x97, 0xa0, 0xf0, 0x55, - 0xdf, 0x6d, 0x0b, 0xb8, 0x27, 0x4b, 0x0c, 0xa7, 0x29, 0x11, 0x4f, 0x72, 0xf0, 0x1a, 0xfb, 0x61, - 0x0e, 0xa6, 0xaf, 0xcb, 0xf2, 0x0d, 0xe1, 0xfd, 0x97, 0x21, 0x4f, 0xa8, 0x8a, 0x72, 0xfe, 0x93, - 0x86, 0xa2, 0x8c, 0x81, 0x09, 0xcb, 0x24, 0xc5, 0xd0, 0x25, 0x00, 0xeb, 0x43, 0x9f, 0x8b, 0xa5, - 0x0d, 0x26, 0x0b, 0x84, 0xbc, 0xe7, 0xf6, 0x09, 0xb3, 0x68, 0x7d, 0xe8, 0xb3, 0xb1, 0x3c, 0x07, - 0x65, 0x0b, 0x53, 0x17, 0x2f, 0x6e, 0x33, 0xde, 0x28, 0x90, 0xdc, 0xed, 0x13, 0x66, 0xc9, 0x12, - 0x28, 0xf0, 0x05, 0x18, 0xa7, 0x42, 0x3e, 0xaf, 0xb3, 0x43, 0xea, 0x8c, 0x1b, 0x22, 0x92, 0x6e, - 0x9f, 0x30, 0xcb, 0xbb, 0x22, 0xd2, 0x2e, 0x01, 0x38, 0xdb, 0x2d, 0x5e, 0x65, 0x97, 0x41, 0x15, - 0xf2, 0x25, 0x0c, 0x95, 0xb3, 0xdd, 0x62, 0x85, 0x5f, 0x82, 0x09, 0x8f, 0x72, 0x1b, 0x5e, 0x61, - 0x8f, 0x54, 0x98, 0x30, 0x24, 0x26, 0x74, 0xfb, 0x84, 0x39, 0xee, 0x89, 0x09, 0xfa, 0x06, 0xe4, - 0x31, 0x26, 0x8e, 0x61, 0xcf, 0x59, 0x2f, 0xc0, 0x28, 0xed, 0x5b, 0xff, 0xed, 0x0c, 0xcc, 0xc6, - 0x70, 0xce, 0x76, 0xa1, 0x97, 0x7a, 0xed, 0x42, 0x15, 0xb6, 0xa5, 0x84, 0x45, 0x84, 0x1d, 0xe9, - 0x36, 0xcc, 0x26, 0x24, 0x5e, 0x27, 0xda, 0x9b, 0x66, 0x54, 0x73, 0x6c, 0x4e, 0xd7, 0x93, 0x89, - 0xfa, 0x6f, 0x16, 0x00, 0x6d, 0xd5, 0xf7, 0xec, 0x46, 0xb7, 0x69, 0x6f, 0xba, 0x4d, 0xa7, 0x7e, - 0x40, 0x68, 0xe6, 0x35, 0x28, 0x38, 0xed, 0xc0, 0xf6, 0xf6, 0xad, 0x26, 0x83, 0x4c, 0x37, 0x92, - 0xc5, 0x8c, 0x0d, 0x56, 0x86, 0x26, 0x99, 0x61, 0x1d, 0x74, 0x15, 0x46, 0x1a, 0x96, 0xd3, 0x3c, - 0x60, 0x00, 0x2d, 0xab, 0x2a, 0xdf, 0xc0, 0x05, 0x58, 0x4d, 0x5a, 0x1a, 0xbd, 0x0c, 0xa3, 0x1f, - 0xda, 0xf6, 0x83, 0xe6, 0x01, 0xe1, 0x18, 0xa5, 0xd5, 0x15, 0x55, 0xbd, 0xf7, 0x48, 0x09, 0x56, - 0x91, 0x95, 0x47, 0xaf, 0xc0, 0x58, 0xcb, 0x6d, 0x07, 0x7b, 0xcd, 0x03, 0xa6, 0xaa, 0x9c, 0x56, - 0x55, 0xbd, 0x4b, 0x8b, 0xb0, 0xba, 0xbc, 0x06, 0x56, 0x47, 0xb8, 0x48, 0xce, 0xea, 0x54, 0x47, - 0xa8, 0xd0, 0xcc, 0xa4, 0x6c, 0x96, 0x8a, 0xce, 0xc2, 0xe4, 0x8e, 0xeb, 0xd5, 0x5c, 0x32, 0x7d, - 0xb5, 0xa6, 0x5b, 0x7f, 0xc0, 0xf4, 0x96, 0xf1, 0x1d, 0x97, 0x89, 0x16, 0x77, 0xdc, 0xfa, 0x03, - 0xbc, 0x81, 0x58, 0xdd, 0xc0, 0xad, 0x51, 0x6d, 0x86, 0x28, 0x2d, 0x05, 0x13, 0x70, 0x12, 0x15, - 0xec, 0xb4, 0xe7, 0xa1, 0xb2, 0xd1, 0xae, 0x7b, 0x76, 0xcb, 0x6e, 0x07, 0x56, 0xf3, 0x3a, 0x66, - 0x9c, 0x68, 0x19, 0x46, 0x08, 0x07, 0x25, 0x08, 0xcf, 0xaf, 0x17, 0xf1, 0x46, 0x47, 0x12, 0x4c, - 0xfa, 0xa3, 0xfd, 0x30, 0x03, 0x13, 0x32, 0xc6, 0x51, 0x15, 0xc6, 0x5a, 0x4e, 0xbb, 0x1b, 0xd8, - 0x54, 0xb0, 0xcb, 0x99, 0xfc, 0x93, 0xee, 0x6d, 0x81, 0xe5, 0xd0, 0xbd, 0x2d, 0x67, 0xb2, 0x2f, - 0xf4, 0x16, 0x4c, 0x39, 0x51, 0xcf, 0x35, 0xda, 0x23, 0xc5, 0xf6, 0xd3, 0xea, 0x29, 0x96, 0xc1, - 0x34, 0x2b, 0x4e, 0x2c, 0x45, 0xfb, 0xb5, 0x0c, 0x94, 0x84, 0xc9, 0x44, 0x08, 0xf2, 0x58, 0x6d, - 0x67, 0xac, 0x8d, 0xfc, 0x7f, 0x92, 0xe0, 0xfc, 0x7e, 0x06, 0xca, 0x22, 0x8d, 0xa0, 0x0a, 0xe4, - 0x1a, 0x16, 0x93, 0x57, 0x4c, 0xfc, 0x37, 0x84, 0x30, 0xab, 0x84, 0x30, 0xd7, 0x1f, 0xc2, 0xfc, - 0x50, 0x10, 0xfe, 0xed, 0x0c, 0x8c, 0x4b, 0xa4, 0x88, 0x01, 0x6a, 0x58, 0x81, 0xcd, 0x26, 0x91, - 0xfc, 0xff, 0x8c, 0x81, 0xd4, 0x7f, 0x37, 0x03, 0x33, 0x72, 0xcd, 0x61, 0xb9, 0xd6, 0x9b, 0x30, - 0xc3, 0xd7, 0x57, 0xad, 0x43, 0x5a, 0x14, 0x99, 0xd6, 0xb4, 0x02, 0x4e, 0x26, 0x8a, 0x23, 0x3f, - 0x91, 0xa3, 0xff, 0x8b, 0x59, 0x40, 0xeb, 0xd2, 0xea, 0x24, 0x8c, 0xeb, 0x1c, 0x4c, 0xc6, 0xfa, - 0x60, 0xf3, 0x3e, 0x21, 0xb7, 0x81, 0x57, 0x8e, 0xdf, 0xf5, 0x3b, 0x76, 0xbb, 0x41, 0xfa, 0x2f, - 0x98, 0xfc, 0x13, 0xdd, 0x81, 0x09, 0xcf, 0xae, 0x37, 0x2d, 0xa7, 0xc5, 0x5b, 0xc8, 0x91, 0x9d, - 0xf3, 0x8c, 0x91, 0xec, 0xcf, 0x30, 0x69, 0x49, 0xda, 0x28, 0xd9, 0x45, 0xc7, 0x3d, 0x31, 0x09, - 0xbd, 0x01, 0xe3, 0x9c, 0xb7, 0x70, 0x4b, 0x4a, 0xee, 0x7c, 0x49, 0xdd, 0x18, 0x4b, 0x22, 0xe5, - 0x6e, 0xb6, 0x03, 0xef, 0xc0, 0x2c, 0x6f, 0x0b, 0x49, 0x02, 0x9f, 0x6a, 0xba, 0x75, 0x62, 0x86, - 0x62, 0xa2, 0x24, 0xe3, 0x53, 0x77, 0x58, 0x2a, 0x1e, 0x1c, 0xd3, 0x3d, 0xa8, 0xe0, 0x62, 0xf2, - 0x4f, 0xb4, 0x04, 0x80, 0xe5, 0x3e, 0xbf, 0x63, 0xd5, 0x6d, 0xbf, 0x3a, 0x46, 0xb8, 0x9c, 0x90, - 0x82, 0x36, 0x61, 0xb2, 0x69, 0x6d, 0xdb, 0xcd, 0x9a, 0x6f, 0x37, 0xed, 0x7a, 0xe0, 0x7a, 0x7e, - 0xb5, 0x40, 0x00, 0x3e, 0xa7, 0x02, 0xf8, 0x0e, 0x2e, 0xba, 0xc5, 0x4b, 0x52, 0x90, 0x27, 0x9a, - 0x52, 0x22, 0xd2, 0x61, 0xbc, 0xe3, 0xd9, 0x35, 0xfb, 0xa1, 0x5d, 0xaf, 0x79, 0x98, 0xb5, 0x16, - 0xa9, 0xc8, 0xd9, 0xf1, 0xec, 0x9b, 0x0f, 0xed, 0xba, 0x89, 0xf9, 0xea, 0xd3, 0x30, 0xd1, 0x71, - 0xfd, 0x40, 0x28, 0x04, 0x54, 0x44, 0xc6, 0xa9, 0x61, 0xa9, 0xa4, 0x71, 0xa9, 0xa4, 0x32, 0x2e, - 0x45, 0xea, 0x7b, 0x99, 0x10, 0xd6, 0x92, 0x0a, 0x72, 0x85, 0xed, 0x6a, 0x1d, 0xca, 0x8c, 0x04, - 0xec, 0x46, 0x6d, 0xfb, 0x80, 0x99, 0x41, 0x96, 0x95, 0xb5, 0x79, 0xb9, 0xf5, 0x03, 0xb3, 0xe4, - 0x47, 0x1f, 0xe8, 0x1a, 0x59, 0x87, 0xcd, 0x6e, 0x83, 0x58, 0xb6, 0xdc, 0xae, 0x87, 0xb1, 0x3c, - 0x41, 0x10, 0x38, 0x6e, 0x98, 0x2c, 0x85, 0xf4, 0x5a, 0x61, 0xe5, 0x78, 0xa2, 0xc2, 0xd6, 0x35, - 0xa9, 0xb0, 0x75, 0x5d, 0x85, 0xf9, 0xba, 0xef, 0xd4, 0xfc, 0xb6, 0xd5, 0xf1, 0xf7, 0xdc, 0x80, - 0x2a, 0x14, 0x54, 0x94, 0x27, 0xf6, 0x12, 0x73, 0xa6, 0xee, 0x3b, 0x5b, 0x2c, 0x97, 0x68, 0x16, - 0x44, 0xa6, 0x3f, 0x83, 0x69, 0x9a, 0x76, 0x44, 0x54, 0x0c, 0xbf, 0x3a, 0x45, 0xa6, 0x7e, 0x9c, - 0xa7, 0x62, 0xd2, 0xf5, 0xd1, 0x35, 0x98, 0x8e, 0xaf, 0x50, 0xcf, 0xde, 0xa9, 0xa2, 0x84, 0x41, - 0x68, 0x4a, 0x5e, 0x4d, 0xa6, 0xbd, 0x83, 0xeb, 0xc6, 0x88, 0x93, 0xd4, 0x9d, 0x4e, 0xd6, 0x95, - 0x89, 0x15, 0xd7, 0xbd, 0x0a, 0x53, 0x12, 0x8d, 0x90, 0x9a, 0x33, 0x89, 0x9a, 0x13, 0x02, 0xcd, - 0xe0, 0x6a, 0x2f, 0x01, 0x92, 0xc9, 0x86, 0xd4, 0x9b, 0x4d, 0xd4, 0x9b, 0x14, 0xc9, 0x08, 0x57, - 0xfc, 0x02, 0x94, 0x18, 0xac, 0x44, 0x32, 0x9e, 0x4b, 0xa7, 0x13, 0x9a, 0x44, 0x16, 0x36, 0x6c, - 0x87, 0xff, 0xb1, 0x02, 0xd8, 0xf6, 0x6b, 0xf1, 0x95, 0x32, 0x4f, 0x66, 0xa0, 0xd2, 0xf6, 0xe5, - 0x75, 0x81, 0x2e, 0x40, 0x25, 0xb0, 0xbc, 0x5d, 0x9b, 0xea, 0x5c, 0x64, 0xa5, 0x55, 0xab, 0xd4, - 0xe2, 0x4a, 0xd3, 0xef, 0xf1, 0x64, 0x74, 0x29, 0xb4, 0x35, 0x90, 0xb1, 0x9c, 0x4c, 0x8c, 0x05, - 0x58, 0x36, 0x1e, 0x86, 0x09, 0x88, 0x0d, 0x83, 0x49, 0x24, 0x64, 0x34, 0x1a, 0x63, 0xfb, 0xa9, - 0xa3, 0xa1, 0x8d, 0x91, 0x31, 0x55, 0xb6, 0x63, 0x29, 0xe8, 0x05, 0x98, 0xf7, 0x1f, 0x38, 0x9d, - 0xda, 0x7e, 0xab, 0x46, 0x44, 0x98, 0x10, 0xb7, 0x7e, 0xf5, 0x14, 0x59, 0x6d, 0xd3, 0x38, 0xfb, - 0xdd, 0xd6, 0x5a, 0x37, 0x70, 0x39, 0x4a, 0x7d, 0xb4, 0x0f, 0x8b, 0xfb, 0x6e, 0xb3, 0xdb, 0xb2, - 0xe3, 0x94, 0xd9, 0xb2, 0x3a, 0x1d, 0xa7, 0xbd, 0x5b, 0x5d, 0x20, 0x6b, 0xe0, 0x79, 0x15, 0x50, - 0xef, 0x92, 0x8a, 0x12, 0xcd, 0xde, 0xa5, 0xb5, 0x28, 0x43, 0xd1, 0xf6, 0x53, 0x0b, 0x50, 0x4d, - 0xdd, 0xc3, 0x43, 0x7f, 0xd0, 0x68, 0x75, 0xaa, 0x8b, 0x5c, 0x53, 0xc7, 0x49, 0x6f, 0x36, 0x5a, - 0x1d, 0xad, 0x0e, 0x53, 0x09, 0xae, 0x8a, 0x05, 0x82, 0xd0, 0x80, 0x61, 0xe2, 0xbf, 0xe8, 0x65, - 0x18, 0xd9, 0xb7, 0x9a, 0x5d, 0x9b, 0xed, 0x45, 0x7a, 0x6f, 0x96, 0x71, 0xc7, 0xf1, 0x03, 0x93, - 0x56, 0xb8, 0x96, 0x7d, 0x39, 0xa3, 0xad, 0xc1, 0xb4, 0x82, 0x13, 0x2a, 0xba, 0x99, 0x11, 0xbb, - 0x29, 0x8a, 0x4d, 0xdc, 0x85, 0xe5, 0x3e, 0x78, 0x38, 0x54, 0x73, 0x3e, 0x40, 0x44, 0xb9, 0xe8, - 0x25, 0x49, 0x03, 0x7c, 0xaa, 0x37, 0x9d, 0x0b, 0xba, 0xa0, 0xfe, 0x8c, 0x4a, 0x1f, 0x2a, 0xc1, - 0xd8, 0xeb, 0x76, 0xdb, 0xf6, 0x9c, 0x3a, 0x35, 0xeb, 0xdd, 0x73, 0xbd, 0x96, 0xd5, 0xac, 0x64, - 0xb5, 0xaf, 0x67, 0xa0, 0x24, 0x70, 0x46, 0xf4, 0x1a, 0x8c, 0x52, 0xe6, 0xc2, 0x3a, 0x3e, 0xdb, - 0x87, 0x95, 0x1a, 0x5b, 0xa4, 0xb4, 0xc9, 0x6a, 0xe9, 0xcf, 0xc1, 0x28, 0x4d, 0x91, 0xfb, 0x2f, - 0x40, 0xfe, 0x1d, 0xdf, 0xf6, 0x2a, 0x19, 0x54, 0x81, 0xf2, 0x1d, 0xa7, 0x6e, 0xb7, 0x7d, 0xfb, - 0xfa, 0x9e, 0x5d, 0x7f, 0x50, 0xc9, 0x6a, 0xb7, 0x61, 0x42, 0x9e, 0x26, 0xc9, 0x98, 0x9b, 0x1b, - 0x7c, 0x37, 0xd0, 0x7e, 0x37, 0x27, 0xd9, 0x84, 0x97, 0x43, 0x8e, 0x21, 0x98, 0x4d, 0x18, 0x47, - 0x20, 0x1c, 0xf6, 0x15, 0x28, 0xd5, 0x3d, 0xdb, 0x0a, 0xec, 0x5a, 0x28, 0xb4, 0x95, 0x56, 0x35, - 0x83, 0x2a, 0xb1, 0x06, 0x3f, 0xa5, 0x32, 0xde, 0xe6, 0xe7, 0x59, 0x26, 0xd0, 0xe2, 0x38, 0x01, - 0x57, 0xde, 0x71, 0xda, 0x8e, 0xbf, 0x47, 0x2b, 0xe7, 0xfa, 0x57, 0xa6, 0xc5, 0x49, 0xe5, 0xcf, - 0x4b, 0x87, 0x34, 0x29, 0x72, 0x4a, 0x4f, 0xbb, 0xae, 0x49, 0xed, 0xba, 0x54, 0x96, 0x60, 0x5f, - 0xfa, 0xef, 0x64, 0xd4, 0x86, 0x5d, 0xc1, 0x14, 0x9d, 0x89, 0x59, 0x79, 0x89, 0x65, 0x77, 0x6d, - 0xdb, 0xf5, 0x02, 0xbb, 0x51, 0xc9, 0x09, 0x26, 0xdf, 0x3c, 0x2a, 0x43, 0x81, 0xa8, 0x3e, 0xb8, - 0x9a, 0x6c, 0xb5, 0xc6, 0x59, 0xd7, 0xad, 0x4e, 0xd0, 0xf5, 0xec, 0x46, 0x65, 0x4c, 0x61, 0x0e, - 0x2e, 0x24, 0x0d, 0xe2, 0x45, 0xed, 0x5b, 0x19, 0xa8, 0xc4, 0xb9, 0x19, 0xfa, 0xbc, 0x44, 0xe7, - 0x17, 0x06, 0xe1, 0x80, 0x22, 0xb5, 0x3f, 0x9b, 0xa6, 0xfd, 0x37, 0x9b, 0x95, 0x0c, 0x06, 0xec, - 0x5d, 0xc7, 0x0b, 0xba, 0x56, 0xf3, 0xae, 0x55, 0xdf, 0x23, 0x96, 0x7a, 0xfd, 0x65, 0x98, 0x4a, - 0x08, 0x80, 0x09, 0xc3, 0x1c, 0x05, 0x9d, 0xae, 0x15, 0x93, 0x88, 0xeb, 0x95, 0x2c, 0x91, 0xae, - 0x65, 0xf0, 0x8e, 0x41, 0xba, 0x8e, 0x29, 0xb1, 0xb2, 0x74, 0x9d, 0x44, 0x06, 0x97, 0xae, 0xb7, - 0x13, 0x39, 0xfa, 0x57, 0xa1, 0x78, 0xef, 0x16, 0xb7, 0x36, 0x2f, 0x43, 0xc9, 0xb7, 0xbd, 0x7d, - 0xdb, 0xab, 0x59, 0x8d, 0x86, 0xc7, 0x69, 0x9f, 0x26, 0xad, 0x35, 0x1a, 0x1e, 0x3a, 0x09, 0x05, - 0xbf, 0xbb, 0x4d, 0x4c, 0xa1, 0x8c, 0x15, 0x8d, 0xf9, 0xdd, 0xed, 0x4d, 0x2b, 0xd8, 0x43, 0xa7, - 0xa1, 0xdc, 0x22, 0xa6, 0x44, 0x7a, 0xb2, 0xca, 0x0e, 0x1a, 0x4b, 0x24, 0xed, 0x3e, 0x49, 0xd2, - 0xff, 0xe5, 0x28, 0x97, 0xe4, 0xb9, 0x48, 0x40, 0x56, 0xdc, 0x33, 0xd2, 0x64, 0x56, 0x8d, 0x64, - 0x11, 0xd1, 0x6a, 0x85, 0x20, 0x2f, 0x74, 0x4f, 0xfe, 0xa3, 0x0d, 0x98, 0xb0, 0xdb, 0x75, 0xef, - 0x80, 0x1a, 0xf1, 0x30, 0xef, 0xa4, 0x76, 0x48, 0xfd, 0x93, 0xc7, 0xcb, 0xe3, 0x51, 0x8e, 0xd2, - 0xaa, 0x26, 0xe4, 0xbf, 0x69, 0x1f, 0x28, 0xcf, 0x4c, 0xf3, 0xea, 0x33, 0xd3, 0x88, 0xe1, 0x8c, - 0x48, 0x62, 0x85, 0x04, 0xf9, 0x40, 0x47, 0xa7, 0xa3, 0x2a, 0xe9, 0xf6, 0x1a, 0x9c, 0x24, 0xb4, - 0x85, 0x39, 0x4d, 0x02, 0x24, 0x6a, 0x68, 0x98, 0xe7, 0x05, 0x62, 0x56, 0xa0, 0x21, 0x0f, 0x4a, - 0x0d, 0x98, 0x16, 0x0c, 0x1f, 0x35, 0xbb, 0x6d, 0x6d, 0x37, 0xed, 0x06, 0x11, 0xe7, 0x0b, 0xe6, - 0x94, 0x1b, 0x5a, 0x3f, 0x6e, 0xd2, 0x0c, 0x74, 0x1e, 0x8a, 0xfe, 0xf3, 0xb2, 0x1d, 0xb1, 0x18, - 0x9a, 0xb4, 0x6f, 0x9f, 0x30, 0x0b, 0xfe, 0xf3, 0x91, 0x71, 0xaf, 0xbd, 0xe3, 0xcb, 0x36, 0x44, - 0x30, 0x42, 0x02, 0xbc, 0x7d, 0xc2, 0x2c, 0xb6, 0x77, 0x98, 0xc9, 0x51, 0xfb, 0x13, 0xf9, 0xb0, - 0xee, 0xf3, 0xb1, 0x93, 0xad, 0x33, 0xbd, 0xd1, 0x3d, 0xe8, 0xa9, 0x56, 0x5d, 0xcd, 0xfc, 0x8a, - 0x30, 0xf2, 0x2e, 0xf9, 0x9b, 0x49, 0x32, 0xa5, 0x2c, 0xaa, 0xc2, 0xcc, 0xbb, 0x14, 0xf5, 0xa4, - 0xe3, 0x90, 0x2f, 0xe6, 0xd0, 0x0c, 0x54, 0xa2, 0x1c, 0xce, 0x14, 0xf5, 0x57, 0x54, 0x0c, 0x67, - 0x14, 0xb2, 0xc4, 0x8c, 0x9f, 0x6e, 0x6d, 0xbc, 0x77, 0x6b, 0xab, 0x92, 0x17, 0x0c, 0x8c, 0xbf, - 0x11, 0xf2, 0x12, 0x3e, 0xe8, 0x61, 0x79, 0xc9, 0xcd, 0x90, 0x97, 0x84, 0xb2, 0xbc, 0x82, 0x97, - 0x88, 0x28, 0xe6, 0x5c, 0x44, 0x4c, 0xd3, 0xbf, 0x9d, 0x81, 0xb2, 0xa8, 0xf4, 0xe0, 0x55, 0x2a, - 0x6c, 0x9f, 0xe4, 0x3f, 0x5a, 0x80, 0x62, 0x24, 0x15, 0xd3, 0x49, 0x88, 0x12, 0xb0, 0x88, 0x43, - 0x8e, 0xb2, 0x19, 0xe3, 0xa0, 0x1f, 0xb8, 0x9d, 0x07, 0x4e, 0x9b, 0x9d, 0x09, 0x98, 0xe4, 0x3f, - 0xd6, 0x79, 0xb9, 0xe2, 0x44, 0x37, 0x32, 0xfe, 0xa9, 0xff, 0xaf, 0x93, 0x5c, 0x1a, 0xe2, 0x26, - 0x82, 0xb8, 0x16, 0x9d, 0xe9, 0xa7, 0x45, 0x67, 0x7b, 0x69, 0xd1, 0xb9, 0x84, 0x16, 0x7d, 0x3b, - 0xa9, 0x45, 0x53, 0xb5, 0x9f, 0x6b, 0x93, 0x03, 0x6b, 0xcf, 0x46, 0x8c, 0x9b, 0xcc, 0x89, 0x0d, - 0x28, 0xb8, 0xc8, 0x25, 0x28, 0x46, 0x8a, 0xe7, 0xa8, 0x4a, 0xf1, 0x8c, 0xf2, 0xd1, 0x33, 0x30, - 0x46, 0x65, 0x6b, 0x6a, 0x09, 0x28, 0xad, 0x22, 0xb1, 0x75, 0x2a, 0x8f, 0x9a, 0xbc, 0x88, 0x20, - 0x02, 0x11, 0x4e, 0x5b, 0x10, 0x45, 0x20, 0xc2, 0xeb, 0xcf, 0xc1, 0x88, 0x1f, 0x58, 0xbb, 0x54, - 0xc3, 0x9f, 0x58, 0x9d, 0x8a, 0x81, 0xba, 0x6b, 0x9b, 0x34, 0x3f, 0x69, 0x12, 0x80, 0x41, 0x4c, - 0x02, 0x25, 0x85, 0x49, 0xe0, 0x7a, 0xd2, 0x72, 0x5b, 0x66, 0xc2, 0x93, 0xd0, 0xb9, 0xbc, 0xf5, - 0x25, 0xac, 0xba, 0xf3, 0x30, 0x56, 0xf7, 0xa8, 0x5c, 0x37, 0x4e, 0x99, 0x40, 0xdd, 0x23, 0x32, - 0xdd, 0x22, 0x40, 0xe0, 0x06, 0x56, 0xb3, 0xe6, 0x3b, 0x8f, 0x6c, 0xe2, 0xd6, 0x90, 0x37, 0x8b, - 0x24, 0x65, 0xcb, 0x79, 0x64, 0x2b, 0x37, 0x85, 0x49, 0xf5, 0xa6, 0xa0, 0xb4, 0x0b, 0x54, 0x06, - 0xb3, 0x0b, 0x88, 0xba, 0x3b, 0x35, 0xec, 0x4d, 0x11, 0x48, 0x42, 0xdd, 0x9d, 0x9a, 0x8f, 0x13, - 0xe6, 0x03, 0x74, 0x38, 0xf3, 0xc1, 0xf4, 0xa1, 0xcc, 0x07, 0x33, 0x29, 0xe6, 0x03, 0x95, 0x09, - 0x60, 0xf6, 0xc8, 0x26, 0x80, 0xb9, 0x23, 0x9a, 0x00, 0xe6, 0xfb, 0x9b, 0x00, 0xd2, 0xf6, 0xc2, - 0xea, 0x40, 0x7b, 0xe1, 0x4b, 0xb2, 0x01, 0xe1, 0x64, 0x72, 0x6d, 0xa6, 0x18, 0x0e, 0x66, 0x61, - 0xb4, 0xee, 0xd5, 0xba, 0x4e, 0x83, 0xa8, 0xe9, 0x45, 0x73, 0xa4, 0xee, 0xbd, 0xe3, 0x34, 0x30, - 0x29, 0x79, 0x76, 0x80, 0xdb, 0x77, 0xdb, 0xb5, 0x8e, 0xed, 0x39, 0x6e, 0x83, 0xa8, 0xdb, 0x39, - 0x73, 0x32, 0x4c, 0xdf, 0x24, 0xc9, 0xe8, 0x0a, 0x94, 0x25, 0x9f, 0xa3, 0x05, 0x85, 0xcf, 0x51, - 0x49, 0xf0, 0x0e, 0x42, 0xf7, 0x61, 0xbe, 0xeb, 0xdb, 0x1e, 0x17, 0x2b, 0x88, 0xd3, 0x11, 0x75, - 0x0e, 0x20, 0xfa, 0xf2, 0xc4, 0xea, 0xbc, 0x58, 0xd7, 0x58, 0xa3, 0x4e, 0x07, 0x18, 0xf0, 0x59, - 0x5c, 0x6f, 0x3d, 0xaa, 0x46, 0xb3, 0xe2, 0x36, 0x8a, 0xa5, 0x9e, 0x36, 0x0a, 0xb5, 0xa5, 0x64, - 0x39, 0xc5, 0x52, 0xf2, 0x26, 0x54, 0xf8, 0xc9, 0x1d, 0x3b, 0x11, 0xf5, 0xab, 0x2b, 0x64, 0x99, - 0xac, 0x88, 0xc8, 0x65, 0xc7, 0x6c, 0x9b, 0xac, 0x08, 0x65, 0x9d, 0x93, 0x9e, 0x9c, 0xaa, 0x34, - 0xbb, 0x9c, 0x56, 0x9b, 0x5d, 0x5e, 0x80, 0xb9, 0x26, 0x4e, 0x0a, 0x57, 0x67, 0x28, 0xde, 0xe8, - 0x44, 0xbc, 0x99, 0x21, 0xb9, 0x7c, 0x4d, 0x72, 0x09, 0xe7, 0x0d, 0xa5, 0xfd, 0xe5, 0x29, 0x82, - 0x8f, 0x85, 0x24, 0x31, 0x1c, 0xd5, 0xee, 0xf2, 0x74, 0xba, 0xdd, 0xa5, 0xdd, 0xcf, 0xee, 0x72, - 0x86, 0x20, 0xef, 0x52, 0x92, 0xaf, 0x1f, 0x8b, 0xbd, 0xe5, 0x6c, 0xc2, 0xde, 0x72, 0x0c, 0xa6, - 0x90, 0x75, 0x98, 0x51, 0xcd, 0xef, 0x67, 0x69, 0x4e, 0x79, 0x20, 0x99, 0x53, 0xae, 0x48, 0x9a, - 0xc9, 0x29, 0xf5, 0xaa, 0x3f, 0xba, 0x19, 0xe5, 0x45, 0x98, 0x90, 0x37, 0x2c, 0x0c, 0x6a, 0x37, - 0x74, 0x15, 0xc0, 0x7f, 0x43, 0x41, 0x2a, 0x1b, 0x09, 0x52, 0xda, 0xaf, 0xe7, 0x61, 0x94, 0x0e, - 0xfa, 0x08, 0x72, 0x56, 0x05, 0x72, 0x9d, 0xfd, 0x3a, 0x93, 0xb2, 0xf0, 0x5f, 0x74, 0x0a, 0x8a, - 0x8c, 0xb8, 0xb9, 0xf3, 0x85, 0x59, 0xa0, 0x09, 0x1b, 0x8d, 0x43, 0x8b, 0x25, 0x98, 0x6e, 0x3c, - 0x07, 0xab, 0x90, 0x04, 0x2e, 0x7a, 0x28, 0x01, 0x34, 0x89, 0xec, 0x30, 0x33, 0x30, 0xf2, 0xc8, - 0x6d, 0x87, 0x47, 0x12, 0xf4, 0x03, 0x7d, 0x0e, 0xc6, 0x98, 0x47, 0x2e, 0x3b, 0x85, 0x58, 0x4e, - 0x12, 0xb2, 0x41, 0xd5, 0x48, 0xc6, 0x04, 0x78, 0xf9, 0xd8, 0xde, 0x5d, 0x8c, 0xef, 0xdd, 0xcb, - 0x50, 0xb2, 0xea, 0x58, 0x99, 0xa7, 0xf9, 0x40, 0xf2, 0x81, 0x26, 0x91, 0x02, 0x09, 0xa7, 0x9d, - 0x92, 0xc2, 0x69, 0x67, 0x16, 0x46, 0x3b, 0xfb, 0x75, 0x8c, 0xa0, 0x32, 0x25, 0x99, 0xce, 0x7e, - 0x7d, 0xa3, 0x81, 0x56, 0xa0, 0x44, 0x7c, 0x0b, 0xf1, 0x96, 0x6b, 0x7b, 0x4c, 0xa8, 0x10, 0x93, - 0xd0, 0x59, 0x98, 0x60, 0x62, 0x15, 0xa3, 0x4f, 0xe6, 0x34, 0x19, 0x4b, 0xd5, 0xae, 0x41, 0x59, - 0x1c, 0xde, 0xa1, 0x88, 0xf6, 0x6f, 0x65, 0x25, 0x45, 0xe9, 0x6a, 0x4c, 0x51, 0x5a, 0x54, 0x4f, - 0xd9, 0xa0, 0x0a, 0xd2, 0x1f, 0xfe, 0x3c, 0x9b, 0x87, 0xd0, 0x1c, 0x20, 0xa2, 0xfc, 0xd2, 0x21, - 0xde, 0x75, 0x7c, 0x1f, 0xa7, 0x83, 0xf6, 0x91, 0xc2, 0x6a, 0x74, 0x55, 0x5a, 0xce, 0xa7, 0x7b, - 0xf1, 0xed, 0xe1, 0xac, 0x45, 0x6d, 0x18, 0x21, 0x62, 0x70, 0x02, 0x61, 0x1b, 0x6d, 0x07, 0x8f, - 0xa8, 0x92, 0x41, 0x93, 0x50, 0xda, 0x8c, 0x04, 0x9c, 0x4a, 0x16, 0x55, 0xa0, 0xbc, 0x29, 0x48, - 0x2e, 0xd4, 0x15, 0x94, 0x12, 0xbe, 0x5f, 0xc9, 0xe3, 0xec, 0xb5, 0x4e, 0xa7, 0xe9, 0x50, 0x39, - 0xca, 0xaf, 0x8c, 0x60, 0xb5, 0xf1, 0x96, 0xd3, 0xb6, 0x9a, 0x95, 0x51, 0xdd, 0x85, 0xb2, 0x38, - 0x80, 0xc3, 0x39, 0x3d, 0xae, 0x86, 0x12, 0x8e, 0xa0, 0xf9, 0x95, 0x04, 0xe4, 0xb0, 0x1a, 0x4c, - 0xb8, 0x21, 0xfa, 0xde, 0x5f, 0xe6, 0xa0, 0x48, 0xf6, 0x25, 0x42, 0x70, 0xaf, 0xc0, 0x08, 0xdd, - 0xbf, 0xa8, 0xe1, 0x75, 0xda, 0x08, 0xb3, 0xc8, 0xbf, 0x8d, 0xc0, 0x6e, 0xad, 0x57, 0x3e, 0x7d, - 0xbc, 0x5c, 0x3e, 0xb0, 0x5a, 0xcd, 0x6b, 0x3a, 0x29, 0xab, 0x9b, 0xb4, 0x8e, 0xf6, 0x9d, 0x2c, - 0x14, 0x78, 0x29, 0x54, 0x83, 0x72, 0xc7, 0x6d, 0x84, 0xe2, 0x03, 0x6b, 0xf0, 0x69, 0x45, 0x83, - 0xc6, 0xa6, 0xdb, 0xe0, 0x5b, 0x0f, 0x59, 0x31, 0xeb, 0x73, 0x9f, 0x3e, 0x5e, 0x46, 0xb4, 0x87, - 0x4e, 0x94, 0xa7, 0x9b, 0x25, 0xe1, 0x0b, 0x7d, 0x01, 0xc6, 0xac, 0x3a, 0xe5, 0x33, 0x59, 0xd2, - 0xf6, 0x94, 0xd0, 0xf6, 0x1a, 0xc9, 0x59, 0x47, 0x9f, 0x3e, 0x5e, 0x9e, 0xa0, 0x0d, 0xb1, 0xb2, - 0xba, 0xc9, 0x6b, 0x61, 0xe6, 0x5a, 0x77, 0xdb, 0x81, 0xe5, 0xe0, 0xf5, 0x4e, 0x99, 0x68, 0x94, - 0xa0, 0xbd, 0x06, 0x95, 0x38, 0x5c, 0x87, 0x5a, 0xc9, 0xbf, 0x93, 0x81, 0x51, 0x0a, 0x05, 0xba, - 0x0a, 0x04, 0xe1, 0x58, 0x0d, 0x6e, 0xd3, 0x1d, 0xa1, 0xb0, 0x3e, 0xfb, 0xe9, 0xe3, 0xe5, 0x29, - 0x0a, 0x59, 0x94, 0xa7, 0x9b, 0x42, 0x41, 0x74, 0x03, 0xa6, 0xbc, 0x2e, 0x56, 0xe2, 0x6b, 0x78, - 0x21, 0x90, 0xd3, 0x3d, 0x76, 0xee, 0xbd, 0x7e, 0xf2, 0xd3, 0xc7, 0xcb, 0xb3, 0x7c, 0x0a, 0xda, - 0x1b, 0xed, 0x2d, 0x52, 0x60, 0xd3, 0x6d, 0xe8, 0xe6, 0x84, 0x9c, 0x10, 0x41, 0x98, 0x13, 0x20, - 0xd4, 0xbf, 0x0a, 0x60, 0x46, 0xf6, 0xcb, 0x43, 0x11, 0xd9, 0x15, 0x00, 0x32, 0xdd, 0x22, 0x8d, - 0x41, 0x84, 0x7a, 0x56, 0xbe, 0xe8, 0xf1, 0x04, 0xfd, 0x55, 0x18, 0x37, 0xed, 0x4e, 0xd3, 0xaa, - 0xb3, 0x83, 0x47, 0xfd, 0x92, 0x6a, 0x15, 0x46, 0x86, 0xd6, 0x8c, 0x60, 0x80, 0xcd, 0xea, 0x7f, - 0x31, 0x07, 0x25, 0x76, 0xb5, 0x80, 0x50, 0xe8, 0x1c, 0x8c, 0x52, 0xea, 0x65, 0xd3, 0xc0, 0xbe, - 0x54, 0x16, 0x82, 0xac, 0xd2, 0x42, 0xb0, 0x91, 0xd4, 0xf3, 0x73, 0x4c, 0x5a, 0x15, 0xfa, 0x19, - 0x48, 0xd1, 0xbf, 0x0f, 0x53, 0xe1, 0x6e, 0x1c, 0x4a, 0x6f, 0xd4, 0x68, 0xa0, 0x4b, 0x8d, 0x85, - 0x42, 0xab, 0x24, 0xb4, 0x55, 0xda, 0xb1, 0x64, 0x74, 0x0d, 0xeb, 0x6c, 0x04, 0x55, 0xdc, 0x8d, - 0x61, 0x84, 0x30, 0xb8, 0x69, 0x43, 0xc2, 0xa0, 0xc1, 0x9d, 0x16, 0x84, 0x34, 0xe1, 0xde, 0xc7, - 0x28, 0xbb, 0xf7, 0x21, 0x42, 0xa0, 0xd8, 0xdf, 0x5f, 0x11, 0xcd, 0x0e, 0xd4, 0x96, 0xb0, 0x28, - 0xd5, 0x61, 0xff, 0x1b, 0x5c, 0x84, 0x16, 0xcd, 0x10, 0x97, 0x23, 0x33, 0x44, 0x81, 0xb3, 0x0a, - 0xa1, 0x6a, 0xdc, 0x0e, 0x21, 0x98, 0x65, 0x8a, 0xb2, 0x59, 0xe6, 0x26, 0x2c, 0x73, 0x2d, 0x9b, - 0x8a, 0x01, 0x44, 0xa7, 0x93, 0xf4, 0x56, 0x20, 0xe2, 0xc5, 0x02, 0x2b, 0x76, 0x9f, 0x95, 0x32, - 0x25, 0x35, 0x56, 0x16, 0x1d, 0x4a, 0x71, 0xd1, 0x41, 0xa9, 0xcb, 0x97, 0x8f, 0xaa, 0xcb, 0x8f, - 0x0f, 0xa4, 0xcb, 0x4f, 0x28, 0x74, 0xf9, 0x14, 0x6d, 0x7b, 0x72, 0x10, 0x6d, 0xfb, 0xcb, 0x30, - 0x2b, 0x49, 0x37, 0x21, 0xc5, 0x55, 0x98, 0x77, 0x8a, 0x3c, 0xdf, 0x91, 0xc8, 0x23, 0x11, 0xdd, - 0xb4, 0x9f, 0xcc, 0x41, 0x17, 0x80, 0x6d, 0x09, 0x04, 0x9a, 0xa9, 0x04, 0x34, 0x4c, 0xaa, 0xc4, - 0x50, 0xd4, 0x60, 0x3e, 0xa6, 0xed, 0x85, 0x70, 0x20, 0xe6, 0x74, 0x22, 0xd1, 0x90, 0xa4, 0x15, - 0x48, 0x90, 0xcc, 0x7a, 0xaa, 0x3c, 0xd4, 0x84, 0x85, 0x78, 0x07, 0x78, 0x9d, 0x84, 0xbd, 0x4c, - 0x33, 0xed, 0x28, 0xbd, 0x17, 0xbc, 0xda, 0xa4, 0x9e, 0x4e, 0x7a, 0x69, 0xf9, 0x3d, 0x94, 0xc8, - 0x99, 0x1e, 0x4a, 0xe4, 0x8b, 0x30, 0xcf, 0x2e, 0x41, 0x35, 0x6a, 0x31, 0xda, 0x98, 0x25, 0xb4, - 0x31, 0xeb, 0xc5, 0xd6, 0x0e, 0xa5, 0x91, 0xdb, 0x84, 0x94, 0x70, 0x06, 0xf7, 0x2c, 0x9a, 0x63, - 0x8e, 0x8f, 0x8a, 0x75, 0xc7, 0xab, 0xe2, 0xa5, 0x4b, 0x56, 0x3b, 0x49, 0xdd, 0xe2, 0x36, 0x43, - 0x49, 0x9f, 0x9f, 0xef, 0xa9, 0xcf, 0xbf, 0xa9, 0xd4, 0x79, 0xa9, 0xd5, 0x44, 0x5e, 0xf2, 0xfd, - 0x95, 0xde, 0xe3, 0xd0, 0x16, 0xaf, 0xc3, 0xac, 0x92, 0x23, 0x1e, 0xaa, 0x91, 0x5b, 0x50, 0x4d, - 0x23, 0xf2, 0x43, 0xb5, 0x73, 0x1b, 0xb4, 0x74, 0x22, 0x3d, 0x54, 0x4b, 0x77, 0x60, 0xa9, 0x37, - 0x21, 0x1e, 0xaa, 0xb5, 0x3f, 0xca, 0xc0, 0x8c, 0x8a, 0x12, 0xd0, 0x7b, 0x09, 0x22, 0xa2, 0x52, - 0xf0, 0xb3, 0x7d, 0x89, 0xc8, 0x10, 0xbf, 0xba, 0x7e, 0x8c, 0xa6, 0xf4, 0x37, 0x60, 0x42, 0x2e, - 0x80, 0xc6, 0xa1, 0xb8, 0xe9, 0xd9, 0x1d, 0xcb, 0xc3, 0x92, 0xf8, 0x09, 0x49, 0xe2, 0xcf, 0xe0, - 0xcc, 0x77, 0x6d, 0xcf, 0xd9, 0x39, 0xa0, 0x07, 0x29, 0x65, 0x28, 0x60, 0xb1, 0x96, 0x7c, 0xe5, - 0xb4, 0x7f, 0x96, 0x81, 0x4a, 0x7c, 0xff, 0xf8, 0x6c, 0x8e, 0x12, 0x0e, 0xbd, 0x31, 0x6a, 0xdf, - 0xcb, 0x85, 0x4a, 0x39, 0x53, 0xb1, 0x33, 0x91, 0x8a, 0x7d, 0x01, 0x2a, 0x6c, 0xbd, 0xc7, 0xc1, - 0x9e, 0xa4, 0xe9, 0x91, 0x81, 0x0a, 0xef, 0x08, 0xb4, 0x28, 0xdd, 0x06, 0xd9, 0x20, 0xca, 0x34, - 0x91, 0xf5, 0x70, 0x26, 0x9a, 0x4d, 0x56, 0x8a, 0x8e, 0x8a, 0xcf, 0x0d, 0x2b, 0x76, 0x25, 0xa6, - 0xbc, 0xf7, 0xdd, 0xdd, 0x8f, 0xa8, 0xbd, 0x5f, 0x8b, 0x6b, 0xef, 0x2b, 0x8a, 0x7d, 0xfd, 0x48, - 0xea, 0xfb, 0x50, 0x7a, 0xf1, 0x9f, 0xf7, 0xbb, 0xed, 0xa7, 0xc6, 0xc6, 0xa0, 0x8a, 0xf1, 0x5f, - 0x7f, 0x82, 0x8a, 0x31, 0x95, 0x72, 0xd3, 0x14, 0x63, 0xed, 0xaf, 0x28, 0xb4, 0xdd, 0x17, 0x25, - 0x6d, 0x57, 0xef, 0xc9, 0xb1, 0x87, 0x53, 0x77, 0x7d, 0x2c, 0xab, 0x93, 0xc6, 0x8f, 0xa2, 0x1a, - 0x5c, 0x85, 0x32, 0xa7, 0x65, 0x47, 0xbc, 0x75, 0x27, 0xc0, 0xcb, 0xea, 0x94, 0xbc, 0x28, 0x49, - 0x9f, 0x85, 0xe9, 0xdb, 0xb6, 0xd5, 0x0c, 0xf6, 0xd8, 0x6c, 0xd9, 0x5f, 0xeb, 0xda, 0x7e, 0xa0, - 0xcf, 0xc1, 0x8c, 0x9c, 0xec, 0x77, 0xdc, 0xb6, 0x6f, 0xeb, 0x1f, 0x43, 0xf1, 0x6d, 0xa7, 0x65, - 0x9b, 0x56, 0x7b, 0xd7, 0x46, 0x9f, 0x03, 0xf0, 0x03, 0xcb, 0x0b, 0x6a, 0xa1, 0xf7, 0x7a, 0x6f, - 0x27, 0x9c, 0x22, 0x29, 0x4d, 0x7c, 0x70, 0xae, 0x92, 0x5b, 0x66, 0x83, 0xba, 0xfe, 0x8c, 0xd9, - 0xed, 0x06, 0xfe, 0xd2, 0x7f, 0x9a, 0x83, 0xca, 0xcd, 0x76, 0xb7, 0x65, 0x7b, 0x56, 0xc0, 0x84, - 0x51, 0x1f, 0x5d, 0x85, 0x51, 0xa2, 0x1b, 0x70, 0xc5, 0x79, 0xd1, 0x88, 0x17, 0xa1, 0x0a, 0x05, - 0x5b, 0x32, 0xac, 0x30, 0x5e, 0xa4, 0x2d, 0xeb, 0x21, 0xdb, 0x95, 0x7d, 0x02, 0x45, 0xde, 0x84, - 0x96, 0xf5, 0x90, 0x62, 0xdf, 0xc7, 0x82, 0x19, 0x86, 0xaf, 0xe6, 0xe1, 0xc1, 0x32, 0x1f, 0x23, - 0x30, 0xc2, 0xe1, 0x9b, 0xc5, 0x20, 0xc4, 0xc4, 0x32, 0x94, 0x88, 0x9c, 0xb4, 0xe3, 0x34, 0xb1, - 0x98, 0x4d, 0xb9, 0x08, 0x39, 0xe0, 0xbc, 0x45, 0x52, 0x90, 0x01, 0xd3, 0x5c, 0x64, 0x10, 0x0b, - 0x52, 0x6e, 0x39, 0xc5, 0xb2, 0xee, 0x45, 0xe5, 0x4f, 0x43, 0x99, 0x89, 0x0b, 0x4e, 0xbb, 0x61, - 0x3f, 0x24, 0x2c, 0x24, 0x6f, 0x96, 0x68, 0xda, 0x06, 0x4e, 0x42, 0xaf, 0x82, 0xc6, 0xc5, 0xea, - 0x06, 0x26, 0xeb, 0xa6, 0x20, 0x0f, 0xf9, 0xcc, 0xb3, 0xa1, 0xca, 0x4a, 0xdc, 0x60, 0x05, 0x4c, - 0xe1, 0x28, 0x13, 0x71, 0x80, 0xba, 0x4e, 0x83, 0xc3, 0x43, 0xcf, 0x28, 0x2b, 0x2c, 0xe7, 0x1d, - 0xa7, 0xc1, 0xc0, 0x99, 0x83, 0x51, 0x72, 0x1d, 0xda, 0xaf, 0x16, 0x09, 0xc3, 0x62, 0x5f, 0xb8, - 0x15, 0x85, 0x70, 0x43, 0x4f, 0x27, 0x93, 0xd2, 0xcb, 0xe7, 0xa0, 0x24, 0x4c, 0xc4, 0x61, 0x78, - 0x90, 0xfe, 0xdd, 0x0c, 0x9c, 0x92, 0xdd, 0xdd, 0xaf, 0x13, 0x6f, 0x30, 0x46, 0xaf, 0xe8, 0xb9, - 0xc4, 0x52, 0x99, 0x34, 0x68, 0x89, 0xd4, 0x05, 0xf3, 0x6a, 0xd2, 0xf3, 0x3d, 0xdd, 0xb1, 0x3e, - 0xee, 0x0e, 0xaf, 0x2f, 0xc1, 0x82, 0x1a, 0x1e, 0xb6, 0x50, 0x92, 0x00, 0xbf, 0xd3, 0x69, 0xfc, - 0x5c, 0x01, 0xcc, 0xe1, 0x61, 0x00, 0xff, 0x93, 0x0c, 0x2c, 0xc9, 0x05, 0xc2, 0x55, 0xc4, 0x61, - 0x9e, 0x85, 0x51, 0xd7, 0xdb, 0x8d, 0x2e, 0xe1, 0x8d, 0xb8, 0xde, 0xee, 0x46, 0x03, 0x5d, 0x0f, - 0xd7, 0x5f, 0x96, 0xa9, 0x07, 0xbd, 0xdb, 0x51, 0xad, 0xc6, 0x61, 0x68, 0xc3, 0x86, 0xe5, 0xd4, - 0x0e, 0xe9, 0xe0, 0xd0, 0x3a, 0x4c, 0xc9, 0xa8, 0x73, 0x42, 0x33, 0xdb, 0xac, 0xa1, 0xba, 0xb4, - 0x61, 0x56, 0x24, 0xf4, 0x39, 0xb6, 0xaf, 0x7f, 0x10, 0x47, 0xe0, 0x46, 0xdb, 0xef, 0x10, 0x81, - 0xbf, 0x27, 0x76, 0x14, 0x27, 0x0f, 0xfc, 0x7c, 0x22, 0x17, 0x9e, 0x4f, 0xe8, 0x35, 0x58, 0x4c, - 0x69, 0x9c, 0x8d, 0xe0, 0x35, 0xf5, 0x3d, 0x8d, 0x54, 0xf8, 0xe3, 0xd3, 0xff, 0x7e, 0x9c, 0x1c, - 0x6f, 0xb0, 0xc0, 0x11, 0xc7, 0x00, 0x7c, 0x82, 0xb4, 0x78, 0xdb, 0x8c, 0xb4, 0x7e, 0x3d, 0x03, - 0x4f, 0xc7, 0x80, 0x24, 0xec, 0x63, 0xcf, 0xe9, 0xc8, 0x8b, 0xe2, 0x10, 0x50, 0x9c, 0x87, 0xa2, - 0xcb, 0x1b, 0x09, 0x79, 0x73, 0xd8, 0xac, 0x19, 0x65, 0x72, 0x78, 0xf3, 0x11, 0xbc, 0xe7, 0xe0, - 0x4c, 0x1f, 0x70, 0x18, 0xe0, 0x5f, 0x1f, 0x87, 0x53, 0xf2, 0xd1, 0xd2, 0xd0, 0x5c, 0xe7, 0x9c, - 0x7a, 0x11, 0x27, 0xef, 0xdb, 0x1c, 0xef, 0xad, 0x1a, 0x85, 0x85, 0x2e, 0xdf, 0xcf, 0x87, 0x67, - 0xa4, 0x97, 0x0f, 0xcf, 0x68, 0xc2, 0x87, 0xe7, 0xcb, 0x49, 0xdb, 0x1e, 0x35, 0x6c, 0x3d, 0x6b, - 0xf4, 0xc0, 0xe1, 0xd1, 0xae, 0xc4, 0x14, 0x06, 0xf1, 0x7f, 0x29, 0x2a, 0xfc, 0x5f, 0x94, 0xb6, - 0x28, 0x18, 0xcc, 0x16, 0xd5, 0xc3, 0x17, 0xa4, 0x74, 0x28, 0x5f, 0x90, 0xf2, 0x21, 0xae, 0x92, - 0x8c, 0x0f, 0x71, 0x95, 0x64, 0xe2, 0xc8, 0x7e, 0x24, 0x93, 0x47, 0xf4, 0x23, 0xa9, 0xf4, 0xf7, - 0x23, 0xb9, 0x2d, 0x7b, 0x82, 0xd0, 0x88, 0x23, 0xe7, 0x7a, 0x92, 0xc8, 0xa1, 0xee, 0x94, 0xa0, - 0x14, 0x4f, 0x89, 0x98, 0xd1, 0x66, 0xba, 0xa7, 0xd1, 0xe6, 0x03, 0xa5, 0x5c, 0x43, 0x2f, 0xd8, - 0x5c, 0x1e, 0x00, 0xd6, 0xa3, 0x7a, 0x2e, 0xcc, 0xa6, 0x7b, 0x2e, 0xfc, 0x72, 0x3f, 0xcf, 0x85, - 0x39, 0x42, 0xc5, 0xaf, 0xf6, 0x84, 0xee, 0x18, 0x5d, 0x19, 0xe6, 0x7f, 0x16, 0xae, 0x0c, 0xc7, - 0xec, 0x86, 0xf0, 0x6b, 0x2a, 0xa7, 0xf7, 0x5b, 0x92, 0x42, 0xb7, 0x7a, 0xa8, 0xd9, 0x1c, 0x4e, - 0xc1, 0x5b, 0x95, 0xbc, 0x22, 0x06, 0x72, 0x6e, 0xc0, 0x7b, 0xab, 0x1a, 0x40, 0xb6, 0x45, 0xfd, - 0xc7, 0x42, 0x7c, 0x8b, 0x1a, 0x5a, 0xce, 0xfc, 0xc5, 0x16, 0x25, 0xe3, 0xf0, 0x09, 0x6f, 0x51, - 0xc2, 0x45, 0x5b, 0x90, 0x2f, 0xda, 0x2a, 0x37, 0xaf, 0xd2, 0xd0, 0x9b, 0x57, 0xb9, 0xc7, 0xe6, - 0xf5, 0xff, 0xcb, 0xae, 0xd4, 0x97, 0xbb, 0x4e, 0x29, 0xb9, 0xab, 0x4c, 0x27, 0x43, 0x70, 0xd7, - 0x9f, 0x3f, 0xe6, 0x99, 0xe4, 0x3c, 0x31, 0xe1, 0xf8, 0x3f, 0x65, 0x61, 0x49, 0x2e, 0x70, 0x74, - 0x85, 0xb1, 0x77, 0x3b, 0x4a, 0xf3, 0x8d, 0x82, 0x5d, 0xe4, 0x94, 0xec, 0x22, 0x85, 0x0c, 0xf3, - 0x83, 0x90, 0xe1, 0x6b, 0x30, 0x65, 0x73, 0x60, 0x6a, 0xdc, 0x36, 0x4b, 0x8d, 0xc0, 0x53, 0x09, - 0x2b, 0x93, 0x59, 0xb1, 0x63, 0x29, 0xc3, 0x68, 0xb5, 0xdf, 0xce, 0xc0, 0x72, 0x2a, 0x5a, 0x98, - 0x52, 0xf8, 0x45, 0xa8, 0xc4, 0xbc, 0xb9, 0x23, 0xad, 0x56, 0x75, 0x59, 0xca, 0x9c, 0x94, 0x3d, - 0xb9, 0x89, 0x11, 0x8c, 0x9a, 0x8d, 0xe9, 0x01, 0x1a, 0x33, 0x82, 0x91, 0x24, 0x1a, 0xd5, 0xe0, - 0x83, 0x38, 0x15, 0x1c, 0xb3, 0xd6, 0x9b, 0xd2, 0x78, 0xa4, 0xf5, 0xc6, 0xdd, 0xd5, 0xb9, 0xd6, - 0xab, 0x1c, 0x5f, 0xcc, 0x53, 0x5d, 0xff, 0x46, 0x26, 0xbe, 0x3b, 0x1e, 0x59, 0xed, 0x4d, 0x5e, - 0x37, 0xca, 0xa9, 0xae, 0x1b, 0x25, 0xb5, 0xcd, 0xc4, 0x3a, 0x8a, 0x69, 0xc7, 0x7f, 0x9a, 0x81, - 0x65, 0x16, 0x1a, 0x4d, 0x70, 0x2b, 0x3e, 0xb2, 0x62, 0xac, 0x0a, 0xcf, 0x98, 0x3b, 0x62, 0x78, - 0xc6, 0xfc, 0x00, 0xe1, 0x19, 0xd9, 0x80, 0x47, 0xa2, 0x01, 0xeb, 0xb0, 0x92, 0x3e, 0x1e, 0x6e, - 0x12, 0x18, 0x81, 0x19, 0x56, 0x68, 0x68, 0x95, 0x5a, 0x0a, 0x0b, 0x9a, 0x3d, 0x5a, 0x58, 0xd0, - 0xdc, 0xf1, 0x84, 0x05, 0x4d, 0xb9, 0xe2, 0x96, 0xe6, 0x3b, 0x3f, 0x32, 0x90, 0xef, 0x7c, 0x8f, - 0xc8, 0x93, 0xa3, 0x43, 0x46, 0x9e, 0x1c, 0x1b, 0x28, 0xf2, 0x64, 0xa1, 0x5f, 0xe4, 0xc9, 0xe2, - 0xd1, 0x22, 0x4f, 0x5e, 0x13, 0x22, 0x4f, 0x82, 0x1c, 0x39, 0x52, 0x16, 0xc3, 0x93, 0x21, 0x28, - 0x8f, 0x3b, 0xe2, 0xe1, 0x3c, 0xcc, 0xc6, 0x7a, 0x66, 0x84, 0xfa, 0xdf, 0xb3, 0x21, 0xa1, 0x0e, - 0x2d, 0x58, 0xff, 0x82, 0x50, 0xfb, 0x12, 0xaa, 0x30, 0x11, 0x31, 0x8e, 0xf1, 0xe7, 0x59, 0x98, - 0x67, 0x39, 0x83, 0xca, 0x19, 0xaf, 0xc6, 0xe4, 0x8c, 0xa7, 0x8d, 0x94, 0x06, 0xd2, 0x04, 0x0c, - 0x2e, 0x6d, 0xd3, 0xe8, 0x7b, 0x9c, 0xe3, 0x4f, 0xb0, 0x64, 0x1a, 0x74, 0xcf, 0x7f, 0x72, 0xf8, - 0xbd, 0x08, 0x53, 0x6e, 0xbb, 0x79, 0x20, 0xf3, 0x68, 0x7a, 0xe9, 0x75, 0x12, 0x67, 0x08, 0xec, - 0x76, 0x18, 0xc9, 0xe3, 0x16, 0x54, 0x93, 0x78, 0x62, 0x1b, 0xf2, 0x45, 0x28, 0x30, 0xf6, 0xc1, - 0x25, 0x8d, 0x09, 0x43, 0x8a, 0x14, 0x6a, 0x86, 0xf9, 0xfa, 0xc7, 0xe1, 0x54, 0x1e, 0x5d, 0x66, - 0x18, 0x78, 0x12, 0x92, 0xfb, 0xee, 0x3a, 0xcc, 0xc5, 0xbb, 0x67, 0x83, 0x38, 0x1f, 0x29, 0x90, - 0x19, 0x16, 0xe7, 0x4e, 0x1e, 0x03, 0xcf, 0xd6, 0xff, 0x20, 0x13, 0xae, 0xfe, 0x9f, 0xb5, 0xe0, - 0xa0, 0x08, 0xf1, 0x9c, 0x57, 0x86, 0x78, 0x4e, 0x6e, 0xb8, 0xd1, 0x9a, 0x89, 0x89, 0x16, 0xdf, - 0xcf, 0xc0, 0x42, 0xec, 0x4e, 0xf3, 0xd0, 0xbb, 0xed, 0x17, 0x14, 0xd4, 0xde, 0x2b, 0x8a, 0x5e, - 0x7c, 0x0d, 0xe8, 0xdb, 0xb0, 0x98, 0x02, 0x13, 0x9b, 0x9e, 0x35, 0x45, 0x0f, 0x19, 0x76, 0x6b, - 0x42, 0x19, 0x17, 0x30, 0xd9, 0x87, 0x62, 0xe0, 0x43, 0x73, 0xef, 0xa1, 0x07, 0xbe, 0x9c, 0x18, - 0x78, 0x8c, 0xc5, 0x59, 0x58, 0x10, 0x94, 0x0a, 0x0c, 0xca, 0xe9, 0x14, 0xcb, 0x24, 0xab, 0x5a, - 0x26, 0xfa, 0x2e, 0x96, 0xcd, 0xd2, 0xba, 0x60, 0xf8, 0xbf, 0x0e, 0x53, 0xf1, 0x81, 0xf2, 0xc5, - 0x9e, 0x36, 0x01, 0x95, 0xd8, 0x58, 0x7d, 0xfd, 0x57, 0x32, 0x89, 0xd1, 0x7e, 0x26, 0x5c, 0xa0, - 0x0e, 0x4b, 0x69, 0x60, 0x1c, 0x1f, 0xb9, 0x7d, 0x90, 0xa0, 0xb6, 0x63, 0x3c, 0x5d, 0x4b, 0x92, - 0x4d, 0x6c, 0x95, 0x7f, 0x37, 0x03, 0x67, 0xe2, 0x80, 0x7e, 0xa6, 0xe7, 0x6b, 0xe7, 0xe1, 0x6c, - 0x3f, 0x78, 0xf8, 0xa1, 0x73, 0x16, 0x4a, 0x37, 0x5b, 0x96, 0xd3, 0x64, 0xb2, 0x0e, 0x82, 0xfc, - 0x8e, 0xe7, 0xb6, 0xb8, 0x93, 0x1a, 0xfe, 0x8f, 0xd3, 0xf6, 0x5c, 0x3f, 0xe0, 0xd0, 0xe1, 0xff, - 0x24, 0x7a, 0x85, 0xeb, 0xb1, 0x38, 0xb9, 0x26, 0xf9, 0x8f, 0xf9, 0xac, 0x10, 0xbd, 0xc2, 0xf7, - 0x9b, 0x8c, 0x7f, 0x0a, 0x91, 0x29, 0xb6, 0xfc, 0x26, 0xba, 0x02, 0xd3, 0x62, 0xb1, 0xc0, 0xf2, - 0x82, 0xa0, 0xc9, 0xc3, 0xee, 0x23, 0xa1, 0x2c, 0xcb, 0x41, 0x67, 0x61, 0xc2, 0xea, 0x06, 0x7b, - 0x78, 0x20, 0xcc, 0xce, 0xc0, 0x42, 0xef, 0xcb, 0xa9, 0xe8, 0x29, 0x18, 0xc7, 0x29, 0xb5, 0xae, - 0x6f, 0x7b, 0x04, 0x9d, 0x2c, 0xf4, 0x3e, 0x4e, 0x7c, 0x87, 0xa5, 0xa1, 0xd7, 0x59, 0xa1, 0x8e, - 0xe5, 0xfb, 0x1f, 0xba, 0x1e, 0x93, 0xad, 0x07, 0x8a, 0xb0, 0x41, 0x1a, 0xda, 0x64, 0xf5, 0xf4, - 0x1f, 0x90, 0x50, 0x01, 0x75, 0xdb, 0xd9, 0x67, 0x8f, 0x23, 0x9c, 0x95, 0xcc, 0xda, 0xc8, 0x10, - 0x33, 0xc5, 0xc0, 0x1f, 0xcf, 0x41, 0xd9, 0xc6, 0x18, 0x97, 0x03, 0x4d, 0x94, 0x0d, 0x61, 0x1a, - 0x6e, 0x9f, 0x30, 0x4b, 0x76, 0xf4, 0xa9, 0x2f, 0x09, 0x96, 0xee, 0x7b, 0xef, 0xae, 0xdd, 0xd9, - 0xb8, 0x41, 0x23, 0x3b, 0xdc, 0xbc, 0xbb, 0xb6, 0x71, 0xa7, 0x92, 0x11, 0x22, 0x2b, 0x7c, 0x0c, - 0x13, 0xbc, 0xdf, 0x61, 0x43, 0x2a, 0xac, 0xc2, 0xb8, 0xc7, 0x9a, 0x12, 0x1d, 0x9a, 0xc6, 0xa5, - 0x81, 0x99, 0x65, 0x4f, 0xf8, 0xd2, 0xff, 0x2a, 0xcc, 0xf2, 0xdc, 0xa1, 0xf7, 0xb9, 0xa3, 0xf4, - 0x7f, 0x13, 0xe6, 0xe2, 0xfd, 0x33, 0x26, 0x73, 0x09, 0x0a, 0xbc, 0x64, 0x08, 0x80, 0x8c, 0x29, - 0x33, 0x2c, 0xa0, 0xbf, 0x0f, 0x55, 0x9e, 0x77, 0xec, 0x1b, 0xc0, 0x1b, 0x70, 0x52, 0xd1, 0x36, - 0x83, 0xf2, 0x32, 0x14, 0x39, 0x10, 0x9c, 0xe3, 0x27, 0xc0, 0x8c, 0x4a, 0xe0, 0x5d, 0x76, 0x2e, - 0xc2, 0xc6, 0x93, 0x67, 0xee, 0x24, 0xe2, 0x27, 0xa6, 0xf9, 0x11, 0x16, 0xf1, 0xf3, 0xa0, 0x63, - 0xeb, 0xb7, 0x60, 0x3e, 0x01, 0xd3, 0x51, 0x26, 0x41, 0xa0, 0xa5, 0xa1, 0x45, 0x87, 0xa3, 0xd0, - 0x52, 0x35, 0xc2, 0x6d, 0x8c, 0x69, 0xbe, 0x1d, 0x41, 0x76, 0x8c, 0xdb, 0x8c, 0xd0, 0x5f, 0x6c, - 0x7f, 0xf9, 0x41, 0x16, 0x4e, 0xf1, 0x2c, 0x16, 0x94, 0xc5, 0xde, 0xba, 0xfb, 0xf6, 0xe6, 0x10, - 0x08, 0x39, 0x0d, 0x78, 0xb0, 0x4e, 0x87, 0xc7, 0x2a, 0xcf, 0x92, 0xa3, 0x9a, 0x52, 0x98, 0xb6, - 0xd1, 0x40, 0x6b, 0x30, 0x23, 0xe1, 0x4c, 0xe6, 0x57, 0x32, 0xea, 0x6e, 0x9f, 0x30, 0x91, 0x88, - 0x3c, 0xb6, 0x9b, 0xbc, 0x05, 0xf3, 0x42, 0x13, 0x84, 0x16, 0xe4, 0x98, 0x39, 0xf3, 0x86, 0x9a, - 0x7c, 0x6f, 0x9f, 0x30, 0x67, 0x3d, 0x39, 0x87, 0x29, 0xe9, 0x11, 0xab, 0x5b, 0x82, 0x05, 0x35, - 0x52, 0x18, 0xd6, 0xbe, 0x91, 0x81, 0x49, 0x93, 0x8f, 0x67, 0x58, 0x66, 0x78, 0x95, 0x9c, 0xb4, - 0x71, 0x7c, 0x45, 0x14, 0x34, 0x61, 0x84, 0x5d, 0x10, 0x12, 0x1a, 0xf7, 0xc4, 0x4f, 0xfd, 0xef, - 0x65, 0x61, 0x5c, 0x2a, 0x80, 0xce, 0x49, 0xbb, 0xc4, 0xb4, 0x5c, 0x5d, 0xdc, 0x26, 0x06, 0x98, - 0xa1, 0x39, 0x18, 0xb5, 0xea, 0x81, 0xb3, 0x6f, 0xb3, 0xf5, 0xca, 0xbe, 0xd0, 0x65, 0x08, 0x29, - 0x39, 0xc5, 0xd2, 0x5e, 0xe2, 0xf9, 0x58, 0xab, 0x7d, 0x1e, 0x0a, 0xbe, 0xbd, 0x6f, 0x7b, 0x4e, - 0xc0, 0x6f, 0x5c, 0xcd, 0xc7, 0xc0, 0xda, 0x62, 0xd9, 0x66, 0x58, 0xb0, 0xdf, 0x96, 0xa4, 0xaf, - 0x42, 0x81, 0xd7, 0xc2, 0x65, 0xde, 0xb9, 0xf7, 0xe6, 0xbd, 0xfb, 0xef, 0xdd, 0xa3, 0x6e, 0xf4, - 0xd7, 0xcd, 0x8d, 0xb7, 0x37, 0xae, 0xaf, 0xdd, 0xa1, 0xa1, 0xff, 0xdf, 0x5b, 0x33, 0xef, 0x6d, - 0xdc, 0x7b, 0xbd, 0x92, 0xd5, 0xbf, 0x49, 0xd9, 0x19, 0xed, 0x78, 0xe8, 0xfd, 0xe3, 0x88, 0x53, - 0x76, 0x92, 0xb0, 0x2f, 0x19, 0x06, 0x46, 0x51, 0xbf, 0x9a, 0x21, 0xbc, 0x9b, 0xe6, 0x0d, 0xba, - 0x31, 0x3c, 0xcf, 0x26, 0x3c, 0x4b, 0x30, 0xbb, 0x6c, 0xa4, 0x36, 0x20, 0x1e, 0x6d, 0xf7, 0xc3, - 0xee, 0x1e, 0x68, 0xaa, 0x76, 0x18, 0x9b, 0x7d, 0x16, 0x20, 0x1c, 0x13, 0xdf, 0x46, 0x2a, 0x46, - 0x6c, 0x2d, 0x98, 0x42, 0x19, 0x54, 0x85, 0x31, 0x7e, 0xf3, 0x87, 0xc5, 0x16, 0x66, 0x9f, 0xfa, - 0xbb, 0x02, 0x3a, 0x8e, 0xf3, 0xe4, 0xe1, 0x0d, 0xb2, 0xc5, 0xc6, 0xda, 0x65, 0xf0, 0x1b, 0x64, - 0x17, 0xa4, 0x79, 0x6c, 0xb6, 0x93, 0xe0, 0x47, 0x45, 0x64, 0xba, 0x19, 0x7a, 0xaf, 0x38, 0x06, - 0xba, 0x89, 0xed, 0x17, 0xef, 0x08, 0xe0, 0x1d, 0xe3, 0x86, 0x21, 0xf6, 0x98, 0xd4, 0x48, 0x4e, - 0xc9, 0x21, 0xaf, 0x8e, 0xc3, 0x5b, 0x57, 0x75, 0xc5, 0x34, 0x25, 0xb8, 0x56, 0xec, 0x0c, 0x30, - 0x3a, 0x83, 0x89, 0xc3, 0x93, 0x0a, 0xf0, 0x71, 0x78, 0xeb, 0x1e, 0x27, 0xc0, 0xb1, 0x39, 0xfd, - 0x56, 0x8e, 0x1f, 0xbe, 0xf2, 0x02, 0xc3, 0x1e, 0xbe, 0xa6, 0xb5, 0xa3, 0xb4, 0x8d, 0x1e, 0xe2, - 0x49, 0xb4, 0x34, 0x93, 0x67, 0x7e, 0x20, 0x93, 0xa7, 0x42, 0x38, 0x1c, 0x51, 0x0a, 0x87, 0x2f, - 0x03, 0xf7, 0x75, 0xaf, 0xed, 0x87, 0x81, 0xe3, 0xc8, 0x1d, 0x2d, 0x6e, 0x22, 0x9d, 0x63, 0xf9, - 0x51, 0x5c, 0x39, 0x72, 0x2f, 0x6b, 0x18, 0x4b, 0x69, 0x9d, 0x1f, 0xd1, 0x2a, 0x90, 0x97, 0x38, - 0xa2, 0xe5, 0x64, 0x10, 0x3f, 0xa2, 0x95, 0x63, 0xd0, 0xf1, 0x23, 0x5a, 0x9e, 0xea, 0xeb, 0xdf, - 0xce, 0xc4, 0x69, 0xe1, 0x18, 0x19, 0xa1, 0x0a, 0xc1, 0x79, 0xa5, 0xe2, 0x10, 0x9e, 0xd5, 0x26, - 0xa0, 0x48, 0x9c, 0xd5, 0x4a, 0x61, 0xe2, 0x52, 0x07, 0x1a, 0x27, 0xf9, 0x6f, 0x24, 0xd6, 0xe0, - 0x67, 0x78, 0x56, 0x1b, 0x07, 0x81, 0x2d, 0xbb, 0xaf, 0xc4, 0x91, 0xc0, 0x45, 0xbf, 0x63, 0xe1, - 0xa8, 0x2b, 0xf1, 0x35, 0x1d, 0xb5, 0x2e, 0x78, 0x52, 0xc7, 0x90, 0xf9, 0x59, 0x7b, 0x52, 0xf7, - 0x01, 0x87, 0x01, 0x6e, 0xc0, 0xec, 0x5d, 0x3b, 0xf0, 0x9c, 0xba, 0x3f, 0x10, 0xf1, 0xea, 0xbf, - 0x91, 0x85, 0xb9, 0x78, 0x05, 0x46, 0x67, 0xcf, 0x93, 0xa8, 0x79, 0x41, 0x74, 0xdb, 0x47, 0x5d, - 0x8e, 0x5c, 0x3f, 0xf3, 0x4d, 0x5a, 0x56, 0xfb, 0xe3, 0x0c, 0x89, 0x25, 0x12, 0x48, 0xb7, 0xe1, - 0x33, 0xb2, 0xf7, 0xd8, 0x19, 0x98, 0x68, 0x77, 0x5b, 0x35, 0xc1, 0x83, 0x8c, 0xba, 0x43, 0x8c, - 0xb7, 0xbb, 0xad, 0x7b, 0x91, 0x13, 0xd9, 0x45, 0x98, 0xa2, 0x2e, 0x13, 0xfc, 0x18, 0xc6, 0x79, - 0x44, 0x25, 0xe0, 0xbc, 0x39, 0x49, 0x32, 0xd8, 0x31, 0x0c, 0x0b, 0x8a, 0x83, 0x9b, 0x8c, 0xbc, - 0x33, 0xf2, 0xa4, 0x5c, 0xb9, 0xdd, 0x6d, 0x45, 0x3e, 0x18, 0x31, 0xcf, 0xd4, 0x91, 0x5e, 0x9e, - 0xa9, 0xfa, 0xef, 0x95, 0x60, 0x9a, 0x76, 0x70, 0x1c, 0xae, 0xe8, 0x83, 0x45, 0x6d, 0x10, 0x50, - 0x96, 0xeb, 0xe5, 0x70, 0x97, 0x4f, 0x38, 0xdc, 0xbd, 0x95, 0x74, 0xb8, 0x1b, 0x21, 0xb3, 0x76, - 0xde, 0x50, 0x0c, 0xe2, 0x68, 0x8e, 0x76, 0xa3, 0x83, 0x38, 0xda, 0x8d, 0x0d, 0xea, 0x0b, 0x5e, - 0x18, 0xda, 0x9d, 0xae, 0x78, 0x28, 0x5f, 0x70, 0x38, 0x44, 0x5c, 0xc0, 0xd2, 0x91, 0x3d, 0xe7, - 0xca, 0x47, 0xf4, 0x9c, 0x1b, 0xef, 0xef, 0x39, 0xf7, 0x45, 0xd9, 0x9f, 0x7b, 0x82, 0xe9, 0x19, - 0xaa, 0xe9, 0x4d, 0xf1, 0xe3, 0x8e, 0xd1, 0xff, 0xe4, 0x11, 0xc2, 0xe3, 0x55, 0x52, 0x9c, 0xbe, - 0xb7, 0x94, 0x7e, 0xdc, 0x34, 0xc6, 0xc2, 0x99, 0x1e, 0x30, 0x1e, 0xd5, 0x7f, 0x1b, 0xa5, 0xfb, - 0x6f, 0x7f, 0xd8, 0xcf, 0xc3, 0x90, 0xc6, 0x56, 0x78, 0x41, 0x09, 0xd5, 0x31, 0xfa, 0x6d, 0xcf, - 0xfc, 0x3f, 0xe0, 0xb7, 0xfd, 0x6d, 0x95, 0xdf, 0xf6, 0x6b, 0x92, 0xe9, 0xe2, 0xe2, 0x40, 0xb3, - 0xf7, 0xe4, 0xfd, 0xb5, 0xe7, 0x78, 0x68, 0xe1, 0x98, 0x86, 0xf1, 0x8f, 0x32, 0x9c, 0x6f, 0x0f, - 0xad, 0x59, 0x5c, 0x48, 0x39, 0x88, 0x3c, 0x84, 0xf0, 0x9d, 0x1b, 0x44, 0xf8, 0x8e, 0xc6, 0x12, - 0xdb, 0xcc, 0xbb, 0x30, 0x47, 0xd3, 0x07, 0xd5, 0x39, 0x6e, 0xa8, 0xdc, 0x28, 0xb3, 0x29, 0x6e, - 0x94, 0x6c, 0xbc, 0x09, 0x67, 0x4a, 0xfd, 0x97, 0x61, 0x3e, 0xd1, 0x2d, 0x93, 0x09, 0xce, 0xc1, - 0x18, 0x97, 0xf4, 0x32, 0x8c, 0x81, 0x8b, 0xa4, 0x60, 0xf2, 0xdc, 0xbe, 0xfe, 0x8e, 0x48, 0x83, - 0x42, 0xdd, 0x6d, 0x75, 0xc8, 0x33, 0x64, 0x54, 0x68, 0x0c, 0xbf, 0xf5, 0x2d, 0x8e, 0x8f, 0x98, - 0x0c, 0xa3, 0x0a, 0xad, 0x10, 0x61, 0x22, 0x2b, 0x62, 0x22, 0x29, 0x42, 0xbd, 0xc6, 0x9f, 0xa0, - 0x8d, 0xcb, 0x39, 0x67, 0xa4, 0x60, 0x4b, 0x89, 0x21, 0xb1, 0x4c, 0xfd, 0xb7, 0x42, 0xc2, 0x92, - 0xc5, 0xe5, 0x43, 0x00, 0x95, 0xbe, 0xbf, 0x27, 0x4d, 0xee, 0x87, 0x12, 0x56, 0x42, 0x02, 0x8a, - 0x89, 0xd1, 0xbf, 0x9a, 0x81, 0xea, 0x71, 0xf8, 0x3a, 0x1a, 0x7c, 0xef, 0x49, 0x77, 0x73, 0x14, - 0x0b, 0x28, 0xb0, 0x7f, 0x0a, 0x4e, 0xa6, 0x3b, 0x29, 0xfe, 0x63, 0x08, 0xa3, 0x80, 0x0c, 0x2d, - 0x6c, 0x45, 0xa1, 0xb3, 0xb2, 0x52, 0xe8, 0xac, 0x74, 0xdc, 0x7f, 0x29, 0x3d, 0xc0, 0x55, 0x18, - 0x80, 0x47, 0xe6, 0x7e, 0x4f, 0x22, 0xd2, 0xd5, 0x00, 0x21, 0xa3, 0x46, 0x07, 0x08, 0x19, 0xa5, - 0x94, 0xbd, 0xc6, 0x06, 0x93, 0xbd, 0xb6, 0xd3, 0x62, 0x31, 0x51, 0xd9, 0xcd, 0x50, 0x23, 0x67, - 0x98, 0xa0, 0x4c, 0xc5, 0x5e, 0x41, 0x99, 0xf6, 0xd2, 0x83, 0x32, 0x01, 0xbb, 0x5c, 0xa2, 0x04, - 0xe8, 0xf0, 0xd1, 0x99, 0xba, 0x7d, 0xa2, 0x33, 0x95, 0x98, 0x04, 0x31, 0x40, 0x77, 0x87, 0x09, - 0xd3, 0x14, 0x5b, 0xf2, 0xe5, 0x9e, 0xf2, 0xd9, 0xdb, 0x4a, 0x89, 0x8b, 0xca, 0x91, 0x67, 0xd5, - 0x90, 0x0d, 0x10, 0xf7, 0xe8, 0x17, 0x41, 0x8b, 0x06, 0x68, 0xed, 0x57, 0x54, 0x52, 0xd3, 0x17, - 0x24, 0xa9, 0xe9, 0xd2, 0x60, 0x33, 0x30, 0x9c, 0xd8, 0x34, 0x0f, 0xb3, 0xb1, 0x5e, 0x18, 0x3f, - 0xdd, 0x08, 0xd9, 0xe9, 0xb0, 0x32, 0x90, 0xd0, 0x47, 0x8c, 0x67, 0xef, 0xc3, 0x3c, 0xcb, 0x78, - 0xb2, 0xc2, 0xc9, 0xb7, 0x32, 0x50, 0x4d, 0x76, 0x1c, 0x79, 0x4d, 0x86, 0x4e, 0x7d, 0xdc, 0x6b, - 0x52, 0x0a, 0xf5, 0x62, 0x86, 0xf9, 0xc3, 0x49, 0x28, 0x6f, 0x87, 0x68, 0x39, 0xce, 0xc3, 0x92, - 0x75, 0x98, 0x8b, 0xb7, 0x1a, 0x79, 0x52, 0x32, 0xc0, 0x43, 0x4f, 0x4a, 0x79, 0x5c, 0x3c, 0x1b, - 0xcb, 0x4e, 0x2c, 0xe7, 0x18, 0x8f, 0x20, 0x22, 0x2a, 0x88, 0x09, 0x18, 0xf7, 0xe0, 0xe4, 0x7d, - 0x6f, 0xd7, 0x6a, 0x3b, 0x8f, 0x8e, 0xe5, 0xf4, 0x41, 0x5f, 0x00, 0x4d, 0xd5, 0x1e, 0xeb, 0x6d, - 0x09, 0x16, 0xc4, 0xdc, 0x38, 0xe1, 0xe9, 0xef, 0xc3, 0x62, 0x4a, 0x3e, 0x43, 0xe3, 0xe7, 0x60, - 0xdc, 0x15, 0x0a, 0x44, 0x11, 0x60, 0xc5, 0x6a, 0x0c, 0xa3, 0x72, 0x49, 0xfd, 0x59, 0x19, 0xb2, - 0x14, 0xc9, 0x54, 0x40, 0xa3, 0xfe, 0x2e, 0x9c, 0x52, 0xd6, 0x60, 0xb0, 0xbc, 0x04, 0x65, 0xb1, - 0x07, 0x86, 0x21, 0x25, 0x28, 0x52, 0x41, 0xfd, 0x8a, 0x8c, 0xf3, 0xbe, 0xd2, 0x68, 0x1c, 0xa9, - 0xb1, 0x29, 0xfc, 0x1a, 0x4c, 0x99, 0xc7, 0x11, 0x70, 0xe1, 0x42, 0xef, 0x90, 0xa9, 0x62, 0xb0, - 0xd4, 0x19, 0x40, 0x66, 0xf2, 0x86, 0x2d, 0x03, 0xe4, 0x18, 0xd4, 0xb6, 0xc3, 0x02, 0x12, 0x63, - 0x6d, 0x97, 0x61, 0xc6, 0x1c, 0xfc, 0x96, 0x9d, 0x7e, 0x0d, 0x66, 0x4d, 0xe5, 0xad, 0xb1, 0xd3, - 0x72, 0x9c, 0xe1, 0x92, 0x11, 0x45, 0xa3, 0x65, 0xd1, 0x84, 0xf5, 0xb7, 0x28, 0x00, 0xc7, 0xc9, - 0x44, 0x5e, 0x84, 0x69, 0x53, 0x71, 0xc3, 0x6b, 0x19, 0xf2, 0x5e, 0x74, 0xad, 0x4b, 0x82, 0x85, - 0x64, 0xe8, 0x9b, 0x14, 0xfd, 0xc7, 0xc8, 0x35, 0x18, 0x76, 0x63, 0xf4, 0xf6, 0xad, 0x0c, 0x68, - 0xa4, 0xf3, 0xcf, 0xd4, 0xa0, 0xbe, 0x08, 0xa7, 0x94, 0x40, 0x30, 0x20, 0xff, 0x4e, 0x06, 0x4a, - 0x2c, 0x9c, 0x29, 0x71, 0xe7, 0x98, 0x81, 0x91, 0x96, 0xf5, 0x55, 0x97, 0x9b, 0xb2, 0xe9, 0x07, - 0x49, 0x75, 0xda, 0x2e, 0x7f, 0x85, 0x87, 0x7e, 0xe0, 0xd4, 0x8e, 0x15, 0xd4, 0xf7, 0x78, 0x38, - 0x3f, 0xf2, 0x41, 0xf4, 0x8f, 0x3d, 0xab, 0xbd, 0xcb, 0x6c, 0xd3, 0x58, 0xff, 0xa0, 0x9f, 0x68, - 0x11, 0x60, 0xd7, 0x09, 0x6a, 0x75, 0xb7, 0xd5, 0x72, 0x02, 0xe6, 0x62, 0x55, 0xdc, 0x75, 0x82, - 0xeb, 0x24, 0x01, 0x67, 0x6f, 0x77, 0x9d, 0x66, 0xa3, 0xd6, 0xe0, 0x47, 0x6c, 0x45, 0xb3, 0x48, - 0x52, 0x6e, 0x58, 0x81, 0xad, 0x4f, 0xc3, 0x14, 0x03, 0xf4, 0x75, 0x9b, 0x13, 0x90, 0xfe, 0x2a, - 0x20, 0x31, 0x91, 0x91, 0xc0, 0xd9, 0x28, 0x7a, 0x60, 0x86, 0x69, 0x70, 0xc2, 0x18, 0xa3, 0x67, - 0x89, 0xbe, 0x93, 0x85, 0x39, 0xf6, 0x7c, 0xe1, 0x5a, 0x3d, 0x70, 0xf6, 0x87, 0x5b, 0x8e, 0x67, - 0x60, 0xdc, 0xa2, 0xad, 0x90, 0xd7, 0x9a, 0x98, 0x4a, 0x7c, 0xfb, 0x84, 0x59, 0x8e, 0x92, 0x37, - 0x1a, 0xe8, 0x29, 0x28, 0x37, 0x69, 0x9f, 0x35, 0xd2, 0x3a, 0x46, 0x5e, 0xf9, 0xf6, 0x09, 0xb3, - 0xc4, 0x52, 0x6f, 0xe0, 0xb6, 0xce, 0xc2, 0x44, 0xd7, 0xc7, 0xfa, 0xc8, 0xb6, 0xe5, 0xdb, 0x8d, - 0x30, 0xfe, 0x3f, 0x6e, 0x8c, 0xa4, 0xaf, 0xe3, 0xe4, 0x8d, 0x06, 0x7a, 0x05, 0x4e, 0x92, 0xef, - 0x06, 0x2b, 0x68, 0x39, 0xde, 0xae, 0xd5, 0xe9, 0xd0, 0x2a, 0x23, 0xac, 0xca, 0x1c, 0x2d, 0x42, - 0xea, 0xac, 0xf1, 0x02, 0x1b, 0x8d, 0xf5, 0x32, 0x40, 0x04, 0x99, 0x7e, 0x12, 0xe6, 0x13, 0xb8, - 0x60, 0x44, 0xe2, 0xc2, 0x0c, 0xcb, 0x1a, 0x9a, 0x67, 0x3d, 0x9d, 0x18, 0x18, 0x25, 0x29, 0x69, - 0x58, 0x78, 0x1b, 0x8e, 0x75, 0x18, 0x9d, 0xfa, 0xb0, 0x8c, 0xc1, 0x4e, 0x7d, 0xde, 0x0f, 0x27, - 0x38, 0xce, 0x26, 0xbe, 0x08, 0x53, 0x7c, 0x1a, 0x3c, 0xdb, 0x67, 0x31, 0xd6, 0x33, 0xcc, 0xfb, - 0x9e, 0xd5, 0xe1, 0x85, 0xa9, 0xf7, 0x7d, 0x33, 0x4a, 0x24, 0x3c, 0xf5, 0x7b, 0x79, 0x98, 0x56, - 0x14, 0x44, 0xd7, 0xa1, 0xbc, 0x63, 0x5b, 0x41, 0x97, 0xc7, 0xcd, 0xcb, 0xb0, 0xc8, 0x8b, 0x8a, - 0xb2, 0xc6, 0x2d, 0x5a, 0x90, 0x74, 0x50, 0xda, 0x89, 0x3e, 0xd0, 0xf3, 0x61, 0x4c, 0x44, 0xca, - 0xd7, 0x4f, 0x29, 0xab, 0xcb, 0x01, 0x11, 0xb5, 0xef, 0x66, 0xa0, 0x24, 0xb4, 0xa8, 0xb4, 0xd8, - 0x10, 0x61, 0xaf, 0xed, 0x77, 0x5b, 0xcc, 0x35, 0x26, 0x67, 0x86, 0xdf, 0xe8, 0x3e, 0x54, 0xec, - 0x76, 0xe0, 0x04, 0x4d, 0xf2, 0x0c, 0x39, 0x85, 0x3e, 0xc7, 0x2e, 0x3a, 0xa9, 0xba, 0xbf, 0x19, - 0x15, 0xa6, 0x28, 0xb2, 0xe5, 0x04, 0xed, 0x0f, 0x33, 0x30, 0x19, 0x2b, 0x84, 0xb9, 0x46, 0xf4, - 0xc8, 0x7e, 0x8e, 0xbd, 0xac, 0x8f, 0x5e, 0x80, 0x31, 0xfb, 0x61, 0xc7, 0xf1, 0x6c, 0x7f, 0x80, - 0xb7, 0x37, 0x79, 0x51, 0xb4, 0x4a, 0xb0, 0xe4, 0xb1, 0x23, 0xe6, 0xde, 0x95, 0x58, 0x49, 0xb4, - 0x22, 0xb8, 0x78, 0x4e, 0xac, 0x96, 0xf9, 0xc0, 0x22, 0x05, 0x45, 0x7b, 0x39, 0x0c, 0x1f, 0x39, - 0x27, 0x45, 0xa6, 0x2c, 0xf6, 0x8d, 0x3c, 0xf9, 0x9d, 0x0c, 0x9c, 0xe2, 0x84, 0x8b, 0xe9, 0x39, - 0x5c, 0x6d, 0x47, 0x89, 0xbf, 0xb8, 0x08, 0xd0, 0x76, 0x1b, 0xb6, 0x20, 0xb6, 0xe7, 0xcc, 0x22, - 0x4e, 0xa1, 0x52, 0xfb, 0x32, 0x94, 0x3c, 0x7a, 0xfd, 0x32, 0x7c, 0xb1, 0x34, 0x67, 0x02, 0x4d, - 0x22, 0xa1, 0x0d, 0x0f, 0x60, 0x41, 0x09, 0x4b, 0x9f, 0x0d, 0x28, 0x1e, 0x28, 0x30, 0x9b, 0x0c, - 0x14, 0x18, 0x0b, 0x74, 0x98, 0x8b, 0x07, 0x3a, 0xd4, 0xff, 0x61, 0x06, 0x16, 0x53, 0xfa, 0x66, - 0xcb, 0xcf, 0x84, 0xd9, 0xa6, 0xaa, 0x00, 0x5b, 0x2d, 0x0b, 0x46, 0x0f, 0x34, 0x9a, 0xea, 0xaa, - 0x92, 0x1e, 0x93, 0x95, 0xf5, 0x98, 0xb8, 0x12, 0x94, 0x4b, 0x5c, 0x4b, 0xff, 0xcd, 0x11, 0x58, - 0xba, 0x6b, 0xb5, 0x31, 0xa3, 0x3c, 0xe4, 0xa5, 0xc0, 0xab, 0xa9, 0xd7, 0x78, 0xa4, 0x63, 0xae, - 0xb8, 0x25, 0x7d, 0x60, 0x2f, 0x65, 0x86, 0x6d, 0xcf, 0xf6, 0xbb, 0x4d, 0x46, 0xe9, 0x39, 0x82, - 0x6d, 0x93, 0xa6, 0xa0, 0x1b, 0xc2, 0xad, 0x57, 0x4a, 0xd5, 0xe7, 0x8d, 0xde, 0x43, 0x51, 0xdc, - 0x7f, 0x45, 0x6f, 0x00, 0x58, 0x1f, 0xfa, 0xb2, 0x53, 0xec, 0x85, 0x7e, 0xed, 0xac, 0xbd, 0x27, - 0xbc, 0x10, 0x69, 0x7d, 0xc8, 0x5e, 0x88, 0x44, 0x5b, 0x30, 0x4e, 0x17, 0xa2, 0xec, 0x1d, 0xfb, - 0x4c, 0xbf, 0xe6, 0xe8, 0x9d, 0xda, 0xb0, 0xc5, 0xf2, 0xae, 0xf0, 0x8d, 0x36, 0xa1, 0x6c, 0x3d, - 0xc2, 0x5c, 0x95, 0xb5, 0xb9, 0x43, 0xda, 0xbc, 0xd4, 0x17, 0x44, 0x5c, 0x27, 0xba, 0x86, 0x60, - 0x45, 0x9f, 0xda, 0x3a, 0x14, 0xc3, 0x01, 0xd0, 0x35, 0xbd, 0x1b, 0xbd, 0x45, 0xc8, 0xbe, 0xc8, - 0x32, 0xb4, 0x1f, 0x06, 0xec, 0x62, 0x32, 0x8f, 0x69, 0x6c, 0x3f, 0x0c, 0xc8, 0x95, 0x63, 0x6d, - 0x02, 0xca, 0x22, 0xd4, 0xda, 0x38, 0x94, 0x84, 0x1e, 0xf5, 0x97, 0x8e, 0x78, 0xab, 0x78, 0xbd, - 0x00, 0xa3, 0xac, 0x89, 0x3f, 0xca, 0xc2, 0x8c, 0x3c, 0x46, 0xc6, 0x4d, 0x54, 0xec, 0x9d, 0x09, - 0x80, 0xd9, 0xc8, 0xbe, 0x7e, 0x35, 0xc5, 0xb3, 0xaa, 0x0f, 0x79, 0xca, 0x97, 0x84, 0xf3, 0x87, - 0xbf, 0x24, 0xbc, 0x0c, 0xa5, 0x07, 0x2f, 0xfb, 0x35, 0x39, 0x8c, 0x33, 0x3c, 0x78, 0xd9, 0xe7, - 0xd1, 0xf3, 0x5f, 0x90, 0x22, 0x39, 0x4f, 0xac, 0x2e, 0x18, 0xaa, 0x51, 0xc6, 0xf6, 0x38, 0xdd, - 0x50, 0xc7, 0xf6, 0x2d, 0x43, 0xe1, 0x9e, 0x1b, 0xac, 0x35, 0x1a, 0x76, 0x83, 0xe1, 0x94, 0xfc, - 0xcd, 0xea, 0xbf, 0x97, 0x87, 0xe5, 0x54, 0x0a, 0x61, 0xcc, 0xe8, 0x8a, 0xe8, 0xc1, 0x41, 0x3d, - 0xa9, 0x54, 0xa0, 0x88, 0xcf, 0x1c, 0x44, 0x2b, 0x2e, 0xcb, 0x9e, 0x3a, 0xee, 0xd3, 0x89, 0x6a, - 0xc9, 0xbd, 0xa9, 0x58, 0x72, 0x17, 0xfb, 0x36, 0x94, 0xb2, 0xe6, 0xde, 0x56, 0xaf, 0xb9, 0xcb, - 0x7d, 0xdb, 0xeb, 0xb9, 0xe8, 0xde, 0x52, 0x2e, 0xba, 0x67, 0xfa, 0x03, 0x99, 0xbe, 0xea, 0x2e, - 0x8a, 0xab, 0x4e, 0x5e, 0x5d, 0x99, 0x27, 0xbf, 0xba, 0xfe, 0x32, 0x0f, 0x0b, 0xf2, 0x60, 0x8e, - 0xae, 0xa3, 0x1e, 0x71, 0xa9, 0x0d, 0xea, 0x31, 0x87, 0xd6, 0x13, 0x8c, 0xfe, 0xac, 0xd1, 0x0b, - 0x76, 0x15, 0xcd, 0x31, 0x06, 0x31, 0x1a, 0x31, 0x88, 0xdb, 0x0a, 0x2a, 0x3c, 0xd7, 0xbb, 0xdd, - 0x14, 0x12, 0x7c, 0x4b, 0x4d, 0x82, 0x17, 0x7b, 0x37, 0xd6, 0x93, 0xfe, 0xee, 0x29, 0xe9, 0xef, - 0x42, 0x1f, 0xf0, 0xd2, 0x89, 0xef, 0xa9, 0x01, 0x58, 0xfe, 0x13, 0xa0, 0xba, 0x4d, 0x58, 0x4c, - 0x19, 0x81, 0x8a, 0x25, 0x65, 0xfa, 0xb3, 0x24, 0xfd, 0xdf, 0x24, 0xe8, 0x78, 0xbd, 0xdb, 0x7c, - 0xb0, 0xd6, 0x68, 0xfc, 0x6c, 0xa4, 0x97, 0xd3, 0x50, 0x16, 0xc3, 0x4f, 0xb3, 0x17, 0x78, 0x4b, - 0x42, 0xdc, 0x69, 0x89, 0x5a, 0xf3, 0x4a, 0x6a, 0x95, 0x21, 0x54, 0x51, 0xeb, 0x20, 0xb4, 0x19, - 0x6b, 0x65, 0x38, 0xda, 0x8c, 0x35, 0x76, 0x0c, 0xb4, 0x19, 0x07, 0xef, 0xe7, 0x9e, 0x36, 0x97, - 0xe3, 0xb4, 0x19, 0x8e, 0x80, 0x29, 0xe1, 0x7f, 0x3f, 0x0b, 0x55, 0x62, 0x23, 0x70, 0x82, 0x81, - 0x43, 0x3a, 0x23, 0xc8, 0x37, 0xac, 0x03, 0xaa, 0xcd, 0x8e, 0x98, 0xe4, 0x3f, 0x7a, 0x0d, 0x0a, - 0x4e, 0x3b, 0xb0, 0xbd, 0x7d, 0xc6, 0x26, 0x27, 0x56, 0x75, 0x23, 0xad, 0x5d, 0x63, 0x83, 0x95, - 0x34, 0xc3, 0x3a, 0x24, 0xa4, 0x8c, 0xd3, 0xb2, 0x6b, 0x8f, 0xdc, 0x36, 0x7f, 0x67, 0xa1, 0x80, - 0x13, 0xde, 0x77, 0xdb, 0x76, 0x8f, 0x98, 0x7e, 0xfc, 0xbd, 0x89, 0x51, 0xe1, 0xbd, 0x89, 0xd8, - 0x89, 0xe4, 0x58, 0x4f, 0x27, 0x04, 0x03, 0x0a, 0x1c, 0x9a, 0xc4, 0xab, 0x57, 0xb7, 0xdd, 0xae, - 0xd7, 0x3c, 0xa0, 0x68, 0xbe, 0x61, 0x39, 0xcd, 0x83, 0x4a, 0x56, 0xff, 0x9f, 0x59, 0x38, 0xa9, - 0x18, 0x17, 0x5b, 0xe9, 0x37, 0x98, 0xd9, 0xc8, 0x09, 0x0e, 0x6a, 0x4c, 0x31, 0xa4, 0xef, 0x2c, - 0xa6, 0x56, 0x31, 0x6e, 0x58, 0x81, 0xc5, 0xac, 0x4a, 0x4e, 0x70, 0x80, 0xbf, 0xb4, 0xef, 0x65, - 0x21, 0x4f, 0x2c, 0x47, 0x4f, 0x3c, 0x84, 0x3e, 0x5a, 0x02, 0xf0, 0xe9, 0x83, 0x07, 0x3b, 0xdd, - 0x26, 0xd7, 0xac, 0xa2, 0x14, 0x4c, 0xc9, 0x3b, 0x24, 0x56, 0x3c, 0xf3, 0x55, 0x65, 0x5f, 0x58, - 0x40, 0x74, 0xda, 0xb5, 0x0e, 0x7b, 0x82, 0x81, 0xcc, 0x52, 0xde, 0x04, 0x27, 0x7c, 0x94, 0x01, - 0xef, 0x8b, 0x4c, 0x7f, 0x73, 0xdc, 0x36, 0x05, 0x0b, 0xcf, 0x59, 0xc6, 0x9c, 0x88, 0x92, 0x09, - 0x04, 0x33, 0x30, 0x42, 0x34, 0x39, 0x32, 0x6f, 0x79, 0x93, 0x7e, 0xe8, 0x5d, 0x00, 0xd3, 0x3d, - 0xda, 0xab, 0x68, 0xa1, 0x41, 0x3b, 0xcb, 0x0d, 0xda, 0x2e, 0x5f, 0x70, 0xcc, 0xa0, 0x8d, 0xe6, - 0x61, 0xcc, 0x73, 0x9b, 0x76, 0x2d, 0xb4, 0x04, 0x8f, 0xe2, 0xcf, 0x8d, 0x86, 0xfe, 0x2a, 0xed, - 0x96, 0x2d, 0x63, 0x0d, 0x0a, 0x2c, 0x42, 0x11, 0xb5, 0x8e, 0x17, 0xcd, 0xf0, 0x1b, 0x13, 0xa2, - 0xd5, 0x71, 0x7c, 0x76, 0x13, 0x8e, 0xfc, 0xd7, 0xbf, 0x99, 0x81, 0x29, 0x52, 0x7d, 0xd8, 0x53, - 0x8a, 0x61, 0x86, 0x30, 0x03, 0x48, 0x84, 0x81, 0x2d, 0x7b, 0x0e, 0xda, 0xd0, 0x36, 0xc0, 0x63, - 0x00, 0x2d, 0x66, 0x16, 0xf4, 0x61, 0x06, 0xa7, 0x3e, 0xd9, 0x03, 0xda, 0x6b, 0x30, 0x1b, 0xeb, - 0x54, 0x38, 0x0e, 0x71, 0xa5, 0xe3, 0x10, 0x57, 0x38, 0x0e, 0x71, 0xf9, 0x71, 0x88, 0x7b, 0xfc, - 0xc7, 0x21, 0xae, 0xfa, 0x38, 0xc4, 0x15, 0x8f, 0x43, 0x5c, 0xe1, 0x38, 0xc4, 0x65, 0xc7, 0x21, - 0xee, 0xb1, 0x1f, 0x87, 0xb8, 0x89, 0xe3, 0x10, 0x83, 0xa2, 0x6b, 0xd3, 0xf6, 0x5a, 0x8e, 0xef, - 0x13, 0xdf, 0xe2, 0x9e, 0xa6, 0xdb, 0xdf, 0xca, 0xc0, 0x5c, 0xbc, 0x02, 0x1b, 0xd3, 0xcb, 0xf2, - 0x79, 0x93, 0x6e, 0xa8, 0xcb, 0xd1, 0xa3, 0x30, 0xea, 0x8d, 0xc2, 0x1e, 0xb5, 0xbc, 0x49, 0x5f, - 0x4a, 0x4c, 0x75, 0x48, 0x3d, 0x2d, 0xfa, 0x42, 0x60, 0x74, 0x09, 0xad, 0x0a, 0xd7, 0x74, 0x2e, - 0x03, 0x44, 0x19, 0x98, 0x91, 0xed, 0x74, 0x9b, 0x4d, 0xfe, 0xa4, 0x77, 0x86, 0xfa, 0xc3, 0xe2, - 0x24, 0xfa, 0x5c, 0xb7, 0xfe, 0xa7, 0x79, 0x40, 0x6b, 0x02, 0xb7, 0x3e, 0x0a, 0x4b, 0xe2, 0xbb, - 0x56, 0x56, 0xd8, 0xb5, 0x56, 0x43, 0x0d, 0x9a, 0x6e, 0x9f, 0x9a, 0x91, 0xec, 0x25, 0xfe, 0x68, - 0x8e, 0x82, 0xa9, 0xe6, 0x95, 0x4c, 0xf5, 0x2a, 0x8c, 0xb9, 0x9d, 0xfa, 0x41, 0xbd, 0x69, 0x33, - 0x0f, 0xfb, 0x53, 0xaa, 0xd6, 0xef, 0xd3, 0x22, 0x26, 0x2f, 0x2b, 0xee, 0xbb, 0xa3, 0xf2, 0xbe, - 0x7b, 0x98, 0x3d, 0x56, 0xfb, 0x57, 0x19, 0x18, 0x63, 0x6d, 0x0f, 0xb3, 0xa5, 0xdd, 0x82, 0xa9, - 0xa6, 0xe5, 0x07, 0xb5, 0x2e, 0xe1, 0x17, 0x03, 0xef, 0x6d, 0x93, 0xb8, 0x12, 0xe5, 0x31, 0x74, - 0x8f, 0x3b, 0x02, 0xa6, 0xf5, 0x2f, 0xab, 0x2d, 0x15, 0xe4, 0xe1, 0x21, 0xbe, 0xeb, 0xd1, 0x1b, - 0xc3, 0xfc, 0xbd, 0xa0, 0xac, 0xf0, 0xf0, 0x50, 0x4e, 0x7a, 0x78, 0x88, 0x04, 0x97, 0xa3, 0x0b, - 0xaa, 0x51, 0x19, 0x59, 0xdd, 0x82, 0x51, 0xfa, 0x98, 0x0e, 0xda, 0x08, 0x3b, 0x99, 0x31, 0x14, - 0xcf, 0xee, 0x68, 0xb3, 0x86, 0xf2, 0xd5, 0x1d, 0xf4, 0xcd, 0x7f, 0xff, 0xdf, 0x7e, 0x90, 0x2d, - 0x23, 0xb8, 0xb2, 0xff, 0xdc, 0x95, 0x3d, 0x52, 0x62, 0xf5, 0xcf, 0x46, 0x60, 0x42, 0x7e, 0xc5, - 0x00, 0x35, 0x60, 0x94, 0xf2, 0x72, 0xb4, 0x60, 0xf4, 0x78, 0x2c, 0x45, 0x5b, 0x34, 0x7a, 0x3e, - 0x5d, 0xb2, 0x48, 0x7a, 0x9b, 0xd7, 0x11, 0xee, 0x8d, 0x5f, 0x5d, 0xa1, 0x8e, 0x82, 0xd7, 0x32, - 0x17, 0x71, 0x2f, 0x14, 0xd7, 0x89, 0x5e, 0xa4, 0xad, 0x26, 0xd1, 0x4b, 0x6c, 0x13, 0x60, 0xbd, - 0x68, 0x29, 0xbd, 0xf8, 0x50, 0x0c, 0x59, 0x35, 0x5a, 0xee, 0xf3, 0xa2, 0x88, 0xb6, 0x62, 0xf4, - 0x79, 0x01, 0x44, 0x7f, 0x8a, 0x74, 0xb7, 0x88, 0x4e, 0x25, 0xbb, 0xbb, 0xf2, 0x11, 0x65, 0x68, - 0x1f, 0xa3, 0x47, 0x78, 0xe6, 0x09, 0x43, 0x46, 0x8b, 0x46, 0xaf, 0xc7, 0x3e, 0xb4, 0x25, 0xa3, - 0xe7, 0x73, 0x1d, 0xfa, 0xb3, 0xa4, 0xbb, 0x8b, 0xe8, 0x7c, 0x8f, 0xee, 0xae, 0x7c, 0x84, 0x39, - 0xf2, 0xc7, 0x57, 0x3e, 0xea, 0xe2, 0xbe, 0x3f, 0xe4, 0xef, 0xae, 0x26, 0xd0, 0x2a, 0xf1, 0xfa, - 0x04, 0x5a, 0x63, 0x7c, 0x9b, 0x75, 0x7c, 0x71, 0xf0, 0x8e, 0xff, 0x66, 0x06, 0x26, 0xe9, 0xdc, - 0x84, 0xa7, 0xce, 0xe8, 0x8c, 0x31, 0xc8, 0x7b, 0x1d, 0xda, 0x59, 0x63, 0xb0, 0x77, 0x34, 0x2e, - 0x13, 0xa0, 0xce, 0x69, 0xba, 0x02, 0x28, 0xba, 0xd6, 0xc3, 0x33, 0xf1, 0x6b, 0x99, 0x8b, 0xab, - 0xff, 0x3c, 0x9f, 0x78, 0xd1, 0x5d, 0x24, 0xed, 0x1e, 0x01, 0xdb, 0xb5, 0x45, 0xa3, 0x67, 0xb4, - 0x74, 0x89, 0xb4, 0x99, 0x67, 0x30, 0x2b, 0x19, 0x27, 0xed, 0x1e, 0x81, 0x9e, 0x13, 0xbd, 0xf4, - 0x22, 0xed, 0x64, 0x2f, 0x31, 0xd2, 0xee, 0x1d, 0xfb, 0x58, 0x5b, 0x31, 0xfa, 0x44, 0x01, 0x96, - 0x49, 0x5b, 0xee, 0x2e, 0x22, 0xed, 0x40, 0x24, 0xed, 0x5e, 0x11, 0x7d, 0xb5, 0x25, 0xa3, 0x67, - 0x4c, 0x5e, 0xfd, 0x22, 0xe9, 0xee, 0x69, 0xa4, 0xf7, 0xe8, 0x8e, 0x51, 0x18, 0xfa, 0x9a, 0x40, - 0xd4, 0x3d, 0xe2, 0xf0, 0x26, 0x10, 0x1a, 0x23, 0x6a, 0xd6, 0xe5, 0xc5, 0x01, 0xba, 0x5c, 0xfd, - 0x0f, 0x79, 0x18, 0x63, 0x9a, 0x30, 0xba, 0x1f, 0x52, 0xcd, 0xac, 0x32, 0xb0, 0xa8, 0x36, 0x67, - 0xa8, 0xa3, 0x7e, 0xce, 0x91, 0x0e, 0x2b, 0x7a, 0x09, 0x77, 0xc8, 0xf6, 0x39, 0x3c, 0x75, 0xf7, - 0x43, 0x02, 0x09, 0x1b, 0x94, 0x29, 0x63, 0xce, 0x50, 0x47, 0xaf, 0x64, 0x0d, 0x6a, 0xf1, 0x06, - 0x7f, 0x49, 0xa4, 0x85, 0x6a, 0x5a, 0x7c, 0x4a, 0xed, 0xa4, 0x91, 0x66, 0xba, 0xd5, 0x17, 0x48, - 0xcb, 0x73, 0x68, 0x46, 0x68, 0x39, 0x9a, 0x76, 0x3b, 0x9a, 0xf6, 0x10, 0xb4, 0xd8, 0x7c, 0xcf, - 0x1b, 0x6a, 0xa3, 0x96, 0x7e, 0x81, 0xb4, 0xfc, 0x14, 0x3a, 0xad, 0x6a, 0x59, 0xe6, 0x21, 0x5f, - 0x09, 0xe7, 0x39, 0xc4, 0x8b, 0x3c, 0xc1, 0x73, 0x86, 0x3a, 0x42, 0x21, 0xa3, 0xdd, 0x8b, 0xa7, - 0x7a, 0xf4, 0x81, 0xb0, 0x2a, 0x43, 0xf1, 0x29, 0x06, 0x1e, 0x5e, 0x31, 0xfa, 0x44, 0x4d, 0xd6, - 0x4e, 0x1b, 0x7d, 0xe3, 0x10, 0x9f, 0x27, 0xfd, 0xeb, 0xda, 0xa2, 0xd8, 0x3f, 0x65, 0x49, 0xc2, - 0xc5, 0x01, 0xcc, 0x94, 0xfe, 0x62, 0x04, 0x26, 0x63, 0x51, 0xcd, 0xd0, 0x6e, 0x48, 0x5f, 0x8b, - 0x46, 0xaf, 0x38, 0x8b, 0xda, 0x92, 0xd1, 0x33, 0xe4, 0xa1, 0xbe, 0x44, 0xc0, 0xa8, 0xea, 0xd3, - 0x14, 0x0c, 0xb7, 0xdb, 0x88, 0xec, 0x7b, 0x98, 0x4c, 0x76, 0x43, 0xba, 0x4b, 0x74, 0x24, 0x0f, - 0x79, 0xc9, 0xe8, 0x1d, 0x62, 0x90, 0x75, 0xa4, 0xa5, 0x75, 0xb4, 0x2f, 0xd2, 0xe3, 0x8a, 0xd1, - 0x27, 0x1c, 0x21, 0xc1, 0x70, 0xef, 0x68, 0x82, 0xfa, 0xd3, 0xa4, 0xc7, 0x25, 0xb4, 0xa0, 0xe8, - 0x31, 0xa2, 0xd3, 0x8f, 0x23, 0x3a, 0x5d, 0x32, 0x7a, 0xc6, 0x0d, 0xd4, 0x96, 0x8d, 0xde, 0x01, - 0xfd, 0xf4, 0xe7, 0x48, 0x8f, 0x97, 0xd0, 0x85, 0x5e, 0x3d, 0xca, 0xf4, 0xfb, 0x28, 0xa4, 0xdf, - 0x04, 0x7e, 0x65, 0x3a, 0x5e, 0x32, 0x7a, 0xc7, 0xe2, 0x63, 0x7d, 0x5f, 0x3c, 0x44, 0xdf, 0xdf, - 0x57, 0xec, 0xbf, 0x67, 0x8d, 0x81, 0x02, 0xfa, 0x69, 0xe7, 0x8c, 0x01, 0x03, 0xed, 0x19, 0x04, - 0xae, 0xf3, 0xda, 0x53, 0x2a, 0xb8, 0x14, 0x5b, 0xf0, 0xff, 0xc8, 0x43, 0x81, 0x87, 0x37, 0x42, - 0x66, 0x48, 0xe6, 0x73, 0x86, 0x32, 0xbe, 0x9a, 0x36, 0x6f, 0xa8, 0xe3, 0x9e, 0xe9, 0xf3, 0xa4, - 0xdf, 0x29, 0xbd, 0x8c, 0xfb, 0xe5, 0x51, 0x7f, 0x30, 0xa1, 0x59, 0x22, 0xa1, 0x9d, 0x34, 0xd2, - 0xe2, 0x9d, 0x69, 0x9a, 0x91, 0x1a, 0xae, 0x8c, 0xef, 0xb3, 0x68, 0x56, 0x6c, 0x3c, 0xa2, 0xa9, - 0x6f, 0x64, 0x22, 0xa2, 0x4a, 0x8b, 0xf4, 0xa4, 0x55, 0x8d, 0x94, 0x68, 0x61, 0xfa, 0x75, 0xd2, - 0xfa, 0xe7, 0xd1, 0x2b, 0xca, 0xd6, 0xa5, 0x39, 0xbc, 0xf2, 0x51, 0xec, 0x44, 0xe8, 0xe3, 0x2b, - 0x1f, 0x05, 0x07, 0x1d, 0xfb, 0x63, 0x8c, 0x3a, 0xb6, 0x70, 0x23, 0xd4, 0xc9, 0x53, 0x38, 0x6f, - 0xa4, 0x84, 0xf9, 0x62, 0xa8, 0xd3, 0x12, 0xa8, 0xb3, 0x43, 0x62, 0x8d, 0xda, 0x94, 0xa9, 0x74, - 0xde, 0x48, 0x09, 0xe5, 0x25, 0x6d, 0xa4, 0xbd, 0xc7, 0x84, 0x5a, 0x50, 0x16, 0x03, 0x5b, 0xa1, - 0x05, 0xa3, 0x47, 0x10, 0x30, 0x6d, 0xd1, 0xe8, 0x19, 0x0d, 0x6b, 0x85, 0x74, 0xac, 0xe9, 0xf2, - 0x54, 0xb1, 0x48, 0x1d, 0x84, 0xbf, 0xfe, 0x34, 0x07, 0xc5, 0x30, 0x9e, 0x0c, 0x7a, 0x27, 0x24, - 0x39, 0x21, 0x18, 0x94, 0x4c, 0x73, 0x55, 0x23, 0x2d, 0x50, 0x52, 0x95, 0x74, 0x86, 0xf4, 0x71, - 0xd6, 0x19, 0x2d, 0x44, 0x05, 0x3c, 0x81, 0xea, 0xb4, 0xf4, 0x60, 0x48, 0xda, 0x29, 0x23, 0x3d, - 0xc0, 0x11, 0x67, 0xa2, 0x68, 0x4e, 0x6a, 0x3f, 0x22, 0xbc, 0x07, 0x11, 0xdd, 0x55, 0x8d, 0x94, - 0xf0, 0x45, 0xda, 0x49, 0x23, 0x2d, 0x00, 0x91, 0x7e, 0x89, 0xb4, 0x7f, 0x06, 0x3d, 0xa5, 0x6e, - 0x5f, 0x9e, 0xa6, 0x77, 0x42, 0x0a, 0x13, 0x30, 0x25, 0x93, 0x58, 0xd5, 0x48, 0x0b, 0x0d, 0xc4, - 0x30, 0xa5, 0x25, 0x31, 0xb5, 0x17, 0x12, 0x99, 0xd0, 0xac, 0x4c, 0x65, 0x55, 0x23, 0x2d, 0xfe, - 0x0f, 0x1b, 0xc0, 0xc5, 0x41, 0x06, 0xb0, 0xfa, 0xef, 0x46, 0xb9, 0xb4, 0x1f, 0x06, 0x1c, 0x48, - 0x4a, 0xfb, 0xca, 0x38, 0x42, 0xa1, 0xd8, 0x98, 0x12, 0xd5, 0x47, 0x21, 0xed, 0xf3, 0xfb, 0xf4, - 0x6a, 0x69, 0x5f, 0x19, 0xfc, 0x27, 0xd1, 0x4b, 0x7f, 0x69, 0x5f, 0xec, 0x45, 0x29, 0xed, 0xa7, - 0x05, 0xdb, 0x09, 0xa5, 0xfd, 0xd4, 0x80, 0x32, 0x2a, 0x69, 0x9f, 0x77, 0x97, 0xa2, 0xc8, 0xf6, - 0x0a, 0x1e, 0x13, 0x4a, 0xfb, 0x29, 0x51, 0x5d, 0x64, 0x45, 0x36, 0xa5, 0xbb, 0x74, 0x45, 0xb6, - 0x47, 0x3c, 0x97, 0x04, 0x5a, 0x7b, 0x29, 0xb2, 0x03, 0x75, 0xec, 0x43, 0x81, 0xf3, 0x1e, 0x14, - 0x1f, 0x56, 0x2c, 0x4e, 0x8b, 0xb6, 0x6c, 0xf4, 0x89, 0xb4, 0x72, 0x96, 0x74, 0xbf, 0xa2, 0xab, - 0xd0, 0x2c, 0xb0, 0xad, 0x14, 0xed, 0x79, 0x90, 0x18, 0x2d, 0xda, 0x59, 0x63, 0xb0, 0xd8, 0x29, - 0x92, 0xf6, 0x1c, 0x03, 0x45, 0xb1, 0x75, 0xd7, 0x61, 0x8c, 0x45, 0x44, 0x41, 0x5f, 0x12, 0xa5, - 0x7f, 0x65, 0xfc, 0x15, 0x6d, 0x3e, 0x25, 0x7c, 0x8a, 0xac, 0x57, 0xb4, 0x68, 0x99, 0x10, 0xf1, - 0xab, 0xff, 0x20, 0x0f, 0xa3, 0x14, 0x7a, 0x74, 0x27, 0x5c, 0xac, 0x33, 0xaa, 0x3b, 0xf9, 0xda, - 0xac, 0xa1, 0xbc, 0x10, 0x3f, 0x4b, 0xda, 0x9f, 0xd4, 0x21, 0x1a, 0x15, 0xc6, 0xe7, 0x9d, 0x70, - 0x51, 0xf2, 0xd6, 0x64, 0xa4, 0xcd, 0x1a, 0xca, 0x2b, 0xe9, 0xac, 0x35, 0x2d, 0xd6, 0xda, 0x07, - 0xe2, 0xe2, 0x9b, 0x37, 0xd4, 0xb7, 0xd6, 0xb5, 0xaa, 0x91, 0x72, 0xaf, 0x5c, 0x3f, 0x45, 0x9a, - 0x9d, 0x45, 0xd3, 0x51, 0xb3, 0xd1, 0x22, 0xfb, 0x4a, 0x84, 0x5d, 0x0e, 0x55, 0x0c, 0xb9, 0x73, - 0x86, 0xf2, 0x6a, 0xb7, 0xae, 0x93, 0x66, 0x17, 0x90, 0xa6, 0x68, 0x96, 0x2b, 0x3d, 0x5f, 0x0e, - 0x97, 0x11, 0x47, 0x84, 0xbc, 0x7c, 0x66, 0x0d, 0xe5, 0xd5, 0x6a, 0xd6, 0xf4, 0xc5, 0x5e, 0x4d, - 0xfb, 0x2a, 0x75, 0xea, 0xa4, 0x91, 0xaa, 0x47, 0x69, 0x46, 0xba, 0x02, 0x75, 0x8e, 0xf4, 0x77, - 0x5a, 0x5b, 0x10, 0xfa, 0x53, 0xea, 0x4f, 0xff, 0x36, 0x07, 0x63, 0xec, 0xb2, 0x96, 0xa4, 0x97, - 0xab, 0x2e, 0x24, 0x6a, 0x73, 0x86, 0xfa, 0x06, 0xa1, 0xa4, 0x97, 0xb3, 0xab, 0x65, 0x71, 0xbd, - 0x5c, 0x75, 0xc5, 0x30, 0x6a, 0xb0, 0x97, 0x5e, 0x2e, 0x34, 0x18, 0xd3, 0xcb, 0x53, 0xae, 0x14, - 0x92, 0x4d, 0x5c, 0x7d, 0xe7, 0x4f, 0x5e, 0x3f, 0xac, 0xe5, 0x88, 0x76, 0x6a, 0xe2, 0xca, 0x54, - 0x5e, 0xd9, 0x23, 0x42, 0x9c, 0xea, 0xd2, 0x9d, 0xbc, 0x03, 0xc4, 0x5b, 0xe6, 0x73, 0x2c, 0x6a, - 0xe4, 0xaa, 0x8b, 0x77, 0x11, 0x46, 0x7a, 0x69, 0xe4, 0x29, 0xad, 0xaf, 0xfe, 0x7e, 0x0e, 0xca, - 0xe2, 0xdd, 0x2d, 0xf4, 0x4b, 0xe1, 0x8c, 0x6a, 0x46, 0xea, 0xcd, 0x3b, 0xed, 0x94, 0xd1, 0xe3, - 0x16, 0x1d, 0x5b, 0x6b, 0x7a, 0x05, 0x77, 0x2c, 0xde, 0x2c, 0x4b, 0x08, 0x6e, 0x8b, 0x46, 0xaf, - 0xeb, 0x76, 0xda, 0x92, 0xd1, 0xf3, 0xb6, 0x1d, 0x17, 0x7a, 0x50, 0xa2, 0x23, 0xd1, 0x5a, 0x22, - 0x83, 0x1a, 0x9b, 0x9a, 0x05, 0xa3, 0xc7, 0x0d, 0x3a, 0x7d, 0x99, 0xb4, 0x7f, 0x12, 0xcd, 0xc7, - 0xdb, 0xe7, 0x73, 0xb3, 0x1d, 0xce, 0x8d, 0x8c, 0x2c, 0x79, 0x82, 0x4e, 0x19, 0x3d, 0x6e, 0xc7, - 0xb1, 0x3e, 0x2e, 0xa6, 0xf5, 0xb1, 0xfa, 0xdb, 0x79, 0x18, 0xa1, 0x81, 0x67, 0x6e, 0x85, 0x53, - 0x83, 0x8c, 0xc4, 0x8d, 0x3a, 0x6d, 0xda, 0x50, 0x5c, 0x79, 0x9b, 0x26, 0xad, 0x8f, 0xeb, 0x05, - 0x42, 0x03, 0xcc, 0x6c, 0x79, 0x2b, 0x5c, 0x63, 0xb4, 0x1d, 0x79, 0x81, 0x4d, 0x1b, 0x8a, 0x1b, - 0x6b, 0xac, 0x1d, 0x4d, 0x6a, 0xe7, 0x1d, 0x71, 0x2a, 0x67, 0x0d, 0xd5, 0x95, 0x36, 0x4c, 0x9c, - 0x4a, 0x53, 0xe7, 0x49, 0xd2, 0xe0, 0x34, 0x9a, 0xe2, 0x0d, 0x2a, 0xb9, 0x31, 0x85, 0x25, 0x36, - 0x67, 0x33, 0x86, 0xe2, 0xfa, 0x19, 0xdf, 0xe6, 0xd1, 0x52, 0xa2, 0x41, 0x59, 0xb6, 0x88, 0xb8, - 0x31, 0x1d, 0xbc, 0x3c, 0x55, 0xd3, 0x86, 0xe2, 0x42, 0x19, 0x6b, 0xfa, 0x62, 0xbf, 0xa6, 0xbf, - 0x96, 0x14, 0x20, 0x4e, 0x19, 0xe9, 0x37, 0xd1, 0xb4, 0x05, 0xa3, 0xd7, 0x0d, 0x31, 0xb6, 0x7c, - 0xb5, 0x6a, 0xd8, 0xab, 0x42, 0x44, 0xb8, 0x07, 0x63, 0xdc, 0xad, 0xf7, 0x3a, 0xe4, 0x5e, 0xb7, - 0x03, 0x84, 0x8c, 0xc4, 0x6d, 0x2d, 0x6d, 0xda, 0x48, 0x5e, 0xd6, 0xe2, 0x53, 0x8a, 0x08, 0xc3, - 0x64, 0xde, 0xc2, 0xab, 0x7f, 0x90, 0x83, 0x31, 0x76, 0x03, 0x00, 0xbd, 0x03, 0x05, 0x7e, 0x23, - 0x09, 0xcd, 0x1b, 0xea, 0xfb, 0x5a, 0x5a, 0xd5, 0x48, 0xbb, 0xbc, 0x24, 0x71, 0x78, 0x76, 0x71, - 0x00, 0x53, 0x8d, 0x24, 0xca, 0x28, 0x2f, 0x15, 0x69, 0xf3, 0x86, 0xfa, 0xf2, 0x90, 0xcc, 0x8a, - 0x59, 0x9b, 0x11, 0xe1, 0x88, 0x7b, 0x87, 0xea, 0xde, 0x94, 0x36, 0x67, 0xa8, 0x6f, 0x37, 0x49, - 0x7b, 0x87, 0x00, 0xea, 0x0f, 0x33, 0xb0, 0x14, 0x92, 0x6e, 0xec, 0x62, 0xc4, 0xeb, 0xf4, 0xee, - 0xc3, 0xa2, 0xd1, 0xeb, 0xae, 0x87, 0xb6, 0x64, 0xf4, 0xbc, 0x8e, 0xa1, 0xbf, 0x40, 0x7a, 0x36, - 0xd0, 0x33, 0xaa, 0x01, 0xf1, 0x84, 0x1a, 0xbd, 0xb9, 0x15, 0xde, 0x31, 0x5b, 0xfd, 0xcf, 0x59, - 0x98, 0x94, 0x5d, 0xc5, 0xfc, 0xb8, 0x76, 0xd2, 0xdb, 0x39, 0x5f, 0x5b, 0xe9, 0xe7, 0x48, 0x2c, - 0xef, 0x4d, 0x2d, 0x5a, 0x38, 0x61, 0x94, 0x6e, 0x89, 0xda, 0x49, 0x2f, 0xd7, 0x50, 0x6d, 0xc9, - 0xe8, 0xe9, 0x77, 0x39, 0x58, 0x77, 0x7b, 0x30, 0xc6, 0x7c, 0xe2, 0x12, 0xdd, 0xc9, 0xde, 0x7e, - 0x89, 0xee, 0xe2, 0xae, 0x74, 0x92, 0x99, 0x56, 0xee, 0xce, 0xc7, 0xeb, 0xea, 0xaf, 0x65, 0xa0, - 0xc2, 0x4f, 0x9a, 0xdf, 0x76, 0x5a, 0xf6, 0x1d, 0xa7, 0x6d, 0x23, 0x4f, 0xb6, 0x74, 0xa5, 0xb9, - 0xcc, 0x69, 0x5a, 0xba, 0x0b, 0x19, 0x37, 0xdf, 0xa1, 0xb3, 0xea, 0x4d, 0xb9, 0x61, 0x1d, 0xf8, - 0xc4, 0x08, 0x45, 0xdd, 0xdc, 0x3e, 0x5e, 0xfd, 0xdf, 0x39, 0xc8, 0x9b, 0x6e, 0xd3, 0x96, 0x99, - 0xbf, 0xab, 0x60, 0xfe, 0x6e, 0x1f, 0xe6, 0xef, 0xaa, 0x99, 0xb6, 0xab, 0x66, 0xda, 0x6e, 0x7f, - 0xa6, 0xed, 0xa6, 0x33, 0x6d, 0x57, 0xc5, 0xb4, 0xdd, 0x7e, 0x4c, 0xdb, 0x4d, 0xe5, 0xac, 0xd2, - 0x8e, 0xe5, 0x2a, 0x76, 0x2c, 0xb7, 0xcf, 0x8e, 0xc5, 0x06, 0x2f, 0x31, 0x7f, 0x57, 0xc1, 0xfc, - 0xdd, 0x3e, 0xcc, 0x3f, 0x1d, 0xc4, 0xfb, 0x92, 0x6b, 0xca, 0x9c, 0xa1, 0xf4, 0xb9, 0xc1, 0xa2, - 0xa0, 0xd2, 0x65, 0x46, 0xaf, 0x90, 0x6e, 0x00, 0x85, 0xe0, 0xae, 0xff, 0x30, 0xf3, 0xfd, 0x35, - 0xe7, 0xfd, 0x2f, 0xc3, 0x7b, 0x30, 0xba, 0x6d, 0x5b, 0x9e, 0xed, 0xa1, 0xbb, 0x85, 0x2c, 0x7a, - 0x79, 0x4d, 0x7a, 0xab, 0x64, 0x85, 0xf8, 0xef, 0x3f, 0xb3, 0xd2, 0xf1, 0xec, 0x1d, 0xe7, 0xa1, - 0xdd, 0x58, 0xd9, 0x3e, 0x58, 0x59, 0x27, 0xa5, 0xaf, 0xb1, 0xdf, 0x95, 0x57, 0x49, 0x91, 0xd7, - 0xb4, 0x71, 0x5c, 0xd3, 0xf5, 0x98, 0x74, 0xb1, 0x92, 0xdd, 0x2e, 0x03, 0x84, 0x4d, 0x9f, 0xf8, - 0x3f, 0xff, 0x75, 0x29, 0xf3, 0x77, 0x7f, 0xbc, 0x94, 0xf9, 0xa7, 0x3f, 0x5e, 0xca, 0xfc, 0xc9, - 0x8f, 0x97, 0x32, 0x3f, 0xfa, 0xf1, 0x52, 0xe6, 0xbf, 0xfc, 0x78, 0x29, 0xf3, 0xbd, 0x9f, 0x2c, - 0x9d, 0xf8, 0xd1, 0x4f, 0x96, 0x4e, 0xfc, 0xd9, 0x4f, 0x96, 0x4e, 0xbc, 0x9f, 0xb3, 0x3a, 0xce, - 0xf6, 0x28, 0xf1, 0xdb, 0x78, 0xfe, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x86, 0xd2, 0xb5, 0xdb, - 0xe6, 0xc6, 0x00, 0x00, + // 11429 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6b, 0x6c, 0x24, 0xc7, + 0x99, 0xd8, 0xce, 0x83, 0xe4, 0xcc, 0x37, 0x43, 0x72, 0x58, 0x7c, 0xcd, 0xf6, 0xf2, 0xb5, 0x2d, + 0xed, 0x5b, 0xdb, 0x2b, 0x51, 0x5a, 0x69, 0xbd, 0x92, 0x65, 0x93, 0xfb, 0xd0, 0x52, 0xda, 0x97, + 0x9a, 0xbb, 0xd2, 0x59, 0x3a, 0xdc, 0xa0, 0x39, 0xd3, 0x24, 0x5b, 0x3b, 0x33, 0x3d, 0xee, 0xee, + 0xa1, 0x96, 0x52, 0x94, 0x3b, 0x3f, 0x2e, 0x0e, 0x8c, 0x8b, 0xe3, 0xd8, 0x70, 0x8c, 0x3b, 0xdf, + 0xe1, 0x80, 0xbb, 0x1f, 0x09, 0x10, 0x04, 0x49, 0x70, 0x01, 0x92, 0xdc, 0x05, 0x41, 0xfe, 0x24, + 0x39, 0x04, 0xc8, 0xc1, 0x40, 0x10, 0xe0, 0x7e, 0x04, 0x9b, 0xc4, 0x0e, 0x60, 0x40, 0x87, 0x20, + 0x88, 0x2e, 0x48, 0xf2, 0x33, 0xa8, 0x57, 0x77, 0x55, 0x77, 0xf5, 0xcc, 0x90, 0x43, 0xaf, 0x1c, + 0xc4, 0xbf, 0x66, 0xba, 0x9e, 0x5f, 0x55, 0x7d, 0xf5, 0xbd, 0xea, 0xab, 0xaf, 0x60, 0xb6, 0xf3, + 0x68, 0xe7, 0x92, 0xd5, 0x71, 0xfc, 0x4b, 0x7b, 0x2f, 0xe0, 0x5f, 0xa3, 0xe3, 0xb9, 0x81, 0xab, + 0x2d, 0xec, 0xb8, 0xee, 0x4e, 0xd3, 0xc6, 0x29, 0x97, 0xac, 0x76, 0xdb, 0x0d, 0xac, 0xc0, 0x71, + 0xdb, 0x3e, 0xcb, 0x5d, 0x66, 0xb9, 0xe4, 0x6b, 0xab, 0xbb, 0x7d, 0x29, 0x70, 0x5a, 0xb6, 0x1f, + 0x58, 0xad, 0x0e, 0x2b, 0x70, 0x71, 0xc7, 0x09, 0x76, 0xbb, 0x5b, 0x46, 0xdd, 0x6d, 0x5d, 0xda, + 0x71, 0x77, 0xdc, 0xa8, 0x24, 0xfe, 0x22, 0x1f, 0xe4, 0x1f, 0x2b, 0x5e, 0x15, 0x81, 0xa8, 0xbb, + 0xad, 0x96, 0xdb, 0x66, 0x39, 0xf4, 0xa7, 0x7e, 0x71, 0xc7, 0x6e, 0x5f, 0x74, 0x3b, 0x76, 0xdb, + 0xea, 0x38, 0x7b, 0xab, 0x97, 0xdc, 0x0e, 0x81, 0x26, 0x09, 0x99, 0xbe, 0x06, 0xe8, 0x9e, 0xb7, + 0x63, 0xb5, 0x9d, 0x8f, 0x48, 0xf2, 0xbd, 0xad, 0x0f, 0xec, 0x7a, 0x80, 0x2e, 0x40, 0xa1, 0x65, + 0x07, 0x56, 0xc3, 0x0a, 0xac, 0x6a, 0x66, 0x25, 0x73, 0xb6, 0xb4, 0x5a, 0x34, 0xee, 0xb0, 0x84, + 0xf5, 0xfc, 0x8f, 0x9f, 0x2c, 0x67, 0xcc, 0xb0, 0x80, 0xfe, 0xc3, 0x12, 0x94, 0xae, 0x35, 0xbb, + 0x7e, 0x60, 0x7b, 0x1b, 0xed, 0x6d, 0x17, 0xbd, 0x04, 0xc5, 0xce, 0xe3, 0x5a, 0xdd, 0x6d, 0x6f, + 0x3b, 0x3b, 0x61, 0xed, 0xfb, 0xbf, 0x72, 0x8d, 0x24, 0xac, 0x97, 0x3f, 0x7d, 0xb2, 0x5c, 0xe8, + 0x3c, 0xa6, 0xd9, 0x66, 0xa1, 0xf3, 0x98, 0xa6, 0xa3, 0x2f, 0x01, 0x3c, 0xea, 0x6e, 0xd9, 0xac, + 0x5a, 0x76, 0x25, 0x73, 0xb6, 0xb8, 0xbe, 0xfc, 0xe9, 0x93, 0x65, 0x21, 0xf5, 0xb3, 0x27, 0xcb, + 0xe3, 0xbe, 0x5d, 0xef, 0x7a, 0xf6, 0x55, 0x3d, 0xf0, 0xba, 0xb6, 0x6e, 0x0a, 0x99, 0xe8, 0x1c, + 0x54, 0xea, 0x4d, 0xb7, 0xdb, 0xa8, 0xd5, 0x3d, 0xbb, 0x61, 0xb7, 0x03, 0xc7, 0x6a, 0x56, 0x73, + 0xb8, 0x19, 0x73, 0x92, 0xa4, 0x5f, 0x0b, 0x93, 0xd1, 0x25, 0x18, 0xf5, 0x03, 0x2b, 0xe8, 0xfa, + 0xd5, 0x3c, 0x01, 0x6f, 0xde, 0x10, 0xe0, 0x37, 0x36, 0x49, 0x16, 0xfe, 0x6b, 0xb2, 0x62, 0xe8, + 0x14, 0x4c, 0x34, 0xec, 0xa6, 0x1d, 0xd8, 0xb5, 0x2d, 0xab, 0xfe, 0xa8, 0xdb, 0xf1, 0xab, 0x23, + 0x2b, 0x99, 0xb3, 0x05, 0x73, 0x9c, 0xa6, 0xae, 0xd3, 0x44, 0x74, 0x06, 0x26, 0x59, 0x31, 0xcf, + 0xf6, 0x03, 0xd7, 0xb3, 0xfd, 0xea, 0x28, 0x29, 0xc7, 0x6a, 0x9b, 0x2c, 0x15, 0x3d, 0x03, 0xe3, + 0xf8, 0xdf, 0xa3, 0xda, 0x9e, 0xed, 0xf9, 0x8e, 0xdb, 0xae, 0x8e, 0x11, 0x40, 0xcb, 0x24, 0xf1, + 0x1d, 0x9a, 0x86, 0x5e, 0x83, 0x99, 0xf8, 0x80, 0x6a, 0x9e, 0xbd, 0x5d, 0x2d, 0x10, 0x98, 0xc1, + 0xa0, 0x6b, 0x65, 0xda, 0xdb, 0x26, 0x8a, 0x0d, 0xd0, 0xb4, 0xb7, 0xd1, 0xcb, 0x50, 0xb1, 0x1a, + 0x0d, 0x06, 0x6f, 0xcd, 0xdf, 0xb5, 0x3c, 0xbb, 0x5a, 0x24, 0x35, 0xcb, 0x06, 0x85, 0x77, 0x13, + 0xa7, 0x99, 0x13, 0x56, 0xa3, 0x21, 0x7c, 0xe3, 0x7a, 0x0d, 0xbb, 0x29, 0xd7, 0x03, 0x55, 0xbd, + 0x86, 0xdd, 0x14, 0xeb, 0xbd, 0x0f, 0x55, 0xb1, 0x4e, 0x8d, 0xce, 0x5c, 0xcd, 0x69, 0x6f, 0xbb, + 0xd5, 0x12, 0xa9, 0xaf, 0x4b, 0xb3, 0x2c, 0xd4, 0x15, 0x26, 0x7c, 0x76, 0x4b, 0x95, 0x8c, 0xce, + 0x42, 0xc5, 0xfd, 0xb0, 0x6d, 0x7b, 0xb5, 0x1d, 0xcf, 0xed, 0x76, 0x6a, 0x4d, 0xc7, 0x0f, 0xaa, + 0xe5, 0x95, 0xdc, 0xd9, 0xa2, 0x39, 0x41, 0xd2, 0xdf, 0xc0, 0xc9, 0xb7, 0x1d, 0x3f, 0x40, 0xeb, + 0x30, 0xdf, 0x69, 0x5a, 0xc1, 0xb6, 0xeb, 0xb5, 0xe2, 0xf3, 0x36, 0x9e, 0x98, 0xb7, 0x59, 0x5e, + 0x54, 0x9e, 0x3a, 0x03, 0xa6, 0x03, 0xbb, 0x69, 0x77, 0x5c, 0x2f, 0xa8, 0xd5, 0x29, 0xc8, 0x35, + 0xa7, 0x51, 0x9d, 0x20, 0x6b, 0x34, 0xc5, 0xb3, 0xf8, 0x60, 0x1a, 0xe8, 0x04, 0x14, 0x03, 0xbb, + 0x6d, 0xb5, 0x03, 0x5c, 0x6a, 0x92, 0x94, 0x2a, 0xd0, 0x84, 0x8d, 0x06, 0xba, 0x09, 0xe3, 0xbe, + 0xed, 0xed, 0x39, 0x75, 0xbb, 0x16, 0xb8, 0x8f, 0xec, 0x76, 0xb5, 0x42, 0x50, 0xfb, 0xe4, 0xa7, + 0x4f, 0x96, 0xcb, 0x2c, 0x83, 0xa4, 0x27, 0x91, 0x9b, 0x67, 0x3f, 0xc0, 0xd9, 0xe8, 0x05, 0x28, + 0x74, 0x3c, 0x77, 0xcf, 0x69, 0xd8, 0x5e, 0x75, 0x6a, 0x25, 0x73, 0x76, 0x62, 0x75, 0x56, 0x9a, + 0xcf, 0xfb, 0x2c, 0xd3, 0x0c, 0x8b, 0xa1, 0x65, 0x28, 0x3d, 0xba, 0xe2, 0x87, 0x38, 0x86, 0x08, + 0x64, 0xf0, 0xe8, 0x8a, 0xcf, 0x30, 0x4c, 0xfb, 0x57, 0x19, 0x00, 0x61, 0x96, 0x5f, 0x0e, 0xb7, + 0x45, 0x86, 0x74, 0xb0, 0x94, 0xb2, 0x2d, 0xd8, 0xdf, 0x70, 0x77, 0xcc, 0xc1, 0xa8, 0x67, 0x5b, + 0xbe, 0xdb, 0xa6, 0xdb, 0xd6, 0x64, 0x5f, 0xfa, 0x0e, 0x8c, 0xd2, 0x92, 0xa8, 0x04, 0x63, 0x1b, + 0xed, 0x3d, 0xab, 0xe9, 0x34, 0x2a, 0xc7, 0x10, 0xc0, 0xe8, 0xbd, 0x76, 0xd3, 0x69, 0xdb, 0x95, + 0x0c, 0xce, 0xb8, 0xb7, 0xbd, 0x4d, 0x3e, 0xb2, 0x68, 0x0a, 0xc6, 0xaf, 0x93, 0x7d, 0x72, 0xdf, + 0x6e, 0x37, 0x9c, 0xf6, 0x4e, 0x25, 0x87, 0xf3, 0xf9, 0x47, 0x1e, 0x57, 0xbc, 0x69, 0x39, 0x4d, + 0xbb, 0x51, 0x19, 0xc1, 0x19, 0x9b, 0xdd, 0x7a, 0xdd, 0xf6, 0xfd, 0xca, 0xa8, 0xf6, 0xaf, 0x33, + 0x30, 0xab, 0xc4, 0x27, 0xb4, 0x16, 0x1b, 0xd2, 0xb9, 0xfe, 0x38, 0x38, 0xe8, 0xe8, 0x4c, 0xf5, + 0xe8, 0x26, 0x00, 0x36, 0xda, 0xf7, 0x3d, 0x77, 0xc7, 0xc3, 0xb0, 0x65, 0x04, 0xa0, 0xb3, 0x22, + 0xd0, 0x39, 0x84, 0x60, 0xe2, 0xbe, 0xe5, 0x61, 0x9c, 0xe3, 0x69, 0x79, 0xfd, 0x0e, 0x14, 0xf8, + 0x3a, 0xca, 0xad, 0x8e, 0x41, 0x6e, 0xed, 0xdd, 0xcd, 0x4a, 0x06, 0x15, 0x61, 0x64, 0xed, 0xa3, + 0xae, 0x87, 0xa7, 0x0b, 0x60, 0xf4, 0x0d, 0xc2, 0x56, 0x2a, 0x39, 0x9c, 0xbf, 0xb1, 0x7e, 0xa7, + 0x92, 0xc7, 0xb5, 0x4c, 0xab, 0x5d, 0xdf, 0xb5, 0xbd, 0xca, 0x88, 0xfe, 0xb5, 0x0c, 0x8c, 0xb3, + 0xf1, 0x1e, 0x82, 0xb0, 0xa3, 0x6b, 0x50, 0xaa, 0x47, 0xb3, 0x45, 0x86, 0x8f, 0xa9, 0x80, 0x30, + 0x83, 0xeb, 0xd3, 0xb8, 0xca, 0xa7, 0x4f, 0x96, 0x79, 0x41, 0xbc, 0xdd, 0x4d, 0xb1, 0x96, 0xfe, + 0x3a, 0x14, 0x38, 0xed, 0x47, 0xab, 0x50, 0xb6, 0xc8, 0x50, 0xd9, 0x56, 0xc8, 0x90, 0xad, 0x30, + 0x89, 0xeb, 0xd3, 0x74, 0x92, 0x6c, 0xb2, 0x0f, 0x82, 0xf7, 0xfa, 0x63, 0x28, 0xae, 0xbd, 0xbb, + 0xc9, 0x1a, 0x78, 0x0e, 0x80, 0x35, 0xf0, 0xc8, 0xde, 0x67, 0xd5, 0xc7, 0x3f, 0x7d, 0xb2, 0x5c, + 0xa4, 0xa9, 0x8f, 0xec, 0x7d, 0x93, 0xfd, 0x7d, 0xcb, 0xde, 0x47, 0x5f, 0x04, 0xf0, 0xed, 0xba, + 0x67, 0x07, 0xa4, 0x34, 0x65, 0x29, 0x4b, 0xb8, 0x34, 0x4d, 0x7d, 0x64, 0xef, 0x27, 0x37, 0x1d, + 0xcb, 0x7b, 0xcb, 0xde, 0xd7, 0xd7, 0xa1, 0xb8, 0xb1, 0x7e, 0x87, 0xf5, 0x7c, 0x19, 0xc6, 0xac, + 0x8e, 0x23, 0x74, 0xbb, 0xf0, 0xe9, 0x93, 0x65, 0x9e, 0x94, 0x6c, 0x66, 0xd4, 0xea, 0x38, 0xb8, + 0x8d, 0x47, 0x30, 0xce, 0x96, 0x83, 0xb5, 0x73, 0x16, 0x0a, 0x76, 0xbb, 0xd1, 0x71, 0x9d, 0x76, + 0xc0, 0x1a, 0x22, 0x0c, 0x91, 0xa7, 0x99, 0xe1, 0x3f, 0xf4, 0x3c, 0x8c, 0xd0, 0x59, 0xa2, 0x80, + 0x6b, 0x9f, 0x3e, 0x59, 0x1e, 0x49, 0xa1, 0x14, 0x34, 0x5d, 0xff, 0x51, 0x1e, 0x0a, 0x9b, 0x2f, + 0xb2, 0x8e, 0xb4, 0x78, 0x47, 0x42, 0xd3, 0x04, 0xa5, 0x77, 0x1c, 0x11, 0xa5, 0xf1, 0x17, 0x26, + 0x18, 0x0d, 0xc7, 0xb7, 0xb6, 0x9a, 0x76, 0xcd, 0xf7, 0x29, 0xf7, 0x2c, 0x98, 0xc0, 0x92, 0x36, + 0xfd, 0x26, 0x7a, 0x0e, 0x10, 0x2f, 0xd0, 0xb1, 0x82, 0xdd, 0x9a, 0x1f, 0xec, 0x37, 0x6d, 0xc2, + 0x44, 0x0b, 0x66, 0x85, 0xe5, 0xdc, 0xb7, 0x82, 0xdd, 0x4d, 0x9c, 0xce, 0xb9, 0x9c, 0xb5, 0x63, + 0xd7, 0xea, 0x4d, 0xcb, 0xa7, 0x4c, 0x93, 0x71, 0x39, 0x6b, 0xc7, 0xbe, 0x86, 0xd3, 0xf0, 0x84, + 0xf8, 0xbe, 0x5d, 0x0b, 0xf6, 0x3b, 0x36, 0x61, 0x96, 0x13, 0xab, 0xe3, 0x06, 0x1f, 0x84, 0xb1, + 0xe9, 0xdb, 0xe6, 0x98, 0xef, 0xdb, 0x0f, 0xf6, 0x3b, 0x36, 0x7a, 0x0b, 0xa6, 0x2c, 0x8c, 0xfa, + 0x35, 0xbb, 0xbd, 0xe7, 0x78, 0x6e, 0xbb, 0x65, 0xb7, 0x03, 0xc2, 0x38, 0x4b, 0xab, 0x4b, 0x51, + 0x15, 0xb2, 0x3b, 0x6e, 0x44, 0x25, 0x70, 0x55, 0xb3, 0x62, 0xc5, 0x52, 0xd1, 0x17, 0xe0, 0x38, + 0x6d, 0xcc, 0xb3, 0x7d, 0xb7, 0xeb, 0xd5, 0x6d, 0xc6, 0x5a, 0xda, 0x56, 0xcb, 0x26, 0x1c, 0xb6, + 0x68, 0xce, 0x91, 0x02, 0x26, 0xcb, 0x27, 0x2c, 0xe6, 0xae, 0xd5, 0xb2, 0xb5, 0x6f, 0x65, 0x60, + 0x46, 0xd5, 0x0b, 0x7a, 0x05, 0xf2, 0x64, 0x18, 0x94, 0xd4, 0x3c, 0xd3, 0x1b, 0x26, 0x83, 0x00, + 0x46, 0x2a, 0xe8, 0x2f, 0x43, 0x9e, 0x34, 0x20, 0x6d, 0xf9, 0x0a, 0x94, 0xd7, 0xde, 0x7b, 0x68, + 0xde, 0xa8, 0xbd, 0x71, 0xfb, 0xde, 0xfa, 0xda, 0xed, 0x4a, 0x06, 0x4d, 0x42, 0x89, 0xa6, 0x5c, + 0xbb, 0xb5, 0x71, 0x77, 0xad, 0x92, 0xd5, 0x2f, 0x40, 0x6e, 0xd3, 0xb7, 0x13, 0xd4, 0x75, 0x73, + 0xf3, 0x46, 0x6d, 0xf3, 0x45, 0x4a, 0x5d, 0xf1, 0xff, 0xb7, 0xee, 0x6c, 0x56, 0xb2, 0xfa, 0x6f, + 0xe4, 0xa0, 0x44, 0x00, 0x61, 0x08, 0x72, 0x92, 0x6c, 0x46, 0xb7, 0xdb, 0x0e, 0xe8, 0xa0, 0x29, + 0x92, 0x94, 0x58, 0x1a, 0x1e, 0x29, 0xfa, 0x32, 0xf0, 0x4f, 0x61, 0x07, 0x11, 0xa1, 0x8c, 0x25, + 0x2b, 0x71, 0x9f, 0x67, 0xe2, 0x2d, 0x78, 0x13, 0xc6, 0xeb, 0x4d, 0xc7, 0x6e, 0x07, 0x35, 0xba, + 0xaf, 0xa8, 0x44, 0x46, 0xb9, 0x1f, 0xcd, 0xa0, 0xe9, 0x0a, 0xee, 0x47, 0xb3, 0x37, 0x49, 0x36, + 0xba, 0x0a, 0x45, 0xd6, 0x8e, 0xd3, 0x20, 0xf8, 0x56, 0x5c, 0x5f, 0xc4, 0xfb, 0x86, 0x26, 0x3a, + 0x8d, 0x64, 0x7d, 0x96, 0xb5, 0xd1, 0xc0, 0x75, 0x23, 0xf6, 0x3c, 0x12, 0xd5, 0xa5, 0x89, 0xca, + 0xba, 0x21, 0xf7, 0xbe, 0x0d, 0x93, 0x7e, 0x77, 0xcb, 0xaf, 0x7b, 0x0e, 0x91, 0xa0, 0x71, 0x0b, + 0xa3, 0xa4, 0x85, 0x67, 0x3e, 0x7d, 0xb2, 0x3c, 0x21, 0x66, 0xa9, 0xda, 0x91, 0x0a, 0x6c, 0x34, + 0xf4, 0x6d, 0x28, 0x53, 0x8a, 0xcd, 0x96, 0x60, 0x11, 0xa0, 0xe3, 0xb9, 0x98, 0x30, 0xe3, 0x86, + 0xe9, 0x02, 0x14, 0x59, 0xca, 0x46, 0x03, 0xbd, 0x02, 0x85, 0x0f, 0x7c, 0xb7, 0x2d, 0xcc, 0x3d, + 0x21, 0x3a, 0x38, 0x4d, 0x39, 0xf1, 0x24, 0x07, 0x53, 0x9d, 0x1f, 0xe4, 0x60, 0xfa, 0x9a, 0x2c, + 0x12, 0x12, 0x6e, 0x78, 0x51, 0x42, 0xd0, 0xe3, 0x86, 0xa2, 0x8c, 0x80, 0x96, 0xe8, 0x02, 0x80, + 0xf5, 0xa1, 0xcf, 0x25, 0xf9, 0x06, 0x13, 0x9f, 0x42, 0x6a, 0x7c, 0xeb, 0x98, 0x59, 0xb4, 0x3e, + 0xf4, 0xd9, 0x58, 0x5e, 0x80, 0x32, 0xdd, 0x50, 0xac, 0xb8, 0xcd, 0xb8, 0x85, 0x80, 0x72, 0xb7, + 0x8e, 0x99, 0x25, 0x4b, 0xc0, 0xc0, 0x97, 0x60, 0x9c, 0xea, 0x45, 0xbc, 0xce, 0x36, 0xa9, 0x33, + 0x6e, 0x88, 0x93, 0x74, 0xeb, 0x98, 0x59, 0xde, 0x11, 0x27, 0xed, 0x02, 0x80, 0xb3, 0xd5, 0xe2, + 0x55, 0x76, 0x18, 0x54, 0x21, 0xa5, 0xc6, 0x50, 0x39, 0x5b, 0x2d, 0x56, 0xf8, 0x15, 0x98, 0xf0, + 0x28, 0xfd, 0xe5, 0x15, 0x76, 0x49, 0x85, 0x09, 0x43, 0x22, 0xcb, 0xb7, 0x8e, 0x99, 0xe3, 0x9e, + 0x98, 0xa0, 0x6f, 0xa8, 0xb6, 0xe4, 0xa1, 0xb8, 0xf0, 0x7a, 0x01, 0x46, 0x69, 0xdf, 0xfa, 0xef, + 0x64, 0x60, 0x36, 0x36, 0xe7, 0x8c, 0x2f, 0xbf, 0xd2, 0x8b, 0x2f, 0x57, 0x18, 0x93, 0x0d, 0x8b, + 0x08, 0x3c, 0xfa, 0x16, 0xcc, 0x26, 0x94, 0x04, 0x27, 0xe2, 0xd6, 0x33, 0xaa, 0x35, 0x36, 0xa7, + 0xeb, 0xc9, 0x44, 0xfd, 0x87, 0x05, 0x40, 0x9b, 0xf5, 0x5d, 0xbb, 0xd1, 0x6d, 0xda, 0xf7, 0xdd, + 0xa6, 0x53, 0xdf, 0x27, 0x38, 0xf3, 0x3a, 0x14, 0x9c, 0x76, 0x60, 0x7b, 0x7b, 0x56, 0x93, 0x41, + 0xa6, 0x1b, 0xc9, 0x62, 0xc6, 0x06, 0x2b, 0x43, 0x93, 0xcc, 0xb0, 0x0e, 0xba, 0x0c, 0x23, 0x0d, + 0xcb, 0x69, 0xee, 0x33, 0x80, 0x96, 0x55, 0x95, 0xaf, 0xe3, 0x02, 0xac, 0x26, 0x2d, 0x8d, 0xae, + 0xc0, 0xe8, 0x87, 0xb6, 0xfd, 0xa8, 0xb9, 0x4f, 0x28, 0x46, 0x69, 0x75, 0x45, 0x55, 0xef, 0x5d, + 0x52, 0x82, 0x55, 0x64, 0xe5, 0xd1, 0xab, 0x30, 0xd6, 0x72, 0xdb, 0xc1, 0x6e, 0x73, 0x9f, 0x69, + 0x77, 0x27, 0x55, 0x55, 0xef, 0xd0, 0x22, 0xac, 0x2e, 0xaf, 0x81, 0x35, 0x38, 0xae, 0xc5, 0xb0, + 0x3a, 0xd5, 0x11, 0xaa, 0x67, 0x30, 0xc5, 0x84, 0xa5, 0xa2, 0xd3, 0x30, 0xb9, 0xed, 0x7a, 0x35, + 0x97, 0x2c, 0x5f, 0xad, 0xe9, 0xd6, 0x1f, 0x31, 0x55, 0x6f, 0x7c, 0xdb, 0x65, 0xc2, 0xd6, 0x6d, + 0xb7, 0xfe, 0x08, 0xb3, 0x54, 0xab, 0x1b, 0xb8, 0x35, 0xaa, 0x00, 0x12, 0x76, 0x55, 0x30, 0x01, + 0x27, 0x51, 0x51, 0x57, 0x7b, 0x11, 0x2a, 0x1b, 0xed, 0xba, 0x67, 0x63, 0xbe, 0x60, 0x35, 0xaf, + 0x61, 0xc2, 0x89, 0x96, 0x61, 0x84, 0x50, 0x50, 0x32, 0xe1, 0xf9, 0xf5, 0x22, 0x66, 0xfd, 0x24, + 0xc1, 0xa4, 0x3f, 0xda, 0x0f, 0x32, 0x30, 0x21, 0xcf, 0x38, 0xaa, 0xc2, 0x58, 0xcb, 0x69, 0x77, + 0x03, 0x9b, 0x8a, 0xba, 0x39, 0x93, 0x7f, 0x52, 0x6e, 0x1f, 0x58, 0x0e, 0xe5, 0xf6, 0x39, 0x93, + 0x7d, 0xa1, 0xb7, 0x61, 0xca, 0x89, 0x7a, 0xae, 0xd1, 0x1e, 0xe9, 0x6c, 0x3f, 0xab, 0x5e, 0x62, + 0x19, 0x4c, 0xb3, 0xe2, 0xc4, 0x52, 0xb4, 0xdf, 0xca, 0x40, 0x49, 0x58, 0x4c, 0x84, 0x20, 0x1f, + 0x38, 0x21, 0x6f, 0x21, 0xff, 0x9f, 0x26, 0x38, 0xbf, 0x9f, 0x81, 0xb2, 0x88, 0x23, 0xa8, 0x02, + 0xb9, 0x86, 0xc5, 0x24, 0x38, 0x13, 0xff, 0x0d, 0x21, 0xcc, 0x2a, 0x21, 0xcc, 0xf5, 0x87, 0x30, + 0x3f, 0x14, 0x84, 0x7f, 0x90, 0x81, 0x71, 0x09, 0x15, 0x31, 0x40, 0x0d, 0x2b, 0xb0, 0xd9, 0x22, + 0x92, 0xff, 0x9f, 0x33, 0x90, 0xfa, 0xef, 0x66, 0x60, 0x46, 0xae, 0x39, 0x2c, 0xd5, 0x7a, 0x0b, + 0x66, 0xf8, 0xfe, 0xaa, 0x75, 0x48, 0x8b, 0x22, 0xd1, 0x9a, 0x56, 0xc0, 0xc9, 0x94, 0x13, 0xe4, + 0x27, 0x72, 0xf4, 0x7f, 0x3e, 0x0b, 0x68, 0x5d, 0xda, 0x9d, 0x84, 0x70, 0x9d, 0x81, 0xc9, 0x58, + 0x1f, 0x6c, 0xdd, 0x27, 0xe4, 0x36, 0xf0, 0xce, 0xf1, 0xbb, 0x7e, 0xc7, 0x6e, 0x37, 0x48, 0xff, + 0x05, 0x93, 0x7f, 0xa2, 0xdb, 0x30, 0xe1, 0xd9, 0xf5, 0xa6, 0xe5, 0xb4, 0x78, 0x0b, 0x39, 0xc2, + 0x39, 0x4f, 0x19, 0xc9, 0xfe, 0x0c, 0x93, 0x96, 0xa4, 0x8d, 0x12, 0x2e, 0x3a, 0xee, 0x89, 0x49, + 0xe8, 0x4d, 0x18, 0xe7, 0xb4, 0x85, 0x1b, 0x9f, 0x72, 0x67, 0x4b, 0xea, 0xc6, 0x58, 0x12, 0x29, + 0x77, 0xa3, 0x1d, 0x78, 0xfb, 0x66, 0x79, 0x4b, 0x48, 0x12, 0xe8, 0x54, 0xd3, 0xad, 0x13, 0xcb, + 0x1d, 0x13, 0xae, 0x19, 0x9d, 0xba, 0xcd, 0x52, 0xf1, 0xe0, 0x98, 0x36, 0x46, 0x05, 0x17, 0x93, + 0x7f, 0xa2, 0x25, 0x00, 0x2c, 0xf7, 0xf9, 0x1d, 0xab, 0x6e, 0xfb, 0xd5, 0x31, 0x42, 0xe5, 0x84, + 0x14, 0x74, 0x1f, 0x26, 0x9b, 0xd6, 0x96, 0xdd, 0xac, 0xf9, 0x76, 0xd3, 0xae, 0x07, 0xae, 0xe7, + 0x57, 0x0b, 0x04, 0xe0, 0x33, 0x2a, 0x80, 0x6f, 0xe3, 0xa2, 0x9b, 0xbc, 0x24, 0x05, 0x79, 0xa2, + 0x29, 0x25, 0x22, 0x1d, 0xc6, 0x3b, 0x58, 0x7c, 0x7f, 0x6c, 0xd7, 0x6b, 0x1e, 0x26, 0xad, 0x45, + 0x2a, 0x72, 0x76, 0x3c, 0xfb, 0xc6, 0x63, 0xbb, 0x6e, 0x62, 0xba, 0xfa, 0x2c, 0x4c, 0x74, 0x5c, + 0x3f, 0x10, 0x0a, 0x01, 0x55, 0x1a, 0x70, 0x6a, 0x58, 0x2a, 0x69, 0x8f, 0x2b, 0xa9, 0xec, 0x71, + 0x91, 0x41, 0xa3, 0xcc, 0xd4, 0x04, 0x05, 0xe4, 0x0a, 0x73, 0xdf, 0x3a, 0x94, 0x19, 0x0a, 0xd8, + 0x8d, 0xda, 0xd6, 0x3e, 0xb3, 0x1c, 0x2d, 0x2b, 0x6b, 0xf3, 0x72, 0xeb, 0xfb, 0x66, 0xc9, 0x8f, + 0x3e, 0xd0, 0x55, 0xb2, 0x0f, 0x9b, 0xdd, 0x46, 0xa4, 0x62, 0xf8, 0xd5, 0x09, 0x32, 0x81, 0xe3, + 0x06, 0x57, 0x2a, 0x48, 0xaf, 0x15, 0x56, 0x8e, 0x27, 0x2a, 0xcc, 0x83, 0x93, 0x0a, 0xf3, 0xe0, + 0x65, 0x98, 0xaf, 0xfb, 0x4e, 0xcd, 0x6f, 0x5b, 0x1d, 0x7f, 0xd7, 0x0d, 0xa8, 0x8a, 0x45, 0x45, + 0x79, 0x62, 0x62, 0x32, 0x67, 0xea, 0xbe, 0xb3, 0xc9, 0x72, 0x89, 0xae, 0x45, 0x64, 0xfa, 0x53, + 0x18, 0xa7, 0x99, 0xca, 0x83, 0xa5, 0x3c, 0xbf, 0x3a, 0x45, 0x96, 0x7e, 0x9c, 0xa7, 0x62, 0xd4, + 0xf5, 0xd1, 0x55, 0x98, 0x8e, 0xef, 0x50, 0xcf, 0xde, 0x26, 0x36, 0x24, 0xd9, 0x86, 0x36, 0x25, + 0xef, 0x26, 0xd3, 0xde, 0xc6, 0x75, 0x63, 0xc8, 0x49, 0xea, 0x4e, 0x27, 0xeb, 0xca, 0xc8, 0x8a, + 0xeb, 0x5e, 0x86, 0x29, 0x09, 0x47, 0x48, 0xcd, 0x99, 0x44, 0xcd, 0x09, 0x01, 0x67, 0x70, 0xb5, + 0x57, 0x00, 0xc9, 0x68, 0x43, 0xea, 0xcd, 0x26, 0xea, 0x4d, 0x8a, 0x68, 0x84, 0x2b, 0x7e, 0x09, + 0x4a, 0x0c, 0x56, 0x22, 0x19, 0xcf, 0xa5, 0xe3, 0x09, 0x4d, 0x22, 0x1b, 0x1b, 0xb6, 0xc2, 0xff, + 0x58, 0x25, 0x6e, 0xfb, 0xb5, 0xf8, 0x4e, 0x99, 0x27, 0x2b, 0x50, 0x69, 0xfb, 0xf2, 0xbe, 0x40, + 0xe7, 0xa0, 0x12, 0x58, 0xde, 0x8e, 0x4d, 0x75, 0x2e, 0xb2, 0xd3, 0xaa, 0x55, 0x6a, 0xa4, 0xa6, + 0xe9, 0x77, 0x79, 0x32, 0xba, 0x10, 0x5a, 0x5f, 0xc8, 0x58, 0x8e, 0x27, 0xc6, 0x02, 0x2c, 0x1b, + 0x0f, 0xc3, 0x04, 0xc4, 0x86, 0xc1, 0x24, 0x12, 0x32, 0x1a, 0x8d, 0x91, 0xfd, 0xd4, 0xd1, 0xd0, + 0xc6, 0xa8, 0x8a, 0xbc, 0x15, 0x4b, 0x41, 0x2f, 0xc1, 0xbc, 0xff, 0xc8, 0xe9, 0xd4, 0xf6, 0x5a, + 0x35, 0x22, 0xc2, 0x84, 0x73, 0xeb, 0x57, 0x4f, 0x90, 0xdd, 0x36, 0x8d, 0xb3, 0xdf, 0x69, 0xad, + 0x75, 0x03, 0x97, 0x4f, 0xa9, 0x8f, 0xf6, 0x60, 0x71, 0xcf, 0x6d, 0x76, 0x5b, 0x76, 0x1c, 0x33, + 0x5b, 0x56, 0xa7, 0xe3, 0xb4, 0x77, 0xaa, 0x0b, 0x64, 0x0f, 0xbc, 0xa8, 0x02, 0xea, 0x1d, 0x52, + 0x51, 0xc2, 0xd9, 0x3b, 0xb4, 0x16, 0x25, 0x28, 0xda, 0x5e, 0x6a, 0x01, 0x6a, 0xbb, 0xf0, 0xf0, + 0xd0, 0x1f, 0x35, 0x5a, 0x9d, 0xea, 0x22, 0xb7, 0x5d, 0xe0, 0xa4, 0xb7, 0x1a, 0xad, 0x8e, 0x56, + 0x87, 0xa9, 0x04, 0x55, 0xc5, 0x02, 0x41, 0x68, 0xd2, 0x31, 0xf1, 0x5f, 0x74, 0x05, 0x46, 0xf6, + 0xac, 0x66, 0xd7, 0x66, 0xbc, 0x48, 0xef, 0x4d, 0x32, 0x6e, 0x3b, 0x7e, 0x60, 0xd2, 0x0a, 0x57, + 0xb3, 0x57, 0x32, 0xda, 0x1a, 0x4c, 0x2b, 0x28, 0xa1, 0xa2, 0x9b, 0x19, 0xb1, 0x9b, 0xa2, 0xd8, + 0xc4, 0x1d, 0x58, 0xee, 0x33, 0x0f, 0x07, 0x6a, 0xce, 0x07, 0x88, 0x30, 0x37, 0x61, 0xa2, 0xe8, + 0x89, 0xe7, 0xa2, 0x89, 0xe2, 0x39, 0x95, 0x3e, 0x54, 0x82, 0xb1, 0x37, 0xec, 0xb6, 0xed, 0x39, + 0x75, 0x6a, 0xe8, 0xbc, 0xeb, 0x7a, 0x2d, 0xab, 0x59, 0xc9, 0x6a, 0xbf, 0x91, 0x81, 0x92, 0x40, + 0x19, 0xd1, 0xeb, 0x30, 0x4a, 0x89, 0x0b, 0xeb, 0xf8, 0x74, 0x1f, 0x52, 0x6a, 0x6c, 0x92, 0xd2, + 0x26, 0xab, 0xa5, 0xbf, 0x00, 0xa3, 0x34, 0x45, 0xee, 0xbf, 0x00, 0xf9, 0x87, 0xbe, 0xed, 0x55, + 0x32, 0xa8, 0x02, 0xe5, 0xdb, 0x4e, 0xdd, 0x6e, 0xfb, 0xf6, 0xb5, 0x5d, 0xbb, 0xfe, 0xa8, 0x92, + 0xd5, 0x6e, 0xc1, 0x84, 0xbc, 0x4c, 0x92, 0x79, 0x3b, 0x37, 0x38, 0x37, 0xd0, 0x7e, 0x37, 0x27, + 0x59, 0xc9, 0x97, 0x43, 0x8a, 0x21, 0x98, 0x4d, 0x18, 0x45, 0x20, 0x14, 0xf6, 0x55, 0x28, 0xd5, + 0x3d, 0xdb, 0x0a, 0xec, 0x5a, 0x28, 0xb4, 0x95, 0x56, 0x35, 0x83, 0x2a, 0xb1, 0x06, 0x3f, 0xd8, + 0x33, 0x1e, 0xf0, 0x23, 0x40, 0x13, 0x68, 0x71, 0x9c, 0x80, 0x2b, 0x6f, 0x3b, 0x6d, 0xc7, 0xdf, + 0xa5, 0x95, 0x73, 0xfd, 0x2b, 0xd3, 0xe2, 0xa4, 0xf2, 0x17, 0xa5, 0x73, 0xad, 0x14, 0x39, 0xa5, + 0xa7, 0xa5, 0xdb, 0xa4, 0x96, 0x6e, 0x2a, 0x4b, 0xb0, 0x2f, 0xfd, 0x47, 0x19, 0xb5, 0xa9, 0x5b, + 0x30, 0xce, 0x67, 0x62, 0x76, 0x6f, 0x62, 0xeb, 0x5e, 0xdb, 0x72, 0xbd, 0xc0, 0x6e, 0x54, 0x72, + 0x82, 0x11, 0x3c, 0x8f, 0xca, 0x50, 0x20, 0xaa, 0x0f, 0xae, 0x26, 0xdb, 0xf1, 0x71, 0xd6, 0x35, + 0xab, 0x13, 0x74, 0x3d, 0xbb, 0x51, 0x19, 0x53, 0x18, 0xc8, 0x0b, 0xc9, 0x23, 0x82, 0xa2, 0xf6, + 0x8d, 0x0c, 0x54, 0xe2, 0xd4, 0x0c, 0x7d, 0x51, 0xc2, 0xf3, 0x73, 0x83, 0x50, 0x40, 0x11, 0xdb, + 0x9f, 0x4f, 0xd3, 0xfe, 0x9b, 0xcd, 0x4a, 0x06, 0x03, 0xf6, 0x8e, 0xe3, 0x05, 0x5d, 0xab, 0x79, + 0xc7, 0xaa, 0xef, 0x92, 0xb3, 0x0b, 0xfd, 0x0a, 0x4c, 0x25, 0x04, 0xc0, 0x84, 0x61, 0x8e, 0x82, + 0x4e, 0xf7, 0x8a, 0x49, 0xc4, 0xf5, 0x4a, 0x96, 0x48, 0xd7, 0x32, 0x78, 0x47, 0x20, 0x5d, 0xc7, + 0x94, 0x58, 0x59, 0xba, 0x4e, 0x4e, 0x06, 0x97, 0xae, 0xb7, 0x12, 0x39, 0xfa, 0x07, 0x50, 0xbc, + 0x7b, 0x93, 0xdb, 0xdf, 0x97, 0xa1, 0xe4, 0xdb, 0xde, 0x9e, 0xed, 0xd5, 0xac, 0x46, 0xc3, 0xe3, + 0xb8, 0x4f, 0x93, 0xd6, 0x1a, 0x0d, 0x0f, 0x1d, 0x87, 0x82, 0xdf, 0xdd, 0x22, 0xc6, 0x61, 0x46, + 0x8a, 0xc6, 0xfc, 0xee, 0xd6, 0x7d, 0x2b, 0xd8, 0x45, 0x27, 0xa1, 0xdc, 0x22, 0xa6, 0x44, 0x7a, + 0x18, 0xcd, 0xce, 0x66, 0x4b, 0x24, 0xed, 0x1e, 0x49, 0xd2, 0xff, 0xc5, 0x28, 0x97, 0xe4, 0xb9, + 0x48, 0x40, 0x76, 0xdc, 0x73, 0xd2, 0x62, 0x56, 0x8d, 0x64, 0x11, 0xd1, 0x6a, 0x85, 0x20, 0x2f, + 0x74, 0x4f, 0xfe, 0xa3, 0x0d, 0x98, 0xb0, 0xdb, 0x75, 0x6f, 0x9f, 0x1a, 0xf1, 0x30, 0xed, 0xa4, + 0x76, 0x48, 0xfd, 0xd3, 0x27, 0xcb, 0xe3, 0x51, 0x8e, 0xd2, 0xaa, 0x26, 0xe4, 0xbf, 0x65, 0xef, + 0x2b, 0x8f, 0x99, 0xf3, 0xea, 0x63, 0xe6, 0x88, 0xe0, 0x8c, 0x48, 0x62, 0x85, 0x04, 0xf9, 0x40, + 0xa7, 0xcd, 0xa3, 0x2a, 0xe9, 0xf6, 0x2a, 0x1c, 0x27, 0xb8, 0x85, 0x29, 0x4d, 0x02, 0x24, 0x6a, + 0x68, 0x98, 0xe7, 0x05, 0x62, 0x56, 0xa0, 0x21, 0xcf, 0x96, 0x0d, 0x98, 0x16, 0x0c, 0x1f, 0x35, + 0xbb, 0x6d, 0x6d, 0x35, 0xed, 0x06, 0x11, 0xe7, 0x0b, 0xe6, 0x94, 0x1b, 0x5a, 0x3f, 0x6e, 0xd0, + 0x0c, 0x74, 0x16, 0x8a, 0xfe, 0x8b, 0xb2, 0x1d, 0xb1, 0x18, 0x5a, 0xc7, 0x6f, 0x1d, 0x33, 0x0b, + 0xfe, 0x8b, 0x91, 0x71, 0xaf, 0xbd, 0xed, 0xcb, 0x36, 0x44, 0x30, 0x42, 0x04, 0xbc, 0x75, 0xcc, + 0x2c, 0xb6, 0xb7, 0x99, 0xc9, 0x51, 0xfb, 0x53, 0xf9, 0xf8, 0xf2, 0x8b, 0xb1, 0xb3, 0xbe, 0x53, + 0xbd, 0xa7, 0x7b, 0xd0, 0x73, 0xbe, 0xba, 0x9a, 0xf8, 0x15, 0x61, 0xe4, 0x1d, 0xf2, 0x37, 0x93, + 0x24, 0x4a, 0x59, 0x54, 0x85, 0x99, 0x77, 0xe8, 0xd4, 0x93, 0x8e, 0x43, 0xba, 0x98, 0x43, 0x33, + 0x50, 0x89, 0x72, 0x38, 0x51, 0xd4, 0x5f, 0x55, 0x11, 0x9c, 0x51, 0xc8, 0x12, 0x33, 0x7e, 0xba, + 0xb5, 0xf1, 0xee, 0xcd, 0xcd, 0x4a, 0x5e, 0x30, 0x30, 0xfe, 0xed, 0x90, 0x96, 0xf0, 0x41, 0x0f, + 0x4b, 0x4b, 0x6e, 0x84, 0xb4, 0x24, 0x94, 0xe5, 0x15, 0xb4, 0x44, 0x9c, 0x62, 0x4e, 0x45, 0xc4, + 0x34, 0xfd, 0x9b, 0x19, 0x28, 0x8b, 0x4a, 0x0f, 0xde, 0xa5, 0x02, 0xfb, 0x24, 0xff, 0xd1, 0x02, + 0x14, 0x23, 0xa9, 0x98, 0x2e, 0x42, 0x94, 0x80, 0x45, 0x1c, 0x72, 0x44, 0xc3, 0x08, 0x07, 0xfd, + 0xc0, 0xed, 0x3c, 0x72, 0xda, 0xec, 0x4c, 0xc0, 0x24, 0xff, 0xb1, 0xce, 0xcb, 0x15, 0x27, 0xca, + 0xc8, 0xf8, 0xa7, 0xfe, 0x07, 0x27, 0xb8, 0x34, 0xc4, 0x4d, 0x04, 0x71, 0x2d, 0x3a, 0xd3, 0x4f, + 0x8b, 0xce, 0xf6, 0xd2, 0xa2, 0x73, 0x09, 0x2d, 0xfa, 0x56, 0x52, 0x8b, 0xa6, 0x6a, 0x3f, 0xd7, + 0x26, 0x07, 0xd6, 0x9e, 0x8d, 0x18, 0x35, 0x99, 0x13, 0x1b, 0x50, 0x50, 0x91, 0x0b, 0x50, 0x8c, + 0x14, 0xcf, 0x51, 0x95, 0xe2, 0x19, 0xe5, 0xa3, 0xe7, 0x60, 0x8c, 0xca, 0xd6, 0xd4, 0x12, 0x50, + 0x5a, 0x45, 0x62, 0xeb, 0x54, 0x1e, 0x35, 0x79, 0x11, 0x41, 0x04, 0x22, 0x94, 0xb6, 0x20, 0x8a, + 0x40, 0x84, 0xd6, 0x9f, 0x81, 0x11, 0x3f, 0xb0, 0x76, 0xa8, 0x86, 0x3f, 0xb1, 0x3a, 0x15, 0x03, + 0x75, 0xc7, 0x36, 0x69, 0x7e, 0xd2, 0x24, 0x00, 0x83, 0x98, 0x04, 0x4a, 0x0a, 0x93, 0xc0, 0xb5, + 0xa4, 0xe5, 0xb6, 0xcc, 0x84, 0x27, 0xa1, 0x73, 0x99, 0xf5, 0x25, 0xac, 0xba, 0xf3, 0x30, 0x56, + 0xf7, 0xa8, 0x5c, 0x37, 0x4e, 0x89, 0x40, 0xdd, 0x23, 0x32, 0xdd, 0x22, 0x40, 0xe0, 0x06, 0x56, + 0xb3, 0xe6, 0x3b, 0x1f, 0xd9, 0xc4, 0x13, 0x24, 0x6f, 0x16, 0x49, 0xca, 0xa6, 0xf3, 0x91, 0xad, + 0x64, 0x0a, 0x93, 0x6a, 0xa6, 0xa0, 0xb4, 0x0b, 0x54, 0x06, 0xb3, 0x0b, 0x88, 0xba, 0x3b, 0x35, + 0xec, 0x4d, 0x11, 0x48, 0x42, 0xdd, 0x9d, 0x9a, 0x8f, 0x13, 0xe6, 0x03, 0x74, 0x30, 0xf3, 0xc1, + 0xf4, 0x81, 0xcc, 0x07, 0x33, 0x29, 0xe6, 0x03, 0x95, 0x09, 0x60, 0xf6, 0xd0, 0x26, 0x80, 0xb9, + 0x43, 0x9a, 0x00, 0xe6, 0xfb, 0x9b, 0x00, 0xd2, 0x78, 0x61, 0x75, 0x20, 0x5e, 0xf8, 0x8a, 0x6c, + 0x40, 0x38, 0x9e, 0xdc, 0x9b, 0x29, 0x86, 0x83, 0x59, 0x18, 0xad, 0x7b, 0xb5, 0xae, 0xd3, 0x20, + 0x6a, 0x7a, 0xd1, 0x1c, 0xa9, 0x7b, 0x0f, 0x9d, 0x06, 0x46, 0x25, 0xcf, 0x0e, 0x70, 0xfb, 0x6e, + 0xbb, 0xd6, 0xb1, 0x3d, 0xc7, 0x6d, 0x10, 0x75, 0x3b, 0x67, 0x4e, 0x86, 0xe9, 0xf7, 0x49, 0x32, + 0xba, 0x04, 0x65, 0xc9, 0x4d, 0x6b, 0x41, 0xe1, 0xa6, 0x55, 0x12, 0x1c, 0xaa, 0xd0, 0x3d, 0x98, + 0xef, 0xfa, 0xb6, 0xc7, 0xc5, 0x0a, 0xe2, 0xa7, 0x45, 0xdd, 0x25, 0x88, 0xbe, 0x3c, 0xb1, 0x3a, + 0x2f, 0xd6, 0x35, 0xd6, 0xa8, 0x1b, 0x06, 0x06, 0x7c, 0x16, 0xd7, 0x5b, 0x8f, 0xaa, 0xd1, 0xac, + 0xb8, 0x8d, 0x62, 0xa9, 0xa7, 0x8d, 0x42, 0x6d, 0x29, 0x59, 0x4e, 0xb1, 0x94, 0xbc, 0x05, 0x15, + 0x7e, 0x72, 0xc7, 0x4e, 0x44, 0xfd, 0xea, 0x0a, 0xd9, 0x26, 0x2b, 0xe2, 0xe4, 0xb2, 0x63, 0xb6, + 0xfb, 0xac, 0x08, 0x25, 0x9d, 0x93, 0x9e, 0x9c, 0xaa, 0x34, 0xbb, 0x9c, 0x54, 0x9b, 0x5d, 0x5e, + 0x82, 0xb9, 0x26, 0x4e, 0x8a, 0x1c, 0x03, 0xb8, 0x78, 0xa3, 0x13, 0xf1, 0x66, 0x86, 0xe4, 0xf2, + 0x3d, 0xc9, 0x25, 0x9c, 0x37, 0x95, 0xf6, 0x97, 0x67, 0xc8, 0x7c, 0x2c, 0x24, 0x91, 0xe1, 0xb0, + 0x76, 0x97, 0x67, 0xd3, 0xed, 0x2e, 0xed, 0x7e, 0x76, 0x97, 0x53, 0x64, 0xf2, 0x2e, 0x24, 0xe9, + 0xfa, 0x91, 0xd8, 0x5b, 0x4e, 0x27, 0xec, 0x2d, 0x47, 0x60, 0x0a, 0x59, 0x87, 0x19, 0xd5, 0xfa, + 0x7e, 0x9e, 0xe6, 0x94, 0x47, 0x92, 0x39, 0xe5, 0x92, 0xa4, 0x99, 0x9c, 0x50, 0xef, 0xfa, 0xc3, + 0x9b, 0x51, 0x5e, 0x86, 0x09, 0x99, 0x61, 0x61, 0x50, 0xbb, 0xa1, 0xab, 0x00, 0xfe, 0x1b, 0x0a, + 0x52, 0xd9, 0x48, 0x90, 0xd2, 0xfe, 0x78, 0x04, 0x46, 0xe9, 0xa0, 0x0f, 0x21, 0x67, 0x55, 0x20, + 0xd7, 0xd9, 0xab, 0x33, 0x29, 0x0b, 0xff, 0x45, 0x27, 0xa0, 0xc8, 0x90, 0x9b, 0x3b, 0x5f, 0x98, + 0x05, 0x9a, 0xb0, 0xd1, 0x38, 0xb0, 0x58, 0x82, 0xf1, 0xc6, 0x73, 0xb0, 0x0a, 0x49, 0xe0, 0xa2, + 0x87, 0x12, 0x40, 0x93, 0x08, 0x87, 0x99, 0x81, 0x91, 0x8f, 0xdc, 0x76, 0x78, 0x24, 0x41, 0x3f, + 0xd0, 0x17, 0x60, 0x8c, 0x39, 0x31, 0xb3, 0x53, 0x88, 0xe5, 0x24, 0x22, 0x1b, 0x54, 0x8d, 0x64, + 0x44, 0x80, 0x97, 0x8f, 0xf1, 0xee, 0x62, 0x9c, 0x77, 0x2f, 0x43, 0xc9, 0xaa, 0x63, 0x65, 0x9e, + 0xe6, 0x03, 0xc9, 0x07, 0x9a, 0x44, 0x0a, 0x24, 0xdc, 0x98, 0x4a, 0x0a, 0x37, 0xa6, 0x59, 0x18, + 0xed, 0xec, 0xd5, 0xf1, 0x04, 0x95, 0x29, 0xca, 0x74, 0xf6, 0xea, 0x1b, 0x0d, 0xb4, 0x02, 0x25, + 0xe2, 0x8e, 0x89, 0x59, 0xae, 0xed, 0x31, 0xa1, 0x42, 0x4c, 0x42, 0xa7, 0x61, 0x82, 0x89, 0x55, + 0x0c, 0x3f, 0x99, 0x9f, 0x69, 0x2c, 0x15, 0xbd, 0x0b, 0x33, 0x1f, 0xb8, 0x5b, 0x35, 0xa2, 0x9b, + 0x3a, 0xc1, 0x3e, 0x56, 0x91, 0x02, 0xfb, 0x71, 0x40, 0xc4, 0x8c, 0xe8, 0x10, 0x49, 0x9c, 0x8d, + 0x37, 0xdd, 0xad, 0x4d, 0x56, 0xfa, 0x1a, 0x2d, 0x6c, 0xa2, 0x0f, 0x12, 0x69, 0xda, 0x55, 0x28, + 0x8b, 0xf3, 0x76, 0xa0, 0xdd, 0x60, 0x02, 0x4a, 0xf6, 0x82, 0xf1, 0xcb, 0xeb, 0xb6, 0xd7, 0xfc, + 0x87, 0xbe, 0xed, 0xb1, 0x73, 0xcc, 0x28, 0x01, 0x4b, 0xcc, 0xe4, 0x83, 0x38, 0x54, 0xb1, 0x33, + 0x60, 0x21, 0x45, 0xfb, 0x5b, 0x59, 0x49, 0xab, 0xbb, 0x1c, 0xd3, 0xea, 0x16, 0xd5, 0xf8, 0x35, + 0xa8, 0x36, 0xf7, 0x47, 0xbf, 0xc8, 0xb6, 0x2c, 0x34, 0x07, 0x88, 0x68, 0xea, 0x74, 0x88, 0x77, + 0x1c, 0xdf, 0xc7, 0xe9, 0xa0, 0x7d, 0xac, 0x30, 0x71, 0x5d, 0x96, 0x68, 0xcf, 0xc9, 0x5e, 0x4c, + 0x66, 0x38, 0xd3, 0x56, 0x1b, 0x46, 0x88, 0xcc, 0x9e, 0x98, 0xb0, 0x8d, 0xb6, 0x83, 0x47, 0x44, + 0x3d, 0xd3, 0xee, 0x47, 0xd2, 0x58, 0x25, 0x8b, 0x2a, 0x50, 0xbe, 0x2f, 0x88, 0x59, 0xd4, 0x93, + 0x97, 0xe2, 0xa5, 0x5f, 0xc9, 0x13, 0xdf, 0xb6, 0x4e, 0xa7, 0xe9, 0x50, 0xa1, 0xcf, 0xaf, 0x8c, + 0x60, 0x1d, 0xf7, 0xa6, 0xd3, 0xb6, 0x9a, 0x95, 0x51, 0xdd, 0x85, 0xb2, 0x38, 0x80, 0x83, 0xf9, + 0xac, 0xae, 0x86, 0xe2, 0x98, 0xa0, 0xa6, 0x96, 0x84, 0xc9, 0x61, 0x35, 0x98, 0x24, 0x46, 0x94, + 0xd3, 0xbf, 0xcc, 0x41, 0x91, 0x30, 0x51, 0x82, 0x70, 0xaf, 0xc2, 0x08, 0x65, 0xb6, 0xd4, 0x4a, + 0x3c, 0x6d, 0x84, 0x59, 0xe4, 0xdf, 0x46, 0x60, 0xb7, 0xd6, 0x2b, 0x9f, 0x3d, 0x59, 0x2e, 0xef, + 0x5b, 0xad, 0xe6, 0x55, 0x9d, 0x94, 0xd5, 0x4d, 0x5a, 0x47, 0xfb, 0x76, 0x16, 0x0a, 0xbc, 0x14, + 0xaa, 0x41, 0xb9, 0xe3, 0x36, 0x42, 0x59, 0x87, 0x35, 0xf8, 0xac, 0xa2, 0x41, 0xe3, 0xbe, 0xdb, + 0xe0, 0x7c, 0x92, 0xec, 0xc2, 0xf5, 0xb9, 0xcf, 0x9e, 0x2c, 0x23, 0xda, 0x43, 0x27, 0xca, 0xd3, + 0xcd, 0x92, 0xf0, 0x85, 0xbe, 0x04, 0x63, 0x56, 0x9d, 0x12, 0xc5, 0x2c, 0x69, 0x7b, 0x4a, 0x68, + 0x7b, 0x8d, 0xe4, 0xac, 0xa3, 0xcf, 0x9e, 0x2c, 0x4f, 0xd0, 0x86, 0x58, 0x59, 0xdd, 0xe4, 0xb5, + 0xf0, 0x4e, 0xc5, 0x74, 0xc4, 0x72, 0x30, 0x71, 0xa2, 0x14, 0x3f, 0x4a, 0xd0, 0x5e, 0x87, 0x4a, + 0x1c, 0xae, 0x03, 0x51, 0x87, 0x1f, 0x65, 0x60, 0x94, 0x42, 0x81, 0x2e, 0x03, 0x99, 0x70, 0xac, + 0xb3, 0xb7, 0x29, 0xfb, 0x2a, 0xac, 0xcf, 0x7e, 0xf6, 0x64, 0x79, 0x8a, 0x42, 0x16, 0xe5, 0xe9, + 0xa6, 0x50, 0x10, 0x5d, 0x87, 0x29, 0xaf, 0xdb, 0xae, 0x39, 0xed, 0x1a, 0xde, 0x08, 0xe4, 0x28, + 0x92, 0x1d, 0xd2, 0xaf, 0x1f, 0xff, 0xec, 0xc9, 0xf2, 0x2c, 0x5f, 0x82, 0xf6, 0x46, 0x7b, 0x93, + 0x14, 0xb8, 0xef, 0x36, 0x74, 0x73, 0x42, 0x4e, 0x88, 0x20, 0xcc, 0x09, 0x10, 0xea, 0x1f, 0x00, + 0x98, 0x91, 0xb1, 0xf5, 0x40, 0x48, 0x76, 0x09, 0x93, 0xb0, 0xa6, 0xed, 0x8b, 0x38, 0x06, 0xd1, + 0xd4, 0xb3, 0xf2, 0x45, 0x8f, 0x27, 0xe8, 0xaf, 0xc1, 0xb8, 0x69, 0x77, 0x9a, 0x56, 0x9d, 0x9d, + 0x92, 0xea, 0x17, 0x54, 0xbb, 0x30, 0xb2, 0x0a, 0x67, 0x04, 0x6b, 0x71, 0x56, 0xff, 0x8b, 0x39, + 0x28, 0xb1, 0xab, 0x23, 0x04, 0x43, 0xe7, 0x60, 0x94, 0x62, 0x2f, 0x5b, 0x06, 0xf6, 0xa5, 0x32, + 0x67, 0x64, 0x95, 0xe6, 0x8c, 0x8d, 0xa4, 0x51, 0x22, 0xc7, 0x44, 0x6b, 0xa1, 0x9f, 0x81, 0xac, + 0x12, 0xf7, 0x60, 0x2a, 0x14, 0x1d, 0x42, 0x51, 0x93, 0x5a, 0x38, 0x74, 0xa9, 0xb1, 0x50, 0xc2, + 0x96, 0x24, 0xcc, 0x4a, 0x3b, 0x96, 0x8c, 0xae, 0x62, 0x05, 0x93, 0x4c, 0x15, 0xf7, 0xb9, 0x18, + 0x21, 0x04, 0x6e, 0xda, 0x90, 0x66, 0xd0, 0xe0, 0x1e, 0x16, 0x42, 0x9a, 0x70, 0xaf, 0x67, 0x94, + 0xdd, 0xeb, 0x11, 0x21, 0x50, 0x08, 0x23, 0xaf, 0x8a, 0x36, 0x12, 0x6a, 0xf8, 0x58, 0x94, 0xea, + 0xb0, 0xff, 0x0d, 0x2e, 0xef, 0x8b, 0x36, 0x93, 0x8b, 0x91, 0xcd, 0xa4, 0xc0, 0x49, 0x85, 0x50, + 0x35, 0x6e, 0x34, 0x11, 0x6c, 0x48, 0x45, 0xd9, 0x86, 0x74, 0x03, 0x96, 0xb9, 0x49, 0x80, 0xca, + 0x2c, 0x44, 0x01, 0x95, 0x94, 0x6c, 0x20, 0xb2, 0xd0, 0x02, 0x2b, 0x76, 0x8f, 0x95, 0x32, 0x25, + 0x9d, 0x5b, 0x96, 0x73, 0x4a, 0x71, 0x39, 0x47, 0x69, 0x78, 0x28, 0x1f, 0xd6, 0xf0, 0x30, 0x3e, + 0x90, 0xe1, 0x61, 0x42, 0x61, 0x78, 0x48, 0x31, 0x0d, 0x4c, 0x0e, 0x62, 0x1a, 0xf8, 0x0a, 0xcc, + 0x4a, 0xa2, 0x58, 0x88, 0x71, 0x15, 0xe6, 0x4a, 0x23, 0xaf, 0x77, 0x24, 0x9f, 0x49, 0x48, 0x37, + 0xed, 0x27, 0x73, 0xd0, 0x39, 0x60, 0x2c, 0x81, 0x40, 0x33, 0x95, 0x80, 0x86, 0x89, 0xc0, 0x18, + 0x8a, 0x1a, 0xcc, 0xc7, 0x54, 0xd3, 0x10, 0x0e, 0xc4, 0x3c, 0x64, 0x24, 0x1c, 0x92, 0x54, 0x18, + 0x09, 0x92, 0x59, 0x4f, 0x95, 0x87, 0x9a, 0xb0, 0x10, 0xef, 0x00, 0xef, 0x93, 0xb0, 0x97, 0x69, + 0xa6, 0xca, 0xa5, 0xf7, 0x82, 0x77, 0x9b, 0xd4, 0xd3, 0x71, 0x2f, 0x2d, 0xbf, 0x87, 0xc6, 0x3b, + 0xd3, 0x43, 0xe3, 0x7d, 0x19, 0xe6, 0xd9, 0x25, 0xb7, 0x46, 0x2d, 0x86, 0x1b, 0xb3, 0x04, 0x37, + 0x66, 0xbd, 0xd8, 0xde, 0xa1, 0x38, 0x72, 0x8b, 0xa0, 0x12, 0xce, 0xe0, 0x6e, 0x50, 0x73, 0xcc, + 0x4b, 0x53, 0xb1, 0xef, 0x78, 0x55, 0xbc, 0x75, 0xc9, 0x6e, 0x27, 0xa9, 0x9b, 0xdc, 0xc0, 0x29, + 0x19, 0x1f, 0xe6, 0x7b, 0x1a, 0x1f, 0xde, 0x52, 0x2a, 0xe8, 0xd4, 0xc4, 0x23, 0x6f, 0xf9, 0xfe, + 0x1a, 0xfa, 0x51, 0xa8, 0xb6, 0xd7, 0x60, 0x56, 0x49, 0x11, 0x0f, 0xd4, 0xc8, 0x4d, 0xa8, 0xa6, + 0x21, 0xf9, 0x81, 0xda, 0xb9, 0x05, 0x5a, 0x3a, 0x92, 0x1e, 0xa8, 0xa5, 0xdb, 0xb0, 0xd4, 0x1b, + 0x11, 0x0f, 0xd4, 0xda, 0x9f, 0x64, 0x60, 0x46, 0x85, 0x09, 0xe8, 0xdd, 0x04, 0x12, 0x51, 0x29, + 0xf8, 0xf9, 0xbe, 0x48, 0x64, 0x88, 0x5f, 0x5d, 0x3f, 0x86, 0x53, 0xfa, 0x9b, 0x30, 0x21, 0x17, + 0x40, 0xe3, 0x50, 0xbc, 0xef, 0xd9, 0x1d, 0xcb, 0xc3, 0x92, 0xf8, 0x31, 0x49, 0xe2, 0xcf, 0xe0, + 0xcc, 0x77, 0x6c, 0xcf, 0xd9, 0xde, 0xa7, 0xa7, 0x3e, 0x65, 0x28, 0x60, 0xb1, 0x96, 0x7c, 0xe5, + 0xb4, 0x7f, 0x96, 0x81, 0x4a, 0x9c, 0x7f, 0x7c, 0x3e, 0xe7, 0x1e, 0x07, 0x66, 0x8c, 0xda, 0x77, + 0x73, 0xa1, 0x05, 0x81, 0xd9, 0x03, 0x32, 0x91, 0x3d, 0xe0, 0x1c, 0x54, 0xd8, 0x7e, 0x8f, 0x83, + 0x3d, 0x49, 0xd3, 0x23, 0x6b, 0x1a, 0xe6, 0x08, 0xb4, 0x28, 0x65, 0x83, 0x6c, 0x10, 0x65, 0x9a, + 0xc8, 0x7a, 0x38, 0x15, 0xad, 0x26, 0x2b, 0x45, 0x47, 0xc5, 0xd7, 0x86, 0x15, 0xbb, 0x14, 0xb3, + 0x34, 0xf4, 0xe5, 0xee, 0x87, 0x34, 0x35, 0x5c, 0x8d, 0x9b, 0x1a, 0x56, 0x14, 0x7c, 0xfd, 0x50, + 0xb6, 0x86, 0xa1, 0x74, 0xed, 0x9f, 0xf5, 0xbb, 0xac, 0xa9, 0x9e, 0x8d, 0x41, 0x15, 0xe3, 0xbf, + 0xfe, 0x14, 0x15, 0x63, 0x2a, 0xe5, 0xa6, 0x29, 0xc6, 0xda, 0x5f, 0x51, 0x68, 0xbb, 0x2f, 0x4b, + 0xda, 0xae, 0xde, 0x93, 0x62, 0x0f, 0xa7, 0xee, 0xfa, 0x58, 0x56, 0x27, 0x8d, 0x1f, 0x46, 0x35, + 0xb8, 0x0c, 0x65, 0x8e, 0xcb, 0x8e, 0x78, 0x69, 0x52, 0x80, 0x97, 0xd5, 0x29, 0x79, 0x51, 0x92, + 0x3e, 0x0b, 0xd3, 0xb7, 0x6c, 0xab, 0x19, 0xec, 0xb2, 0xd5, 0xb2, 0xbf, 0xda, 0xb5, 0xfd, 0x40, + 0x9f, 0x83, 0x19, 0x39, 0xd9, 0xef, 0xb8, 0x6d, 0xdf, 0xd6, 0x3f, 0x81, 0xe2, 0x03, 0xa7, 0x65, + 0x9b, 0x56, 0x7b, 0xc7, 0x46, 0x5f, 0x00, 0xf0, 0x03, 0xcb, 0x0b, 0x6a, 0xa1, 0xab, 0x7d, 0x6f, + 0x8f, 0xa1, 0x22, 0x29, 0x4d, 0x1c, 0x86, 0x2e, 0x93, 0x4b, 0x82, 0x83, 0xfa, 0x29, 0x8d, 0xd9, + 0xed, 0x06, 0xfe, 0xd2, 0xbf, 0x93, 0x87, 0xca, 0x8d, 0x76, 0xb7, 0x65, 0x7b, 0x56, 0xc0, 0x84, + 0x51, 0x1f, 0x5d, 0x86, 0x51, 0xa2, 0x1b, 0x70, 0xc5, 0x79, 0xd1, 0x88, 0x17, 0xa1, 0x0a, 0x05, + 0xdb, 0x32, 0xac, 0x30, 0xde, 0xa4, 0x2d, 0xeb, 0x31, 0xe3, 0xca, 0x3e, 0x81, 0x22, 0x6f, 0x42, + 0xcb, 0x7a, 0x4c, 0x67, 0xdf, 0xc7, 0x82, 0x19, 0x86, 0xaf, 0xe6, 0xe1, 0xc1, 0x32, 0x87, 0x28, + 0x30, 0xc2, 0xe1, 0x9b, 0xc5, 0x20, 0x9c, 0x89, 0x65, 0x28, 0x11, 0x39, 0x69, 0xdb, 0x69, 0x62, + 0x31, 0x9b, 0x52, 0x11, 0x72, 0x1a, 0x7b, 0x93, 0xa4, 0x20, 0x03, 0xa6, 0xb9, 0xc8, 0x20, 0x16, + 0xa4, 0xd4, 0x72, 0x8a, 0x65, 0xdd, 0x8d, 0xca, 0x9f, 0x84, 0x32, 0x13, 0x17, 0x9c, 0x76, 0xc3, + 0x7e, 0x4c, 0x48, 0x48, 0xde, 0x2c, 0xd1, 0xb4, 0x0d, 0x9c, 0x84, 0x5e, 0x03, 0x8d, 0x8b, 0xd5, + 0x0d, 0x8c, 0xd6, 0x4d, 0x41, 0x1e, 0xf2, 0x99, 0x1b, 0x46, 0x95, 0x95, 0xb8, 0xce, 0x0a, 0x98, + 0xc2, 0xb9, 0x2b, 0xe2, 0x00, 0x75, 0x9d, 0x06, 0x87, 0x87, 0x1e, 0xa8, 0x56, 0x58, 0xce, 0x43, + 0xa7, 0xc1, 0xc0, 0x99, 0x83, 0x51, 0x72, 0xdd, 0xdd, 0xaf, 0x16, 0x09, 0xc1, 0x62, 0x5f, 0xb8, + 0x15, 0x85, 0x70, 0x43, 0x8f, 0x52, 0x93, 0xe7, 0x0b, 0x73, 0x21, 0xe5, 0x28, 0xd1, 0x56, 0x18, + 0xcd, 0xff, 0x02, 0x94, 0x84, 0x05, 0x3a, 0x08, 0x6d, 0xd2, 0xbf, 0x93, 0x81, 0x13, 0xb2, 0xcf, + 0xfe, 0x35, 0xe2, 0xd2, 0xc6, 0xf0, 0x18, 0xbd, 0x90, 0xd8, 0x42, 0x93, 0x06, 0x2d, 0x91, 0xba, + 0x91, 0x5e, 0x4b, 0xba, 0xef, 0xa7, 0xdf, 0x0e, 0x88, 0xfb, 0xf4, 0xeb, 0x4b, 0xb0, 0xa0, 0x86, + 0x87, 0x6d, 0xa0, 0x24, 0xc0, 0x0f, 0x3b, 0x8d, 0x5f, 0x28, 0x80, 0x39, 0x3c, 0x0c, 0xe0, 0x7f, + 0x92, 0x81, 0x25, 0xb9, 0x40, 0xb8, 0xbb, 0x38, 0xcc, 0xb3, 0x30, 0xea, 0x7a, 0x3b, 0xd1, 0x4d, + 0xc2, 0x11, 0xd7, 0xdb, 0xd9, 0x68, 0xa0, 0x6b, 0xe1, 0xbe, 0xcc, 0x32, 0xb5, 0xa1, 0x77, 0x3b, + 0xaa, 0x5d, 0x3a, 0x0c, 0x6e, 0xd8, 0xb0, 0x9c, 0xda, 0x21, 0x1d, 0x1c, 0x5a, 0x87, 0x29, 0x79, + 0xea, 0x9c, 0xd0, 0xfc, 0x36, 0x6b, 0xa8, 0x6e, 0x9e, 0x98, 0x15, 0x69, 0xfa, 0x1c, 0xdb, 0xd7, + 0xdf, 0x8f, 0x4f, 0xe0, 0x46, 0xdb, 0xef, 0x10, 0x45, 0xa0, 0xe7, 0xec, 0x28, 0x8e, 0x4f, 0xf8, + 0x21, 0x4b, 0x2e, 0x3c, 0x64, 0xd1, 0x6b, 0xb0, 0x98, 0xd2, 0x38, 0x1b, 0xc1, 0xeb, 0xea, 0xcb, + 0x26, 0xa9, 0xf0, 0xc7, 0x97, 0xff, 0xbd, 0x38, 0x3a, 0x5e, 0x67, 0x01, 0x43, 0x8e, 0x00, 0xf8, + 0x04, 0x6a, 0xf1, 0xb6, 0x19, 0x6a, 0xfd, 0x8d, 0x0c, 0x3c, 0x1b, 0x03, 0x92, 0x90, 0x95, 0x5d, + 0xa7, 0x23, 0x6f, 0x8a, 0x03, 0x40, 0x71, 0x16, 0x8a, 0x2e, 0x6f, 0x24, 0xa4, 0xd9, 0x61, 0xb3, + 0x66, 0x94, 0xc9, 0xe1, 0xcd, 0x47, 0xf0, 0x9e, 0x81, 0x53, 0x7d, 0xc0, 0x61, 0x80, 0xff, 0xc6, + 0x38, 0x9c, 0x90, 0xcf, 0xc7, 0x86, 0xa6, 0x3a, 0x67, 0xd4, 0x9b, 0x38, 0x79, 0x69, 0xe8, 0x68, + 0xaf, 0x06, 0x29, 0x2c, 0x77, 0xf9, 0x7e, 0x8e, 0x48, 0x23, 0xbd, 0x1c, 0x91, 0x46, 0x13, 0x8e, + 0x48, 0x5f, 0x49, 0xda, 0xfc, 0xa8, 0xc1, 0xeb, 0x79, 0xa3, 0xc7, 0x1c, 0x1e, 0xee, 0x5e, 0x4f, + 0x61, 0x10, 0x27, 0x9e, 0xa2, 0xc2, 0x89, 0x47, 0x69, 0xa3, 0x82, 0xc1, 0x6c, 0x54, 0x3d, 0x1c, + 0x5a, 0x4a, 0x07, 0x72, 0x68, 0x29, 0x1f, 0xe0, 0x3e, 0xcc, 0xf8, 0x10, 0xf7, 0x61, 0x26, 0x0e, + 0xed, 0x0c, 0x33, 0x79, 0x48, 0x67, 0x98, 0x4a, 0x7f, 0x67, 0x98, 0x5b, 0xb2, 0x3b, 0x0b, 0x8d, + 0x34, 0x73, 0xa6, 0x27, 0x8a, 0x1c, 0xe8, 0x62, 0x0c, 0x4a, 0x71, 0xf7, 0x88, 0x19, 0x73, 0xa6, + 0x7b, 0x1a, 0x73, 0xde, 0x57, 0xca, 0x3b, 0xf4, 0x96, 0xd0, 0xc5, 0x01, 0x60, 0x3d, 0xac, 0xfb, + 0xc5, 0x6c, 0xba, 0xfb, 0xc5, 0xaf, 0xf7, 0x73, 0xbf, 0x98, 0x23, 0x58, 0xfc, 0x5a, 0x4f, 0xe8, + 0x8e, 0xd0, 0x1f, 0x63, 0xfe, 0xe7, 0xe1, 0x8f, 0x71, 0xc4, 0xbe, 0x14, 0xbf, 0xa5, 0xf2, 0xdc, + 0xbf, 0x29, 0x29, 0x7a, 0xab, 0x07, 0x5a, 0xcd, 0xe1, 0x14, 0xbf, 0x55, 0xc9, 0xb5, 0x63, 0x20, + 0x0f, 0x0d, 0xcc, 0x5b, 0xd5, 0x00, 0x72, 0xde, 0x5a, 0x8c, 0xb3, 0xa8, 0xa1, 0xe5, 0xcc, 0x5f, + 0xb2, 0x28, 0x79, 0x0e, 0x9f, 0x32, 0x8b, 0x12, 0x6e, 0x0b, 0x83, 0x7c, 0x5b, 0x58, 0xc9, 0xbc, + 0x4a, 0x43, 0x33, 0xaf, 0x72, 0x0f, 0xe6, 0xf5, 0xff, 0x0b, 0x57, 0xea, 0x4b, 0x5d, 0xa7, 0x94, + 0xd4, 0x55, 0xc6, 0x93, 0x61, 0xa8, 0x6b, 0x0f, 0xa6, 0x80, 0x52, 0x99, 0xc2, 0x2f, 0x1e, 0xc9, + 0x4d, 0xd2, 0xab, 0x98, 0x48, 0xfd, 0x1f, 0xb3, 0xb0, 0x24, 0x17, 0x38, 0xbc, 0x9a, 0xd9, 0xbb, + 0x1d, 0xa5, 0x31, 0x48, 0x41, 0x64, 0x72, 0x4a, 0x22, 0x93, 0x82, 0xbc, 0xf9, 0x41, 0x90, 0xf7, + 0x75, 0x98, 0xb2, 0x39, 0x30, 0x35, 0x6e, 0xe9, 0xa5, 0x26, 0xe5, 0xa9, 0x84, 0xcd, 0xca, 0xac, + 0xd8, 0xb1, 0x94, 0x61, 0x74, 0xe1, 0x6f, 0x66, 0x60, 0x39, 0x75, 0x5a, 0x98, 0x2a, 0xf9, 0x65, + 0xa8, 0xc4, 0x1c, 0xd9, 0x23, 0x5d, 0x58, 0x75, 0x4f, 0xcc, 0x9c, 0x94, 0x9d, 0xd8, 0x89, 0x49, + 0x8d, 0x1a, 0xa1, 0xe9, 0x71, 0x1c, 0x33, 0xa9, 0x91, 0x24, 0x1a, 0xd0, 0xe1, 0xfd, 0x38, 0x16, + 0x1c, 0xb1, 0xae, 0x9c, 0xd2, 0x78, 0xa4, 0x2b, 0xc7, 0x3d, 0xf5, 0xb9, 0xae, 0xac, 0x1c, 0x5f, + 0xcc, 0x49, 0x5f, 0xff, 0x5a, 0x26, 0xce, 0x53, 0x0f, 0xad, 0x2c, 0x27, 0x6f, 0x5a, 0xe5, 0x54, + 0x37, 0xad, 0x92, 0x3a, 0x6a, 0x62, 0x1f, 0xc5, 0x74, 0xea, 0x3f, 0xcb, 0xc0, 0x32, 0x8b, 0x93, + 0x27, 0x78, 0x54, 0x1f, 0x5a, 0x9d, 0x56, 0x05, 0xf3, 0xcc, 0x1d, 0x32, 0x98, 0x67, 0x7e, 0x80, + 0x60, 0x9e, 0x6c, 0xc0, 0x23, 0xd1, 0x80, 0x75, 0x58, 0x49, 0x1f, 0x0f, 0x17, 0x76, 0x46, 0x60, + 0x86, 0x15, 0x1a, 0x5a, 0x11, 0x97, 0x82, 0xc8, 0x66, 0x0f, 0x17, 0x44, 0x36, 0x77, 0x34, 0x41, + 0x64, 0x53, 0x6e, 0xf7, 0xa5, 0x5d, 0x1b, 0x18, 0x19, 0xe8, 0xda, 0x40, 0x8f, 0x38, 0xa5, 0xa3, + 0x43, 0xc6, 0x29, 0x1d, 0x1b, 0x28, 0x4e, 0x69, 0xa1, 0x5f, 0x9c, 0xd2, 0xe2, 0xe1, 0xe2, 0x94, + 0x5e, 0x15, 0xe2, 0x94, 0x82, 0x1c, 0x46, 0x54, 0x16, 0xde, 0x93, 0x01, 0x4b, 0x8f, 0x3a, 0xfc, + 0xe5, 0x3c, 0xcc, 0xc6, 0x7a, 0x66, 0x88, 0xfa, 0xdf, 0xb2, 0x21, 0xa2, 0x0e, 0x2d, 0x8e, 0xff, + 0x12, 0x51, 0xfb, 0x22, 0xaa, 0xb0, 0x10, 0x31, 0x8a, 0xf1, 0xb3, 0x2c, 0xcc, 0xb3, 0x9c, 0x41, + 0xe5, 0x8c, 0xd7, 0x62, 0x72, 0xc6, 0xb3, 0x46, 0x4a, 0x03, 0x69, 0x02, 0x06, 0x97, 0xd1, 0x69, + 0xe0, 0x41, 0x4e, 0xf1, 0x27, 0x58, 0x32, 0x8d, 0x37, 0xe8, 0x3f, 0xbd, 0xf9, 0x3d, 0x0f, 0x53, + 0x6e, 0xbb, 0xb9, 0x2f, 0xd3, 0x68, 0x7a, 0xdf, 0x77, 0x12, 0x67, 0x08, 0xe4, 0x76, 0x18, 0xc9, + 0xe3, 0x26, 0x54, 0x93, 0xf3, 0xc4, 0x18, 0xf2, 0x79, 0x28, 0x30, 0xf2, 0xc1, 0x25, 0x8d, 0x09, + 0x43, 0x0a, 0x1b, 0x6b, 0x86, 0xf9, 0xfa, 0x27, 0xe1, 0x52, 0x1e, 0x5e, 0x66, 0x18, 0x78, 0x11, + 0x92, 0x7c, 0x77, 0x1d, 0xe6, 0xe2, 0xdd, 0xb3, 0x41, 0x9c, 0x8d, 0xd4, 0xce, 0x0c, 0x0b, 0xf1, + 0x27, 0x8f, 0x81, 0x67, 0xeb, 0x7f, 0x98, 0x09, 0x77, 0xff, 0xcf, 0x5b, 0x70, 0x50, 0x04, 0x04, + 0xcf, 0x2b, 0x03, 0x82, 0x27, 0x19, 0x6e, 0xb4, 0x67, 0x62, 0xa2, 0xc5, 0xf7, 0x32, 0xb0, 0x10, + 0xbb, 0xce, 0x3d, 0x34, 0xb7, 0xfd, 0x92, 0x02, 0xdb, 0x7b, 0x05, 0x10, 0x8c, 0xef, 0x01, 0x7d, + 0x0b, 0x16, 0x53, 0x60, 0x62, 0xcb, 0xb3, 0xa6, 0xe8, 0x21, 0xc3, 0x2e, 0x8c, 0x28, 0x43, 0x22, + 0x26, 0xfb, 0x50, 0x0c, 0x7c, 0x68, 0xea, 0x3d, 0xf4, 0xc0, 0x97, 0x13, 0x03, 0x8f, 0x91, 0x38, + 0x0b, 0x0b, 0x82, 0x52, 0x81, 0x41, 0x29, 0x9d, 0x62, 0x9b, 0x64, 0x55, 0xdb, 0x44, 0xdf, 0xc1, + 0xb2, 0x59, 0x5a, 0x17, 0x6c, 0xfe, 0xaf, 0xc1, 0x54, 0x7c, 0xa0, 0x7c, 0xb3, 0xa7, 0x2d, 0x40, + 0x25, 0x36, 0x56, 0x5f, 0xff, 0xcd, 0x4c, 0x62, 0xb4, 0x9f, 0x0b, 0x15, 0xa8, 0xc3, 0x52, 0x1a, + 0x18, 0x47, 0x87, 0x6e, 0xef, 0x27, 0xb0, 0xed, 0x08, 0xcf, 0xe4, 0x92, 0x68, 0x13, 0xdb, 0xe5, + 0xdf, 0xc9, 0xc0, 0xa9, 0x38, 0xa0, 0x9f, 0xeb, 0xa9, 0xdc, 0x59, 0x38, 0xdd, 0x0f, 0x1e, 0x7e, + 0x54, 0x9d, 0x85, 0xd2, 0x8d, 0x96, 0xe5, 0x34, 0x99, 0xac, 0x83, 0x20, 0xbf, 0xed, 0xb9, 0x2d, + 0xee, 0xf2, 0x86, 0xff, 0xe3, 0xb4, 0x5d, 0xd7, 0x0f, 0x38, 0x74, 0xf8, 0x3f, 0x09, 0xdc, 0xe1, + 0x7a, 0x2c, 0x44, 0xb0, 0x49, 0xfe, 0x63, 0x3a, 0x2b, 0x04, 0xee, 0xf0, 0xfd, 0x26, 0xa3, 0x9f, + 0x42, 0x50, 0x8e, 0x4d, 0xbf, 0x89, 0x2e, 0xc1, 0xb4, 0x58, 0x2c, 0xb0, 0xbc, 0x20, 0x68, 0xf2, + 0x47, 0x1a, 0x90, 0x50, 0x96, 0xe5, 0xa0, 0xd3, 0x30, 0x61, 0x75, 0x83, 0x5d, 0x3c, 0x10, 0x66, + 0x67, 0x60, 0x0f, 0x35, 0xc8, 0xa9, 0xe8, 0x19, 0x18, 0xc7, 0x29, 0xb5, 0xae, 0x6f, 0x7b, 0x64, + 0x3a, 0xd9, 0x43, 0x0d, 0x38, 0xf1, 0x21, 0x4b, 0x43, 0x6f, 0xb0, 0x42, 0x1d, 0xcb, 0xf7, 0x3f, + 0x74, 0x3d, 0x26, 0x5b, 0x0f, 0x14, 0x5c, 0x84, 0x34, 0x74, 0x9f, 0xd5, 0xd3, 0xbf, 0x4f, 0xa2, + 0x24, 0xd4, 0x6d, 0x67, 0x8f, 0x3d, 0xa5, 0x71, 0x5a, 0x32, 0x86, 0x23, 0x43, 0xcc, 0x14, 0x63, + 0x9e, 0xbc, 0x00, 0x65, 0x1b, 0xcf, 0xb8, 0x1c, 0x63, 0xa3, 0x6c, 0x08, 0xcb, 0x70, 0xeb, 0x98, + 0x59, 0xb2, 0xa3, 0x4f, 0x7d, 0x49, 0xb0, 0x8f, 0xdf, 0x7d, 0x67, 0xed, 0xf6, 0xc6, 0x75, 0x1a, + 0xd4, 0xe2, 0xc6, 0x9d, 0xb5, 0x8d, 0xdb, 0x95, 0x8c, 0x10, 0x54, 0xe2, 0x13, 0x98, 0xe0, 0xfd, + 0x0e, 0x1b, 0x4d, 0x62, 0x15, 0xc6, 0x3d, 0xd6, 0x94, 0xe8, 0x1e, 0x35, 0x2e, 0x0d, 0xcc, 0x2c, + 0x7b, 0xc2, 0x97, 0xfe, 0x57, 0x61, 0x96, 0xe7, 0x0e, 0xcd, 0xe7, 0x0e, 0xd3, 0xff, 0x0d, 0x98, + 0x8b, 0xf7, 0xcf, 0x88, 0xcc, 0x05, 0x28, 0xf0, 0x92, 0x21, 0x00, 0xf2, 0x4c, 0x99, 0x61, 0x01, + 0xfd, 0x3d, 0xa8, 0xf2, 0xbc, 0x23, 0x67, 0x00, 0x6f, 0xc2, 0x71, 0x45, 0xdb, 0x0c, 0xca, 0x8b, + 0x50, 0xe4, 0x40, 0x70, 0x8a, 0x9f, 0x00, 0x33, 0x2a, 0x81, 0xb9, 0xec, 0x5c, 0x34, 0x1b, 0x4f, + 0x9f, 0xb8, 0x93, 0x60, 0xa7, 0x18, 0xe7, 0x47, 0x58, 0xb0, 0xd3, 0xfd, 0x8e, 0xad, 0xdf, 0x84, + 0xf9, 0x04, 0x4c, 0x87, 0x59, 0x04, 0x01, 0x97, 0x86, 0x16, 0x1d, 0x0e, 0x83, 0x4b, 0xd5, 0x68, + 0x6e, 0x63, 0x44, 0xf3, 0x41, 0x04, 0xd9, 0x11, 0xb2, 0x19, 0xa1, 0xbf, 0x18, 0x7f, 0xf9, 0x7e, + 0x16, 0x4e, 0xf0, 0x2c, 0x16, 0x8f, 0xc6, 0xde, 0xbc, 0xf3, 0xe0, 0xfe, 0x10, 0x13, 0x72, 0x12, + 0xf0, 0x60, 0x9d, 0x0e, 0x0f, 0xd3, 0x9e, 0x25, 0x07, 0x3c, 0xa5, 0x30, 0x6d, 0xa3, 0x81, 0xd6, + 0x60, 0x46, 0x9a, 0x33, 0x99, 0x5e, 0xc9, 0x53, 0x77, 0xeb, 0x98, 0x89, 0xc4, 0xc9, 0x63, 0xdc, + 0xe4, 0x6d, 0x98, 0x17, 0x9a, 0x20, 0xb8, 0x20, 0x87, 0x0b, 0x9a, 0x37, 0xd4, 0xe8, 0x7b, 0xeb, + 0x98, 0x39, 0xeb, 0xc9, 0x39, 0x4c, 0x49, 0x8f, 0x48, 0xdd, 0x12, 0x2c, 0xa8, 0x27, 0x85, 0xcd, + 0xda, 0xd7, 0x32, 0x30, 0x69, 0xf2, 0xf1, 0x0c, 0x4b, 0x0c, 0x2f, 0x93, 0xf3, 0x39, 0x3e, 0x5f, + 0x11, 0x06, 0x4d, 0x18, 0x61, 0x17, 0x04, 0x85, 0xc6, 0x3d, 0xf1, 0x53, 0xff, 0x7b, 0x59, 0x18, + 0x97, 0x0a, 0xa0, 0x33, 0x12, 0x97, 0x98, 0x96, 0xab, 0x8b, 0x6c, 0x62, 0x80, 0x15, 0x9a, 0x83, + 0x51, 0xab, 0x1e, 0x38, 0x7b, 0x36, 0xdb, 0xaf, 0xec, 0x0b, 0x5d, 0x84, 0x10, 0x93, 0x53, 0x2c, + 0xed, 0x25, 0x9e, 0x8f, 0xb5, 0xda, 0x17, 0xa1, 0xe0, 0xdb, 0x7b, 0xb6, 0xe7, 0x04, 0xfc, 0xfe, + 0xd6, 0x7c, 0x0c, 0xac, 0x4d, 0x96, 0x6d, 0x86, 0x05, 0xfb, 0xb1, 0x24, 0x7d, 0x15, 0x0a, 0xbc, + 0x16, 0x2e, 0xf3, 0xf0, 0xee, 0x5b, 0x77, 0xef, 0xbd, 0x7b, 0x97, 0x3a, 0xe5, 0x5f, 0x33, 0x37, + 0x1e, 0x6c, 0x5c, 0x23, 0xcf, 0x24, 0x94, 0x60, 0xec, 0xdd, 0x35, 0xf3, 0xee, 0xc6, 0xdd, 0x37, + 0x2a, 0x59, 0xfd, 0xeb, 0x94, 0x9c, 0xd1, 0x8e, 0x87, 0xe6, 0x1f, 0x87, 0x5c, 0xb2, 0xe3, 0x84, + 0x7c, 0xc9, 0x30, 0x30, 0x8c, 0xfa, 0x56, 0x86, 0xd0, 0x6e, 0x9a, 0x37, 0x28, 0x63, 0x78, 0x91, + 0x2d, 0x78, 0x96, 0xcc, 0xec, 0xb2, 0x91, 0xda, 0x80, 0x78, 0x20, 0xde, 0x6f, 0x76, 0x77, 0x41, + 0x53, 0xb5, 0xc3, 0xc8, 0xec, 0xf3, 0x00, 0xe1, 0x98, 0x38, 0x1b, 0xa9, 0x18, 0xb1, 0xbd, 0x60, + 0x0a, 0x65, 0x50, 0x15, 0xc6, 0xf8, 0x3d, 0x22, 0x16, 0x56, 0x99, 0x7d, 0xea, 0xef, 0x08, 0xd3, + 0x71, 0x94, 0x27, 0x0f, 0x6f, 0x12, 0x16, 0x1b, 0x6b, 0x97, 0xc1, 0x6f, 0x10, 0x2e, 0x48, 0xf3, + 0xd8, 0x6a, 0x27, 0xc1, 0x8f, 0x8a, 0xc8, 0x78, 0x33, 0x34, 0xaf, 0x38, 0x02, 0xbc, 0x89, 0xf1, + 0x8b, 0x87, 0x02, 0x78, 0x47, 0xc8, 0x30, 0xc4, 0x1e, 0x93, 0x1a, 0xc9, 0x09, 0x39, 0xda, 0xd7, + 0x51, 0xf8, 0xf8, 0xaa, 0x2e, 0xac, 0xa6, 0xc4, 0x15, 0x8b, 0x9d, 0x01, 0x46, 0x67, 0x30, 0x71, + 0x78, 0x52, 0x01, 0x3e, 0x0a, 0x1f, 0xdf, 0xa3, 0x04, 0x38, 0xb6, 0xa6, 0xdf, 0xc8, 0xf1, 0xc3, + 0x57, 0x5e, 0x60, 0xd8, 0xc3, 0xd7, 0xb4, 0x76, 0x94, 0xb6, 0xd1, 0x03, 0x3c, 0xa0, 0x97, 0x66, + 0xf2, 0xcc, 0x0f, 0x64, 0xf2, 0x54, 0x08, 0x87, 0x23, 0x4a, 0xe1, 0xf0, 0x0a, 0x70, 0xcf, 0xf9, + 0xda, 0x5e, 0x18, 0x33, 0x8f, 0xdc, 0xf8, 0xe2, 0x26, 0xd2, 0x39, 0x96, 0x1f, 0x85, 0xd4, 0x23, + 0xb7, 0xbc, 0x86, 0xb1, 0x94, 0xd6, 0xf9, 0x11, 0xad, 0x62, 0xf2, 0x12, 0x47, 0xb4, 0x1c, 0x0d, + 0xe2, 0x47, 0xb4, 0x72, 0xf8, 0x3d, 0x7e, 0x44, 0xcb, 0x53, 0x7d, 0xfd, 0x9b, 0x99, 0x38, 0x2e, + 0x1c, 0x21, 0x21, 0x54, 0x4d, 0x70, 0x5e, 0xa9, 0x38, 0x84, 0x67, 0xb5, 0x09, 0x28, 0x12, 0x67, + 0xb5, 0x52, 0x84, 0xbc, 0xd4, 0x81, 0xc6, 0x51, 0xfe, 0x6b, 0x89, 0x3d, 0xf8, 0x39, 0x9e, 0xd5, + 0xc6, 0x41, 0x60, 0xdb, 0xee, 0x57, 0xe3, 0x93, 0xc0, 0x45, 0xbf, 0x23, 0xa1, 0xa8, 0x2b, 0xf1, + 0x3d, 0x1d, 0xb5, 0x2e, 0xf8, 0x5f, 0xc7, 0x26, 0xf3, 0xf3, 0xf6, 0xbf, 0xee, 0x03, 0x0e, 0x03, + 0xdc, 0x80, 0xd9, 0x3b, 0x76, 0xe0, 0x39, 0x75, 0x7f, 0x20, 0xe4, 0xd5, 0x7f, 0x96, 0x85, 0xb9, + 0x78, 0x05, 0x86, 0x67, 0x2f, 0x92, 0x80, 0x81, 0x41, 0x74, 0x77, 0x48, 0x5d, 0x8e, 0x5c, 0x66, + 0xf3, 0x4d, 0x5a, 0x16, 0x3d, 0x0b, 0x13, 0x4d, 0xcb, 0x0f, 0x6a, 0xfe, 0x7e, 0xbb, 0x1e, 0xdd, + 0x61, 0xca, 0x99, 0x65, 0x9c, 0xba, 0xb9, 0xdf, 0xae, 0x3f, 0x70, 0x5a, 0xb6, 0xf6, 0x3f, 0x32, + 0x24, 0x7e, 0x49, 0x20, 0xdd, 0xc0, 0xcf, 0xc8, 0x9e, 0x69, 0xa7, 0x60, 0xa2, 0xdd, 0x6d, 0xd5, + 0x04, 0xef, 0x34, 0xea, 0x34, 0x31, 0xde, 0xee, 0xb6, 0xee, 0x46, 0x0e, 0x6a, 0xe7, 0x61, 0x8a, + 0x3a, 0x56, 0xf0, 0xc3, 0x1a, 0xe7, 0x23, 0x2a, 0x27, 0xe7, 0xcd, 0x49, 0x92, 0xc1, 0x0e, 0x6b, + 0x58, 0xd4, 0x20, 0xdc, 0x64, 0xe4, 0xc3, 0x91, 0x27, 0xe5, 0xca, 0xed, 0x6e, 0x2b, 0xf2, 0xd4, + 0x88, 0x79, 0xbd, 0x8e, 0xf4, 0xf4, 0x7a, 0x3d, 0x07, 0x15, 0xda, 0xbb, 0xe4, 0x44, 0x17, 0x75, + 0x1e, 0x01, 0xaa, 0xff, 0x5e, 0x09, 0xa6, 0x29, 0x2c, 0x47, 0xe1, 0x11, 0x3f, 0x58, 0x50, 0x09, + 0x61, 0x76, 0x73, 0xbd, 0xfc, 0xfe, 0xf2, 0x09, 0xbf, 0xbf, 0xb7, 0x93, 0x7e, 0x7f, 0x23, 0x04, + 0x0d, 0xce, 0x1a, 0x8a, 0x41, 0x1c, 0xce, 0xdf, 0x6f, 0x74, 0x10, 0x7f, 0xbf, 0xb1, 0x41, 0x5d, + 0xd2, 0x0b, 0x43, 0x7b, 0xf5, 0x15, 0x0f, 0xe4, 0x92, 0x0e, 0x07, 0x88, 0xb1, 0x58, 0x3a, 0xb4, + 0x03, 0x5f, 0xf9, 0x90, 0x0e, 0x7c, 0xe3, 0xfd, 0x1d, 0xf8, 0xbe, 0x2c, 0xbb, 0x95, 0x4f, 0x30, + 0xc5, 0x45, 0xb5, 0xbc, 0x29, 0xee, 0xe4, 0xb1, 0xad, 0x32, 0x79, 0x88, 0x50, 0x83, 0x95, 0x14, + 0xdf, 0xf3, 0x4d, 0xa5, 0x3b, 0xf9, 0x94, 0x14, 0x58, 0xeb, 0x28, 0xdd, 0xc8, 0xd3, 0x3d, 0x06, + 0xd1, 0x87, 0xfd, 0x1c, 0x1d, 0x69, 0xe8, 0x87, 0x97, 0x94, 0x50, 0x1d, 0xa1, 0xfb, 0xf8, 0xcc, + 0xff, 0x03, 0xee, 0xe3, 0xdf, 0x54, 0xb9, 0x8f, 0xbf, 0x2e, 0xd9, 0x42, 0xce, 0x0f, 0xb4, 0x7a, + 0x4f, 0xdf, 0x6d, 0x7c, 0x8e, 0x87, 0x69, 0x8e, 0xa9, 0x2c, 0xff, 0x28, 0xc3, 0xe9, 0xf6, 0xd0, + 0xaa, 0xca, 0xb9, 0x94, 0x93, 0xcd, 0x03, 0x48, 0xf3, 0xb9, 0x41, 0xa4, 0xf9, 0x68, 0x2c, 0x31, + 0xe9, 0xa0, 0x0b, 0x73, 0x34, 0x7d, 0x50, 0x25, 0xe6, 0xba, 0xca, 0x2f, 0x33, 0x9b, 0xe2, 0x97, + 0xc9, 0xc6, 0x9b, 0xf0, 0xce, 0xd4, 0x7f, 0x1d, 0xe6, 0x13, 0xdd, 0x32, 0x21, 0xe3, 0x0c, 0x8c, + 0x71, 0xd1, 0x31, 0xc3, 0x08, 0xb8, 0x88, 0x0a, 0x26, 0xcf, 0xed, 0xeb, 0x40, 0x89, 0x34, 0x28, + 0xd4, 0xdd, 0x56, 0x87, 0x3c, 0xe9, 0x46, 0xa5, 0xd0, 0xf0, 0x5b, 0xdf, 0xe4, 0xf3, 0x11, 0x13, + 0x8a, 0x54, 0x91, 0x1f, 0xa2, 0x99, 0xc8, 0x8a, 0x33, 0x91, 0x94, 0xc9, 0x5e, 0xe7, 0x0f, 0x1c, + 0xc7, 0x05, 0xa7, 0x53, 0x52, 0x2c, 0xa8, 0xc4, 0x90, 0x58, 0xa6, 0xfe, 0xdb, 0x21, 0x62, 0xc9, + 0xf2, 0xf7, 0x01, 0x80, 0x4a, 0xe7, 0xef, 0x49, 0x1b, 0xfe, 0x41, 0xe4, 0x9a, 0x08, 0x81, 0x62, + 0x72, 0xf9, 0xb7, 0x32, 0x50, 0x3d, 0x0a, 0xe7, 0x49, 0x83, 0xf3, 0x9e, 0x74, 0xbf, 0x49, 0xb1, + 0x80, 0x62, 0xf6, 0x4f, 0xc0, 0xf1, 0x74, 0xaf, 0xc7, 0x7f, 0x0c, 0x61, 0x90, 0x92, 0xa1, 0x85, + 0xad, 0x28, 0xb2, 0x57, 0x56, 0x8a, 0xec, 0x95, 0x3e, 0xf7, 0xbf, 0x92, 0x1e, 0x7f, 0x2b, 0x8c, + 0x0f, 0x24, 0x53, 0xbf, 0xa7, 0x11, 0x88, 0x6b, 0x80, 0x88, 0x56, 0xa3, 0x03, 0x44, 0xb4, 0x52, + 0xca, 0x5e, 0x63, 0x83, 0xc9, 0x5e, 0x5b, 0x69, 0xa1, 0xa2, 0xa8, 0xec, 0x66, 0xa8, 0x27, 0x67, + 0x98, 0x98, 0x51, 0xc5, 0x5e, 0x31, 0xa3, 0x76, 0xd3, 0x63, 0x46, 0x01, 0xbb, 0xe3, 0xa2, 0x04, + 0xe8, 0xe0, 0xc1, 0xa3, 0xba, 0x7d, 0x82, 0x47, 0x95, 0x98, 0x04, 0x31, 0x40, 0x77, 0x07, 0x89, + 0x22, 0x15, 0xdb, 0xf2, 0xe5, 0x9e, 0xf2, 0xd9, 0x03, 0xa5, 0xc4, 0x45, 0xe5, 0xc8, 0xd3, 0x6a, + 0xc8, 0x06, 0x08, 0xcb, 0xf4, 0xcb, 0x98, 0x4a, 0x03, 0xb4, 0xf6, 0x9b, 0x2a, 0xa9, 0xe9, 0x4b, + 0x92, 0xd4, 0x74, 0x61, 0xb0, 0x15, 0x18, 0x4e, 0x6c, 0x9a, 0x87, 0xd9, 0x58, 0x2f, 0x8c, 0x9e, + 0x6e, 0x84, 0xe4, 0x74, 0x58, 0x19, 0x48, 0xe8, 0x23, 0x46, 0xb3, 0xf7, 0x60, 0x9e, 0x65, 0x3c, + 0x5d, 0xe1, 0xe4, 0x1b, 0x19, 0xa8, 0x26, 0x3b, 0x8e, 0xdc, 0x30, 0x43, 0x2f, 0x41, 0xee, 0x86, + 0x29, 0x45, 0xa2, 0x31, 0xc3, 0xfc, 0xe1, 0x24, 0x94, 0x07, 0xe1, 0xb4, 0x1c, 0xe5, 0xe9, 0xcb, + 0x3a, 0xcc, 0xc5, 0x5b, 0x8d, 0x5c, 0x33, 0x19, 0xe0, 0xa1, 0x6b, 0xa6, 0x3c, 0x2e, 0x9e, 0x8d, + 0x65, 0x27, 0x96, 0x73, 0x84, 0x67, 0x1a, 0x11, 0x16, 0xc4, 0x04, 0x8c, 0xbb, 0x70, 0xfc, 0x9e, + 0xb7, 0x63, 0xb5, 0x9d, 0x8f, 0x8e, 0xe4, 0x38, 0x43, 0x5f, 0x00, 0x4d, 0xd5, 0x1e, 0xeb, 0x6d, + 0x09, 0x16, 0xc4, 0xdc, 0x38, 0xe2, 0xe9, 0xef, 0xc1, 0x62, 0x4a, 0x3e, 0x9b, 0xc6, 0x2f, 0xc0, + 0xb8, 0x2b, 0x14, 0x88, 0x02, 0xd4, 0x8a, 0xd5, 0xd8, 0x8c, 0xca, 0x25, 0xf5, 0xe7, 0x65, 0xc8, + 0x52, 0x24, 0x53, 0x61, 0x1a, 0xf5, 0x77, 0xe0, 0x84, 0xb2, 0x06, 0x83, 0xe5, 0x15, 0x28, 0x8b, + 0x3d, 0xb0, 0x19, 0x52, 0x82, 0x22, 0x15, 0xd4, 0x2f, 0xc9, 0x73, 0xde, 0x57, 0x1a, 0x8d, 0x4f, + 0x6a, 0x6c, 0x09, 0xbf, 0x0a, 0x53, 0xe6, 0x51, 0xc4, 0x7d, 0x38, 0xd7, 0x3b, 0xa2, 0xab, 0x18, + 0xcb, 0x75, 0x06, 0x90, 0x99, 0xbc, 0xe8, 0xcb, 0x00, 0x39, 0x02, 0xb5, 0xed, 0xa0, 0x80, 0xc4, + 0x48, 0xdb, 0x45, 0x98, 0x31, 0x07, 0xbf, 0xb6, 0xa7, 0x5f, 0x85, 0x59, 0x53, 0x79, 0x0d, 0xed, + 0xa4, 0x1c, 0x06, 0xb9, 0x64, 0x44, 0xc1, 0x72, 0x59, 0xb0, 0x63, 0xfd, 0x6d, 0x0a, 0xc0, 0x51, + 0x12, 0x91, 0x97, 0x61, 0xda, 0x54, 0x5c, 0x19, 0x5b, 0x86, 0xbc, 0x17, 0xdd, 0x13, 0x93, 0x60, + 0x21, 0x19, 0xfa, 0x7d, 0x3a, 0xfd, 0x47, 0x48, 0x35, 0xd8, 0xec, 0xc6, 0xf0, 0xed, 0x1b, 0x19, + 0xd0, 0x48, 0xe7, 0x9f, 0xab, 0x85, 0x7e, 0x11, 0x4e, 0x28, 0x81, 0x60, 0x40, 0xfe, 0x9d, 0x0c, + 0x94, 0x58, 0xb4, 0x55, 0xe2, 0x1f, 0x32, 0x03, 0x23, 0x2d, 0xeb, 0x03, 0x97, 0x5b, 0xbd, 0xe9, + 0x07, 0x49, 0x75, 0xda, 0x2e, 0x7f, 0xd1, 0x88, 0x7e, 0xe0, 0xd4, 0x8e, 0x15, 0xd4, 0x77, 0x79, + 0xb4, 0x41, 0xf2, 0x41, 0xf4, 0x8f, 0x5d, 0xab, 0xbd, 0xc3, 0xcc, 0xd8, 0x58, 0xff, 0xa0, 0x9f, + 0x68, 0x11, 0x60, 0xc7, 0x09, 0x6a, 0x75, 0xb7, 0xd5, 0x72, 0x02, 0xe6, 0xb3, 0x55, 0xdc, 0x71, + 0x82, 0x6b, 0x24, 0x01, 0x67, 0x6f, 0x75, 0x9d, 0x66, 0xa3, 0xd6, 0xe0, 0x67, 0x76, 0x45, 0xb3, + 0x48, 0x52, 0xae, 0x5b, 0x81, 0xad, 0x4f, 0xc3, 0x14, 0x03, 0xf4, 0x0d, 0x9b, 0x23, 0x90, 0xfe, + 0x1a, 0x20, 0x31, 0x91, 0xa1, 0xc0, 0xe9, 0x28, 0xb8, 0x61, 0x86, 0x69, 0x70, 0xc2, 0x18, 0xa3, + 0x27, 0x9e, 0xbe, 0x9d, 0x85, 0x39, 0xf6, 0x14, 0xe4, 0x5a, 0x3d, 0x70, 0xf6, 0x86, 0xdb, 0x8e, + 0xa7, 0x60, 0xdc, 0xa2, 0xad, 0x90, 0x97, 0xaf, 0x98, 0x4a, 0x7c, 0xeb, 0x98, 0x59, 0x8e, 0x92, + 0x37, 0x1a, 0xe8, 0x19, 0x28, 0x37, 0x69, 0x9f, 0x35, 0xd2, 0x3a, 0x9e, 0xbc, 0xf2, 0xad, 0x63, + 0x66, 0x89, 0xa5, 0x5e, 0xc7, 0x6d, 0x9d, 0x86, 0x89, 0xae, 0x8f, 0xf5, 0x91, 0x2d, 0xcb, 0xb7, + 0x1b, 0xe1, 0x5b, 0x0a, 0xb8, 0x31, 0x92, 0xbe, 0x8e, 0x93, 0x37, 0x1a, 0xe8, 0x55, 0x38, 0x4e, + 0xbe, 0x1b, 0xac, 0xa0, 0xe5, 0x78, 0x3b, 0x56, 0xa7, 0x43, 0xab, 0x8c, 0xb0, 0x2a, 0x73, 0xb4, + 0x08, 0xa9, 0xb3, 0xc6, 0x0b, 0x6c, 0x34, 0xd6, 0xcb, 0x00, 0x11, 0x64, 0xfa, 0x71, 0x98, 0x4f, + 0xcc, 0x05, 0x43, 0x12, 0x17, 0x66, 0x58, 0xd6, 0xd0, 0x34, 0xeb, 0xd9, 0xc4, 0xc0, 0x28, 0x4a, + 0x49, 0xc3, 0xc2, 0x6c, 0x38, 0xd6, 0x61, 0x74, 0x8c, 0xc4, 0x32, 0x06, 0x3b, 0x46, 0x7a, 0x2f, + 0x5c, 0xe0, 0x38, 0x99, 0xf8, 0x32, 0x4c, 0xf1, 0x65, 0xf0, 0x6c, 0x9f, 0x85, 0x80, 0xcf, 0x30, + 0x77, 0x7e, 0x56, 0x87, 0x17, 0xa6, 0xee, 0xfc, 0xcd, 0x28, 0x91, 0xd0, 0xd4, 0xef, 0xe6, 0x61, + 0x5a, 0x51, 0x10, 0x5d, 0x83, 0xf2, 0xb6, 0x6d, 0x05, 0x5d, 0x1e, 0xd6, 0x2f, 0xc3, 0x02, 0x43, + 0x2a, 0xca, 0x1a, 0x37, 0x69, 0x41, 0xd2, 0x41, 0x69, 0x3b, 0xfa, 0x40, 0x2f, 0x86, 0x81, 0xd7, + 0x28, 0x5d, 0x3f, 0xa1, 0xac, 0x2e, 0xc7, 0x6b, 0xd4, 0xbe, 0x93, 0x81, 0x92, 0xd0, 0xa2, 0xd2, + 0x62, 0x43, 0x84, 0xbd, 0xb6, 0xdf, 0x6d, 0x31, 0x5f, 0x9b, 0x9c, 0x19, 0x7e, 0xa3, 0x7b, 0x50, + 0xb1, 0xdb, 0x81, 0x13, 0x34, 0xc9, 0x93, 0xee, 0x14, 0xfa, 0x1c, 0xbb, 0x39, 0xa5, 0xea, 0xfe, + 0x46, 0x54, 0x98, 0x4e, 0x91, 0x2d, 0x27, 0x68, 0x7f, 0x94, 0x81, 0xc9, 0x58, 0x21, 0x4c, 0x35, + 0xa8, 0x20, 0x4a, 0x5f, 0x7b, 0xa0, 0x1f, 0xe8, 0x25, 0x18, 0xb3, 0x1f, 0x77, 0x1c, 0xcf, 0xf6, + 0x07, 0x78, 0xc7, 0x94, 0x17, 0x45, 0xab, 0x64, 0x96, 0x3c, 0x76, 0x66, 0xdd, 0xbb, 0x12, 0x2b, + 0x89, 0x56, 0x04, 0x9f, 0xd1, 0x89, 0xd5, 0x32, 0x1f, 0x58, 0xa4, 0xa0, 0x68, 0x57, 0xc2, 0xe8, + 0x96, 0x73, 0x52, 0xe0, 0xcc, 0x62, 0xdf, 0xc0, 0x98, 0xdf, 0xce, 0xc0, 0x09, 0x8e, 0xb8, 0x18, + 0x9f, 0xc3, 0xdd, 0x76, 0x98, 0xf0, 0x90, 0x8b, 0x00, 0x6d, 0xb7, 0x61, 0x0b, 0x62, 0x7b, 0xce, + 0x2c, 0xe2, 0x14, 0x2a, 0xb5, 0x2f, 0x43, 0xc9, 0xa3, 0xf7, 0x39, 0xc3, 0xd7, 0x5f, 0x73, 0x26, + 0xd0, 0x24, 0x12, 0x79, 0x71, 0x1f, 0x16, 0x94, 0xb0, 0xf4, 0x61, 0x40, 0xf1, 0x38, 0x86, 0xd9, + 0x64, 0x1c, 0xc3, 0x58, 0x1c, 0xc6, 0x5c, 0x3c, 0x0e, 0xa3, 0xfe, 0x0f, 0x33, 0xb0, 0x98, 0xd2, + 0x37, 0xdb, 0x7e, 0x26, 0xcc, 0x36, 0x55, 0x05, 0xd8, 0x6e, 0x59, 0x30, 0x7a, 0x4c, 0xa3, 0xa9, + 0xae, 0x2a, 0xe9, 0x31, 0x59, 0x59, 0x8f, 0x89, 0x2b, 0x41, 0xb9, 0xc4, 0x3d, 0xf7, 0x1f, 0x8e, + 0xc0, 0xd2, 0x1d, 0xab, 0x8d, 0x09, 0xe5, 0x01, 0x6f, 0x19, 0x5e, 0x4e, 0xbd, 0x17, 0x24, 0x1d, + 0x73, 0xc5, 0x2d, 0xe9, 0x03, 0xbb, 0x3d, 0xb3, 0xd9, 0xf6, 0x6c, 0xbf, 0xdb, 0x64, 0x98, 0x9e, + 0x23, 0xb3, 0x6d, 0xd2, 0x14, 0x74, 0x5d, 0xb8, 0x46, 0x4b, 0xb1, 0xfa, 0xac, 0xd1, 0x7b, 0x28, + 0x8a, 0x0b, 0xb5, 0xe8, 0x4d, 0x00, 0xeb, 0x43, 0x5f, 0xf6, 0xb2, 0x3d, 0xd7, 0xaf, 0x9d, 0xb5, + 0x77, 0x85, 0xd7, 0x36, 0xad, 0x0f, 0xd9, 0x6b, 0x9b, 0x68, 0x13, 0xc6, 0xe9, 0x46, 0x94, 0xdd, + 0x6d, 0x9f, 0xeb, 0xd7, 0x1c, 0xbd, 0xa4, 0x1b, 0xb6, 0x58, 0xde, 0x11, 0xbe, 0xd1, 0x7d, 0x28, + 0x5b, 0x1f, 0x61, 0xaa, 0xca, 0xda, 0xdc, 0x26, 0x6d, 0x5e, 0xe8, 0x0b, 0x22, 0xae, 0x13, 0xdd, + 0x6b, 0xb0, 0xa2, 0x4f, 0x6d, 0x1d, 0x8a, 0xe1, 0x00, 0xe8, 0x9e, 0xde, 0x89, 0xde, 0x75, 0x64, + 0x5f, 0x64, 0x1b, 0xda, 0x8f, 0x03, 0x76, 0xd3, 0x99, 0x87, 0x5c, 0xb6, 0x1f, 0x07, 0xe4, 0x0e, + 0xb3, 0x36, 0x01, 0x65, 0x11, 0x6a, 0x6d, 0x1c, 0x4a, 0x42, 0x8f, 0xfa, 0x2b, 0x87, 0xbc, 0xa6, + 0xbc, 0x5e, 0x80, 0x51, 0xd6, 0xc4, 0x9f, 0x64, 0x61, 0x46, 0x1e, 0x23, 0xa3, 0x26, 0x2a, 0xf2, + 0xce, 0x04, 0xc0, 0x6c, 0x64, 0x5f, 0xbf, 0x9c, 0xe2, 0xaa, 0xd5, 0x07, 0x3d, 0xe5, 0x5b, 0xc7, + 0xf9, 0x83, 0xdf, 0x3a, 0x5e, 0x86, 0xd2, 0xa3, 0x2b, 0x7e, 0x4d, 0x8e, 0x32, 0x0d, 0x8f, 0xae, + 0xf8, 0x3c, 0xb8, 0xff, 0x4b, 0x52, 0xa0, 0xe9, 0x89, 0xd5, 0x05, 0x43, 0x35, 0xca, 0x18, 0x8f, + 0xd3, 0x0d, 0x75, 0xe8, 0xe1, 0x32, 0x14, 0xee, 0xba, 0xc1, 0x5a, 0xa3, 0x61, 0x37, 0xd8, 0x9c, + 0x92, 0xbf, 0x59, 0xfd, 0xf7, 0xf2, 0xb0, 0x9c, 0x8a, 0x21, 0x8c, 0x18, 0x5d, 0x12, 0x9d, 0x3d, + 0xa8, 0x6b, 0x96, 0x0a, 0x14, 0xf1, 0x15, 0x86, 0x68, 0xc7, 0x65, 0xd9, 0xb3, 0xd1, 0x7d, 0x3a, + 0x51, 0x6d, 0xb9, 0xb7, 0x14, 0x5b, 0xee, 0x7c, 0xdf, 0x86, 0x52, 0xf6, 0xdc, 0x03, 0xf5, 0x9e, + 0xbb, 0xd8, 0xb7, 0xbd, 0x9e, 0x9b, 0xee, 0x6d, 0xe5, 0xa6, 0x7b, 0xae, 0x3f, 0x90, 0xe9, 0xbb, + 0xee, 0xbc, 0xb8, 0xeb, 0xe4, 0xdd, 0x95, 0x79, 0xfa, 0xbb, 0xeb, 0x2f, 0xf3, 0xb0, 0x20, 0x0f, + 0xe6, 0xf0, 0x3a, 0xea, 0x21, 0xb7, 0xda, 0xa0, 0x2e, 0x78, 0x68, 0x3d, 0x41, 0xe8, 0x4f, 0x1b, + 0xbd, 0x60, 0x57, 0xe1, 0x1c, 0x23, 0x10, 0xa3, 0x11, 0x81, 0xb8, 0xa5, 0xc0, 0xc2, 0x33, 0xbd, + 0xdb, 0x4d, 0x41, 0xc1, 0xb7, 0xd5, 0x28, 0x78, 0xbe, 0x77, 0x63, 0x3d, 0xf1, 0xef, 0xae, 0x12, + 0xff, 0xce, 0xf5, 0x01, 0x2f, 0x1d, 0xf9, 0x9e, 0x19, 0x80, 0xe4, 0x3f, 0x05, 0xac, 0xbb, 0x0f, + 0x8b, 0x29, 0x23, 0x50, 0x91, 0xa4, 0x4c, 0x7f, 0x92, 0xa4, 0xff, 0x9b, 0x04, 0x1e, 0xaf, 0x77, + 0x9b, 0x8f, 0xd6, 0x1a, 0x8d, 0x9f, 0x8f, 0xf4, 0x72, 0x12, 0xca, 0x62, 0x74, 0x6c, 0xf6, 0x9a, + 0x71, 0x49, 0x08, 0x8b, 0x2d, 0x61, 0x6b, 0x5e, 0x89, 0xad, 0x32, 0x84, 0x2a, 0x6c, 0x1d, 0x04, + 0x37, 0x63, 0xad, 0x0c, 0x87, 0x9b, 0xb1, 0xc6, 0x8e, 0x00, 0x37, 0xe3, 0xe0, 0xfd, 0xc2, 0xe3, + 0xe6, 0x72, 0x1c, 0x37, 0xc3, 0x11, 0x30, 0x25, 0xfc, 0xef, 0x67, 0xa1, 0x4a, 0x6c, 0x04, 0x4e, + 0x30, 0x70, 0x64, 0x69, 0x04, 0xf9, 0x86, 0xb5, 0x4f, 0xb5, 0xd9, 0x11, 0x93, 0xfc, 0x47, 0xaf, + 0x43, 0xc1, 0x69, 0x07, 0xb6, 0xb7, 0xc7, 0xc8, 0xe4, 0xc4, 0xaa, 0x6e, 0xa4, 0xb5, 0x6b, 0x6c, + 0xb0, 0x92, 0x66, 0x58, 0x87, 0xc4, 0xa8, 0x71, 0x5a, 0x76, 0xed, 0x23, 0xb7, 0xcd, 0x9f, 0x81, + 0x28, 0xe0, 0x84, 0xf7, 0xdc, 0xb6, 0xdd, 0x23, 0xb4, 0x20, 0x7f, 0x0e, 0x63, 0x54, 0x78, 0x0e, + 0x23, 0x76, 0x22, 0x39, 0xd6, 0xd3, 0x09, 0xc1, 0x80, 0x02, 0x87, 0x26, 0xf1, 0x28, 0xd7, 0x2d, + 0xb7, 0xeb, 0x35, 0xf7, 0xe9, 0x34, 0x5f, 0xb7, 0x9c, 0xe6, 0x7e, 0x25, 0xab, 0xff, 0xcf, 0x2c, + 0x1c, 0x57, 0x8c, 0x8b, 0xed, 0xf4, 0xeb, 0xcc, 0x6c, 0xe4, 0x04, 0xfb, 0x35, 0xa6, 0x18, 0xd2, + 0x37, 0x2b, 0x53, 0xab, 0x18, 0xd7, 0xad, 0xc0, 0x62, 0x56, 0x25, 0x27, 0xd8, 0xc7, 0x5f, 0xda, + 0x77, 0xb3, 0x90, 0x27, 0x96, 0xa3, 0xa7, 0x1e, 0xe1, 0x1f, 0x2d, 0x01, 0xf8, 0xf4, 0x3d, 0x86, + 0xed, 0x6e, 0x93, 0x6b, 0x56, 0x51, 0x0a, 0xc6, 0xe4, 0x6d, 0x12, 0xca, 0x9e, 0xb9, 0xb5, 0xb2, + 0x2f, 0x2c, 0x20, 0x3a, 0xed, 0x5a, 0x87, 0xbd, 0x10, 0x41, 0x56, 0x29, 0x6f, 0x82, 0x13, 0xbe, + 0x19, 0x81, 0xf9, 0x22, 0xd3, 0xdf, 0x1c, 0xb7, 0x4d, 0xc1, 0xc2, 0x6b, 0x96, 0x31, 0x27, 0xa2, + 0x64, 0x02, 0xc1, 0x0c, 0x8c, 0x10, 0x4d, 0x8e, 0xac, 0x5b, 0xde, 0xa4, 0x1f, 0x7a, 0x17, 0xc0, + 0x74, 0x0f, 0xf7, 0x68, 0x5b, 0x68, 0xd0, 0xce, 0x72, 0x83, 0xb6, 0xcb, 0x37, 0x1c, 0x33, 0x68, + 0xa3, 0x79, 0x18, 0xf3, 0xdc, 0xa6, 0x5d, 0x0b, 0x2d, 0xc1, 0xa3, 0xf8, 0x73, 0xa3, 0xa1, 0xbf, + 0x46, 0xbb, 0x65, 0xdb, 0x58, 0x83, 0x02, 0x0b, 0x79, 0x44, 0xad, 0xe3, 0x45, 0x33, 0xfc, 0xc6, + 0x88, 0x68, 0x75, 0x1c, 0x9f, 0x5d, 0xad, 0x23, 0xff, 0xf5, 0xaf, 0x67, 0x60, 0x8a, 0x54, 0x1f, + 0xf6, 0x94, 0x62, 0x98, 0x21, 0xcc, 0x00, 0x12, 0x61, 0x60, 0xdb, 0x9e, 0x83, 0x36, 0xb4, 0x0d, + 0xf0, 0x08, 0x40, 0x8b, 0x99, 0x05, 0x7d, 0x98, 0xc1, 0xa9, 0x4f, 0xf7, 0x80, 0xf6, 0x2a, 0xcc, + 0xc6, 0x3a, 0x15, 0x8e, 0x43, 0x5c, 0xe9, 0x38, 0xc4, 0x15, 0x8e, 0x43, 0x5c, 0x7e, 0x1c, 0xe2, + 0x1e, 0xfd, 0x71, 0x88, 0xab, 0x3e, 0x0e, 0x71, 0xc5, 0xe3, 0x10, 0x57, 0x38, 0x0e, 0x71, 0xd9, + 0x71, 0x88, 0x7b, 0xe4, 0xc7, 0x21, 0x6e, 0xe2, 0x38, 0xc4, 0xa0, 0xd3, 0x75, 0xdf, 0xf6, 0x5a, + 0x8e, 0xef, 0x13, 0xdf, 0xe2, 0x9e, 0xa6, 0xdb, 0xdf, 0xce, 0xc0, 0x5c, 0xbc, 0x02, 0x1b, 0xd3, + 0x15, 0xf9, 0xbc, 0x49, 0x37, 0xd4, 0xe5, 0xe8, 0x51, 0x18, 0xf5, 0x46, 0x61, 0x6f, 0x6e, 0xde, + 0xa0, 0x0f, 0x39, 0xa6, 0x3a, 0xa4, 0x9e, 0x14, 0x7d, 0x21, 0xf0, 0x74, 0x09, 0xad, 0x0a, 0xf7, + 0x7e, 0x2e, 0x02, 0x44, 0x19, 0x98, 0x90, 0x6d, 0x77, 0x9b, 0x4d, 0xfe, 0x3c, 0x7a, 0x86, 0xfa, + 0xc3, 0xe2, 0x24, 0xfa, 0xf4, 0xb9, 0xfe, 0x67, 0x79, 0x40, 0x6b, 0x02, 0xb5, 0x3e, 0x0c, 0x49, + 0xe2, 0x5c, 0x2b, 0x2b, 0x70, 0xad, 0xd5, 0x50, 0x83, 0xa6, 0xec, 0x53, 0x33, 0x92, 0xbd, 0xc4, + 0xdf, 0xf4, 0x51, 0x10, 0xd5, 0xbc, 0x92, 0xa8, 0x5e, 0x86, 0x31, 0xb7, 0x53, 0xdf, 0xaf, 0x37, + 0x6d, 0xe6, 0x61, 0x7f, 0x42, 0xd5, 0xfa, 0x3d, 0x5a, 0xc4, 0xe4, 0x65, 0x45, 0xbe, 0x3b, 0x2a, + 0xf3, 0xdd, 0x83, 0xf0, 0x58, 0xed, 0x5f, 0x66, 0x60, 0x8c, 0xb5, 0x3d, 0x0c, 0x4b, 0xbb, 0x09, + 0x53, 0xe4, 0xda, 0x47, 0x97, 0xd0, 0x8b, 0x81, 0x79, 0xdb, 0x24, 0xae, 0x44, 0x69, 0x0c, 0xe5, + 0x71, 0x87, 0x98, 0x69, 0xfd, 0x2b, 0x6a, 0x4b, 0x05, 0x79, 0x17, 0x89, 0x73, 0x3d, 0x7a, 0x05, + 0x99, 0x3f, 0x67, 0x94, 0x15, 0xde, 0x45, 0xca, 0x49, 0xef, 0x22, 0x91, 0x68, 0x75, 0x74, 0x43, + 0x35, 0x2a, 0x23, 0xab, 0x9b, 0x30, 0x4a, 0xdf, 0xfa, 0x41, 0x1b, 0x61, 0x27, 0x33, 0x86, 0xe2, + 0x55, 0x20, 0x6d, 0xd6, 0x50, 0x3e, 0x0a, 0x84, 0xbe, 0xfe, 0xef, 0xff, 0xeb, 0xf7, 0xb3, 0x65, + 0x04, 0x97, 0xf6, 0x5e, 0xb8, 0xb4, 0x4b, 0x4a, 0xac, 0xfe, 0xf9, 0x08, 0x4c, 0xc8, 0x8f, 0x29, + 0xa0, 0x06, 0x8c, 0x52, 0x5a, 0x8e, 0x16, 0x8c, 0x1e, 0x6f, 0xb6, 0x68, 0x8b, 0x46, 0xcf, 0x17, + 0x54, 0x16, 0x49, 0x6f, 0xf3, 0x3a, 0xc2, 0xbd, 0xf1, 0x5b, 0x2e, 0xd4, 0x51, 0xf0, 0x6a, 0xe6, + 0x3c, 0xee, 0x85, 0xce, 0x75, 0xa2, 0x17, 0x89, 0xd5, 0x24, 0x7a, 0x89, 0x31, 0x01, 0xd6, 0x8b, + 0x96, 0xd2, 0x8b, 0x0f, 0xc5, 0x90, 0x54, 0xa3, 0xe5, 0x3e, 0x0f, 0x9b, 0x68, 0x2b, 0x46, 0x9f, + 0x87, 0x48, 0xf4, 0x67, 0x48, 0x77, 0x8b, 0xe8, 0x44, 0xb2, 0xbb, 0x4b, 0x1f, 0x53, 0x82, 0xf6, + 0x09, 0xfa, 0x08, 0xaf, 0x3c, 0x21, 0xc8, 0x68, 0xd1, 0xe8, 0xf5, 0xe6, 0x88, 0xb6, 0x64, 0xf4, + 0x7c, 0x35, 0x44, 0x7f, 0x9e, 0x74, 0x77, 0x1e, 0x9d, 0xed, 0xd1, 0xdd, 0xa5, 0x8f, 0x31, 0x45, + 0xfe, 0xe4, 0xd2, 0xc7, 0x5d, 0xdc, 0xf7, 0x87, 0xfc, 0x59, 0xd8, 0xc4, 0xb4, 0x4a, 0xb4, 0x3e, + 0x31, 0xad, 0x31, 0xba, 0xcd, 0x3a, 0x3e, 0x3f, 0x78, 0xc7, 0x7f, 0x33, 0x03, 0x93, 0x74, 0x6d, + 0xc2, 0x53, 0x67, 0x74, 0xca, 0x18, 0xe4, 0xd9, 0x10, 0xed, 0xb4, 0x31, 0xd8, 0x73, 0x1e, 0x17, + 0x09, 0x50, 0x67, 0x34, 0x5d, 0x01, 0x14, 0xdd, 0xeb, 0xe1, 0x99, 0xf8, 0xd5, 0xcc, 0xf9, 0xd5, + 0x3f, 0xce, 0x27, 0x5e, 0xc7, 0x17, 0x51, 0xbb, 0x47, 0xdc, 0x78, 0x6d, 0xd1, 0xe8, 0x19, 0xb4, + 0x5d, 0x42, 0x6d, 0xe6, 0x19, 0xcc, 0x4a, 0xc6, 0x51, 0xbb, 0x47, 0xbc, 0xe9, 0x44, 0x2f, 0xbd, + 0x50, 0x3b, 0xd9, 0x4b, 0x0c, 0xb5, 0x7b, 0x07, 0x53, 0xd6, 0x56, 0x8c, 0x3e, 0x61, 0x85, 0x65, + 0xd4, 0x96, 0xbb, 0x8b, 0x50, 0x3b, 0x10, 0x51, 0xbb, 0x57, 0x88, 0x60, 0x6d, 0xc9, 0xe8, 0x19, + 0xe4, 0x57, 0x3f, 0x4f, 0xba, 0x7b, 0x16, 0xe9, 0x3d, 0xba, 0x63, 0x18, 0x86, 0xbe, 0x2a, 0x20, + 0x75, 0x8f, 0xc0, 0xbe, 0x89, 0x09, 0x8d, 0x21, 0x35, 0xeb, 0xf2, 0xfc, 0x00, 0x5d, 0xae, 0xfe, + 0x87, 0x3c, 0x8c, 0x31, 0x4d, 0x18, 0xdd, 0x0b, 0xb1, 0x66, 0x56, 0x19, 0xa9, 0x54, 0x9b, 0x33, + 0xd4, 0x61, 0x44, 0xe7, 0x48, 0x87, 0x15, 0xbd, 0x84, 0x3b, 0x64, 0x7c, 0x0e, 0x2f, 0xdd, 0xbd, + 0x10, 0x41, 0xc2, 0x06, 0x65, 0xcc, 0x98, 0x33, 0xd4, 0xe1, 0x30, 0x59, 0x83, 0x5a, 0xbc, 0xc1, + 0x5f, 0x13, 0x71, 0xa1, 0x9a, 0x16, 0xf0, 0x52, 0x3b, 0x6e, 0xa4, 0x99, 0x6e, 0xf5, 0x05, 0xd2, + 0xf2, 0x1c, 0x9a, 0x11, 0x5a, 0x8e, 0x96, 0xdd, 0x8e, 0x96, 0x3d, 0x04, 0x2d, 0xb6, 0xde, 0xf3, + 0x86, 0xda, 0xa8, 0xa5, 0x9f, 0x23, 0x2d, 0x3f, 0x83, 0x4e, 0xaa, 0x5a, 0x96, 0x69, 0xc8, 0xaf, + 0x86, 0xeb, 0x1c, 0xce, 0x8b, 0xbc, 0xc0, 0x73, 0x86, 0x3a, 0xe4, 0x21, 0xc3, 0xdd, 0xf3, 0x27, + 0x7a, 0xf4, 0x81, 0xb0, 0x2a, 0x43, 0xe7, 0x53, 0x8c, 0x64, 0xbc, 0x62, 0xf4, 0x09, 0xc3, 0xac, + 0x9d, 0x34, 0xfa, 0x06, 0x36, 0x3e, 0x4b, 0xfa, 0xd7, 0xb5, 0x45, 0xb1, 0x7f, 0x4a, 0x92, 0x84, + 0x8b, 0x03, 0x98, 0x28, 0xfd, 0xc5, 0x08, 0x4c, 0xc6, 0xc2, 0xa4, 0xa1, 0x9d, 0x10, 0xbf, 0x16, + 0x8d, 0x5e, 0x81, 0x1b, 0xb5, 0x25, 0xa3, 0x67, 0x0c, 0x45, 0x7d, 0x89, 0x80, 0x51, 0xd5, 0xa7, + 0x29, 0x18, 0x6e, 0xb7, 0x11, 0xd9, 0xf7, 0x30, 0x9a, 0xec, 0x84, 0x78, 0x97, 0xe8, 0x48, 0x1e, + 0xf2, 0x92, 0xd1, 0x3b, 0x66, 0x21, 0xeb, 0x48, 0x4b, 0xeb, 0x68, 0x4f, 0xc4, 0xc7, 0x15, 0xa3, + 0x4f, 0x7c, 0x43, 0x32, 0xc3, 0xbd, 0xc3, 0x13, 0xea, 0xcf, 0x92, 0x1e, 0x97, 0xd0, 0x82, 0xa2, + 0xc7, 0x08, 0x4f, 0x3f, 0x89, 0xf0, 0x74, 0xc9, 0xe8, 0x19, 0x88, 0x50, 0x5b, 0x36, 0x7a, 0x47, + 0x08, 0xd4, 0x5f, 0x20, 0x3d, 0x5e, 0x40, 0xe7, 0x7a, 0xf5, 0x28, 0xe3, 0xef, 0x47, 0x21, 0xfe, + 0x26, 0xe6, 0x57, 0xc6, 0xe3, 0x25, 0xa3, 0x77, 0x70, 0x3f, 0xd6, 0xf7, 0xf9, 0x03, 0xf4, 0xfd, + 0x3d, 0x05, 0xff, 0x3d, 0x6d, 0x0c, 0x14, 0x21, 0x50, 0x3b, 0x63, 0x0c, 0x18, 0xb9, 0xcf, 0x20, + 0x70, 0x9d, 0xd5, 0x9e, 0x51, 0xc1, 0xa5, 0x60, 0xc1, 0xff, 0x3d, 0x0f, 0x05, 0x1e, 0x2f, 0x09, + 0x99, 0x21, 0x9a, 0xcf, 0x19, 0xca, 0x80, 0x6d, 0xda, 0xbc, 0xa1, 0x0e, 0xa4, 0xa6, 0xcf, 0x93, + 0x7e, 0xa7, 0xf4, 0x32, 0xee, 0x97, 0x87, 0x11, 0xc2, 0x88, 0x66, 0x89, 0x88, 0x76, 0xdc, 0x48, + 0x0b, 0xa0, 0xa6, 0x69, 0x46, 0x6a, 0xfc, 0x33, 0xce, 0x67, 0xd1, 0xac, 0xd8, 0x78, 0x84, 0x53, + 0x5f, 0xcb, 0x44, 0x48, 0x95, 0x16, 0x3a, 0x4a, 0xab, 0x1a, 0x29, 0xe1, 0xc7, 0xf4, 0x6b, 0xa4, + 0xf5, 0x2f, 0xa2, 0x57, 0x95, 0xad, 0x4b, 0x6b, 0x78, 0xe9, 0xe3, 0xd8, 0x89, 0xd0, 0x27, 0x97, + 0x3e, 0x0e, 0xf6, 0x3b, 0xf6, 0x27, 0x78, 0xea, 0xd8, 0xc6, 0x8d, 0xa6, 0x4e, 0x5e, 0xc2, 0x79, + 0x23, 0x25, 0x6e, 0x18, 0x9b, 0x3a, 0x2d, 0x31, 0x75, 0x76, 0x88, 0xac, 0x51, 0x9b, 0x32, 0x96, + 0xce, 0x1b, 0x29, 0xb1, 0xc1, 0x24, 0x46, 0xda, 0x7b, 0x4c, 0xa8, 0x05, 0x65, 0x31, 0x52, 0x16, + 0x5a, 0x30, 0x7a, 0x44, 0x15, 0xd3, 0x16, 0x8d, 0x9e, 0xe1, 0xb5, 0x56, 0x48, 0xc7, 0x9a, 0x2e, + 0x2f, 0x15, 0x0b, 0xfd, 0x41, 0xe8, 0xeb, 0xff, 0xca, 0x41, 0x31, 0x0c, 0x50, 0x83, 0x1e, 0x86, + 0x28, 0x27, 0x44, 0x97, 0x92, 0x71, 0xae, 0x6a, 0xa4, 0x45, 0x5e, 0xaa, 0x92, 0xce, 0x90, 0x3e, + 0xce, 0x3a, 0xa3, 0x85, 0xa8, 0x80, 0x27, 0x60, 0x9d, 0x96, 0x1e, 0x5d, 0x49, 0x3b, 0x61, 0xa4, + 0x47, 0x4c, 0xe2, 0x44, 0x14, 0xcd, 0x49, 0xed, 0x47, 0x88, 0xf7, 0x28, 0xc2, 0xbb, 0xaa, 0x91, + 0x12, 0x0f, 0x49, 0x3b, 0x6e, 0xa4, 0x45, 0x34, 0xd2, 0x2f, 0x90, 0xf6, 0x4f, 0xa1, 0x67, 0xd4, + 0xed, 0xcb, 0xcb, 0xf4, 0x30, 0xc4, 0x30, 0x61, 0xa6, 0x64, 0x14, 0xab, 0x1a, 0x69, 0xb1, 0x86, + 0xd8, 0x4c, 0x69, 0xc9, 0x99, 0xda, 0x0d, 0x91, 0x4c, 0x68, 0x56, 0xc6, 0xb2, 0xaa, 0x91, 0x16, + 0x50, 0x88, 0x0d, 0xe0, 0xfc, 0x20, 0x03, 0x58, 0xfd, 0x77, 0xa3, 0x5c, 0xda, 0x0f, 0x03, 0x0e, + 0x24, 0xa5, 0x7d, 0x65, 0x60, 0xa2, 0x50, 0x6c, 0x4c, 0x09, 0x13, 0xa4, 0x90, 0xf6, 0xf9, 0x7d, + 0x7a, 0xb5, 0xb4, 0xaf, 0x8c, 0x26, 0x94, 0xe8, 0xa5, 0xbf, 0xb4, 0x2f, 0xf6, 0xa2, 0x94, 0xf6, + 0xd3, 0xa2, 0xf7, 0x84, 0xd2, 0x7e, 0x6a, 0x84, 0x1a, 0x95, 0xb4, 0xcf, 0xbb, 0x4b, 0x51, 0x64, + 0x7b, 0x45, 0xa3, 0x09, 0xa5, 0xfd, 0x94, 0x30, 0x31, 0xb2, 0x22, 0x9b, 0xd2, 0x5d, 0xba, 0x22, + 0xdb, 0x23, 0x40, 0x4c, 0x62, 0x5a, 0x7b, 0x29, 0xb2, 0x03, 0x75, 0xec, 0x43, 0x81, 0xd3, 0x1e, + 0x14, 0x1f, 0x56, 0x2c, 0xf0, 0x8b, 0xb6, 0x6c, 0xf4, 0x09, 0xdd, 0x72, 0x9a, 0x74, 0xbf, 0xa2, + 0xab, 0xa6, 0x59, 0x20, 0x5b, 0x29, 0xda, 0xf3, 0x20, 0x41, 0x5f, 0xb4, 0xd3, 0xc6, 0x60, 0xc1, + 0x58, 0x24, 0xed, 0x39, 0x06, 0x8a, 0x82, 0x75, 0xd7, 0x61, 0x8c, 0x85, 0x58, 0x41, 0xbf, 0x22, + 0x4a, 0xff, 0xca, 0x80, 0x2e, 0xda, 0x7c, 0x4a, 0x3c, 0x16, 0x59, 0xaf, 0x68, 0xd1, 0x32, 0xe1, + 0xc4, 0xaf, 0xfe, 0x83, 0x3c, 0x8c, 0x52, 0xe8, 0xd1, 0xed, 0x70, 0xb3, 0xce, 0xa8, 0xee, 0xe4, + 0x6b, 0xb3, 0x86, 0xf2, 0x42, 0xfc, 0x2c, 0x69, 0x7f, 0x52, 0x87, 0x68, 0x54, 0x78, 0x3e, 0x6f, + 0x87, 0x9b, 0x92, 0xb7, 0x26, 0x4f, 0xda, 0xac, 0xa1, 0xbc, 0x92, 0xce, 0x5a, 0xd3, 0x62, 0xad, + 0xbd, 0x2f, 0x6e, 0xbe, 0x79, 0x43, 0x7d, 0x6b, 0x5d, 0xab, 0x1a, 0x29, 0xf7, 0xca, 0xf5, 0x13, + 0xa4, 0xd9, 0x59, 0x34, 0x1d, 0x35, 0x1b, 0x6d, 0xb2, 0x5f, 0x8d, 0x66, 0x97, 0x43, 0x15, 0x9b, + 0xdc, 0x39, 0x43, 0x79, 0xb5, 0x5b, 0xd7, 0x49, 0xb3, 0x0b, 0x48, 0x53, 0x34, 0xcb, 0x95, 0x9e, + 0xaf, 0x84, 0xdb, 0x88, 0x4f, 0x84, 0xbc, 0x7d, 0x66, 0x0d, 0xe5, 0xd5, 0x6a, 0xd6, 0xf4, 0xf9, + 0x5e, 0x4d, 0xfb, 0x2a, 0x75, 0xea, 0xb8, 0x91, 0xaa, 0x47, 0x69, 0x46, 0xba, 0x02, 0x75, 0x86, + 0xf4, 0x77, 0x52, 0x5b, 0x10, 0xfa, 0x53, 0xea, 0x4f, 0xff, 0x36, 0x07, 0x63, 0xec, 0xb2, 0x96, + 0xa4, 0x97, 0xab, 0x2e, 0x24, 0x6a, 0x73, 0x86, 0xfa, 0x06, 0xa1, 0xa4, 0x97, 0xb3, 0xab, 0x65, + 0x71, 0xbd, 0x5c, 0x75, 0xc5, 0x30, 0x6a, 0xb0, 0x97, 0x5e, 0x2e, 0x34, 0x18, 0xd3, 0xcb, 0x53, + 0xae, 0x14, 0x12, 0x26, 0xae, 0xbe, 0xf3, 0x27, 0xef, 0x1f, 0xd6, 0x72, 0x84, 0x3b, 0x35, 0x71, + 0x67, 0x2a, 0xaf, 0xec, 0x11, 0x21, 0x4e, 0x75, 0xe9, 0x4e, 0xe6, 0x00, 0xf1, 0x96, 0xf9, 0x1a, + 0x8b, 0x1a, 0xb9, 0xea, 0xe2, 0x5d, 0x34, 0x23, 0xbd, 0x34, 0xf2, 0x94, 0xd6, 0x57, 0x7f, 0x3f, + 0x07, 0x65, 0xf1, 0xee, 0x16, 0xfa, 0xb5, 0x70, 0x45, 0x35, 0x23, 0xf5, 0xe6, 0x9d, 0x76, 0xc2, + 0xe8, 0x71, 0x8b, 0x8e, 0xed, 0x35, 0xbd, 0x82, 0x3b, 0x16, 0x6f, 0x96, 0x25, 0x04, 0xb7, 0x45, + 0xa3, 0xd7, 0x75, 0x3b, 0x6d, 0xc9, 0xe8, 0x79, 0xdb, 0x8e, 0x0b, 0x3d, 0x28, 0xd1, 0x91, 0x68, + 0x2d, 0x91, 0x41, 0x8d, 0x2d, 0xcd, 0x82, 0xd1, 0xe3, 0x06, 0x9d, 0xbe, 0x4c, 0xda, 0x3f, 0x8e, + 0xe6, 0xe3, 0xed, 0xf3, 0xb5, 0xd9, 0x0a, 0xd7, 0x46, 0x9e, 0x2c, 0x79, 0x81, 0x4e, 0x18, 0x3d, + 0x6e, 0xc7, 0xb1, 0x3e, 0xce, 0xa7, 0xf5, 0xb1, 0xfa, 0x3b, 0x79, 0x18, 0xa1, 0x81, 0x67, 0x6e, + 0x86, 0x4b, 0x83, 0x8c, 0xc4, 0x8d, 0x3a, 0x6d, 0xda, 0x50, 0x5c, 0x79, 0x9b, 0x26, 0xad, 0x8f, + 0xeb, 0x05, 0x82, 0x03, 0xcc, 0x6c, 0x79, 0x33, 0xdc, 0x63, 0xb4, 0x1d, 0x79, 0x83, 0x4d, 0x1b, + 0x8a, 0x1b, 0x6b, 0xac, 0x1d, 0x4d, 0x6a, 0xe7, 0xa1, 0xb8, 0x94, 0xb3, 0x86, 0xea, 0x4a, 0x1b, + 0x46, 0x4e, 0xa5, 0xa9, 0xf3, 0x38, 0x69, 0x70, 0x1a, 0x4d, 0xf1, 0x06, 0x95, 0xd4, 0x98, 0xc2, + 0x12, 0x5b, 0xb3, 0x19, 0x43, 0x71, 0xfd, 0x8c, 0xb3, 0x79, 0xb4, 0x94, 0x68, 0x50, 0x96, 0x2d, + 0x22, 0x6a, 0x4c, 0x07, 0x2f, 0x2f, 0xd5, 0xb4, 0xa1, 0xb8, 0x50, 0xc6, 0x9a, 0x3e, 0xdf, 0xaf, + 0xe9, 0xaf, 0x26, 0x05, 0x88, 0x13, 0x46, 0xfa, 0x4d, 0x34, 0x6d, 0xc1, 0xe8, 0x75, 0x43, 0x8c, + 0x6d, 0x5f, 0xad, 0x1a, 0xf6, 0xaa, 0x10, 0x11, 0xee, 0xc2, 0x18, 0x77, 0xeb, 0xbd, 0x06, 0xb9, + 0x37, 0xec, 0x00, 0x21, 0x23, 0x71, 0x5b, 0x4b, 0x9b, 0x36, 0x92, 0x97, 0xb5, 0xf8, 0x92, 0x22, + 0x42, 0x30, 0x99, 0xb7, 0xf0, 0xea, 0x1f, 0xe6, 0x60, 0x8c, 0xdd, 0x00, 0x40, 0x0f, 0xa1, 0xc0, + 0x6f, 0x24, 0xa1, 0x79, 0x43, 0x7d, 0x5f, 0x4b, 0xab, 0x1a, 0x69, 0x97, 0x97, 0x24, 0x0a, 0xcf, + 0x2e, 0x0e, 0x60, 0xac, 0x91, 0x44, 0x19, 0xe5, 0xa5, 0x22, 0x6d, 0xde, 0x50, 0x5f, 0x1e, 0x92, + 0x49, 0x31, 0x6b, 0x33, 0x42, 0x1c, 0x91, 0x77, 0xa8, 0xee, 0x4d, 0x69, 0x73, 0x86, 0xfa, 0x76, + 0x93, 0xc4, 0x3b, 0x04, 0x50, 0x7f, 0x90, 0x81, 0xa5, 0x10, 0x75, 0x63, 0x17, 0x23, 0xde, 0xa0, + 0x77, 0x1f, 0x16, 0x8d, 0x5e, 0x77, 0x3d, 0xb4, 0x25, 0xa3, 0xe7, 0x75, 0x0c, 0xfd, 0x25, 0xd2, + 0xb3, 0x81, 0x9e, 0x53, 0x0d, 0x88, 0x27, 0xd4, 0xe8, 0xcd, 0xad, 0xf0, 0x8e, 0xd9, 0xea, 0x7f, + 0xca, 0xc2, 0xa4, 0xec, 0x2a, 0xe6, 0xc7, 0xb5, 0x93, 0xde, 0xce, 0xf9, 0xda, 0x4a, 0x3f, 0x47, + 0x62, 0x99, 0x37, 0xb5, 0x68, 0xe1, 0x84, 0x51, 0xba, 0x25, 0x6a, 0x27, 0xbd, 0x5c, 0x43, 0xb5, + 0x25, 0xa3, 0xa7, 0xdf, 0xe5, 0x60, 0xdd, 0xed, 0xc2, 0x18, 0xf3, 0x89, 0x4b, 0x74, 0x27, 0x7b, + 0xfb, 0x25, 0xba, 0x8b, 0xbb, 0xd2, 0x49, 0x66, 0x5a, 0xb9, 0x3b, 0x1f, 0xef, 0xab, 0xbf, 0x96, + 0x81, 0x0a, 0x3f, 0x69, 0x7e, 0xe0, 0xb4, 0xec, 0xdb, 0x4e, 0xdb, 0x46, 0x9e, 0x6c, 0xe9, 0x4a, + 0x73, 0x99, 0xd3, 0xb4, 0x74, 0x17, 0x32, 0x6e, 0xbe, 0x43, 0xa7, 0xd5, 0x4c, 0xb9, 0x61, 0xed, + 0xfb, 0xc4, 0x08, 0x45, 0xdd, 0xdc, 0x3e, 0x59, 0xfd, 0xdf, 0x39, 0xc8, 0x9b, 0x6e, 0xd3, 0x96, + 0x89, 0xbf, 0xab, 0x20, 0xfe, 0x6e, 0x1f, 0xe2, 0xef, 0xaa, 0x89, 0xb6, 0xab, 0x26, 0xda, 0x6e, + 0x7f, 0xa2, 0xed, 0xa6, 0x13, 0x6d, 0x57, 0x45, 0xb4, 0xdd, 0x7e, 0x44, 0xdb, 0x4d, 0xa5, 0xac, + 0x12, 0xc7, 0x72, 0x15, 0x1c, 0xcb, 0xed, 0xc3, 0xb1, 0xd8, 0xe0, 0x25, 0xe2, 0xef, 0x2a, 0x88, + 0xbf, 0xdb, 0x87, 0xf8, 0xa7, 0x83, 0x78, 0x4f, 0x72, 0x4d, 0x99, 0x33, 0x94, 0x3e, 0x37, 0x58, + 0x14, 0x54, 0xba, 0xcc, 0xe8, 0x15, 0xd2, 0x0d, 0xa0, 0x10, 0xdc, 0xf5, 0x1f, 0x64, 0xbe, 0xb7, + 0xe6, 0xbc, 0xf7, 0x15, 0x78, 0x17, 0x46, 0xb7, 0x6c, 0xcb, 0xb3, 0x3d, 0x74, 0xa7, 0x90, 0x45, + 0x57, 0xd6, 0xa4, 0xc7, 0x4f, 0x56, 0x88, 0xff, 0xfe, 0x73, 0x2b, 0x1d, 0xcf, 0xde, 0x76, 0x1e, + 0xdb, 0x8d, 0x95, 0xad, 0xfd, 0x95, 0x75, 0x52, 0xfa, 0x2a, 0xfb, 0x5d, 0x79, 0x8d, 0x14, 0x79, + 0x5d, 0x1b, 0xc7, 0x35, 0x5d, 0x8f, 0x49, 0x17, 0x2b, 0xd9, 0xad, 0x32, 0x40, 0xd8, 0xf4, 0xb1, + 0xff, 0xf3, 0x5f, 0x96, 0x32, 0x7f, 0xf7, 0x27, 0x4b, 0x99, 0x7f, 0xfa, 0x93, 0xa5, 0xcc, 0x9f, + 0xfe, 0x64, 0x29, 0xf3, 0xe3, 0x9f, 0x2c, 0x65, 0xfe, 0xf3, 0x4f, 0x96, 0x32, 0xdf, 0xfd, 0xe9, + 0xd2, 0xb1, 0x1f, 0xff, 0x74, 0xe9, 0xd8, 0x9f, 0xff, 0x74, 0xe9, 0xd8, 0x7b, 0x39, 0xab, 0xe3, + 0x6c, 0x8d, 0x12, 0xbf, 0x8d, 0x17, 0xff, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x26, 0x26, 0x95, + 0x5a, 0x65, 0xc9, 0x00, 0x00, } func (this *OrganizationObject) Equal(that interface{}) bool { @@ -17305,6 +17522,9 @@ func (this *ClusterInfo) Equal(that interface{}) bool { if this.Provider != that1.Provider { return false } + if this.K8SVersion != that1.K8SVersion { + return false + } return true } func (this *ClusterInfo_StatusInfo) Equal(that interface{}) bool { @@ -17527,6 +17747,36 @@ func (this *S3Config) Equal(that interface{}) bool { if this.SseType != that1.SseType { return false } + if !this.AzureEnvironment.Equal(that1.AzureEnvironment) { + return false + } + if this.AzureResourceGroupName != that1.AzureResourceGroupName { + return false + } + return true +} +func (this *S3Config_AzureEnvironmentType) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*S3Config_AzureEnvironmentType) + if !ok { + that2, ok := that.(S3Config_AzureEnvironmentType) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Type != that1.Type { + return false + } return true } func (this *AzureConfig) Equal(that interface{}) bool { @@ -18823,6 +19073,36 @@ func (this *BackupInfo_Volume) Equal(that interface{}) bool { if this.Volumesnapshot != that1.Volumesnapshot { return false } + if !this.JobSecurityContext.Equal(that1.JobSecurityContext) { + return false + } + return true +} +func (this *BackupInfo_Volume_JobSecurityContext) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*BackupInfo_Volume_JobSecurityContext) + if !ok { + that2, ok := that.(BackupInfo_Volume_JobSecurityContext) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RunAsUser != that1.RunAsUser { + return false + } + if this.RunAsGroup != that1.RunAsGroup { + return false + } return true } func (this *BackupInfo_StatusInfo) Equal(that interface{}) bool { @@ -19515,6 +19795,14 @@ func (this *EnumerateOptions) Equal(that interface{}) bool { if this.BackupObjectType != that1.BackupObjectType { return false } + if len(this.Status) != len(that1.Status) { + return false + } + for i := range this.Status { + if this.Status[i] != that1.Status[i] { + return false + } + } return true } func (this *SchedulePolicyCreateRequest) Equal(that interface{}) bool { @@ -20083,6 +20371,9 @@ func (this *BackupScheduleUpdateRequest) Equal(that interface{}) bool { return false } } + if this.SkipVmAutoExecRules != that1.SkipVmAutoExecRules { + return false + } return true } func (this *BackupScheduleUpdateResponse) Equal(that interface{}) bool { @@ -22249,6 +22540,9 @@ func (this *MetricsInspectResponse) Equal(that interface{}) bool { return false } } + if this.LastSyncTime != that1.LastSyncTime { + return false + } return true } func (this *MetricsInspectResponse_Stats) Equal(that interface{}) bool { @@ -22285,6 +22579,9 @@ func (this *MetricsInspectResponse_Stats) Equal(that interface{}) bool { if !this.ClusterRef.Equal(that1.ClusterRef) { return false } + if this.TotalNamespaces != that1.TotalNamespaces { + return false + } return true } func (this *BackupCreateRequest) Equal(that interface{}) bool { @@ -29265,6 +29562,15 @@ func (m *ClusterInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.K8SVersion) > 0 { + i -= len(m.K8SVersion) + copy(dAtA[i:], m.K8SVersion) + i = encodeVarintApi(dAtA, i, uint64(len(m.K8SVersion))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x92 + } if m.Provider != 0 { i = encodeVarintApi(dAtA, i, uint64(m.Provider)) i-- @@ -29703,6 +30009,25 @@ func (m *S3Config) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.AzureResourceGroupName) > 0 { + i -= len(m.AzureResourceGroupName) + copy(dAtA[i:], m.AzureResourceGroupName) + i = encodeVarintApi(dAtA, i, uint64(len(m.AzureResourceGroupName))) + i-- + dAtA[i] = 0x42 + } + if m.AzureEnvironment != nil { + { + size, err := m.AzureEnvironment.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintApi(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } if m.SseType != 0 { i = encodeVarintApi(dAtA, i, uint64(m.SseType)) i-- @@ -29752,6 +30077,34 @@ func (m *S3Config) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *S3Config_AzureEnvironmentType) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *S3Config_AzureEnvironmentType) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *S3Config_AzureEnvironmentType) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Type != 0 { + i = encodeVarintApi(dAtA, i, uint64(m.Type)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *AzureConfig) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -31895,6 +32248,18 @@ func (m *BackupInfo_Volume) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.JobSecurityContext != nil { + { + size, err := m.JobSecurityContext.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintApi(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x7a + } if len(m.Volumesnapshot) > 0 { i -= len(m.Volumesnapshot) copy(dAtA[i:], m.Volumesnapshot) @@ -32011,6 +32376,39 @@ func (m *BackupInfo_Volume) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *BackupInfo_Volume_JobSecurityContext) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BackupInfo_Volume_JobSecurityContext) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BackupInfo_Volume_JobSecurityContext) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.RunAsGroup != 0 { + i = encodeVarintApi(dAtA, i, uint64(m.RunAsGroup)) + i-- + dAtA[i] = 0x10 + } + if m.RunAsUser != 0 { + i = encodeVarintApi(dAtA, i, uint64(m.RunAsUser)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *BackupInfo_StatusInfo) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -33082,6 +33480,15 @@ func (m *EnumerateOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.Status) > 0 { + for iNdEx := len(m.Status) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Status[iNdEx]) + copy(dAtA[i:], m.Status[iNdEx]) + i = encodeVarintApi(dAtA, i, uint64(len(m.Status[iNdEx]))) + i-- + dAtA[i] = 0x5a + } + } if len(m.BackupObjectType) > 0 { i -= len(m.BackupObjectType) copy(dAtA[i:], m.BackupObjectType) @@ -33967,6 +34374,18 @@ func (m *BackupScheduleUpdateRequest) MarshalToSizedBuffer(dAtA []byte) (int, er _ = i var l int _ = l + if m.SkipVmAutoExecRules { + i-- + if m.SkipVmAutoExecRules { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x90 + } if len(m.VolumeSnapshotClassMapping) > 0 { for k := range m.VolumeSnapshotClassMapping { v := m.VolumeSnapshotClassMapping[k] @@ -37366,6 +37785,11 @@ func (m *MetricsInspectResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l + if m.LastSyncTime != 0 { + i = encodeVarintApi(dAtA, i, uint64(m.LastSyncTime)) + i-- + dAtA[i] = 0x10 + } if len(m.Stats) > 0 { for iNdEx := len(m.Stats) - 1; iNdEx >= 0; iNdEx-- { { @@ -37403,6 +37827,11 @@ func (m *MetricsInspectResponse_Stats) MarshalToSizedBuffer(dAtA []byte) (int, e _ = i var l int _ = l + if m.TotalNamespaces != 0 { + i = encodeVarintApi(dAtA, i, uint64(m.TotalNamespaces)) + i-- + dAtA[i] = 0x30 + } if m.ClusterRef != nil { { size, err := m.ClusterRef.MarshalToSizedBuffer(dAtA[:i]) @@ -42012,6 +42441,7 @@ func NewPopulatedClusterInfo(r randyApi, easy bool) *ClusterInfo { this.TenantId = string(randStringApi(r)) this.ServiceToken = string(randStringApi(r)) this.Provider = ClusterInfo_Provider([]int32{0, 1, 2, 3, 4, 5}[r.Intn(6)]) + this.K8SVersion = string(randStringApi(r)) if !easy && r.Intn(10) != 0 { } return this @@ -42090,6 +42520,18 @@ func NewPopulatedS3Config(r randyApi, easy bool) *S3Config { this.DisablePathStyle = bool(bool(r.Intn(2) == 0)) this.StorageClass = string(randStringApi(r)) this.SseType = S3Config_Sse([]int32{0, 1, 2}[r.Intn(3)]) + if r.Intn(5) != 0 { + this.AzureEnvironment = NewPopulatedS3Config_AzureEnvironmentType(r, easy) + } + this.AzureResourceGroupName = string(randStringApi(r)) + if !easy && r.Intn(10) != 0 { + } + return this +} + +func NewPopulatedS3Config_AzureEnvironmentType(r randyApi, easy bool) *S3Config_AzureEnvironmentType { + this := &S3Config_AzureEnvironmentType{} + this.Type = S3Config_AzureEnvironmentType_Type([]int32{0, 1, 2}[r.Intn(3)]) if !easy && r.Intn(10) != 0 { } return this @@ -42682,6 +43124,24 @@ func NewPopulatedBackupInfo_Volume(r randyApi, easy bool) *BackupInfo_Volume { this.PvcId = string(randStringApi(r)) this.Provisioner = string(randStringApi(r)) this.Volumesnapshot = string(randStringApi(r)) + if r.Intn(5) != 0 { + this.JobSecurityContext = NewPopulatedBackupInfo_Volume_JobSecurityContext(r, easy) + } + if !easy && r.Intn(10) != 0 { + } + return this +} + +func NewPopulatedBackupInfo_Volume_JobSecurityContext(r randyApi, easy bool) *BackupInfo_Volume_JobSecurityContext { + this := &BackupInfo_Volume_JobSecurityContext{} + this.RunAsUser = int64(r.Int63()) + if r.Intn(2) == 0 { + this.RunAsUser *= -1 + } + this.RunAsGroup = int64(r.Int63()) + if r.Intn(2) == 0 { + this.RunAsGroup *= -1 + } if !easy && r.Intn(10) != 0 { } return this @@ -43010,6 +43470,11 @@ func NewPopulatedEnumerateOptions(r randyApi, easy bool) *EnumerateOptions { this.Owners[i] = string(randStringApi(r)) } this.BackupObjectType = string(randStringApi(r)) + v36 := r.Intn(10) + this.Status = make([]string, v36) + for i := 0; i < v36; i++ { + this.Status[i] = string(randStringApi(r)) + } if !easy && r.Intn(10) != 0 { } return this @@ -43059,9 +43524,9 @@ func NewPopulatedSchedulePolicyEnumerateRequest(r randyApi, easy bool) *Schedule this := &SchedulePolicyEnumerateRequest{} this.OrgId = string(randStringApi(r)) if r.Intn(5) != 0 { - v36 := r.Intn(10) + v37 := r.Intn(10) this.Labels = make(map[string]string) - for i := 0; i < v36; i++ { + for i := 0; i < v37; i++ { this.Labels[randStringApi(r)] = randStringApi(r) } } @@ -43073,9 +43538,9 @@ func NewPopulatedSchedulePolicyEnumerateRequest(r randyApi, easy bool) *Schedule func NewPopulatedSchedulePolicyEnumerateResponse(r randyApi, easy bool) *SchedulePolicyEnumerateResponse { this := &SchedulePolicyEnumerateResponse{} if r.Intn(5) != 0 { - v37 := r.Intn(5) - this.SchedulePolicies = make([]*SchedulePolicyObject, v37) - for i := 0; i < v37; i++ { + v38 := r.Intn(5) + this.SchedulePolicies = make([]*SchedulePolicyObject, v38) + for i := 0; i < v38; i++ { this.SchedulePolicies[i] = NewPopulatedSchedulePolicyObject(r, easy) } } @@ -43150,31 +43615,31 @@ func NewPopulatedBackupScheduleCreateRequest(r randyApi, easy bool) *BackupSched this.ReclaimPolicy = BackupScheduleInfo_ReclaimPolicyType([]int32{0, 1, 2}[r.Intn(3)]) this.BackupLocation = string(randStringApi(r)) this.Cluster = string(randStringApi(r)) - v38 := r.Intn(10) - this.Namespaces = make([]string, v38) - for i := 0; i < v38; i++ { + v39 := r.Intn(10) + this.Namespaces = make([]string, v39) + for i := 0; i < v39; i++ { this.Namespaces[i] = string(randStringApi(r)) } if r.Intn(5) != 0 { - v39 := r.Intn(10) + v40 := r.Intn(10) this.LabelSelectors = make(map[string]string) - for i := 0; i < v39; i++ { + for i := 0; i < v40; i++ { this.LabelSelectors[randStringApi(r)] = randStringApi(r) } } this.PreExecRule = string(randStringApi(r)) this.PostExecRule = string(randStringApi(r)) if r.Intn(5) != 0 { - v40 := r.Intn(5) - this.IncludeResources = make([]*ResourceInfo, v40) - for i := 0; i < v40; i++ { + v41 := r.Intn(5) + this.IncludeResources = make([]*ResourceInfo, v41) + for i := 0; i < v41; i++ { this.IncludeResources[i] = NewPopulatedResourceInfo(r, easy) } } this.CsiSnapshotClassName = string(randStringApi(r)) - v41 := r.Intn(10) - this.ResourceTypes = make([]string, v41) - for i := 0; i < v41; i++ { + v42 := r.Intn(10) + this.ResourceTypes = make([]string, v42) + for i := 0; i < v42; i++ { this.ResourceTypes[i] = string(randStringApi(r)) } if r.Intn(5) != 0 { @@ -43199,9 +43664,9 @@ func NewPopulatedBackupScheduleCreateRequest(r randyApi, easy bool) *BackupSched } this.SkipVmAutoExecRules = bool(bool(r.Intn(2) == 0)) if r.Intn(5) != 0 { - v42 := r.Intn(10) + v43 := r.Intn(10) this.VolumeSnapshotClassMapping = make(map[string]string) - for i := 0; i < v42; i++ { + for i := 0; i < v43; i++ { this.VolumeSnapshotClassMapping[randStringApi(r)] = randStringApi(r) } } @@ -43235,15 +43700,15 @@ func NewPopulatedBackupScheduleUpdateRequest(r randyApi, easy bool) *BackupSched this.ReclaimPolicy = BackupScheduleInfo_ReclaimPolicyType([]int32{0, 1, 2}[r.Intn(3)]) this.BackupLocation = string(randStringApi(r)) this.Cluster = string(randStringApi(r)) - v43 := r.Intn(10) - this.Namespaces = make([]string, v43) - for i := 0; i < v43; i++ { + v44 := r.Intn(10) + this.Namespaces = make([]string, v44) + for i := 0; i < v44; i++ { this.Namespaces[i] = string(randStringApi(r)) } if r.Intn(5) != 0 { - v44 := r.Intn(10) + v45 := r.Intn(10) this.LabelSelectors = make(map[string]string) - for i := 0; i < v44; i++ { + for i := 0; i < v45; i++ { this.LabelSelectors[randStringApi(r)] = randStringApi(r) } } @@ -43251,9 +43716,9 @@ func NewPopulatedBackupScheduleUpdateRequest(r randyApi, easy bool) *BackupSched this.PostExecRule = string(randStringApi(r)) this.Suspend = bool(bool(r.Intn(2) == 0)) if r.Intn(5) != 0 { - v45 := r.Intn(5) - this.IncludeResources = make([]*ResourceInfo, v45) - for i := 0; i < v45; i++ { + v46 := r.Intn(5) + this.IncludeResources = make([]*ResourceInfo, v46) + for i := 0; i < v46; i++ { this.IncludeResources[i] = NewPopulatedResourceInfo(r, easy) } } @@ -43271,12 +43736,13 @@ func NewPopulatedBackupScheduleUpdateRequest(r randyApi, easy bool) *BackupSched this.PostExecRuleRef = NewPopulatedObjectRef(r, easy) } if r.Intn(5) != 0 { - v46 := r.Intn(10) + v47 := r.Intn(10) this.VolumeSnapshotClassMapping = make(map[string]string) - for i := 0; i < v46; i++ { + for i := 0; i < v47; i++ { this.VolumeSnapshotClassMapping[randStringApi(r)] = randStringApi(r) } } + this.SkipVmAutoExecRules = bool(bool(r.Intn(2) == 0)) if !easy && r.Intn(10) != 0 { } return this @@ -43293,9 +43759,9 @@ func NewPopulatedBackupScheduleEnumerateRequest(r randyApi, easy bool) *BackupSc this := &BackupScheduleEnumerateRequest{} this.OrgId = string(randStringApi(r)) if r.Intn(5) != 0 { - v47 := r.Intn(10) + v48 := r.Intn(10) this.Labels = make(map[string]string) - for i := 0; i < v47; i++ { + for i := 0; i < v48; i++ { this.Labels[randStringApi(r)] = randStringApi(r) } } @@ -43314,9 +43780,9 @@ func NewPopulatedBackupScheduleEnumerateRequest(r randyApi, easy bool) *BackupSc func NewPopulatedBackupScheduleEnumerateResponse(r randyApi, easy bool) *BackupScheduleEnumerateResponse { this := &BackupScheduleEnumerateResponse{} if r.Intn(5) != 0 { - v48 := r.Intn(5) - this.BackupSchedules = make([]*BackupScheduleObject, v48) - for i := 0; i < v48; i++ { + v49 := r.Intn(5) + this.BackupSchedules = make([]*BackupScheduleObject, v49) + for i := 0; i < v49; i++ { this.BackupSchedules[i] = NewPopulatedBackupScheduleObject(r, easy) } } @@ -43451,9 +43917,9 @@ func NewPopulatedClusterEnumerateRequest(r randyApi, easy bool) *ClusterEnumerat this := &ClusterEnumerateRequest{} this.OrgId = string(randStringApi(r)) if r.Intn(5) != 0 { - v49 := r.Intn(10) + v50 := r.Intn(10) this.Labels = make(map[string]string) - for i := 0; i < v49; i++ { + for i := 0; i < v50; i++ { this.Labels[randStringApi(r)] = randStringApi(r) } } @@ -43471,9 +43937,9 @@ func NewPopulatedClusterEnumerateRequest(r randyApi, easy bool) *ClusterEnumerat func NewPopulatedClusterEnumerateResponse(r randyApi, easy bool) *ClusterEnumerateResponse { this := &ClusterEnumerateResponse{} if r.Intn(5) != 0 { - v50 := r.Intn(5) - this.Clusters = make([]*ClusterObject, v50) - for i := 0; i < v50; i++ { + v51 := r.Intn(5) + this.Clusters = make([]*ClusterObject, v51) + for i := 0; i < v51; i++ { this.Clusters[i] = NewPopulatedClusterObject(r, easy) } } @@ -43577,9 +44043,9 @@ func NewPopulatedCloudCredentialEnumerateRequest(r randyApi, easy bool) *CloudCr func NewPopulatedCloudCredentialEnumerateResponse(r randyApi, easy bool) *CloudCredentialEnumerateResponse { this := &CloudCredentialEnumerateResponse{} if r.Intn(5) != 0 { - v51 := r.Intn(5) - this.CloudCredentials = make([]*CloudCredentialObject, v51) - for i := 0; i < v51; i++ { + v52 := r.Intn(5) + this.CloudCredentials = make([]*CloudCredentialObject, v52) + for i := 0; i < v52; i++ { this.CloudCredentials[i] = NewPopulatedCloudCredentialObject(r, easy) } } @@ -43727,9 +44193,9 @@ func NewPopulatedReceiverEnumerateRequest(r randyApi, easy bool) *ReceiverEnumer func NewPopulatedReceiverEnumerateResponse(r randyApi, easy bool) *ReceiverEnumerateResponse { this := &ReceiverEnumerateResponse{} if r.Intn(5) != 0 { - v52 := r.Intn(5) - this.Receivers = make([]*ReceiverObject, v52) - for i := 0; i < v52; i++ { + v53 := r.Intn(5) + this.Receivers = make([]*ReceiverObject, v53) + for i := 0; i < v53; i++ { this.Receivers[i] = NewPopulatedReceiverObject(r, easy) } } @@ -43802,9 +44268,9 @@ func NewPopulatedReceiverValidateSMTPRequest(r randyApi, easy bool) *ReceiverVal if r.Intn(5) != 0 { this.CreateMetadata = NewPopulatedCreateMetadata(r, easy) } - v53 := r.Intn(10) - this.RecipientId = make([]string, v53) - for i := 0; i < v53; i++ { + v54 := r.Intn(10) + this.RecipientId = make([]string, v54) + for i := 0; i < v54; i++ { this.RecipientId[i] = string(randStringApi(r)) } oneofNumber_Config := []int32{100, 101}[r.Intn(2)] @@ -43852,9 +44318,9 @@ func NewPopulatedRecipientObject(r randyApi, easy bool) *RecipientObject { func NewPopulatedRecipientInfo(r randyApi, easy bool) *RecipientInfo { this := &RecipientInfo{} this.Type = RecipientInfo_Type([]int32{0, 1}[r.Intn(2)]) - v54 := r.Intn(10) - this.RecipientId = make([]string, v54) - for i := 0; i < v54; i++ { + v55 := r.Intn(10) + this.RecipientId = make([]string, v55) + for i := 0; i < v55; i++ { this.RecipientId[i] = string(randStringApi(r)) } this.Active = bool(bool(r.Intn(2) == 0)) @@ -43899,9 +44365,9 @@ func NewPopulatedRecipientEnumerateRequest(r randyApi, easy bool) *RecipientEnum func NewPopulatedRecipientEnumerateResponse(r randyApi, easy bool) *RecipientEnumerateResponse { this := &RecipientEnumerateResponse{} if r.Intn(5) != 0 { - v55 := r.Intn(5) - this.Recipients = make([]*RecipientObject, v55) - for i := 0; i < v55; i++ { + v56 := r.Intn(5) + this.Recipients = make([]*RecipientObject, v56) + for i := 0; i < v56; i++ { this.Recipients[i] = NewPopulatedRecipientObject(r, easy) } } @@ -44012,9 +44478,9 @@ func NewPopulatedBackupLocationEnumerateRequest(r randyApi, easy bool) *BackupLo this := &BackupLocationEnumerateRequest{} this.OrgId = string(randStringApi(r)) if r.Intn(5) != 0 { - v56 := r.Intn(10) + v57 := r.Intn(10) this.Labels = make(map[string]string) - for i := 0; i < v56; i++ { + for i := 0; i < v57; i++ { this.Labels[randStringApi(r)] = randStringApi(r) } } @@ -44032,9 +44498,9 @@ func NewPopulatedBackupLocationEnumerateRequest(r randyApi, easy bool) *BackupLo func NewPopulatedBackupLocationEnumerateResponse(r randyApi, easy bool) *BackupLocationEnumerateResponse { this := &BackupLocationEnumerateResponse{} if r.Intn(5) != 0 { - v57 := r.Intn(5) - this.BackupLocations = make([]*BackupLocationObject, v57) - for i := 0; i < v57; i++ { + v58 := r.Intn(5) + this.BackupLocations = make([]*BackupLocationObject, v58) + for i := 0; i < v58; i++ { this.BackupLocations[i] = NewPopulatedBackupLocationObject(r, easy) } } @@ -44130,12 +44596,16 @@ func NewPopulatedMetricsInspectRequest(r randyApi, easy bool) *MetricsInspectReq func NewPopulatedMetricsInspectResponse(r randyApi, easy bool) *MetricsInspectResponse { this := &MetricsInspectResponse{} if r.Intn(5) != 0 { - v58 := r.Intn(5) - this.Stats = make([]*MetricsInspectResponse_Stats, v58) - for i := 0; i < v58; i++ { + v59 := r.Intn(5) + this.Stats = make([]*MetricsInspectResponse_Stats, v59) + for i := 0; i < v59; i++ { this.Stats[i] = NewPopulatedMetricsInspectResponse_Stats(r, easy) } } + this.LastSyncTime = int64(r.Int63()) + if r.Intn(2) == 0 { + this.LastSyncTime *= -1 + } if !easy && r.Intn(10) != 0 { } return this @@ -44150,6 +44620,7 @@ func NewPopulatedMetricsInspectResponse_Stats(r randyApi, easy bool) *MetricsIns if r.Intn(5) != 0 { this.ClusterRef = NewPopulatedObjectRef(r, easy) } + this.TotalNamespaces = uint64(uint64(r.Uint32())) if !easy && r.Intn(10) != 0 { } return this @@ -44162,31 +44633,31 @@ func NewPopulatedBackupCreateRequest(r randyApi, easy bool) *BackupCreateRequest } this.BackupLocation = string(randStringApi(r)) this.Cluster = string(randStringApi(r)) - v59 := r.Intn(10) - this.Namespaces = make([]string, v59) - for i := 0; i < v59; i++ { + v60 := r.Intn(10) + this.Namespaces = make([]string, v60) + for i := 0; i < v60; i++ { this.Namespaces[i] = string(randStringApi(r)) } if r.Intn(5) != 0 { - v60 := r.Intn(10) + v61 := r.Intn(10) this.LabelSelectors = make(map[string]string) - for i := 0; i < v60; i++ { + for i := 0; i < v61; i++ { this.LabelSelectors[randStringApi(r)] = randStringApi(r) } } this.PreExecRule = string(randStringApi(r)) this.PostExecRule = string(randStringApi(r)) if r.Intn(5) != 0 { - v61 := r.Intn(5) - this.IncludeResources = make([]*ResourceInfo, v61) - for i := 0; i < v61; i++ { + v62 := r.Intn(5) + this.IncludeResources = make([]*ResourceInfo, v62) + for i := 0; i < v62; i++ { this.IncludeResources[i] = NewPopulatedResourceInfo(r, easy) } } this.CsiSnapshotClassName = string(randStringApi(r)) - v62 := r.Intn(10) - this.ResourceTypes = make([]string, v62) - for i := 0; i < v62; i++ { + v63 := r.Intn(10) + this.ResourceTypes = make([]string, v63) + for i := 0; i < v63; i++ { this.ResourceTypes[i] = string(randStringApi(r)) } if r.Intn(5) != 0 { @@ -44208,9 +44679,9 @@ func NewPopulatedBackupCreateRequest(r randyApi, easy bool) *BackupCreateRequest } this.SkipVmAutoExecRules = bool(bool(r.Intn(2) == 0)) if r.Intn(5) != 0 { - v63 := r.Intn(10) + v64 := r.Intn(10) this.VolumeSnapshotClassMapping = make(map[string]string) - for i := 0; i < v63; i++ { + for i := 0; i < v64; i++ { this.VolumeSnapshotClassMapping[randStringApi(r)] = randStringApi(r) } } @@ -44270,9 +44741,9 @@ func NewPopulatedBackupEnumerateRequest(r randyApi, easy bool) *BackupEnumerateR func NewPopulatedBackupEnumerateResponse(r randyApi, easy bool) *BackupEnumerateResponse { this := &BackupEnumerateResponse{} if r.Intn(5) != 0 { - v64 := r.Intn(5) - this.Backups = make([]*BackupObject, v64) - for i := 0; i < v64; i++ { + v65 := r.Intn(5) + this.Backups = make([]*BackupObject, v65) + for i := 0; i < v65; i++ { this.Backups[i] = NewPopulatedBackupObject(r, easy) } } @@ -44352,29 +44823,29 @@ func NewPopulatedRestoreCreateRequest(r randyApi, easy bool) *RestoreCreateReque this.Backup = string(randStringApi(r)) this.Cluster = string(randStringApi(r)) if r.Intn(5) != 0 { - v65 := r.Intn(10) + v66 := r.Intn(10) this.NamespaceMapping = make(map[string]string) - for i := 0; i < v65; i++ { + for i := 0; i < v66; i++ { this.NamespaceMapping[randStringApi(r)] = randStringApi(r) } } this.ReplacePolicy = ReplacePolicy_Type([]int32{0, 1, 2}[r.Intn(3)]) - v66 := r.Intn(10) - this.IncludeOptionalResourceTypes = make([]string, v66) - for i := 0; i < v66; i++ { + v67 := r.Intn(10) + this.IncludeOptionalResourceTypes = make([]string, v67) + for i := 0; i < v67; i++ { this.IncludeOptionalResourceTypes[i] = string(randStringApi(r)) } if r.Intn(5) != 0 { - v67 := r.Intn(5) - this.IncludeResources = make([]*ResourceInfo, v67) - for i := 0; i < v67; i++ { + v68 := r.Intn(5) + this.IncludeResources = make([]*ResourceInfo, v68) + for i := 0; i < v68; i++ { this.IncludeResources[i] = NewPopulatedResourceInfo(r, easy) } } if r.Intn(5) != 0 { - v68 := r.Intn(10) + v69 := r.Intn(10) this.StorageClassMapping = make(map[string]string) - for i := 0; i < v68; i++ { + for i := 0; i < v69; i++ { this.StorageClassMapping[randStringApi(r)] = randStringApi(r) } } @@ -44382,16 +44853,16 @@ func NewPopulatedRestoreCreateRequest(r randyApi, easy bool) *RestoreCreateReque this.BackupRef = NewPopulatedObjectRef(r, easy) } if r.Intn(5) != 0 { - v69 := r.Intn(10) + v70 := r.Intn(10) this.RancherProjectMapping = make(map[string]string) - for i := 0; i < v69; i++ { + for i := 0; i < v70; i++ { this.RancherProjectMapping[randStringApi(r)] = randStringApi(r) } } if r.Intn(5) != 0 { - v70 := r.Intn(10) + v71 := r.Intn(10) this.RancherProjectNameMapping = make(map[string]string) - for i := 0; i < v70; i++ { + for i := 0; i < v71; i++ { this.RancherProjectNameMapping[randStringApi(r)] = randStringApi(r) } } @@ -44452,9 +44923,9 @@ func NewPopulatedRestoreEnumerateRequest(r randyApi, easy bool) *RestoreEnumerat func NewPopulatedRestoreEnumerateResponse(r randyApi, easy bool) *RestoreEnumerateResponse { this := &RestoreEnumerateResponse{} if r.Intn(5) != 0 { - v71 := r.Intn(5) - this.Restores = make([]*RestoreObject, v71) - for i := 0; i < v71; i++ { + v72 := r.Intn(5) + this.Restores = make([]*RestoreObject, v72) + for i := 0; i < v72; i++ { this.Restores[i] = NewPopulatedRestoreObject(r, easy) } } @@ -44529,9 +45000,9 @@ func NewPopulatedOrganizationEnumerateRequest(r randyApi, easy bool) *Organizati func NewPopulatedOrganizationEnumerateResponse(r randyApi, easy bool) *OrganizationEnumerateResponse { this := &OrganizationEnumerateResponse{} if r.Intn(5) != 0 { - v72 := r.Intn(5) - this.Organizations = make([]*OrganizationObject, v72) - for i := 0; i < v72; i++ { + v73 := r.Intn(5) + this.Organizations = make([]*OrganizationObject, v73) + for i := 0; i < v73; i++ { this.Organizations[i] = NewPopulatedOrganizationObject(r, easy) } } @@ -44624,9 +45095,9 @@ func NewPopulatedRuleEnumerateRequest(r randyApi, easy bool) *RuleEnumerateReque func NewPopulatedRuleEnumerateResponse(r randyApi, easy bool) *RuleEnumerateResponse { this := &RuleEnumerateResponse{} if r.Intn(5) != 0 { - v73 := r.Intn(5) - this.Rules = make([]*RuleObject, v73) - for i := 0; i < v73; i++ { + v74 := r.Intn(5) + this.Rules = make([]*RuleObject, v74) + for i := 0; i < v74; i++ { this.Rules[i] = NewPopulatedRuleObject(r, easy) } } @@ -44750,9 +45221,9 @@ func NewPopulatedLicenseActivateRequest_ActivationId(r randyApi, easy bool) *Lic } func NewPopulatedLicenseActivateRequest_LicenseData(r randyApi, easy bool) *LicenseActivateRequest_LicenseData { this := &LicenseActivateRequest_LicenseData{} - v74 := r.Intn(100) - this.LicenseData = make([]byte, v74) - for i := 0; i < v74; i++ { + v75 := r.Intn(100) + this.LicenseData = make([]byte, v75) + for i := 0; i < v75; i++ { this.LicenseData[i] = byte(r.Intn(256)) } return this @@ -44813,9 +45284,9 @@ func NewPopulatedLicenseInspectResponse(r randyApi, easy bool) *LicenseInspectRe func NewPopulatedLicenseResponseInfo(r randyApi, easy bool) *LicenseResponseInfo { this := &LicenseResponseInfo{} if r.Intn(5) != 0 { - v75 := r.Intn(5) - this.FeatureInfo = make([]*LicenseResponseInfo_FeatureInfo, v75) - for i := 0; i < v75; i++ { + v76 := r.Intn(5) + this.FeatureInfo = make([]*LicenseResponseInfo_FeatureInfo, v76) + for i := 0; i < v76; i++ { this.FeatureInfo[i] = NewPopulatedLicenseResponseInfo_FeatureInfo(r, easy) } } @@ -44835,9 +45306,9 @@ func NewPopulatedLicenseResponseInfo_FeatureInfo(r randyApi, easy bool) *License this.Consumed *= -1 } if r.Intn(5) != 0 { - v76 := r.Intn(5) - this.EntitlementInfo = make([]*LicenseResponseInfo_EntitlementInfo, v76) - for i := 0; i < v76; i++ { + v77 := r.Intn(5) + this.EntitlementInfo = make([]*LicenseResponseInfo_EntitlementInfo, v77) + for i := 0; i < v77; i++ { this.EntitlementInfo[i] = NewPopulatedLicenseResponseInfo_EntitlementInfo(r, easy) } } @@ -44904,9 +45375,9 @@ func NewPopulatedLicenseUsageAirgappedRequest(r randyApi, easy bool) *LicenseUsa func NewPopulatedLicenseUsageAirgappedResponse(r randyApi, easy bool) *LicenseUsageAirgappedResponse { this := &LicenseUsageAirgappedResponse{} if r.Intn(5) != 0 { - v77 := r.Intn(5) - this.LicenseUsageAirgapped = make([]*LicenseUsageAirgappedObject, v77) - for i := 0; i < v77; i++ { + v78 := r.Intn(5) + this.LicenseUsageAirgapped = make([]*LicenseUsageAirgappedObject, v78) + for i := 0; i < v78; i++ { this.LicenseUsageAirgapped[i] = NewPopulatedLicenseUsageAirgappedObject(r, easy) } } @@ -44999,9 +45470,9 @@ func NewPopulatedManagedClusterObject(r randyApi, easy bool) *ManagedClusterObje func NewPopulatedManagedClusterEnumerateResponse(r randyApi, easy bool) *ManagedClusterEnumerateResponse { this := &ManagedClusterEnumerateResponse{} if r.Intn(5) != 0 { - v78 := r.Intn(5) - this.Cluster = make([]*ManagedClusterObject, v78) - for i := 0; i < v78; i++ { + v79 := r.Intn(5) + this.Cluster = make([]*ManagedClusterObject, v79) + for i := 0; i < v79; i++ { this.Cluster[i] = NewPopulatedManagedClusterObject(r, easy) } } @@ -45134,9 +45605,9 @@ func NewPopulatedManagedClusterBulkAddRequest(r randyApi, easy bool) *ManagedClu if r.Intn(5) != 0 { this.CloudCredential = NewPopulatedObjectRef(r, easy) } - v79 := r.Intn(10) - this.ClusterName = make([]string, v79) - for i := 0; i < v79; i++ { + v80 := r.Intn(10) + this.ClusterName = make([]string, v80) + for i := 0; i < v80; i++ { this.ClusterName[i] = string(randStringApi(r)) } this.Provider = ManagedClusterBulkAddRequest_Provider([]int32{0, 1, 2, 3}[r.Intn(4)]) @@ -45220,9 +45691,9 @@ func NewPopulatedActivityEnumerateRequest(r randyApi, easy bool) *ActivityEnumer func NewPopulatedActivityEnumerateResponse(r randyApi, easy bool) *ActivityEnumerateResponse { this := &ActivityEnumerateResponse{} if r.Intn(5) != 0 { - v80 := r.Intn(5) - this.ActivityData = make([]*ActivityEnumerateResponse_Data, v80) - for i := 0; i < v80; i++ { + v81 := r.Intn(5) + this.ActivityData = make([]*ActivityEnumerateResponse_Data, v81) + for i := 0; i < v81; i++ { this.ActivityData[i] = NewPopulatedActivityEnumerateResponse_Data(r, easy) } } @@ -45258,9 +45729,9 @@ func NewPopulatedRoleObject(r randyApi, easy bool) *RoleObject { this.Metadata = NewPopulatedMetadata(r, easy) } if r.Intn(5) != 0 { - v81 := r.Intn(5) - this.Rules = make([]*RoleConfig, v81) - for i := 0; i < v81; i++ { + v82 := r.Intn(5) + this.Rules = make([]*RoleConfig, v82) + for i := 0; i < v82; i++ { this.Rules[i] = NewPopulatedRoleConfig(r, easy) } } @@ -45272,14 +45743,14 @@ func NewPopulatedRoleObject(r randyApi, easy bool) *RoleObject { func NewPopulatedRoleConfig(r randyApi, easy bool) *RoleConfig { this := &RoleConfig{} - v82 := r.Intn(10) - this.Services = make([]string, v82) - for i := 0; i < v82; i++ { - this.Services[i] = string(randStringApi(r)) - } v83 := r.Intn(10) - this.Apis = make([]string, v83) + this.Services = make([]string, v83) for i := 0; i < v83; i++ { + this.Services[i] = string(randStringApi(r)) + } + v84 := r.Intn(10) + this.Apis = make([]string, v84) + for i := 0; i < v84; i++ { this.Apis[i] = string(randStringApi(r)) } if !easy && r.Intn(10) != 0 { @@ -45293,9 +45764,9 @@ func NewPopulatedRoleCreateRequest(r randyApi, easy bool) *RoleCreateRequest { this.CreateMetadata = NewPopulatedCreateMetadata(r, easy) } if r.Intn(5) != 0 { - v84 := r.Intn(5) - this.Rules = make([]*RoleConfig, v84) - for i := 0; i < v84; i++ { + v85 := r.Intn(5) + this.Rules = make([]*RoleConfig, v85) + for i := 0; i < v85; i++ { this.Rules[i] = NewPopulatedRoleConfig(r, easy) } } @@ -45318,9 +45789,9 @@ func NewPopulatedRoleUpdateRequest(r randyApi, easy bool) *RoleUpdateRequest { this.CreateMetadata = NewPopulatedCreateMetadata(r, easy) } if r.Intn(5) != 0 { - v85 := r.Intn(5) - this.Rules = make([]*RoleConfig, v85) - for i := 0; i < v85; i++ { + v86 := r.Intn(5) + this.Rules = make([]*RoleConfig, v86) + for i := 0; i < v86; i++ { this.Rules[i] = NewPopulatedRoleConfig(r, easy) } } @@ -45351,9 +45822,9 @@ func NewPopulatedRoleEnumerateRequest(r randyApi, easy bool) *RoleEnumerateReque func NewPopulatedRoleEnumerateResponse(r randyApi, easy bool) *RoleEnumerateResponse { this := &RoleEnumerateResponse{} if r.Intn(5) != 0 { - v86 := r.Intn(5) - this.Roles = make([]*RoleObject, v86) - for i := 0; i < v86; i++ { + v87 := r.Intn(5) + this.Roles = make([]*RoleObject, v87) + for i := 0; i < v87; i++ { this.Roles[i] = NewPopulatedRoleObject(r, easy) } } @@ -45410,9 +45881,9 @@ func NewPopulatedRolePermissionRequest(r randyApi, easy bool) *RolePermissionReq func NewPopulatedRolePermissionResponse(r randyApi, easy bool) *RolePermissionResponse { this := &RolePermissionResponse{} if r.Intn(5) != 0 { - v87 := r.Intn(10) + v88 := r.Intn(10) this.Rules = make(map[string]*Permission) - for i := 0; i < v87; i++ { + for i := 0; i < v88; i++ { this.Rules[randStringApi(r)] = NewPopulatedPermission(r, easy) } } @@ -45441,9 +45912,9 @@ func NewPopulatedActivityDataObject(r randyApi, easy bool) *ActivityDataObject { this.CompletionTime *= -1 } if r.Intn(5) != 0 { - v88 := r.Intn(5) - this.Opcycle = make([]*ActivityDataObject_Opcycle, v88) - for i := 0; i < v88; i++ { + v89 := r.Intn(5) + this.Opcycle = make([]*ActivityDataObject_Opcycle, v89) + for i := 0; i < v89; i++ { this.Opcycle[i] = NewPopulatedActivityDataObject_Opcycle(r, easy) } } @@ -45489,9 +45960,9 @@ func randUTF8RuneApi(r randyApi) rune { return rune(ru + 61) } func randStringApi(r randyApi) string { - v89 := r.Intn(100) - tmps := make([]rune, v89) - for i := 0; i < v89; i++ { + v90 := r.Intn(100) + tmps := make([]rune, v90) + for i := 0; i < v90; i++ { tmps[i] = randUTF8RuneApi(r) } return string(tmps) @@ -45513,11 +45984,11 @@ func randFieldApi(dAtA []byte, r randyApi, fieldNumber int, wire int) []byte { switch wire { case 0: dAtA = encodeVarintPopulateApi(dAtA, uint64(key)) - v90 := r.Int63() + v91 := r.Int63() if r.Intn(2) == 0 { - v90 *= -1 + v91 *= -1 } - dAtA = encodeVarintPopulateApi(dAtA, uint64(v90)) + dAtA = encodeVarintPopulateApi(dAtA, uint64(v91)) case 1: dAtA = encodeVarintPopulateApi(dAtA, uint64(key)) dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) @@ -45628,6 +46099,10 @@ func (m *ClusterInfo) Size() (n int) { if m.Provider != 0 { n += 2 + sovApi(uint64(m.Provider)) } + l = len(m.K8SVersion) + if l > 0 { + n += 2 + l + sovApi(uint64(l)) + } return n } @@ -45767,6 +46242,26 @@ func (m *S3Config) Size() (n int) { if m.SseType != 0 { n += 1 + sovApi(uint64(m.SseType)) } + if m.AzureEnvironment != nil { + l = m.AzureEnvironment.Size() + n += 1 + l + sovApi(uint64(l)) + } + l = len(m.AzureResourceGroupName) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *S3Config_AzureEnvironmentType) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Type != 0 { + n += 1 + sovApi(uint64(m.Type)) + } return n } @@ -46724,6 +47219,25 @@ func (m *BackupInfo_Volume) Size() (n int) { if l > 0 { n += 1 + l + sovApi(uint64(l)) } + if m.JobSecurityContext != nil { + l = m.JobSecurityContext.Size() + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *BackupInfo_Volume_JobSecurityContext) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RunAsUser != 0 { + n += 1 + sovApi(uint64(m.RunAsUser)) + } + if m.RunAsGroup != 0 { + n += 1 + sovApi(uint64(m.RunAsGroup)) + } return n } @@ -47211,6 +47725,12 @@ func (m *EnumerateOptions) Size() (n int) { if l > 0 { n += 1 + l + sovApi(uint64(l)) } + if len(m.Status) > 0 { + for _, s := range m.Status { + l = len(s) + n += 1 + l + sovApi(uint64(l)) + } + } return n } @@ -47616,6 +48136,9 @@ func (m *BackupScheduleUpdateRequest) Size() (n int) { n += mapEntrySize + 2 + sovApi(uint64(mapEntrySize)) } } + if m.SkipVmAutoExecRules { + n += 3 + } return n } @@ -48945,6 +49468,9 @@ func (m *MetricsInspectResponse) Size() (n int) { n += 1 + l + sovApi(uint64(l)) } } + if m.LastSyncTime != 0 { + n += 1 + sovApi(uint64(m.LastSyncTime)) + } return n } @@ -48971,6 +49497,9 @@ func (m *MetricsInspectResponse_Stats) Size() (n int) { l = m.ClusterRef.Size() n += 1 + l + sovApi(uint64(l)) } + if m.TotalNamespaces != 0 { + n += 1 + sovApi(uint64(m.TotalNamespaces)) + } return n } @@ -51565,78 +52094,110 @@ func (m *ClusterInfo) Unmarshal(dAtA []byte) error { break } } - default: - iNdEx = preIndex - skippy, err := skipApi(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthApi - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ClusterInfo_StatusInfo) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowApi - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: StatusInfo: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: StatusInfo: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) - } - m.Status = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowApi - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Status |= ClusterInfo_StatusInfo_Status(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: + case 18: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field K8SVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + 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 ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.K8SVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ClusterInfo_StatusInfo) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StatusInfo: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StatusInfo: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + m.Status = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Status |= ClusterInfo_StatusInfo_Status(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -52486,6 +53047,143 @@ func (m *S3Config) Unmarshal(dAtA []byte) error { break } } + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureEnvironment", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AzureEnvironment == nil { + m.AzureEnvironment = &S3Config_AzureEnvironmentType{} + } + if err := m.AzureEnvironment.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureResourceGroupName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + 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 ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureResourceGroupName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *S3Config_AzureEnvironmentType) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AzureEnvironmentType: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AzureEnvironmentType: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + m.Type = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Type |= S3Config_AzureEnvironmentType_Type(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -59307,6 +60005,130 @@ func (m *BackupInfo_Volume) Unmarshal(dAtA []byte) error { } m.Volumesnapshot = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field JobSecurityContext", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.JobSecurityContext == nil { + m.JobSecurityContext = &BackupInfo_Volume_JobSecurityContext{} + } + if err := m.JobSecurityContext.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BackupInfo_Volume_JobSecurityContext) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: JobSecurityContext: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: JobSecurityContext: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RunAsUser", wireType) + } + m.RunAsUser = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.RunAsUser |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RunAsGroup", wireType) + } + m.RunAsGroup = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.RunAsGroup |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -63163,6 +63985,38 @@ func (m *EnumerateOptions) Unmarshal(dAtA []byte) error { } m.BackupObjectType = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + 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 ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Status = append(m.Status, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -66316,6 +67170,26 @@ func (m *BackupScheduleUpdateRequest) Unmarshal(dAtA []byte) error { } m.VolumeSnapshotClassMapping[mapkey] = mapvalue iNdEx = postIndex + case 18: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SkipVmAutoExecRules", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.SkipVmAutoExecRules = bool(v != 0) default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -75226,6 +76100,25 @@ func (m *MetricsInspectResponse) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LastSyncTime", wireType) + } + m.LastSyncTime = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.LastSyncTime |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -75401,6 +76294,25 @@ func (m *MetricsInspectResponse_Stats) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TotalNamespaces", wireType) + } + m.TotalNamespaces = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.TotalNamespaces |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) diff --git a/vendor/github.com/portworx/px-backup-api/pkg/apis/v1/api.proto b/vendor/github.com/portworx/px-backup-api/pkg/apis/v1/api.proto index 60a3ce570..e98d936bc 100644 --- a/vendor/github.com/portworx/px-backup-api/pkg/apis/v1/api.proto +++ b/vendor/github.com/portworx/px-backup-api/pkg/apis/v1/api.proto @@ -66,6 +66,7 @@ message ClusterInfo { (gogoproto.moretags) = "secure:\"true\"" ]; Provider provider = 17; + string k8s_version = 18; // Message for maintaining status of the cluster. message StatusInfo { @@ -161,6 +162,21 @@ message S3Config { // Server side encryption type name // Currently supporting only SSE-S3 and SSE-KMS type alone. Sse sse_type = 6; + // Azure environment type + // Currently supporting only AZURE_GLOBAL and AZURE_CHINA + AzureEnvironmentType azure_environment = 7; + // Azure resource group name. This is needed in the case of azure immutable bucket to get the retention period (optional) + string azure_resource_group_name = 8; + message AzureEnvironmentType { + Type type = 1; + enum Type { + Invalid = 0; + // Azure public environment + AZURE_GLOBAL = 1; + // Azure china environment + AZURE_CHINA = 2; + } + } enum Sse { Invalid = 0; // Server-side encryption with AWS S3 managed keys @@ -571,6 +587,13 @@ message BackupInfo { string pvc_id = 12; string provisioner = 13; string volumesnapshot = 14; + // As part of restrictive PSA setting, if an UID or GID is used during backup then same value should be used during restore (optional) + JobSecurityContext job_security_context = 15; + + message JobSecurityContext { + int64 runAsUser = 1; + int64 runAsGroup = 2; + } } // Message for maintaining status of the object. @@ -809,6 +832,10 @@ message EnumerateOptions { repeated string owners = 9; // filter to use backupObjectType on object string backup_object_type = 10; + // filter based on the object status. + // Need to pass the string value of the status field of the object ( backup /restore ) + // For example, {"Success", "Failed"} + repeated string status = 11; } @@ -1059,6 +1086,8 @@ message BackupScheduleUpdateRequest { ObjectRef post_exec_rule_ref = 16; // volume snapshot class mapping for csi based backup (optional) map volume_snapshot_class_mapping = 17; + // Skip auto rules for VirtualMachine Backup Object type + bool skip_vm_auto_exec_rules = 18; } // Define BackupScheduleUpdateResponse struct @@ -1824,12 +1853,15 @@ message MetricsInspectRequest { string org_id = 1; } message MetricsInspectResponse { repeated Stats stats = 1; + // Time at which last stats data was synced in epoch time format + int64 last_sync_time = 2; message Stats { string cluster = 1; uint64 num_namespaces = 2; uint64 total_backup_size = 3; uint64 num_schedules = 4; ObjectRef cluster_ref = 5; + uint64 total_namespaces = 6; } } diff --git a/vendor/github.com/portworx/px-backup-api/pkg/apis/v1/api.swagger.json b/vendor/github.com/portworx/px-backup-api/pkg/apis/v1/api.swagger.json index 2570c49f4..c20af8d62 100644 --- a/vendor/github.com/portworx/px-backup-api/pkg/apis/v1/api.swagger.json +++ b/vendor/github.com/portworx/px-backup-api/pkg/apis/v1/api.swagger.json @@ -188,6 +188,16 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "enumerate_options.status", + "description": "filter based on the object status.\nNeed to pass the string value of the status field of the object ( backup /restore )\nFor example, {\"Success\", \"Failed\"}.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + } } ], "tags": [ @@ -704,6 +714,16 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "enumerate_options.status", + "description": "filter based on the object status.\nNeed to pass the string value of the status field of the object ( backup /restore )\nFor example, {\"Success\", \"Failed\"}.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + } } ], "tags": [ @@ -2075,6 +2095,16 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "enumerate_options.status", + "description": "filter based on the object status.\nNeed to pass the string value of the status field of the object ( backup /restore )\nFor example, {\"Success\", \"Failed\"}.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + } } ], "tags": [ @@ -2400,6 +2430,16 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "enumerate_options.status", + "description": "filter based on the object status.\nNeed to pass the string value of the status field of the object ( backup /restore )\nFor example, {\"Success\", \"Failed\"}.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + } } ], "tags": [ @@ -3395,6 +3435,10 @@ }, "volumesnapshot": { "type": "string" + }, + "job_security_context": { + "$ref": "#/definitions/VolumeJobSecurityContext", + "title": "As part of restrictive PSA setting, if an UID or GID is used during backup then same value should be used during restore (optional)" } } }, @@ -4085,6 +4129,11 @@ "type": "string" }, "title": "volume snapshot class mapping for csi based backup \u003cprovisioner(string), volumesnapshotclass(string)\u003e (optional)" + }, + "skip_vm_auto_exec_rules": { + "type": "boolean", + "format": "boolean", + "title": "Skip auto rules for VirtualMachine Backup Object type" } }, "title": "Define BackupScheduleUpdateRequest struct" @@ -4467,6 +4516,9 @@ }, "provider": { "$ref": "#/definitions/ClusterInfoProvider" + }, + "k8s_version": { + "type": "string" } } }, @@ -4701,6 +4753,13 @@ "backup_object_type": { "type": "string", "title": "filter to use backupObjectType on object" + }, + "status": { + "type": "array", + "items": { + "type": "string" + }, + "title": "filter based on the object status.\nNeed to pass the string value of the status field of the object ( backup /restore )\nFor example, {\"Success\", \"Failed\"}" } } }, @@ -5164,6 +5223,11 @@ "items": { "$ref": "#/definitions/MetricsInspectResponseStats" } + }, + "last_sync_time": { + "type": "string", + "format": "int64", + "title": "Time at which last stats data was synced in epoch time format" } } }, @@ -5187,6 +5251,10 @@ }, "cluster_ref": { "$ref": "#/definitions/ObjectRef" + }, + "total_namespaces": { + "type": "string", + "format": "uint64" } } }, @@ -6311,9 +6379,35 @@ "sse_type": { "$ref": "#/definitions/S3ConfigSse", "description": "Server side encryption type name\nCurrently supporting only SSE-S3 and SSE-KMS type alone." + }, + "azure_environment": { + "$ref": "#/definitions/S3ConfigAzureEnvironmentType", + "title": "Azure environment type\nCurrently supporting only AZURE_GLOBAL and AZURE_CHINA" + }, + "azure_resource_group_name": { + "type": "string", + "title": "Azure resource group name. This is needed in the case of azure immutable bucket to get the retention period (optional)" } } }, + "S3ConfigAzureEnvironmentType": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/S3ConfigAzureEnvironmentTypeType" + } + } + }, + "S3ConfigAzureEnvironmentTypeType": { + "type": "string", + "enum": [ + "Invalid", + "AZURE_GLOBAL", + "AZURE_CHINA" + ], + "default": "Invalid", + "title": "- AZURE_GLOBAL: Azure public environment\n - AZURE_CHINA: Azure china environment" + }, "S3ConfigSse": { "type": "string", "enum": [ @@ -6589,6 +6683,19 @@ "type": "string" } } + }, + "VolumeJobSecurityContext": { + "type": "object", + "properties": { + "runAsUser": { + "type": "string", + "format": "int64" + }, + "runAsGroup": { + "type": "string", + "format": "int64" + } + } } }, "securityDefinitions": { diff --git a/vendor/github.com/portworx/sched-ops/k8s/anthos/anthos.go b/vendor/github.com/portworx/sched-ops/k8s/anthos/anthos.go new file mode 100644 index 000000000..99e33b972 --- /dev/null +++ b/vendor/github.com/portworx/sched-ops/k8s/anthos/anthos.go @@ -0,0 +1,188 @@ +package anthos + +import ( + "context" + "fmt" + "os" + "sync" + + "github.com/portworx/sched-ops/k8s/common" + gkeonprem "google.golang.org/api/gkeonprem/v1" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" + + "k8s.io/client-go/dynamic" +) + +var ( + instance Ops + once sync.Once +) + +const ( + GroupName = "cluster.k8s.io" +) + +// Ops is an interface to perform kubernetes related operation in Anthos Cluster. +type Ops interface { + // OnpremOps is an interface to perform Anthos onprem operations + OnpremOps + // ClusterOps is an interface to perform anthos cluster operations + ClusterOps + // MachineOps is an interface to perform anthos machines operations + MachineOps + // SetConfig sets the config and resets the client + SetConfig(config *rest.Config) +} + +// Client is a wrapper for the anthos resource interfaces. +type Client struct { + config *rest.Config + dynamicClient dynamic.Interface + kube kubernetes.Interface + service *gkeonprem.Service + projectLocationService *gkeonprem.ProjectsLocationsService + projectLocationVmwareClusterService *gkeonprem.ProjectsLocationsVmwareClustersService + projectLocationBareMetalClusterService *gkeonprem.ProjectsLocationsBareMetalAdminClustersService + projectsLocationsVmwareClustersVmwareNodePoolsService *gkeonprem.ProjectsLocationsVmwareClustersVmwareNodePoolsService +} + +// Instance returns a singleton instance of the client. +func Instance() Ops { + once.Do(func() { + if instance == nil { + instance = &Client{} + } + }) + return instance +} + +// SetInstance replaces the instance with the provided one. Should be used only for testing purposes. +func SetInstance(i Ops) { + instance = i +} + +// New builds a new client. +func New(kube kubernetes.Interface, service *gkeonprem.Service) *Client { + return &Client{ + kube: kube, + service: service, + } +} + +// NewForConfig builds a new client for the given config. +func NewForConfig(c *rest.Config) (*Client, error) { + kube, err := kubernetes.NewForConfig(c) + if err != nil { + return nil, err + } + + service, err := gkeonprem.NewService(context.Background()) + if err != nil { + return nil, err + } + return &Client{ + kube: kube, + service: service, + }, nil +} + +// NewInstanceFromConfigFile returns new instance of client by using given +// config file +func NewInstanceFromConfigFile(config string) (Ops, error) { + newInstance := &Client{} + err := newInstance.loadClientFromKubeconfig(config) + if err != nil { + return nil, err + } + return newInstance, nil +} + +// SetConfig sets the config and resets the client +func (c *Client) SetConfig(cfg *rest.Config) { + c.config = cfg + c.kube = nil + c.service = &gkeonprem.Service{} + c.dynamicClient = nil +} + +// initClient the k8s client if uninitialized +func (c *Client) initClient() error { + if c.kube != nil && c.service != nil && c.dynamicClient != nil { + return nil + } + + return c.setClient() +} + +// setClient instantiates a client. +func (c *Client) setClient() error { + var err error + + if c.config != nil { + if err = c.loadClient(); err != nil { + return err + } + } else { + kubeconfig := os.Getenv("KUBECONFIG") + if len(kubeconfig) > 0 { + if err = c.loadClientFromKubeconfig(kubeconfig); err != nil { + return err + } + } else { + if err = c.loadClientFromServiceAccount(); err != nil { + return err + } + } + } + if c.dynamicClient, err = dynamic.NewForConfig(c.config); err != nil { + return err + } + return err +} + +// loadClientFromServiceAccount loads a k8s client from a ServiceAccount specified in the pod running px +func (c *Client) loadClientFromServiceAccount() error { + config, err := rest.InClusterConfig() + if err != nil { + return err + } + c.config = config + return c.loadClient() +} + +func (c *Client) loadClientFromKubeconfig(kubeconfig string) error { + config, err := clientcmd.BuildConfigFromFlags("", kubeconfig) + if err != nil { + return err + } + c.config = config + return c.loadClient() +} + +func (c *Client) loadClient() error { + if c.config == nil { + return fmt.Errorf("rest config is not provided") + } + var err error + err = common.SetRateLimiter(c.config) + if err != nil { + return err + } + c.kube, err = kubernetes.NewForConfig(c.config) + if err != nil { + return err + } + ctx := context.Background() + c.service, err = gkeonprem.NewService(ctx) + if err != nil { + return fmt.Errorf("unable to create a gke onprem service. Err: %s", err) + } + c.projectLocationService = gkeonprem.NewProjectsLocationsService(c.service) + c.projectLocationVmwareClusterService = gkeonprem.NewProjectsLocationsVmwareClustersService(c.service) + c.projectLocationBareMetalClusterService = gkeonprem.NewProjectsLocationsBareMetalAdminClustersService(c.service) + c.projectsLocationsVmwareClustersVmwareNodePoolsService = gkeonprem.NewProjectsLocationsVmwareClustersVmwareNodePoolsService(c.service) + + return nil +} diff --git a/vendor/github.com/portworx/sched-ops/k8s/anthos/anthosonprem.go b/vendor/github.com/portworx/sched-ops/k8s/anthos/anthosonprem.go new file mode 100644 index 000000000..22b023e71 --- /dev/null +++ b/vendor/github.com/portworx/sched-ops/k8s/anthos/anthosonprem.go @@ -0,0 +1,69 @@ +package anthos + +import "fmt" + +// OnpremOps is an interface to perform Anthos onprem operations +type OnpremOps interface { + // GetVMwareVersionInfo returns Vmware Version Info + GetVMwareVersionInfo(project string, location string) ([]byte, error) + // GetBareMetalVersionInfo returns Bare-metal Version Info + GetBareMetalVersionInfo(project string, location string) ([]byte, error) + // ListVMwareNodePools return VMware pools + ListVMwareNodePools(project string, location string, clustername string) ([]byte, error) + // GetVMwareCluster return vmware cluster + GetVMwareCluster(project string, location string, clustername string) ([]byte, error) +} + +// GetVMwareVersionInfo returns Anthos Vmware Version Info +func (c *Client) GetVMwareVersionInfo(project string, location string) ([]byte, error) { + if err := c.initClient(); err != nil { + return nil, err + } + parent := fmt.Sprintf("projects/%s/locations/%s", project, location) + queryConfigRespone, err := c.projectLocationVmwareClusterService.QueryVersionConfig(parent).Do() + if err != nil { + return nil, fmt.Errorf("unable to retrieve Anthos VMware cluster version. Err: %v", err) + } + return queryConfigRespone.MarshalJSON() + +} + +// GetBareMetalVersionInfo returns Bare-metal Version Info +func (c *Client) GetBareMetalVersionInfo(project string, location string) ([]byte, error) { + if err := c.initClient(); err != nil { + return nil, err + } + parent := fmt.Sprintf("projects/%s/locations/%s", project, location) + queryConfigRespone, err := c.projectLocationBareMetalClusterService.QueryVersionConfig(parent).Do() + if err != nil { + return nil, fmt.Errorf("unable to retrieve Anthos Bare Metal cluster version. Err: %v", err) + } + return queryConfigRespone.MarshalJSON() + +} + +// ListVMwareNodePools return VMware pools +func (c *Client) ListVMwareNodePools(project string, location string, clustername string) ([]byte, error) { + if err := c.initClient(); err != nil { + return nil, err + } + parent := fmt.Sprintf("projects/%s/locations/%s/vmwareClusters/%s", project, location, clustername) + listVmwareNodePoolsResponse, err := c.projectsLocationsVmwareClustersVmwareNodePoolsService.List(parent).Do() + if err != nil { + return nil, fmt.Errorf("unable to list VMware node pools. Err: %v", err) + } + return listVmwareNodePoolsResponse.MarshalJSON() +} + +// GetVMwareCluster return vmware cluster +func (c *Client) GetVMwareCluster(project string, location string, clustername string) ([]byte, error) { + if err := c.initClient(); err != nil { + return nil, err + } + parent := fmt.Sprintf("projects/%s/locations/%s/vmwareClusters/%s", project, location, clustername) + vmwareClustersResponse, err := c.projectLocationVmwareClusterService.Get(parent).Do() + if err != nil { + return nil, fmt.Errorf("unable to get vmware cluster. Err: %v", err) + } + return vmwareClustersResponse.MarshalJSON() +} diff --git a/vendor/github.com/portworx/sched-ops/k8s/anthos/clusters.go b/vendor/github.com/portworx/sched-ops/k8s/anthos/clusters.go new file mode 100644 index 000000000..126db1a64 --- /dev/null +++ b/vendor/github.com/portworx/sched-ops/k8s/anthos/clusters.go @@ -0,0 +1,217 @@ +package anthos + +import ( + "context" + "encoding/json" + "fmt" + + v1alpha1 "sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + clusterResource = schema.GroupVersionResource{Group: "cluster.k8s.io", Version: "v1alpha1", Resource: "clusters"} +) + +type IpBlock struct { + // Gateway is vsphere network gateway + Gateway string + // netmask is vsphere network netmask + Netmask int64 + // Hostname is anthos nodename + Hostname string + // Ip is anthos IP + Ip string +} + +type NetworkSpec struct { + // Dns servers list + Dns []string + // Ntp server + Ntp string + // OtherNtp servers + OtherNTP []string + // ReservedAddresses blocks + ReservedAddresses []IpBlock +} + +type ClusterProviderConfig struct { + // VsphereDatacenter for anthos VMware cluster + VsphereDatacenter string + // VsphereDefaultDatastore for anthos VMware cluster nodes + VsphereDefaultDatastore string + // VsphereNetwork network used for anthos VMware cluster nodes + VsphereNetwork string + // VsphereResourcePool used for anthos VMware cluster nodes + VsphereResourcePool string + // VsphereServer server used for anthos vmware cluster + VsphereServer string + // VsphereCACertData certificate data + VsphereCACertData string + // NetworkSpec used for anthos vmware cluster + NetworkSpec NetworkSpec +} + +// ClusterOps is an interface to perform k8s cluster operations +type ClusterOps interface { + // ListCluster lists all kubernetes clusters + ListCluster(ctx context.Context) (*v1alpha1.ClusterList, error) + // GetCluster returns a cluster for the given name + GetCluster(ctx context.Context, name, namespace string) (*v1alpha1.Cluster, error) + // GetClusterStatus return the given cluster status + GetClusterStatus(ctx context.Context, name, namespace string) (*v1alpha1.ClusterStatus, error) + // GetClusterProviderSpec return cluster provider spec + GetClusterProviderSpec(ctx context.Context, name, namespace string) (*ClusterProviderConfig, error) +} + +// ListCluster lists all kubernetes clusters +func (c *Client) ListCluster(ctx context.Context) (*v1alpha1.ClusterList, error) { + if err := c.initClient(); err != nil { + return nil, err + } + + result, err := c.dynamicClient.Resource(clusterResource).List(ctx, metav1.ListOptions{}) + if err != nil { + return nil, err + } + jsonData, err := result.MarshalJSON() + if err != nil { + return nil, err + } + clusterList := &v1alpha1.ClusterList{} + if err := json.Unmarshal(jsonData, clusterList); err != nil { + return nil, err + } + + return clusterList, err +} + +// GetCluster returns a cluster for the given name +func (c *Client) GetCluster(ctx context.Context, name, namespace string) (*v1alpha1.Cluster, error) { + if err := c.initClient(); err != nil { + return nil, err + } + rawCluster, err := c.dynamicClient.Resource(clusterResource).Namespace(namespace).Get(ctx, name, metav1.GetOptions{}) + if err != nil { + return nil, err + } + jsonData, err := rawCluster.MarshalJSON() + if err != nil { + return nil, err + } + cluster := &v1alpha1.Cluster{} + if err := json.Unmarshal(jsonData, cluster); err != nil { + return nil, err + } + return cluster, nil +} + +// GetClusterStatus return the given cluster status +func (c *Client) GetClusterStatus(ctx context.Context, name, namespace string) (*v1alpha1.ClusterStatus, error) { + cluster, err := c.GetCluster(ctx, name, namespace) + if err != nil { + return nil, err + } + return &cluster.Status, err +} + +// GetClusterProviderSpec return cluster provider spec +func (c *Client) GetClusterProviderSpec(ctx context.Context, name, namespace string) (*ClusterProviderConfig, error) { + if err := c.initClient(); err != nil { + return nil, err + } + rawCluster, err := c.dynamicClient.Resource(clusterResource).Namespace(namespace).Get(ctx, name, metav1.GetOptions{}) + if err != nil { + return nil, err + } + return c.unstructuredGetProviderSpec(rawCluster) + +} + +func (c *Client) unstructuredGetProviderSpec(clRaw *unstructured.Unstructured) (*ClusterProviderConfig, error) { + clusterProviderConfig := ClusterProviderConfig{} + networkSpec := NetworkSpec{} + providerSpec, _, err := unstructured.NestedMap(clRaw.Object, "spec", "providerSpec") + if err != nil { + return nil, fmt.Errorf("failed to get 'provider spec' from the cluster spec. Err: %v", err) + } + clusterProviderConfig.VsphereDatacenter, _, err = unstructured.NestedString(providerSpec, "value", "vsphereDatacenter") + if err != nil { + return nil, fmt.Errorf("failed to get 'vsphereDatacenter' from provider spec. Err: %v", err) + } + clusterProviderConfig.VsphereDefaultDatastore, _, err = unstructured.NestedString(providerSpec, "value", "vsphereDefaultDatastore") + if err != nil { + return nil, fmt.Errorf("failed to get 'vsphereDefaultDatastore' from provider spec. Err: %v", err) + } + clusterProviderConfig.VsphereNetwork, _, err = unstructured.NestedString(providerSpec, "value", "vsphereNetwork") + if err != nil { + return nil, fmt.Errorf("failed to get 'vsphereNetwork' from provider spec. Err: %v", err) + } + clusterProviderConfig.VsphereResourcePool, _, err = unstructured.NestedString(providerSpec, "value", "vsphereResourcePool") + if err != nil { + return nil, fmt.Errorf("failed to get 'vsphereResourcePool' from provider spec. Err: %v", err) + } + clusterProviderConfig.VsphereServer, _, err = unstructured.NestedString(providerSpec, "value", "vsphereServer") + if err != nil { + return nil, fmt.Errorf("failed to get 'vsphereServer' from provider spec. Err: %v", err) + } + clusterProviderConfig.VsphereCACertData, _, err = unstructured.NestedString(providerSpec, "value", "vsphereCACertData") + if err != nil { + return nil, fmt.Errorf("failed to get 'vsphereCACertData' from provider spec. Err: %v", err) + } + netSpec, _, err := unstructured.NestedMap(providerSpec, "value", "networkSpec") + if err != nil { + return nil, fmt.Errorf("failed to get 'netwrok spec' in provider spec. Err: %v", err) + } + if netSpec["dns"] != nil { + networkSpec.Dns, _, err = unstructured.NestedStringSlice(netSpec, "dns") + if err != nil { + return nil, fmt.Errorf("failed to get 'DNS server list' in network spec. Err: %v", err) + } + } + if netSpec["ntp"] != nil { + networkSpec.Ntp, _, err = unstructured.NestedString(netSpec, "ntp") + if err != nil { + return nil, fmt.Errorf("failed to get 'ntp' server from network spec. Err: %v", err) + } + } + if netSpec["otherntp"] != nil { + networkSpec.OtherNTP, _, err = unstructured.NestedStringSlice(netSpec, "otherntp") + if err != nil { + return nil, fmt.Errorf("failed to get 'otherntp' server list from network spec. Err: %v", err) + } + } + if netSpec["reservedAddresses"] != nil { + reservedAddressesSpec, _, err := unstructured.NestedSlice(netSpec, "reservedAddresses") + if err != nil { + return nil, fmt.Errorf("failed to get 'reservedAddress' server list from network spec. Err: %v", err) + } + for _, ipBlockInt := range reservedAddressesSpec { + ipBlockMap := ipBlockInt.(map[string]interface{}) + reservedAddresses := IpBlock{} + reservedAddresses.Gateway, _, err = unstructured.NestedString(ipBlockMap, "gateway") + if err != nil { + return nil, fmt.Errorf("failed to get 'gateway' from reserved address. Err: %v", err) + } + reservedAddresses.Hostname, _, err = unstructured.NestedString(ipBlockMap, "hostname") + if err != nil { + return nil, fmt.Errorf("failed to get 'hostname' from reserved address. Err: %v", err) + } + reservedAddresses.Ip, _, err = unstructured.NestedString(ipBlockMap, "ip") + if err != nil { + return nil, fmt.Errorf("failed to get 'ip' from reserved address. Err: %v", err) + } + reservedAddresses.Netmask, _, err = unstructured.NestedInt64(ipBlockMap, "netmask") + if err != nil { + return nil, fmt.Errorf("failed to get 'netmask' from reserved address. Err: %v", err) + } + networkSpec.ReservedAddresses = append(networkSpec.ReservedAddresses, reservedAddresses) + } + } + clusterProviderConfig.NetworkSpec = networkSpec + return &clusterProviderConfig, nil + +} diff --git a/vendor/github.com/portworx/sched-ops/k8s/anthos/machines.go b/vendor/github.com/portworx/sched-ops/k8s/anthos/machines.go new file mode 100644 index 000000000..404941782 --- /dev/null +++ b/vendor/github.com/portworx/sched-ops/k8s/anthos/machines.go @@ -0,0 +1,76 @@ +package anthos + +import ( + "context" + "encoding/json" + + v1alpha1 "sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + machineResource = schema.GroupVersionResource{Group: "cluster.k8s.io", Version: "v1alpha1", Resource: "machines"} +) + +// MachinesOps is an interface to perform k8s machines operations +type MachineOps interface { + // ListMachines lists all machines in kubernetes cluster + ListMachines(ctx context.Context) (*v1alpha1.MachineList, error) + // GetMachine returns a machine for the given name + GetMachine(ctx context.Context, name string) (*v1alpha1.Machine, error) + // DeleteMachine delete machine for given name + DeleteMachine(ctx context.Context, name string) error +} + +// ListMachines lists all machines in kubernetes cluster +func (c *Client) ListMachines(ctx context.Context) (*v1alpha1.MachineList, error) { + if err := c.initClient(); err != nil { + return nil, err + } + + result, err := c.dynamicClient.Resource(machineResource).List(ctx, metav1.ListOptions{}) + if err != nil { + return nil, err + } + jsonData, err := result.MarshalJSON() + if err != nil { + return nil, err + } + machineList := &v1alpha1.MachineList{} + if err := json.Unmarshal(jsonData, machineList); err != nil { + return nil, err + } + + return machineList, err +} + +// GetMachine returns a machine for the given name +func (c *Client) GetMachine(ctx context.Context, name string) (*v1alpha1.Machine, error) { + if err := c.initClient(); err != nil { + return nil, err + } + rawMachine, err := c.dynamicClient.Resource(machineResource).Get(ctx, name, metav1.GetOptions{}) + if err != nil { + return nil, err + } + jsonData, err := rawMachine.MarshalJSON() + if err != nil { + return nil, err + } + machine := &v1alpha1.Machine{} + if err := json.Unmarshal(jsonData, machine); err != nil { + return nil, err + } + return machine, nil +} + +// DeleteMachine delete machine for given name +func (c *Client) DeleteMachine(ctx context.Context, name string) error { + if err := c.initClient(); err != nil { + return err + } + return c.dynamicClient.Resource(machineResource).Delete(ctx, name, metav1.DeleteOptions{}) + +} diff --git a/vendor/github.com/portworx/sched-ops/k8s/core/core.go b/vendor/github.com/portworx/sched-ops/k8s/core/core.go index 4fc80c49d..65ada4573 100644 --- a/vendor/github.com/portworx/sched-ops/k8s/core/core.go +++ b/vendor/github.com/portworx/sched-ops/k8s/core/core.go @@ -235,6 +235,9 @@ type WatchFunc func(object runtime.Object) error // handleWatch is internal function that handles the watch. On channel shutdown (ie. stop watch), // it'll attempt to reestablish its watch function. +// +// NOTE: When a new kind of watcher is added, handleWatch() needs to be updated to re-establish the watch +// for the new object type. func (c *Client) handleWatch( watchInterface watch.Interface, object runtime.Object, @@ -257,6 +260,8 @@ func (c *Client) handleWatch( err = c.WatchConfigMap(cm, fn) } else if _, ok := object.(*corev1.Pod); ok { err = c.WatchPods(namespace, fn, listOptions) + } else if _, ok := object.(*corev1.Event); ok { + err = c.WatchEvents(namespace, fn, listOptions) } else if sc, ok := object.(*corev1.Secret); ok { err = c.WatchSecret(sc, fn) } else if csr, ok := object.(*certv1.CertificateSigningRequest); ok { diff --git a/vendor/github.com/portworx/sched-ops/k8s/core/events.go b/vendor/github.com/portworx/sched-ops/k8s/core/events.go index 075eee10d..5786a2da3 100644 --- a/vendor/github.com/portworx/sched-ops/k8s/core/events.go +++ b/vendor/github.com/portworx/sched-ops/k8s/core/events.go @@ -3,6 +3,7 @@ package core import ( "context" + "github.com/sirupsen/logrus" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -20,6 +21,8 @@ type EventOps interface { UpdateEvent(event *corev1.Event) (*corev1.Event, error) // ListEvents retrieves all events registered with kubernetes ListEvents(namespace string, opts metav1.ListOptions) (*corev1.EventList, error) + // WatchEvents sets up a watcher that listens for events in given namespace or all namespaces if the namespace is empty + WatchEvents(namespace string, fn WatchFunc, listOptions metav1.ListOptions) error } // CreateEvent puts an event into k8s etcd @@ -46,6 +49,30 @@ func (c *Client) ListEvents(namespace string, opts metav1.ListOptions) (*corev1. return c.kubernetes.CoreV1().Events(namespace).List(context.TODO(), opts) } +// WatchEvents sets up a watcher that listens for events in given namespace or all namespaces if the namespace is empty +func (c *Client) WatchEvents(namespace string, fn WatchFunc, listOptions metav1.ListOptions) error { + if err := c.initClient(); err != nil { + return err + } + + listOptions.Watch = true + watchInterface, err := c.kubernetes.CoreV1().Events(namespace).Watch(context.TODO(), listOptions) + if err != nil { + logrus.WithError(err).Error("error invoking the watch api for events") + return err + } + + // fire off watch function + go c.handleWatch( + watchInterface, + &corev1.Event{}, + namespace, + fn, + listOptions) + + return nil +} + // RecorderOps is an interface to record k8s events type RecorderOps interface { // RecordEventf records a new-style event into k8s using client-go's new events.EventRecorder interface. diff --git a/vendor/github.com/portworx/sched-ops/k8s/core/nodes.go b/vendor/github.com/portworx/sched-ops/k8s/core/nodes.go index dd76d8b5b..6c554b2ce 100644 --- a/vendor/github.com/portworx/sched-ops/k8s/core/nodes.go +++ b/vendor/github.com/portworx/sched-ops/k8s/core/nodes.go @@ -37,7 +37,7 @@ type NodeOps interface { AddLabelOnNode(string, string, string) error // RemoveLabelOnNode removes the label with key on given node RemoveLabelOnNode(string, string) error - // WatchNode sets up a watcher that listens for the changes on Node. + // WatchNode sets up a watcher that listens for the changes on input node.Incase of input node as nil, It will watch on all the nodes WatchNode(node *corev1.Node, fn WatchFunc) error // CordonNode cordons the given node CordonNode(nodeName string, timeout, retryInterval time.Duration) error @@ -286,21 +286,19 @@ func (c *Client) RemoveLabelOnNode(name, key string) error { return err } -// WatchNode sets up a watcher that listens for the changes on Node. +// WatchNode sets up a watcher that listens for the changes on input node and will watch all the nodes when input node is nil. func (c *Client) WatchNode(node *corev1.Node, watchNodeFn WatchFunc) error { - if node == nil { - return fmt.Errorf("no node given to watch") - } - if err := c.initClient(); err != nil { return err } - listOptions := metav1.ListOptions{ - FieldSelector: fields.OneTermEqualSelector("metadata.name", node.Name).String(), - Watch: true, + Watch: true, + } + if node != nil { + listOptions.FieldSelector = fields.OneTermEqualSelector("metadata.name", node.Name).String() + } else { + fmt.Printf("Watching all nodes") } - watchInterface, err := c.kubernetes.CoreV1().Nodes().Watch(context.TODO(), listOptions) if err != nil { return err diff --git a/vendor/github.com/portworx/sched-ops/k8s/kubevirt-dynamic/kubevirt.go b/vendor/github.com/portworx/sched-ops/k8s/kubevirt-dynamic/kubevirt.go index 1511aa5f1..6cc66dd18 100644 --- a/vendor/github.com/portworx/sched-ops/k8s/kubevirt-dynamic/kubevirt.go +++ b/vendor/github.com/portworx/sched-ops/k8s/kubevirt-dynamic/kubevirt.go @@ -270,3 +270,22 @@ func (c *Client) unstructuredGetTimestamp(obj map[string]interface{}, fields ... } return ret, found, nil } + +func (c *Client) getBoolCondition(conditions []interface{}, conditionType string) (bool, bool, error) { + condition, err := c.unstructuredFindKeyValString(conditions, "type", conditionType) + if err != nil { + return false, false, fmt.Errorf("failed while finding %s condition in vmi: %w", conditionType, err) + } + if condition != nil { + val, found, err := c.unstructuredGetValString(condition, "status") + if err != nil || !found { + return false, false, fmt.Errorf("failed to get status of %s condition: %w", conditionType, err) + } + boolVal, err := strconv.ParseBool(val) + if err != nil { + return false, false, fmt.Errorf("failed to parse status for %s condition: %w", conditionType, err) + } + return boolVal, true, nil + } + return false, false, nil +} diff --git a/vendor/github.com/portworx/sched-ops/k8s/kubevirt-dynamic/virtualmachineinstance.go b/vendor/github.com/portworx/sched-ops/k8s/kubevirt-dynamic/virtualmachineinstance.go index 02efd8fa7..c0ff8eaea 100644 --- a/vendor/github.com/portworx/sched-ops/k8s/kubevirt-dynamic/virtualmachineinstance.go +++ b/vendor/github.com/portworx/sched-ops/k8s/kubevirt-dynamic/virtualmachineinstance.go @@ -3,7 +3,6 @@ package kubevirtdynamic import ( "context" "fmt" - "strconv" "time" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -44,6 +43,10 @@ type VirtualMachineInstance struct { RootDiskPVC string // LiveMigratable indicates if VMI can be live migrated. LiveMigratable bool + // Ready indicates if VMI is ready. + Ready bool + // Paused indicates if VMI is paused. + Paused bool // NodeName where VMI is currently running NodeName string // Phase VMI is in e.g. Running @@ -158,7 +161,7 @@ func (c *Client) GetVirtualMachineInstance( return nil, fmt.Errorf("empty pvc name for the root disk") } - // check if the VMI is live migratable + // check if the VMI is live migratable and ready // Sample yaml: // status: // conditions: @@ -166,26 +169,31 @@ func (c *Client) GetVirtualMachineInstance( // lastTransitionTime: null // status: "True" // type: LiveMigratable + // - lastProbeTime: null + // lastTransitionTime: "2024-05-05T14:15:51Z" + // status: "True" + // type: Ready + // liveMigratable := false + ready := false + paused := false conditions, found, err := unstructured.NestedSlice(vmiRaw.Object, "status", "conditions") if err != nil { return nil, fmt.Errorf("failed to find conditions in vmi: %w", err) } if found { - condition, err := c.unstructuredFindKeyValString(conditions, "type", "LiveMigratable") + liveMigratable, _, err = c.getBoolCondition(conditions, "LiveMigratable") if err != nil { - return nil, fmt.Errorf("failed while finding live migratable condition in vmi: %w", err) + return nil, err } - if condition != nil { - val, found, err := c.unstructuredGetValString(condition, "status") - if err != nil || !found { - return nil, fmt.Errorf("failed to get status of LiveMigratable condition: %w", err) - } - liveMigratable, err = strconv.ParseBool(val) - if err != nil { - return nil, fmt.Errorf("failed to parse status for LiveMigratable condition: %w", err) - } + ready, _, err = c.getBoolCondition(conditions, "Ready") + if err != nil { + return nil, err + } + paused, _, err = c.getBoolCondition(conditions, "Paused") + if err != nil { + return nil, err } } @@ -265,6 +273,8 @@ func (c *Client) GetVirtualMachineInstance( RootDisk: rootDiskName, RootDiskPVC: pvcName, LiveMigratable: liveMigratable, + Ready: ready, + Paused: paused, NodeName: nodeName, Phase: currentPhase, PhaseTransitions: phaseTransitions, diff --git a/vendor/github.com/portworx/sched-ops/k8s/kubevirt-dynamic/virtualmachineinstancemigration.go b/vendor/github.com/portworx/sched-ops/k8s/kubevirt-dynamic/virtualmachineinstancemigration.go index a3fd70baf..ae5b50a06 100644 --- a/vendor/github.com/portworx/sched-ops/k8s/kubevirt-dynamic/virtualmachineinstancemigration.go +++ b/vendor/github.com/portworx/sched-ops/k8s/kubevirt-dynamic/virtualmachineinstancemigration.go @@ -10,6 +10,11 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" ) +const ( + // migrationPhaseFailed is the phase when the migration has failed + migrationPhaseFailed = "Failed" +) + var ( migrationResource = schema.GroupVersionResource{Group: "kubevirt.io", Version: "v1", Resource: "virtualmachineinstancemigrations"} ) @@ -22,6 +27,10 @@ type VirtualMachineInstanceMigration struct { Name string // VMIName is name of the VirtualMachineInstance being migrated VMIName string + // Annotations on the migration obj + Annotations map[string]string + // Labels on the migration obj + Labels map[string]string // Completed indicates if the migration has completed Completed bool // StartTimestamp has the time the migration action started @@ -48,6 +57,10 @@ type VirtualMachineInstanceMigrationOps interface { CreateVirtualMachineInstanceMigration(ctx context.Context, vmiNamespace, vmiName string) ( *VirtualMachineInstanceMigration, error) + // CreateVirtualMachineInstanceMigrationWithParams starts live migration of the specified VMI + CreateVirtualMachineInstanceMigrationWithParams(ctx context.Context, vmiNamespace, vmiName string, + migrationName, generateNamePrefix string, annotations, labels map[string]string) (*VirtualMachineInstanceMigration, error) + // GetVirtualMachineInstanceMigration retrieves some info about the specified VMI GetVirtualMachineInstanceMigration(ctx context.Context, namespace, name string) ( *VirtualMachineInstanceMigration, error) @@ -61,6 +74,14 @@ type VirtualMachineInstanceMigrationOps interface { func (c *Client) CreateVirtualMachineInstanceMigration( ctx context.Context, vmiNamespace, vmiName string, ) (*VirtualMachineInstanceMigration, error) { + return c.CreateVirtualMachineInstanceMigrationWithParams(ctx, vmiNamespace, vmiName, "", "", nil, nil) +} + +// CreateVirtualMachineInstanceMigrationWithParams starts live migration of the specified VMI +func (c *Client) CreateVirtualMachineInstanceMigrationWithParams( + ctx context.Context, vmiNamespace, vmiName string, migrationName, generateNamePrefix string, + annotations, labels map[string]string, +) (*VirtualMachineInstanceMigration, error) { if err := c.initClient(); err != nil { return nil, err @@ -71,13 +92,21 @@ func (c *Client) CreateVirtualMachineInstanceMigration( "apiVersion": "kubevirt.io/v1", "kind": "VirtualMachineInstanceMigration", "metadata": map[string]interface{}{ - "generateName": vmiName + "-px-", + "annotations": annotations, + "labels": labels, }, "spec": map[string]interface{}{ "vmiName": vmiName, }, }, } + if migrationName != "" { + migration.Object["metadata"].(map[string]interface{})["name"] = migrationName + } else if generateNamePrefix != "" { + migration.Object["metadata"].(map[string]interface{})["generateName"] = generateNamePrefix + } else { + migration.Object["metadata"].(map[string]interface{})["generateName"] = vmiName + "-px-" + } result, err := c.client.Resource(migrationResource).Namespace(vmiNamespace).Create( ctx, migration, metav1.CreateOptions{}) @@ -174,21 +203,40 @@ func (c *Client) unstructuredGetVMIMigration( if err != nil { return nil, fmt.Errorf("failed to get 'vmiName' from the vmi migration spec: %w", err) } + // annotations + ret.Annotations, _, err = unstructured.NestedStringMap(migration.Object, "metadata", "annotations") + if err != nil { + return nil, fmt.Errorf("failed to get 'annotations' from the vmi migration spec: %w", err) + } + // labels + ret.Labels, _, err = unstructured.NestedStringMap(migration.Object, "metadata", "labels") + if err != nil { + return nil, fmt.Errorf("failed to get 'labels' from the vmi migration spec: %w", err) + } // phase ret.Phase, _, err = unstructured.NestedString(migration.Object, "status", "phase") if err != nil { return nil, fmt.Errorf("failed to get 'phase' from the vmi migration status: %w", err) } // completed - ret.Completed, _, err = unstructured.NestedBool(migration.Object, "status", "migrationState", "completed") + var found bool + ret.Completed, found, err = unstructured.NestedBool(migration.Object, "status", "migrationState", "completed") if err != nil { return nil, fmt.Errorf("failed to get 'completed' from the vmi migration status: %w", err) } + // migrationState is not present if the pod fails to get scheduled; we need to look at the Phase + if !found && ret.Phase == migrationPhaseFailed { + ret.Completed = true + } // failed - ret.Failed, _, err = unstructured.NestedBool(migration.Object, "status", "migrationState", "failed") + ret.Failed, found, err = unstructured.NestedBool(migration.Object, "status", "migrationState", "failed") if err != nil { return nil, fmt.Errorf("failed to get 'failed' from the vmi migration status: %w", err) } + // migrationState is not present if the pod fails to get scheduled; we need to look at the Phase + if !found && ret.Phase == migrationPhaseFailed { + ret.Failed = true + } // startTimestamp ret.StartTimestamp, _, err = c.unstructuredGetTimestamp(migration.Object, "status", "migrationState", "startTimestamp") if err != nil { diff --git a/vendor/github.com/portworx/sched-ops/k8s/kubevirt/virtualmachine.go b/vendor/github.com/portworx/sched-ops/k8s/kubevirt/virtualmachine.go index 1745fd368..394c59ca8 100644 --- a/vendor/github.com/portworx/sched-ops/k8s/kubevirt/virtualmachine.go +++ b/vendor/github.com/portworx/sched-ops/k8s/kubevirt/virtualmachine.go @@ -135,11 +135,17 @@ func (c *Client) ValidateVirtualMachineRunning(name, namespace string, timeout, return fmt.Errorf("failed to get Virtual Machine") } - // Start the VirtualMachine if its not Started yet - if vm.Status.PrintableStatus == kubevirtv1.VirtualMachineStatusStopped || - vm.Status.PrintableStatus == kubevirtv1.VirtualMachineStatusStopping { + // Start the VirtualMachine if it is "startable" and its not Started yet + // Avoid "Always does not support manual start requests" error by checking the RunStrategy + // https://bugzilla.redhat.com/show_bug.cgi?id=1709794 + runStrategy, err := vm.RunStrategy() + if err != nil { + return fmt.Errorf("failed to get RunStrategy for VM %s/%s: %w", namespace, name, err) + } + if runStrategy != kubevirtv1.RunStrategyAlways && (vm.Status.PrintableStatus == kubevirtv1.VirtualMachineStatusStopped || + vm.Status.PrintableStatus == kubevirtv1.VirtualMachineStatusStopping) { if err = c.StartVirtualMachine(vm); err != nil { - return fmt.Errorf("Failed to start VirtualMachine %v", err) + return fmt.Errorf("failed to start VirtualMachine %s/%s: %w", namespace, name, err) } } @@ -147,13 +153,14 @@ func (c *Client) ValidateVirtualMachineRunning(name, namespace string, timeout, vm, err = c.GetVirtualMachine(name, namespace) if err != nil { - return "", false, fmt.Errorf("failed to get Virtual Machine") + return "", false, fmt.Errorf("failed to get Virtual Machine %s/%s: %w", namespace, name, err) } - if vm.Status.PrintableStatus == kubevirtv1.VirtualMachineStatusRunning { + if vm.Status.PrintableStatus == kubevirtv1.VirtualMachineStatusRunning && vm.Status.Ready { return "", false, nil } - return "", true, fmt.Errorf("Virtual Machine not in running state: %v", vm.Status.PrintableStatus) + return "", true, fmt.Errorf("virtual machine %s/%s is not ready: %v: %v", namespace, name, + vm.Status.PrintableStatus, vm.Status.Conditions) } if _, err := task.DoRetryWithTimeout(t, timeout, retryInterval); err != nil { diff --git a/vendor/github.com/prometheus/client_golang/prometheus/collectors/expvar_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/collectors/expvar_collector.go index 3aa8d0590..b22d862fb 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/collectors/expvar_collector.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/collectors/expvar_collector.go @@ -22,7 +22,7 @@ import "github.com/prometheus/client_golang/prometheus" // Prometheus metrics. Note that the data models of expvar and Prometheus are // fundamentally different, and that the expvar Collector is inherently slower // than native Prometheus metrics. Thus, the expvar Collector is probably great -// for experiments and prototying, but you should seriously consider a more +// for experiments and prototyping, but you should seriously consider a more // direct implementation of Prometheus metrics for monitoring production // systems. // diff --git a/vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_latest.go b/vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_latest.go index 2f5616894..bcfa4fa10 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_latest.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_latest.go @@ -132,16 +132,19 @@ type GoCollectionOption uint32 const ( // GoRuntimeMemStatsCollection represents the metrics represented by runtime.MemStats structure. - // Deprecated. Use WithGoCollectorMemStatsMetricsDisabled() function to disable those metrics in the collector. + // + // Deprecated: Use WithGoCollectorMemStatsMetricsDisabled() function to disable those metrics in the collector. GoRuntimeMemStatsCollection GoCollectionOption = 1 << iota // GoRuntimeMetricsCollection is the new set of metrics represented by runtime/metrics package. - // Deprecated. Use WithGoCollectorRuntimeMetrics(GoRuntimeMetricsRule{Matcher: regexp.MustCompile("/.*")}) + // + // Deprecated: Use WithGoCollectorRuntimeMetrics(GoRuntimeMetricsRule{Matcher: regexp.MustCompile("/.*")}) // function to enable those metrics in the collector. GoRuntimeMetricsCollection ) // WithGoCollections allows enabling different collections for Go collector on top of base metrics. -// Deprecated. Use WithGoCollectorRuntimeMetrics() and WithGoCollectorMemStatsMetricsDisabled() instead to control metrics. +// +// Deprecated: Use WithGoCollectorRuntimeMetrics() and WithGoCollectorMemStatsMetricsDisabled() instead to control metrics. func WithGoCollections(flags GoCollectionOption) func(options *internal.GoCollectorOptions) { return func(options *internal.GoCollectorOptions) { if flags&GoRuntimeMemStatsCollection == 0 { diff --git a/vendor/github.com/prometheus/client_golang/prometheus/counter.go b/vendor/github.com/prometheus/client_golang/prometheus/counter.go index 62de4dc59..4ce84e7a8 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/counter.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/counter.go @@ -20,6 +20,7 @@ import ( "time" dto "github.com/prometheus/client_model/go" + "google.golang.org/protobuf/types/known/timestamppb" ) // Counter is a Metric that represents a single numerical value that only ever @@ -66,7 +67,7 @@ type CounterVecOpts struct { CounterOpts // VariableLabels are used to partition the metric vector by the given set - // of labels. Each label value will be constrained with the optional Contraint + // of labels. Each label value will be constrained with the optional Constraint // function, if provided. VariableLabels ConstrainableLabels } @@ -90,8 +91,12 @@ func NewCounter(opts CounterOpts) Counter { nil, opts.ConstLabels, ) - result := &counter{desc: desc, labelPairs: desc.constLabelPairs, now: time.Now} + if opts.now == nil { + opts.now = time.Now + } + result := &counter{desc: desc, labelPairs: desc.constLabelPairs, now: opts.now} result.init(result) // Init self-collection. + result.createdTs = timestamppb.New(opts.now()) return result } @@ -106,10 +111,12 @@ type counter struct { selfCollector desc *Desc + createdTs *timestamppb.Timestamp labelPairs []*dto.LabelPair exemplar atomic.Value // Containing nil or a *dto.Exemplar. - now func() time.Time // To mock out time.Now() for testing. + // now is for testing purposes, by default it's time.Now. + now func() time.Time } func (c *counter) Desc() *Desc { @@ -159,8 +166,7 @@ func (c *counter) Write(out *dto.Metric) error { exemplar = e.(*dto.Exemplar) } val := c.get() - - return populateMetric(CounterValue, val, c.labelPairs, exemplar, out) + return populateMetric(CounterValue, val, c.labelPairs, exemplar, out, c.createdTs) } func (c *counter) updateExemplar(v float64, l Labels) { @@ -200,13 +206,17 @@ func (v2) NewCounterVec(opts CounterVecOpts) *CounterVec { opts.VariableLabels, opts.ConstLabels, ) + if opts.now == nil { + opts.now = time.Now + } return &CounterVec{ MetricVec: NewMetricVec(desc, func(lvs ...string) Metric { - if len(lvs) != len(desc.variableLabels) { - panic(makeInconsistentCardinalityError(desc.fqName, desc.variableLabels.labelNames(), lvs)) + if len(lvs) != len(desc.variableLabels.names) { + panic(makeInconsistentCardinalityError(desc.fqName, desc.variableLabels.names, lvs)) } - result := &counter{desc: desc, labelPairs: MakeLabelPairs(desc, lvs), now: time.Now} + result := &counter{desc: desc, labelPairs: MakeLabelPairs(desc, lvs), now: opts.now} result.init(result) // Init self-collection. + result.createdTs = timestamppb.New(opts.now()) return result }), } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/desc.go b/vendor/github.com/prometheus/client_golang/prometheus/desc.go index 12331542d..68ffe3c24 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/desc.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/desc.go @@ -18,12 +18,12 @@ import ( "sort" "strings" - "github.com/prometheus/client_golang/prometheus/internal" - "github.com/cespare/xxhash/v2" dto "github.com/prometheus/client_model/go" "github.com/prometheus/common/model" "google.golang.org/protobuf/proto" + + "github.com/prometheus/client_golang/prometheus/internal" ) // Desc is the descriptor used by every Prometheus Metric. It is essentially @@ -52,7 +52,7 @@ type Desc struct { constLabelPairs []*dto.LabelPair // variableLabels contains names of labels and normalization function for // which the metric maintains variable values. - variableLabels ConstrainedLabels + variableLabels *compiledLabels // id is a hash of the values of the ConstLabels and fqName. This // must be unique among all registered descriptors and can therefore be // used as an identifier of the descriptor. @@ -93,7 +93,7 @@ func (v2) NewDesc(fqName, help string, variableLabels ConstrainableLabels, const d := &Desc{ fqName: fqName, help: help, - variableLabels: variableLabels.constrainedLabels(), + variableLabels: variableLabels.compile(), } if !model.IsValidMetricName(model.LabelValue(fqName)) { d.err = fmt.Errorf("%q is not a valid metric name", fqName) @@ -103,7 +103,7 @@ func (v2) NewDesc(fqName, help string, variableLabels ConstrainableLabels, const // their sorted label names) plus the fqName (at position 0). labelValues := make([]string, 1, len(constLabels)+1) labelValues[0] = fqName - labelNames := make([]string, 0, len(constLabels)+len(d.variableLabels)) + labelNames := make([]string, 0, len(constLabels)+len(d.variableLabels.names)) labelNameSet := map[string]struct{}{} // First add only the const label names and sort them... for labelName := range constLabels { @@ -128,13 +128,13 @@ func (v2) NewDesc(fqName, help string, variableLabels ConstrainableLabels, const // Now add the variable label names, but prefix them with something that // cannot be in a regular label name. That prevents matching the label // dimension with a different mix between preset and variable labels. - for _, label := range d.variableLabels { - if !checkLabelName(label.Name) { - d.err = fmt.Errorf("%q is not a valid label name for metric %q", label.Name, fqName) + for _, label := range d.variableLabels.names { + if !checkLabelName(label) { + d.err = fmt.Errorf("%q is not a valid label name for metric %q", label, fqName) return d } - labelNames = append(labelNames, "$"+label.Name) - labelNameSet[label.Name] = struct{}{} + labelNames = append(labelNames, "$"+label) + labelNameSet[label] = struct{}{} } if len(labelNames) != len(labelNameSet) { d.err = fmt.Errorf("duplicate label names in constant and variable labels for metric %q", fqName) @@ -189,11 +189,19 @@ func (d *Desc) String() string { fmt.Sprintf("%s=%q", lp.GetName(), lp.GetValue()), ) } + vlStrings := make([]string, 0, len(d.variableLabels.names)) + for _, vl := range d.variableLabels.names { + if fn, ok := d.variableLabels.labelConstraints[vl]; ok && fn != nil { + vlStrings = append(vlStrings, fmt.Sprintf("c(%s)", vl)) + } else { + vlStrings = append(vlStrings, vl) + } + } return fmt.Sprintf( - "Desc{fqName: %q, help: %q, constLabels: {%s}, variableLabels: %v}", + "Desc{fqName: %q, help: %q, constLabels: {%s}, variableLabels: {%s}}", d.fqName, d.help, strings.Join(lpStrings, ","), - d.variableLabels, + strings.Join(vlStrings, ","), ) } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go index c41ab37f3..de5a85629 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go @@ -48,7 +48,7 @@ func (e *expvarCollector) Collect(ch chan<- Metric) { continue } var v interface{} - labels := make([]string, len(desc.variableLabels)) + labels := make([]string, len(desc.variableLabels.names)) if err := json.Unmarshal([]byte(expVar.String()), &v); err != nil { ch <- NewInvalidMetric(desc, err) continue diff --git a/vendor/github.com/prometheus/client_golang/prometheus/gauge.go b/vendor/github.com/prometheus/client_golang/prometheus/gauge.go index f1ea6c76f..dd2eac940 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/gauge.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/gauge.go @@ -62,7 +62,7 @@ type GaugeVecOpts struct { GaugeOpts // VariableLabels are used to partition the metric vector by the given set - // of labels. Each label value will be constrained with the optional Contraint + // of labels. Each label value will be constrained with the optional Constraint // function, if provided. VariableLabels ConstrainableLabels } @@ -135,7 +135,7 @@ func (g *gauge) Sub(val float64) { func (g *gauge) Write(out *dto.Metric) error { val := math.Float64frombits(atomic.LoadUint64(&g.valBits)) - return populateMetric(GaugeValue, val, g.labelPairs, nil, out) + return populateMetric(GaugeValue, val, g.labelPairs, nil, out, nil) } // GaugeVec is a Collector that bundles a set of Gauges that all share the same @@ -166,8 +166,8 @@ func (v2) NewGaugeVec(opts GaugeVecOpts) *GaugeVec { ) return &GaugeVec{ MetricVec: NewMetricVec(desc, func(lvs ...string) Metric { - if len(lvs) != len(desc.variableLabels) { - panic(makeInconsistentCardinalityError(desc.fqName, desc.variableLabels.labelNames(), lvs)) + if len(lvs) != len(desc.variableLabels.names) { + panic(makeInconsistentCardinalityError(desc.fqName, desc.variableLabels.names, lvs)) } result := &gauge{desc: desc, labelPairs: MakeLabelPairs(desc, lvs)} result.init(result) // Init self-collection. diff --git a/vendor/github.com/prometheus/client_golang/prometheus/histogram.go b/vendor/github.com/prometheus/client_golang/prometheus/histogram.go index 5b69965b2..1feba62c6 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/histogram.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/histogram.go @@ -25,6 +25,7 @@ import ( dto "github.com/prometheus/client_model/go" "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/timestamppb" ) // nativeHistogramBounds for the frac of observed values. Only relevant for @@ -391,7 +392,7 @@ type HistogramOpts struct { // zero, it is replaced by default buckets. The default buckets are // DefBuckets if no buckets for a native histogram (see below) are used, // otherwise the default is no buckets. (In other words, if you want to - // use both reguler buckets and buckets for a native histogram, you have + // use both regular buckets and buckets for a native histogram, you have // to define the regular buckets here explicitly.) Buckets []float64 @@ -401,7 +402,7 @@ type HistogramOpts struct { // Histogram by a Prometheus server with that feature enabled (requires // Prometheus v2.40+). Sparse buckets are exponential buckets covering // the whole float64 range (with the exception of the “zero” bucket, see - // SparseBucketsZeroThreshold below). From any one bucket to the next, + // NativeHistogramZeroThreshold below). From any one bucket to the next, // the width of the bucket grows by a constant // factor. NativeHistogramBucketFactor provides an upper bound for this // factor (exception see below). The smaller @@ -413,8 +414,8 @@ type HistogramOpts struct { // and 2, same as between 2 and 4, and 4 and 8, etc.). // // Details about the actually used factor: The factor is calculated as - // 2^(2^n), where n is an integer number between (and including) -8 and - // 4. n is chosen so that the resulting factor is the largest that is + // 2^(2^-n), where n is an integer number between (and including) -4 and + // 8. n is chosen so that the resulting factor is the largest that is // still smaller or equal to NativeHistogramBucketFactor. Note that the // smallest possible factor is therefore approx. 1.00271 (i.e. 2^(2^-8) // ). If NativeHistogramBucketFactor is greater than 1 but smaller than @@ -428,12 +429,12 @@ type HistogramOpts struct { // a major version bump. NativeHistogramBucketFactor float64 // All observations with an absolute value of less or equal - // NativeHistogramZeroThreshold are accumulated into a “zero” - // bucket. For best results, this should be close to a bucket - // boundary. This is usually the case if picking a power of two. If + // NativeHistogramZeroThreshold are accumulated into a “zero” bucket. + // For best results, this should be close to a bucket boundary. This is + // usually the case if picking a power of two. If // NativeHistogramZeroThreshold is left at zero, - // DefSparseBucketsZeroThreshold is used as the threshold. To configure - // a zero bucket with an actual threshold of zero (i.e. only + // DefNativeHistogramZeroThreshold is used as the threshold. To + // configure a zero bucket with an actual threshold of zero (i.e. only // observations of precisely zero will go into the zero bucket), set // NativeHistogramZeroThreshold to the NativeHistogramZeroThresholdZero // constant (or any negative float value). @@ -446,26 +447,34 @@ type HistogramOpts struct { // Histogram are sufficiently wide-spread. In particular, this could be // used as a DoS attack vector. Where the observed values depend on // external inputs, it is highly recommended to set a - // NativeHistogramMaxBucketNumber.) Once the set + // NativeHistogramMaxBucketNumber.) Once the set // NativeHistogramMaxBucketNumber is exceeded, the following strategy is - // enacted: First, if the last reset (or the creation) of the histogram - // is at least NativeHistogramMinResetDuration ago, then the whole - // histogram is reset to its initial state (including regular - // buckets). If less time has passed, or if - // NativeHistogramMinResetDuration is zero, no reset is - // performed. Instead, the zero threshold is increased sufficiently to - // reduce the number of buckets to or below - // NativeHistogramMaxBucketNumber, but not to more than - // NativeHistogramMaxZeroThreshold. Thus, if - // NativeHistogramMaxZeroThreshold is already at or below the current - // zero threshold, nothing happens at this step. After that, if the - // number of buckets still exceeds NativeHistogramMaxBucketNumber, the - // resolution of the histogram is reduced by doubling the width of the - // sparse buckets (up to a growth factor between one bucket to the next - // of 2^(2^4) = 65536, see above). + // enacted: + // - First, if the last reset (or the creation) of the histogram is at + // least NativeHistogramMinResetDuration ago, then the whole + // histogram is reset to its initial state (including regular + // buckets). + // - If less time has passed, or if NativeHistogramMinResetDuration is + // zero, no reset is performed. Instead, the zero threshold is + // increased sufficiently to reduce the number of buckets to or below + // NativeHistogramMaxBucketNumber, but not to more than + // NativeHistogramMaxZeroThreshold. Thus, if + // NativeHistogramMaxZeroThreshold is already at or below the current + // zero threshold, nothing happens at this step. + // - After that, if the number of buckets still exceeds + // NativeHistogramMaxBucketNumber, the resolution of the histogram is + // reduced by doubling the width of the sparse buckets (up to a + // growth factor between one bucket to the next of 2^(2^4) = 65536, + // see above). + // - Any increased zero threshold or reduced resolution is reset back + // to their original values once NativeHistogramMinResetDuration has + // passed (since the last reset or the creation of the histogram). NativeHistogramMaxBucketNumber uint32 NativeHistogramMinResetDuration time.Duration NativeHistogramMaxZeroThreshold float64 + + // now is for testing purposes, by default it's time.Now. + now func() time.Time } // HistogramVecOpts bundles the options to create a HistogramVec metric. @@ -475,7 +484,7 @@ type HistogramVecOpts struct { HistogramOpts // VariableLabels are used to partition the metric vector by the given set - // of labels. Each label value will be constrained with the optional Contraint + // of labels. Each label value will be constrained with the optional Constraint // function, if provided. VariableLabels ConstrainableLabels } @@ -499,12 +508,12 @@ func NewHistogram(opts HistogramOpts) Histogram { } func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogram { - if len(desc.variableLabels) != len(labelValues) { - panic(makeInconsistentCardinalityError(desc.fqName, desc.variableLabels.labelNames(), labelValues)) + if len(desc.variableLabels.names) != len(labelValues) { + panic(makeInconsistentCardinalityError(desc.fqName, desc.variableLabels.names, labelValues)) } - for _, n := range desc.variableLabels { - if n.Name == bucketLabel { + for _, n := range desc.variableLabels.names { + if n == bucketLabel { panic(errBucketLabelNotAllowed) } } @@ -514,6 +523,10 @@ func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogr } } + if opts.now == nil { + opts.now = time.Now + } + h := &histogram{ desc: desc, upperBounds: opts.Buckets, @@ -521,8 +534,8 @@ func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogr nativeHistogramMaxBuckets: opts.NativeHistogramMaxBucketNumber, nativeHistogramMaxZeroThreshold: opts.NativeHistogramMaxZeroThreshold, nativeHistogramMinResetDuration: opts.NativeHistogramMinResetDuration, - lastResetTime: time.Now(), - now: time.Now, + lastResetTime: opts.now(), + now: opts.now, } if len(h.upperBounds) == 0 && opts.NativeHistogramBucketFactor <= 1 { h.upperBounds = DefBuckets @@ -639,8 +652,8 @@ func (hc *histogramCounts) observe(v float64, bucket int, doSparse bool) { if frac == 0.5 { key-- } - div := 1 << -schema - key = (key + div - 1) / div + offset := (1 << -schema) - 1 + key = (key + offset) >> -schema } if isInf { key++ @@ -701,9 +714,11 @@ type histogram struct { nativeHistogramMaxZeroThreshold float64 nativeHistogramMaxBuckets uint32 nativeHistogramMinResetDuration time.Duration - lastResetTime time.Time // Protected by mtx. + // lastResetTime is protected by mtx. It is also used as created timestamp. + lastResetTime time.Time - now func() time.Time // To mock out time.Now() for testing. + // now is for testing purposes, by default it's time.Now. + now func() time.Time } func (h *histogram) Desc() *Desc { @@ -742,9 +757,10 @@ func (h *histogram) Write(out *dto.Metric) error { waitForCooldown(count, coldCounts) his := &dto.Histogram{ - Bucket: make([]*dto.Bucket, len(h.upperBounds)), - SampleCount: proto.Uint64(count), - SampleSum: proto.Float64(math.Float64frombits(atomic.LoadUint64(&coldCounts.sumBits))), + Bucket: make([]*dto.Bucket, len(h.upperBounds)), + SampleCount: proto.Uint64(count), + SampleSum: proto.Float64(math.Float64frombits(atomic.LoadUint64(&coldCounts.sumBits))), + CreatedTimestamp: timestamppb.New(h.lastResetTime), } out.Histogram = his out.Label = h.labelPairs @@ -782,6 +798,16 @@ func (h *histogram) Write(out *dto.Metric) error { his.ZeroCount = proto.Uint64(zeroBucket) his.NegativeSpan, his.NegativeDelta = makeBuckets(&coldCounts.nativeHistogramBucketsNegative) his.PositiveSpan, his.PositiveDelta = makeBuckets(&coldCounts.nativeHistogramBucketsPositive) + + // Add a no-op span to a histogram without observations and with + // a zero threshold of zero. Otherwise, a native histogram would + // look like a classic histogram to scrapers. + if *his.ZeroThreshold == 0 && *his.ZeroCount == 0 && len(his.PositiveSpan) == 0 && len(his.NegativeSpan) == 0 { + his.PositiveSpan = []*dto.BucketSpan{{ + Offset: proto.Int32(0), + Length: proto.Uint32(0), + }} + } } addAndResetCounts(hotCounts, coldCounts) return nil @@ -817,7 +843,7 @@ func (h *histogram) observe(v float64, bucket int) { } } -// limitSparsebuckets applies a strategy to limit the number of populated sparse +// limitBuckets applies a strategy to limit the number of populated sparse // buckets. It's generally best effort, and there are situations where the // number can go higher (if even the lowest resolution isn't enough to reduce // the number sufficiently, or if the provided counts aren't fully updated yet @@ -854,20 +880,23 @@ func (h *histogram) limitBuckets(counts *histogramCounts, value float64, bucket h.doubleBucketWidth(hotCounts, coldCounts) } -// maybeReset resests the whole histogram if at least h.nativeHistogramMinResetDuration +// maybeReset resets the whole histogram if at least h.nativeHistogramMinResetDuration // has been passed. It returns true if the histogram has been reset. The caller // must have locked h.mtx. -func (h *histogram) maybeReset(hot, cold *histogramCounts, coldIdx uint64, value float64, bucket int) bool { +func (h *histogram) maybeReset( + hot, cold *histogramCounts, coldIdx uint64, value float64, bucket int, +) bool { // We are using the possibly mocked h.now() rather than // time.Since(h.lastResetTime) to enable testing. - if h.nativeHistogramMinResetDuration == 0 || h.now().Sub(h.lastResetTime) < h.nativeHistogramMinResetDuration { + if h.nativeHistogramMinResetDuration == 0 || + h.now().Sub(h.lastResetTime) < h.nativeHistogramMinResetDuration { return false } // Completely reset coldCounts. h.resetCounts(cold) // Repeat the latest observation to not lose it completely. cold.observe(value, bucket, true) - // Make coldCounts the new hot counts while ressetting countAndHotIdx. + // Make coldCounts the new hot counts while resetting countAndHotIdx. n := atomic.SwapUint64(&h.countAndHotIdx, (coldIdx<<63)+1) count := n & ((1 << 63) - 1) waitForCooldown(count, hot) @@ -1176,6 +1205,7 @@ type constHistogram struct { sum float64 buckets map[float64]uint64 labelPairs []*dto.LabelPair + createdTs *timestamppb.Timestamp } func (h *constHistogram) Desc() *Desc { @@ -1183,7 +1213,9 @@ func (h *constHistogram) Desc() *Desc { } func (h *constHistogram) Write(out *dto.Metric) error { - his := &dto.Histogram{} + his := &dto.Histogram{ + CreatedTimestamp: h.createdTs, + } buckets := make([]*dto.Bucket, 0, len(h.buckets)) @@ -1230,7 +1262,7 @@ func NewConstHistogram( if desc.err != nil { return nil, desc.err } - if err := validateLabelValues(labelValues, len(desc.variableLabels)); err != nil { + if err := validateLabelValues(labelValues, len(desc.variableLabels.names)); err != nil { return nil, err } return &constHistogram{ @@ -1324,7 +1356,7 @@ func makeBuckets(buckets *sync.Map) ([]*dto.BucketSpan, []int64) { // Multiple spans with only small gaps in between are probably // encoded more efficiently as one larger span with a few empty // buckets. Needs some research to find the sweet spot. For now, - // we assume that gaps of one ore two buckets should not create + // we assume that gaps of one or two buckets should not create // a new span. iDelta := int32(i - nextI) if n == 0 || iDelta > 2 { diff --git a/vendor/github.com/prometheus/client_golang/prometheus/internal/difflib.go b/vendor/github.com/prometheus/client_golang/prometheus/internal/difflib.go index fd0750f2c..a595a2036 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/internal/difflib.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/internal/difflib.go @@ -14,7 +14,7 @@ // It provides tools to compare sequences of strings and generate textual diffs. // // Maintaining `GetUnifiedDiffString` here because original repository -// (https://github.com/pmezard/go-difflib) is no loger maintained. +// (https://github.com/pmezard/go-difflib) is no longer maintained. package internal import ( diff --git a/vendor/github.com/prometheus/client_golang/prometheus/labels.go b/vendor/github.com/prometheus/client_golang/prometheus/labels.go index 63ff8683c..b3c4eca2b 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/labels.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/labels.go @@ -32,19 +32,15 @@ import ( // create a Desc. type Labels map[string]string +// LabelConstraint normalizes label values. +type LabelConstraint func(string) string + // ConstrainedLabels represents a label name and its constrain function // to normalize label values. This type is commonly used when constructing // metric vector Collectors. type ConstrainedLabel struct { Name string - Constraint func(string) string -} - -func (cl ConstrainedLabel) Constrain(v string) string { - if cl.Constraint == nil { - return v - } - return cl.Constraint(v) + Constraint LabelConstraint } // ConstrainableLabels is an interface that allows creating of labels that can @@ -58,7 +54,7 @@ func (cl ConstrainedLabel) Constrain(v string) string { // }, // }) type ConstrainableLabels interface { - constrainedLabels() ConstrainedLabels + compile() *compiledLabels labelNames() []string } @@ -67,8 +63,20 @@ type ConstrainableLabels interface { // metric vector Collectors. type ConstrainedLabels []ConstrainedLabel -func (cls ConstrainedLabels) constrainedLabels() ConstrainedLabels { - return cls +func (cls ConstrainedLabels) compile() *compiledLabels { + compiled := &compiledLabels{ + names: make([]string, len(cls)), + labelConstraints: map[string]LabelConstraint{}, + } + + for i, label := range cls { + compiled.names[i] = label.Name + if label.Constraint != nil { + compiled.labelConstraints[label.Name] = label.Constraint + } + } + + return compiled } func (cls ConstrainedLabels) labelNames() []string { @@ -92,18 +100,36 @@ func (cls ConstrainedLabels) labelNames() []string { // } type UnconstrainedLabels []string -func (uls UnconstrainedLabels) constrainedLabels() ConstrainedLabels { - constrainedLabels := make([]ConstrainedLabel, len(uls)) - for i, l := range uls { - constrainedLabels[i] = ConstrainedLabel{Name: l} +func (uls UnconstrainedLabels) compile() *compiledLabels { + return &compiledLabels{ + names: uls, } - return constrainedLabels } func (uls UnconstrainedLabels) labelNames() []string { return uls } +type compiledLabels struct { + names []string + labelConstraints map[string]LabelConstraint +} + +func (cls *compiledLabels) compile() *compiledLabels { + return cls +} + +func (cls *compiledLabels) labelNames() []string { + return cls.names +} + +func (cls *compiledLabels) constrain(labelName, value string) string { + if fn, ok := cls.labelConstraints[labelName]; ok && fn != nil { + return fn(value) + } + return value +} + // reservedLabelPrefix is a prefix which is not legal in user-supplied // label names. const reservedLabelPrefix = "__" diff --git a/vendor/github.com/prometheus/client_golang/prometheus/metric.go b/vendor/github.com/prometheus/client_golang/prometheus/metric.go index 07bbc9d76..f018e5723 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/metric.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/metric.go @@ -92,6 +92,9 @@ type Opts struct { // machine_role metric). See also // https://prometheus.io/docs/instrumenting/writing_exporters/#target-labels-not-static-scraped-labels ConstLabels Labels + + // now is for testing purposes, by default it's time.Now. + now func() time.Time } // BuildFQName joins the given three name components by "_". Empty name diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go index a4cc9810b..09b8d2fbe 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go @@ -37,6 +37,7 @@ import ( "fmt" "io" "net/http" + "strconv" "strings" "sync" "time" @@ -47,9 +48,10 @@ import ( ) const ( - contentTypeHeader = "Content-Type" - contentEncodingHeader = "Content-Encoding" - acceptEncodingHeader = "Accept-Encoding" + contentTypeHeader = "Content-Type" + contentEncodingHeader = "Content-Encoding" + acceptEncodingHeader = "Accept-Encoding" + processStartTimeHeader = "Process-Start-Time-Unix" ) var gzipPool = sync.Pool{ @@ -121,6 +123,9 @@ func HandlerForTransactional(reg prometheus.TransactionalGatherer, opts HandlerO } h := http.HandlerFunc(func(rsp http.ResponseWriter, req *http.Request) { + if !opts.ProcessStartTime.IsZero() { + rsp.Header().Set(processStartTimeHeader, strconv.FormatInt(opts.ProcessStartTime.Unix(), 10)) + } if inFlightSem != nil { select { case inFlightSem <- struct{}{}: // All good, carry on. @@ -366,6 +371,14 @@ type HandlerOpts struct { // (which changes the identity of the resulting series on the Prometheus // server). EnableOpenMetrics bool + // ProcessStartTime allows setting process start timevalue that will be exposed + // with "Process-Start-Time-Unix" response header along with the metrics + // payload. This allow callers to have efficient transformations to cumulative + // counters (e.g. OpenTelemetry) or generally _created timestamp estimation per + // scrape target. + // NOTE: This feature is experimental and not covered by OpenMetrics or Prometheus + // exposition format. + ProcessStartTime time.Time } // gzipAccepted returns whether the client will accept gzip-encoded content. diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go index 3793036ad..356edb786 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go @@ -389,15 +389,12 @@ func isLabelCurried(c prometheus.Collector, label string) bool { return true } -// emptyLabels is a one-time allocation for non-partitioned metrics to avoid -// unnecessary allocations on each request. -var emptyLabels = prometheus.Labels{} - func labels(code, method bool, reqMethod string, status int, extraMethods ...string) prometheus.Labels { + labels := prometheus.Labels{} + if !(code || method) { - return emptyLabels + return labels } - labels := prometheus.Labels{} if code { labels["code"] = sanitizeCode(status) diff --git a/vendor/github.com/prometheus/client_golang/prometheus/registry.go b/vendor/github.com/prometheus/client_golang/prometheus/registry.go index 44da9433b..5e2ced25a 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/registry.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/registry.go @@ -548,7 +548,7 @@ func (r *Registry) Gather() ([]*dto.MetricFamily, error) { goroutineBudget-- runtime.Gosched() } - // Once both checkedMetricChan and uncheckdMetricChan are closed + // Once both checkedMetricChan and uncheckedMetricChan are closed // and drained, the contraption above will nil out cmc and umc, // and then we can leave the collect loop here. if cmc == nil && umc == nil { @@ -963,9 +963,9 @@ func checkDescConsistency( // Is the desc consistent with the content of the metric? lpsFromDesc := make([]*dto.LabelPair, len(desc.constLabelPairs), len(dtoMetric.Label)) copy(lpsFromDesc, desc.constLabelPairs) - for _, l := range desc.variableLabels { + for _, l := range desc.variableLabels.names { lpsFromDesc = append(lpsFromDesc, &dto.LabelPair{ - Name: proto.String(l.Name), + Name: proto.String(l), }) } if len(lpsFromDesc) != len(dtoMetric.Label) { diff --git a/vendor/github.com/prometheus/client_golang/prometheus/summary.go b/vendor/github.com/prometheus/client_golang/prometheus/summary.go index dd359264e..146270444 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/summary.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/summary.go @@ -26,6 +26,7 @@ import ( "github.com/beorn7/perks/quantile" "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/timestamppb" ) // quantileLabel is used for the label that defines the quantile in a @@ -145,6 +146,9 @@ type SummaryOpts struct { // is the internal buffer size of the underlying package // "github.com/bmizerany/perks/quantile"). BufCap uint32 + + // now is for testing purposes, by default it's time.Now. + now func() time.Time } // SummaryVecOpts bundles the options to create a SummaryVec metric. @@ -154,7 +158,7 @@ type SummaryVecOpts struct { SummaryOpts // VariableLabels are used to partition the metric vector by the given set - // of labels. Each label value will be constrained with the optional Contraint + // of labels. Each label value will be constrained with the optional Constraint // function, if provided. VariableLabels ConstrainableLabels } @@ -188,12 +192,12 @@ func NewSummary(opts SummaryOpts) Summary { } func newSummary(desc *Desc, opts SummaryOpts, labelValues ...string) Summary { - if len(desc.variableLabels) != len(labelValues) { - panic(makeInconsistentCardinalityError(desc.fqName, desc.variableLabels.labelNames(), labelValues)) + if len(desc.variableLabels.names) != len(labelValues) { + panic(makeInconsistentCardinalityError(desc.fqName, desc.variableLabels.names, labelValues)) } - for _, n := range desc.variableLabels { - if n.Name == quantileLabel { + for _, n := range desc.variableLabels.names { + if n == quantileLabel { panic(errQuantileLabelNotAllowed) } } @@ -222,6 +226,9 @@ func newSummary(desc *Desc, opts SummaryOpts, labelValues ...string) Summary { opts.BufCap = DefBufCap } + if opts.now == nil { + opts.now = time.Now + } if len(opts.Objectives) == 0 { // Use the lock-free implementation of a Summary without objectives. s := &noObjectivesSummary{ @@ -230,6 +237,7 @@ func newSummary(desc *Desc, opts SummaryOpts, labelValues ...string) Summary { counts: [2]*summaryCounts{{}, {}}, } s.init(s) // Init self-collection. + s.createdTs = timestamppb.New(opts.now()) return s } @@ -245,7 +253,7 @@ func newSummary(desc *Desc, opts SummaryOpts, labelValues ...string) Summary { coldBuf: make([]float64, 0, opts.BufCap), streamDuration: opts.MaxAge / time.Duration(opts.AgeBuckets), } - s.headStreamExpTime = time.Now().Add(s.streamDuration) + s.headStreamExpTime = opts.now().Add(s.streamDuration) s.hotBufExpTime = s.headStreamExpTime for i := uint32(0); i < opts.AgeBuckets; i++ { @@ -259,6 +267,7 @@ func newSummary(desc *Desc, opts SummaryOpts, labelValues ...string) Summary { sort.Float64s(s.sortedObjectives) s.init(s) // Init self-collection. + s.createdTs = timestamppb.New(opts.now()) return s } @@ -286,6 +295,8 @@ type summary struct { headStream *quantile.Stream headStreamIdx int headStreamExpTime, hotBufExpTime time.Time + + createdTs *timestamppb.Timestamp } func (s *summary) Desc() *Desc { @@ -307,7 +318,9 @@ func (s *summary) Observe(v float64) { } func (s *summary) Write(out *dto.Metric) error { - sum := &dto.Summary{} + sum := &dto.Summary{ + CreatedTimestamp: s.createdTs, + } qs := make([]*dto.Quantile, 0, len(s.objectives)) s.bufMtx.Lock() @@ -440,6 +453,8 @@ type noObjectivesSummary struct { counts [2]*summaryCounts labelPairs []*dto.LabelPair + + createdTs *timestamppb.Timestamp } func (s *noObjectivesSummary) Desc() *Desc { @@ -490,8 +505,9 @@ func (s *noObjectivesSummary) Write(out *dto.Metric) error { } sum := &dto.Summary{ - SampleCount: proto.Uint64(count), - SampleSum: proto.Float64(math.Float64frombits(atomic.LoadUint64(&coldCounts.sumBits))), + SampleCount: proto.Uint64(count), + SampleSum: proto.Float64(math.Float64frombits(atomic.LoadUint64(&coldCounts.sumBits))), + CreatedTimestamp: s.createdTs, } out.Summary = sum @@ -681,6 +697,7 @@ type constSummary struct { sum float64 quantiles map[float64]float64 labelPairs []*dto.LabelPair + createdTs *timestamppb.Timestamp } func (s *constSummary) Desc() *Desc { @@ -688,7 +705,9 @@ func (s *constSummary) Desc() *Desc { } func (s *constSummary) Write(out *dto.Metric) error { - sum := &dto.Summary{} + sum := &dto.Summary{ + CreatedTimestamp: s.createdTs, + } qs := make([]*dto.Quantile, 0, len(s.quantiles)) sum.SampleCount = proto.Uint64(s.count) @@ -737,7 +756,7 @@ func NewConstSummary( if desc.err != nil { return nil, desc.err } - if err := validateLabelValues(labelValues, len(desc.variableLabels)); err != nil { + if err := validateLabelValues(labelValues, len(desc.variableLabels.names)); err != nil { return nil, err } return &constSummary{ diff --git a/vendor/github.com/prometheus/client_golang/prometheus/value.go b/vendor/github.com/prometheus/client_golang/prometheus/value.go index 5f6bb8001..cc23011fa 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/value.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/value.go @@ -14,6 +14,7 @@ package prometheus import ( + "errors" "fmt" "sort" "time" @@ -91,7 +92,7 @@ func (v *valueFunc) Desc() *Desc { } func (v *valueFunc) Write(out *dto.Metric) error { - return populateMetric(v.valType, v.function(), v.labelPairs, nil, out) + return populateMetric(v.valType, v.function(), v.labelPairs, nil, out, nil) } // NewConstMetric returns a metric with one fixed value that cannot be @@ -105,12 +106,12 @@ func NewConstMetric(desc *Desc, valueType ValueType, value float64, labelValues if desc.err != nil { return nil, desc.err } - if err := validateLabelValues(labelValues, len(desc.variableLabels)); err != nil { + if err := validateLabelValues(labelValues, len(desc.variableLabels.names)); err != nil { return nil, err } metric := &dto.Metric{} - if err := populateMetric(valueType, value, MakeLabelPairs(desc, labelValues), nil, metric); err != nil { + if err := populateMetric(valueType, value, MakeLabelPairs(desc, labelValues), nil, metric, nil); err != nil { return nil, err } @@ -130,6 +131,43 @@ func MustNewConstMetric(desc *Desc, valueType ValueType, value float64, labelVal return m } +// NewConstMetricWithCreatedTimestamp does the same thing as NewConstMetric, but generates Counters +// with created timestamp set and returns an error for other metric types. +func NewConstMetricWithCreatedTimestamp(desc *Desc, valueType ValueType, value float64, ct time.Time, labelValues ...string) (Metric, error) { + if desc.err != nil { + return nil, desc.err + } + if err := validateLabelValues(labelValues, len(desc.variableLabels.names)); err != nil { + return nil, err + } + switch valueType { + case CounterValue: + break + default: + return nil, errors.New("created timestamps are only supported for counters") + } + + metric := &dto.Metric{} + if err := populateMetric(valueType, value, MakeLabelPairs(desc, labelValues), nil, metric, timestamppb.New(ct)); err != nil { + return nil, err + } + + return &constMetric{ + desc: desc, + metric: metric, + }, nil +} + +// MustNewConstMetricWithCreatedTimestamp is a version of NewConstMetricWithCreatedTimestamp that panics where +// NewConstMetricWithCreatedTimestamp would have returned an error. +func MustNewConstMetricWithCreatedTimestamp(desc *Desc, valueType ValueType, value float64, ct time.Time, labelValues ...string) Metric { + m, err := NewConstMetricWithCreatedTimestamp(desc, valueType, value, ct, labelValues...) + if err != nil { + panic(err) + } + return m +} + type constMetric struct { desc *Desc metric *dto.Metric @@ -153,11 +191,12 @@ func populateMetric( labelPairs []*dto.LabelPair, e *dto.Exemplar, m *dto.Metric, + ct *timestamppb.Timestamp, ) error { m.Label = labelPairs switch t { case CounterValue: - m.Counter = &dto.Counter{Value: proto.Float64(v), Exemplar: e} + m.Counter = &dto.Counter{Value: proto.Float64(v), Exemplar: e, CreatedTimestamp: ct} case GaugeValue: m.Gauge = &dto.Gauge{Value: proto.Float64(v)} case UntypedValue: @@ -176,19 +215,19 @@ func populateMetric( // This function is only needed for custom Metric implementations. See MetricVec // example. func MakeLabelPairs(desc *Desc, labelValues []string) []*dto.LabelPair { - totalLen := len(desc.variableLabels) + len(desc.constLabelPairs) + totalLen := len(desc.variableLabels.names) + len(desc.constLabelPairs) if totalLen == 0 { // Super fast path. return nil } - if len(desc.variableLabels) == 0 { + if len(desc.variableLabels.names) == 0 { // Moderately fast path. return desc.constLabelPairs } labelPairs := make([]*dto.LabelPair, 0, totalLen) - for i, l := range desc.variableLabels { + for i, l := range desc.variableLabels.names { labelPairs = append(labelPairs, &dto.LabelPair{ - Name: proto.String(l.Name), + Name: proto.String(l), Value: proto.String(labelValues[i]), }) } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/vec.go b/vendor/github.com/prometheus/client_golang/prometheus/vec.go index 386fb2d23..955cfd59f 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/vec.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/vec.go @@ -73,6 +73,7 @@ func NewMetricVec(desc *Desc, newMetric func(lvs ...string) Metric) *MetricVec { // See also the CounterVec example. func (m *MetricVec) DeleteLabelValues(lvs ...string) bool { lvs = constrainLabelValues(m.desc, lvs, m.curry) + h, err := m.hashLabelValues(lvs) if err != nil { return false @@ -92,7 +93,9 @@ func (m *MetricVec) DeleteLabelValues(lvs ...string) bool { // This method is used for the same purpose as DeleteLabelValues(...string). See // there for pros and cons of the two methods. func (m *MetricVec) Delete(labels Labels) bool { - labels = constrainLabels(m.desc, labels) + labels, closer := constrainLabels(m.desc, labels) + defer closer() + h, err := m.hashLabels(labels) if err != nil { return false @@ -108,7 +111,9 @@ func (m *MetricVec) Delete(labels Labels) bool { // Note that curried labels will never be matched if deleting from the curried vector. // To match curried labels with DeletePartialMatch, it must be called on the base vector. func (m *MetricVec) DeletePartialMatch(labels Labels) int { - labels = constrainLabels(m.desc, labels) + labels, closer := constrainLabels(m.desc, labels) + defer closer() + return m.metricMap.deleteByLabels(labels, m.curry) } @@ -147,11 +152,11 @@ func (m *MetricVec) CurryWith(labels Labels) (*MetricVec, error) { oldCurry = m.curry iCurry int ) - for i, label := range m.desc.variableLabels { - val, ok := labels[label.Name] + for i, labelName := range m.desc.variableLabels.names { + val, ok := labels[labelName] if iCurry < len(oldCurry) && oldCurry[iCurry].index == i { if ok { - return nil, fmt.Errorf("label name %q is already curried", label.Name) + return nil, fmt.Errorf("label name %q is already curried", labelName) } newCurry = append(newCurry, oldCurry[iCurry]) iCurry++ @@ -159,7 +164,10 @@ func (m *MetricVec) CurryWith(labels Labels) (*MetricVec, error) { if !ok { continue // Label stays uncurried. } - newCurry = append(newCurry, curriedLabelValue{i, label.Constrain(val)}) + newCurry = append(newCurry, curriedLabelValue{ + i, + m.desc.variableLabels.constrain(labelName, val), + }) } } if l := len(oldCurry) + len(labels) - len(newCurry); l > 0 { @@ -228,7 +236,9 @@ func (m *MetricVec) GetMetricWithLabelValues(lvs ...string) (Metric, error) { // around MetricVec, implementing a vector for a specific Metric implementation, // for example GaugeVec. func (m *MetricVec) GetMetricWith(labels Labels) (Metric, error) { - labels = constrainLabels(m.desc, labels) + labels, closer := constrainLabels(m.desc, labels) + defer closer() + h, err := m.hashLabels(labels) if err != nil { return nil, err @@ -238,7 +248,7 @@ func (m *MetricVec) GetMetricWith(labels Labels) (Metric, error) { } func (m *MetricVec) hashLabelValues(vals []string) (uint64, error) { - if err := validateLabelValues(vals, len(m.desc.variableLabels)-len(m.curry)); err != nil { + if err := validateLabelValues(vals, len(m.desc.variableLabels.names)-len(m.curry)); err != nil { return 0, err } @@ -247,7 +257,7 @@ func (m *MetricVec) hashLabelValues(vals []string) (uint64, error) { curry = m.curry iVals, iCurry int ) - for i := 0; i < len(m.desc.variableLabels); i++ { + for i := 0; i < len(m.desc.variableLabels.names); i++ { if iCurry < len(curry) && curry[iCurry].index == i { h = m.hashAdd(h, curry[iCurry].value) iCurry++ @@ -261,7 +271,7 @@ func (m *MetricVec) hashLabelValues(vals []string) (uint64, error) { } func (m *MetricVec) hashLabels(labels Labels) (uint64, error) { - if err := validateValuesInLabels(labels, len(m.desc.variableLabels)-len(m.curry)); err != nil { + if err := validateValuesInLabels(labels, len(m.desc.variableLabels.names)-len(m.curry)); err != nil { return 0, err } @@ -270,17 +280,17 @@ func (m *MetricVec) hashLabels(labels Labels) (uint64, error) { curry = m.curry iCurry int ) - for i, label := range m.desc.variableLabels { - val, ok := labels[label.Name] + for i, labelName := range m.desc.variableLabels.names { + val, ok := labels[labelName] if iCurry < len(curry) && curry[iCurry].index == i { if ok { - return 0, fmt.Errorf("label name %q is already curried", label.Name) + return 0, fmt.Errorf("label name %q is already curried", labelName) } h = m.hashAdd(h, curry[iCurry].value) iCurry++ } else { if !ok { - return 0, fmt.Errorf("label name %q missing in label map", label.Name) + return 0, fmt.Errorf("label name %q missing in label map", labelName) } h = m.hashAdd(h, val) } @@ -458,7 +468,7 @@ func valueMatchesVariableOrCurriedValue(targetValue string, index int, values [] func matchPartialLabels(desc *Desc, values []string, labels Labels, curry []curriedLabelValue) bool { for l, v := range labels { // Check if the target label exists in our metrics and get the index. - varLabelIndex, validLabel := indexOf(l, desc.variableLabels.labelNames()) + varLabelIndex, validLabel := indexOf(l, desc.variableLabels.names) if validLabel { // Check the value of that label against the target value. // We don't consider curried values in partial matches. @@ -602,7 +612,7 @@ func matchLabels(desc *Desc, values []string, labels Labels, curry []curriedLabe return false } iCurry := 0 - for i, k := range desc.variableLabels { + for i, k := range desc.variableLabels.names { if iCurry < len(curry) && curry[iCurry].index == i { if values[i] != curry[iCurry].value { return false @@ -610,7 +620,7 @@ func matchLabels(desc *Desc, values []string, labels Labels, curry []curriedLabe iCurry++ continue } - if values[i] != labels[k.Name] { + if values[i] != labels[k] { return false } } @@ -620,13 +630,13 @@ func matchLabels(desc *Desc, values []string, labels Labels, curry []curriedLabe func extractLabelValues(desc *Desc, labels Labels, curry []curriedLabelValue) []string { labelValues := make([]string, len(labels)+len(curry)) iCurry := 0 - for i, k := range desc.variableLabels { + for i, k := range desc.variableLabels.names { if iCurry < len(curry) && curry[iCurry].index == i { labelValues[i] = curry[iCurry].value iCurry++ continue } - labelValues[i] = labels[k.Name] + labelValues[i] = labels[k] } return labelValues } @@ -646,19 +656,37 @@ func inlineLabelValues(lvs []string, curry []curriedLabelValue) []string { return labelValues } -func constrainLabels(desc *Desc, labels Labels) Labels { - constrainedValues := make(Labels, len(labels)) +var labelsPool = &sync.Pool{ + New: func() interface{} { + return make(Labels) + }, +} + +func constrainLabels(desc *Desc, labels Labels) (Labels, func()) { + if len(desc.variableLabels.labelConstraints) == 0 { + // Fast path when there's no constraints + return labels, func() {} + } + + constrainedLabels := labelsPool.Get().(Labels) for l, v := range labels { - if i, ok := indexOf(l, desc.variableLabels.labelNames()); ok { - constrainedValues[l] = desc.variableLabels[i].Constrain(v) - continue + constrainedLabels[l] = desc.variableLabels.constrain(l, v) + } + + return constrainedLabels, func() { + for k := range constrainedLabels { + delete(constrainedLabels, k) } - constrainedValues[l] = v + labelsPool.Put(constrainedLabels) } - return constrainedValues } func constrainLabelValues(desc *Desc, lvs []string, curry []curriedLabelValue) []string { + if len(desc.variableLabels.labelConstraints) == 0 { + // Fast path when there's no constraints + return lvs + } + constrainedValues := make([]string, len(lvs)) var iCurry, iLVs int for i := 0; i < len(lvs)+len(curry); i++ { @@ -667,8 +695,11 @@ func constrainLabelValues(desc *Desc, lvs []string, curry []curriedLabelValue) [ continue } - if i < len(desc.variableLabels) { - constrainedValues[iLVs] = desc.variableLabels[i].Constrain(lvs[iLVs]) + if i < len(desc.variableLabels.names) { + constrainedValues[iLVs] = desc.variableLabels.constrain( + desc.variableLabels.names[i], + lvs[iLVs], + ) } else { constrainedValues[iLVs] = lvs[iLVs] } diff --git a/vendor/github.com/prometheus/client_model/go/metrics.pb.go b/vendor/github.com/prometheus/client_model/go/metrics.pb.go index 2b5bca4b9..84946b270 100644 --- a/vendor/github.com/prometheus/client_model/go/metrics.pb.go +++ b/vendor/github.com/prometheus/client_model/go/metrics.pb.go @@ -215,8 +215,9 @@ type Counter struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Value *float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"` - Exemplar *Exemplar `protobuf:"bytes,2,opt,name=exemplar" json:"exemplar,omitempty"` + Value *float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"` + Exemplar *Exemplar `protobuf:"bytes,2,opt,name=exemplar" json:"exemplar,omitempty"` + CreatedTimestamp *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=created_timestamp,json=createdTimestamp" json:"created_timestamp,omitempty"` } func (x *Counter) Reset() { @@ -265,6 +266,13 @@ func (x *Counter) GetExemplar() *Exemplar { return nil } +func (x *Counter) GetCreatedTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.CreatedTimestamp + } + return nil +} + type Quantile struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -325,9 +333,10 @@ type Summary struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SampleCount *uint64 `protobuf:"varint,1,opt,name=sample_count,json=sampleCount" json:"sample_count,omitempty"` - SampleSum *float64 `protobuf:"fixed64,2,opt,name=sample_sum,json=sampleSum" json:"sample_sum,omitempty"` - Quantile []*Quantile `protobuf:"bytes,3,rep,name=quantile" json:"quantile,omitempty"` + SampleCount *uint64 `protobuf:"varint,1,opt,name=sample_count,json=sampleCount" json:"sample_count,omitempty"` + SampleSum *float64 `protobuf:"fixed64,2,opt,name=sample_sum,json=sampleSum" json:"sample_sum,omitempty"` + Quantile []*Quantile `protobuf:"bytes,3,rep,name=quantile" json:"quantile,omitempty"` + CreatedTimestamp *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=created_timestamp,json=createdTimestamp" json:"created_timestamp,omitempty"` } func (x *Summary) Reset() { @@ -383,6 +392,13 @@ func (x *Summary) GetQuantile() []*Quantile { return nil } +func (x *Summary) GetCreatedTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.CreatedTimestamp + } + return nil +} + type Untyped struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -439,7 +455,8 @@ type Histogram struct { SampleCountFloat *float64 `protobuf:"fixed64,4,opt,name=sample_count_float,json=sampleCountFloat" json:"sample_count_float,omitempty"` // Overrides sample_count if > 0. SampleSum *float64 `protobuf:"fixed64,2,opt,name=sample_sum,json=sampleSum" json:"sample_sum,omitempty"` // Buckets for the conventional histogram. - Bucket []*Bucket `protobuf:"bytes,3,rep,name=bucket" json:"bucket,omitempty"` // Ordered in increasing order of upper_bound, +Inf bucket is optional. + Bucket []*Bucket `protobuf:"bytes,3,rep,name=bucket" json:"bucket,omitempty"` // Ordered in increasing order of upper_bound, +Inf bucket is optional. + CreatedTimestamp *timestamppb.Timestamp `protobuf:"bytes,15,opt,name=created_timestamp,json=createdTimestamp" json:"created_timestamp,omitempty"` // schema defines the bucket schema. Currently, valid numbers are -4 <= n <= 8. // They are all for base-2 bucket schemas, where 1 is a bucket boundary in each case, and // then each power of two is divided into 2^n logarithmic buckets. @@ -525,6 +542,13 @@ func (x *Histogram) GetBucket() []*Bucket { return nil } +func (x *Histogram) GetCreatedTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.CreatedTimestamp + } + return nil +} + func (x *Histogram) GetSchema() int32 { if x != nil && x.Schema != nil { return *x.Schema @@ -972,137 +996,151 @@ var file_io_prometheus_client_metrics_proto_rawDesc = []byte{ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x1d, 0x0a, 0x05, 0x47, 0x61, 0x75, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x5b, 0x0a, 0x07, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x65, 0x78, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, - 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x45, 0x78, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x72, 0x52, 0x08, 0x65, 0x78, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x22, 0x3c, - 0x0a, 0x08, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x71, 0x75, - 0x61, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x71, 0x75, - 0x61, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x87, 0x01, 0x0a, - 0x07, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x61, 0x6d, 0x70, + 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x07, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x65, 0x78, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, + 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x45, 0x78, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x52, 0x08, 0x65, 0x78, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x12, + 0x47, 0x0a, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x10, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x3c, 0x0a, 0x08, 0x51, 0x75, 0x61, 0x6e, + 0x74, 0x69, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x6c, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x6c, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd0, 0x01, 0x0a, 0x07, 0x53, 0x75, 0x6d, 0x6d, 0x61, + 0x72, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, + 0x73, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x73, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x53, 0x75, 0x6d, 0x12, 0x3a, 0x0a, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x6c, 0x65, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, + 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x51, 0x75, + 0x61, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x52, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x6c, 0x65, + 0x12, 0x47, 0x0a, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x10, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x1f, 0x0a, 0x07, 0x55, 0x6e, 0x74, + 0x79, 0x70, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xac, 0x05, 0x0a, 0x09, 0x48, + 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, - 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, - 0x09, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x53, 0x75, 0x6d, 0x12, 0x3a, 0x0a, 0x08, 0x71, 0x75, - 0x61, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x69, + 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x73, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x66, 0x6c, 0x6f, 0x61, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x73, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x53, 0x75, 0x6d, 0x12, 0x34, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, + 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, + 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x47, + 0x0a, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x10, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x11, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, + 0x25, 0x0a, 0x0e, 0x7a, 0x65, 0x72, 0x6f, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, + 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x7a, 0x65, 0x72, 0x6f, 0x54, 0x68, 0x72, + 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x7a, 0x65, 0x72, 0x6f, 0x5f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x7a, 0x65, 0x72, 0x6f, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x7a, 0x65, 0x72, 0x6f, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x0e, 0x7a, 0x65, 0x72, 0x6f, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, + 0x45, 0x0a, 0x0d, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x6e, + 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, + 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x42, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x53, 0x70, 0x61, 0x6e, 0x52, 0x0c, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x53, 0x70, 0x61, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x12, 0x52, 0x0d, + 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x25, 0x0a, + 0x0e, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x0b, 0x20, 0x03, 0x28, 0x01, 0x52, 0x0d, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, + 0x5f, 0x73, 0x70, 0x61, 0x6e, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x69, 0x6f, + 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x70, 0x61, 0x6e, 0x52, 0x0c, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x53, 0x70, 0x61, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x18, 0x0d, 0x20, + 0x03, 0x28, 0x12, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x6c, + 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x01, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xc6, 0x01, 0x0a, 0x06, 0x42, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, + 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x34, 0x0a, 0x16, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x14, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x62, + 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x75, 0x70, 0x70, 0x65, + 0x72, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x3a, 0x0a, 0x08, 0x65, 0x78, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, + 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, + 0x45, 0x78, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x52, 0x08, 0x65, 0x78, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x72, 0x22, 0x3c, 0x0a, 0x0a, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x70, 0x61, 0x6e, + 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x11, + 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x22, 0x91, 0x01, 0x0a, 0x08, 0x45, 0x78, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x12, 0x35, 0x0a, + 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x52, 0x08, 0x71, 0x75, - 0x61, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x22, 0x1f, 0x0a, 0x07, 0x55, 0x6e, 0x74, 0x79, 0x70, 0x65, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xe3, 0x04, 0x0a, 0x09, 0x48, 0x69, 0x73, 0x74, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x73, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x73, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x53, 0x75, 0x6d, 0x12, 0x34, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, - 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x42, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x11, 0x52, 0x06, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x7a, 0x65, 0x72, 0x6f, 0x5f, 0x74, 0x68, 0x72, 0x65, - 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x7a, 0x65, 0x72, - 0x6f, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x7a, 0x65, - 0x72, 0x6f, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, - 0x7a, 0x65, 0x72, 0x6f, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x7a, 0x65, 0x72, - 0x6f, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x01, 0x52, 0x0e, 0x7a, 0x65, 0x72, 0x6f, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x46, 0x6c, - 0x6f, 0x61, 0x74, 0x12, 0x45, 0x0a, 0x0d, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, - 0x73, 0x70, 0x61, 0x6e, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x69, 0x6f, 0x2e, + 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x50, 0x61, 0x69, 0x72, 0x52, 0x05, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x22, 0xff, 0x02, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, + 0x35, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x50, 0x61, 0x69, 0x72, 0x52, + 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x31, 0x0a, 0x05, 0x67, 0x61, 0x75, 0x67, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, + 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x61, 0x75, + 0x67, 0x65, 0x52, 0x05, 0x67, 0x61, 0x75, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x70, 0x61, 0x6e, 0x52, 0x0c, 0x6e, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x70, 0x61, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x03, - 0x28, 0x12, 0x52, 0x0d, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x6c, 0x74, - 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x01, 0x52, 0x0d, 0x6e, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x6e, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x70, 0x61, - 0x6e, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x53, 0x70, 0x61, 0x6e, 0x12, - 0x25, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x74, - 0x61, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x12, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, - 0x65, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x01, 0x52, 0x0d, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xc6, 0x01, - 0x0a, 0x06, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x75, 0x6d, 0x75, - 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0f, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x01, 0x52, 0x14, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x70, 0x70, - 0x65, 0x72, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, - 0x75, 0x70, 0x70, 0x65, 0x72, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x3a, 0x0a, 0x08, 0x65, 0x78, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x69, + 0x74, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x12, 0x37, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, + 0x65, 0x75, 0x73, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x75, 0x6d, 0x6d, 0x61, + 0x72, 0x79, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x37, 0x0a, 0x07, 0x75, + 0x6e, 0x74, 0x79, 0x70, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x2e, 0x45, 0x78, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x52, 0x08, 0x65, 0x78, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x22, 0x3c, 0x0a, 0x0a, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x53, 0x70, 0x61, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x11, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x22, 0x91, 0x01, 0x0a, 0x08, 0x45, 0x78, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x72, 0x12, 0x35, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, - 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x50, 0x61, 0x69, - 0x72, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x38, - 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xff, 0x02, 0x0a, 0x06, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x12, 0x35, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, - 0x75, 0x73, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x50, - 0x61, 0x69, 0x72, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x31, 0x0a, 0x05, 0x67, 0x61, - 0x75, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6f, 0x2e, 0x70, - 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x2e, 0x47, 0x61, 0x75, 0x67, 0x65, 0x52, 0x05, 0x67, 0x61, 0x75, 0x67, 0x65, 0x12, 0x37, 0x0a, - 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, - 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x53, - 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, - 0x37, 0x0a, 0x07, 0x75, 0x6e, 0x74, 0x79, 0x70, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, - 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x55, 0x6e, 0x74, 0x79, 0x70, 0x65, 0x64, 0x52, - 0x07, 0x75, 0x6e, 0x74, 0x79, 0x70, 0x65, 0x64, 0x12, 0x3d, 0x0a, 0x09, 0x68, 0x69, 0x73, 0x74, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, - 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x52, 0x09, 0x68, 0x69, - 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4d, 0x73, 0x22, 0xa2, 0x01, 0x0a, 0x0c, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x68, 0x65, 0x6c, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, - 0x65, 0x6c, 0x70, 0x12, 0x34, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x20, 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, - 0x73, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x69, 0x6f, 0x2e, 0x70, - 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x2a, - 0x62, 0x0a, 0x0a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, - 0x07, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x45, 0x52, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x41, - 0x55, 0x47, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x4d, 0x4d, 0x41, 0x52, 0x59, - 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x54, 0x59, 0x50, 0x45, 0x44, 0x10, 0x03, 0x12, - 0x0d, 0x0a, 0x09, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x47, 0x52, 0x41, 0x4d, 0x10, 0x04, 0x12, 0x13, - 0x0a, 0x0f, 0x47, 0x41, 0x55, 0x47, 0x45, 0x5f, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x47, 0x52, 0x41, - 0x4d, 0x10, 0x05, 0x42, 0x52, 0x0a, 0x14, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, - 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5a, 0x3a, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, - 0x75, 0x73, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, - 0x67, 0x6f, 0x3b, 0x69, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, - 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x2e, 0x55, 0x6e, 0x74, 0x79, 0x70, 0x65, 0x64, 0x52, 0x07, 0x75, 0x6e, 0x74, + 0x79, 0x70, 0x65, 0x64, 0x12, 0x3d, 0x0a, 0x09, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, + 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, + 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x48, + 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x52, 0x09, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, + 0x72, 0x61, 0x6d, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x4d, 0x73, 0x22, 0xa2, 0x01, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, + 0x65, 0x6c, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x65, 0x6c, 0x70, 0x12, + 0x34, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, + 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, + 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x2a, 0x62, 0x0a, 0x0a, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4f, 0x55, + 0x4e, 0x54, 0x45, 0x52, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x41, 0x55, 0x47, 0x45, 0x10, + 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x4d, 0x4d, 0x41, 0x52, 0x59, 0x10, 0x02, 0x12, 0x0b, + 0x0a, 0x07, 0x55, 0x4e, 0x54, 0x59, 0x50, 0x45, 0x44, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x48, + 0x49, 0x53, 0x54, 0x4f, 0x47, 0x52, 0x41, 0x4d, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x47, 0x41, + 0x55, 0x47, 0x45, 0x5f, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x47, 0x52, 0x41, 0x4d, 0x10, 0x05, 0x42, + 0x52, 0x0a, 0x14, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, + 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x2f, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x67, 0x6f, 0x3b, 0x69, + 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x5f, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, } var ( @@ -1137,26 +1175,29 @@ var file_io_prometheus_client_metrics_proto_goTypes = []interface{}{ } var file_io_prometheus_client_metrics_proto_depIdxs = []int32{ 10, // 0: io.prometheus.client.Counter.exemplar:type_name -> io.prometheus.client.Exemplar - 4, // 1: io.prometheus.client.Summary.quantile:type_name -> io.prometheus.client.Quantile - 8, // 2: io.prometheus.client.Histogram.bucket:type_name -> io.prometheus.client.Bucket - 9, // 3: io.prometheus.client.Histogram.negative_span:type_name -> io.prometheus.client.BucketSpan - 9, // 4: io.prometheus.client.Histogram.positive_span:type_name -> io.prometheus.client.BucketSpan - 10, // 5: io.prometheus.client.Bucket.exemplar:type_name -> io.prometheus.client.Exemplar - 1, // 6: io.prometheus.client.Exemplar.label:type_name -> io.prometheus.client.LabelPair - 13, // 7: io.prometheus.client.Exemplar.timestamp:type_name -> google.protobuf.Timestamp - 1, // 8: io.prometheus.client.Metric.label:type_name -> io.prometheus.client.LabelPair - 2, // 9: io.prometheus.client.Metric.gauge:type_name -> io.prometheus.client.Gauge - 3, // 10: io.prometheus.client.Metric.counter:type_name -> io.prometheus.client.Counter - 5, // 11: io.prometheus.client.Metric.summary:type_name -> io.prometheus.client.Summary - 6, // 12: io.prometheus.client.Metric.untyped:type_name -> io.prometheus.client.Untyped - 7, // 13: io.prometheus.client.Metric.histogram:type_name -> io.prometheus.client.Histogram - 0, // 14: io.prometheus.client.MetricFamily.type:type_name -> io.prometheus.client.MetricType - 11, // 15: io.prometheus.client.MetricFamily.metric:type_name -> io.prometheus.client.Metric - 16, // [16:16] is the sub-list for method output_type - 16, // [16:16] is the sub-list for method input_type - 16, // [16:16] is the sub-list for extension type_name - 16, // [16:16] is the sub-list for extension extendee - 0, // [0:16] is the sub-list for field type_name + 13, // 1: io.prometheus.client.Counter.created_timestamp:type_name -> google.protobuf.Timestamp + 4, // 2: io.prometheus.client.Summary.quantile:type_name -> io.prometheus.client.Quantile + 13, // 3: io.prometheus.client.Summary.created_timestamp:type_name -> google.protobuf.Timestamp + 8, // 4: io.prometheus.client.Histogram.bucket:type_name -> io.prometheus.client.Bucket + 13, // 5: io.prometheus.client.Histogram.created_timestamp:type_name -> google.protobuf.Timestamp + 9, // 6: io.prometheus.client.Histogram.negative_span:type_name -> io.prometheus.client.BucketSpan + 9, // 7: io.prometheus.client.Histogram.positive_span:type_name -> io.prometheus.client.BucketSpan + 10, // 8: io.prometheus.client.Bucket.exemplar:type_name -> io.prometheus.client.Exemplar + 1, // 9: io.prometheus.client.Exemplar.label:type_name -> io.prometheus.client.LabelPair + 13, // 10: io.prometheus.client.Exemplar.timestamp:type_name -> google.protobuf.Timestamp + 1, // 11: io.prometheus.client.Metric.label:type_name -> io.prometheus.client.LabelPair + 2, // 12: io.prometheus.client.Metric.gauge:type_name -> io.prometheus.client.Gauge + 3, // 13: io.prometheus.client.Metric.counter:type_name -> io.prometheus.client.Counter + 5, // 14: io.prometheus.client.Metric.summary:type_name -> io.prometheus.client.Summary + 6, // 15: io.prometheus.client.Metric.untyped:type_name -> io.prometheus.client.Untyped + 7, // 16: io.prometheus.client.Metric.histogram:type_name -> io.prometheus.client.Histogram + 0, // 17: io.prometheus.client.MetricFamily.type:type_name -> io.prometheus.client.MetricType + 11, // 18: io.prometheus.client.MetricFamily.metric:type_name -> io.prometheus.client.Metric + 19, // [19:19] is the sub-list for method output_type + 19, // [19:19] is the sub-list for method input_type + 19, // [19:19] is the sub-list for extension type_name + 19, // [19:19] is the sub-list for extension extendee + 0, // [0:19] is the sub-list for field type_name } func init() { file_io_prometheus_client_metrics_proto_init() } diff --git a/vendor/github.com/prometheus/common/expfmt/decode.go b/vendor/github.com/prometheus/common/expfmt/decode.go index f4fc88455..906397815 100644 --- a/vendor/github.com/prometheus/common/expfmt/decode.go +++ b/vendor/github.com/prometheus/common/expfmt/decode.go @@ -132,7 +132,10 @@ func (d *textDecoder) Decode(v *dto.MetricFamily) error { } // Pick off one MetricFamily per Decode until there's nothing left. for key, fam := range d.fams { - *v = *fam + v.Name = fam.Name + v.Help = fam.Help + v.Type = fam.Type + v.Metric = fam.Metric delete(d.fams, key) return nil } diff --git a/vendor/github.com/prometheus/common/expfmt/encode.go b/vendor/github.com/prometheus/common/expfmt/encode.go index 64dc0eb40..7f611ffaa 100644 --- a/vendor/github.com/prometheus/common/expfmt/encode.go +++ b/vendor/github.com/prometheus/common/expfmt/encode.go @@ -18,9 +18,9 @@ import ( "io" "net/http" - "github.com/golang/protobuf/proto" //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. "github.com/matttproud/golang_protobuf_extensions/pbutil" "github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg" + "google.golang.org/protobuf/encoding/prototext" dto "github.com/prometheus/client_model/go" ) @@ -99,8 +99,11 @@ func NegotiateIncludingOpenMetrics(h http.Header) Format { if ac.Type == "text" && ac.SubType == "plain" && (ver == TextVersion || ver == "") { return FmtText } - if ac.Type+"/"+ac.SubType == OpenMetricsType && (ver == OpenMetricsVersion || ver == "") { - return FmtOpenMetrics + if ac.Type+"/"+ac.SubType == OpenMetricsType && (ver == OpenMetricsVersion_0_0_1 || ver == OpenMetricsVersion_1_0_0 || ver == "") { + if ver == OpenMetricsVersion_1_0_0 { + return FmtOpenMetrics_1_0_0 + } + return FmtOpenMetrics_0_0_1 } } return FmtText @@ -133,7 +136,7 @@ func NewEncoder(w io.Writer, format Format) Encoder { case FmtProtoText: return encoderCloser{ encode: func(v *dto.MetricFamily) error { - _, err := fmt.Fprintln(w, proto.MarshalTextString(v)) + _, err := fmt.Fprintln(w, prototext.Format(v)) return err }, close: func() error { return nil }, @@ -146,7 +149,7 @@ func NewEncoder(w io.Writer, format Format) Encoder { }, close: func() error { return nil }, } - case FmtOpenMetrics: + case FmtOpenMetrics_0_0_1, FmtOpenMetrics_1_0_0: return encoderCloser{ encode: func(v *dto.MetricFamily) error { _, err := MetricFamilyToOpenMetrics(w, v) diff --git a/vendor/github.com/prometheus/common/expfmt/expfmt.go b/vendor/github.com/prometheus/common/expfmt/expfmt.go index 0f176fa64..c4cb20f0d 100644 --- a/vendor/github.com/prometheus/common/expfmt/expfmt.go +++ b/vendor/github.com/prometheus/common/expfmt/expfmt.go @@ -19,20 +19,22 @@ type Format string // Constants to assemble the Content-Type values for the different wire protocols. const ( - TextVersion = "0.0.4" - ProtoType = `application/vnd.google.protobuf` - ProtoProtocol = `io.prometheus.client.MetricFamily` - ProtoFmt = ProtoType + "; proto=" + ProtoProtocol + ";" - OpenMetricsType = `application/openmetrics-text` - OpenMetricsVersion = "0.0.1" + TextVersion = "0.0.4" + ProtoType = `application/vnd.google.protobuf` + ProtoProtocol = `io.prometheus.client.MetricFamily` + ProtoFmt = ProtoType + "; proto=" + ProtoProtocol + ";" + OpenMetricsType = `application/openmetrics-text` + OpenMetricsVersion_0_0_1 = "0.0.1" + OpenMetricsVersion_1_0_0 = "1.0.0" // The Content-Type values for the different wire protocols. - FmtUnknown Format = `` - FmtText Format = `text/plain; version=` + TextVersion + `; charset=utf-8` - FmtProtoDelim Format = ProtoFmt + ` encoding=delimited` - FmtProtoText Format = ProtoFmt + ` encoding=text` - FmtProtoCompact Format = ProtoFmt + ` encoding=compact-text` - FmtOpenMetrics Format = OpenMetricsType + `; version=` + OpenMetricsVersion + `; charset=utf-8` + FmtUnknown Format = `` + FmtText Format = `text/plain; version=` + TextVersion + `; charset=utf-8` + FmtProtoDelim Format = ProtoFmt + ` encoding=delimited` + FmtProtoText Format = ProtoFmt + ` encoding=text` + FmtProtoCompact Format = ProtoFmt + ` encoding=compact-text` + FmtOpenMetrics_1_0_0 Format = OpenMetricsType + `; version=` + OpenMetricsVersion_1_0_0 + `; charset=utf-8` + FmtOpenMetrics_0_0_1 Format = OpenMetricsType + `; version=` + OpenMetricsVersion_0_0_1 + `; charset=utf-8` ) const ( diff --git a/vendor/github.com/prometheus/common/expfmt/text_parse.go b/vendor/github.com/prometheus/common/expfmt/text_parse.go index ac2482782..35db1cc9d 100644 --- a/vendor/github.com/prometheus/common/expfmt/text_parse.go +++ b/vendor/github.com/prometheus/common/expfmt/text_parse.go @@ -24,8 +24,8 @@ import ( dto "github.com/prometheus/client_model/go" - "github.com/golang/protobuf/proto" //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. "github.com/prometheus/common/model" + "google.golang.org/protobuf/proto" ) // A stateFn is a function that represents a state in a state machine. By diff --git a/vendor/github.com/prometheus/procfs/.golangci.yml b/vendor/github.com/prometheus/procfs/.golangci.yml index a197699a1..c24864a92 100644 --- a/vendor/github.com/prometheus/procfs/.golangci.yml +++ b/vendor/github.com/prometheus/procfs/.golangci.yml @@ -2,6 +2,7 @@ linters: enable: - godot + - misspell - revive linter-settings: @@ -10,3 +11,5 @@ linter-settings: exclude: # Ignore "See: URL" - 'See:' + misspell: + locale: US diff --git a/vendor/github.com/prometheus/procfs/Makefile.common b/vendor/github.com/prometheus/procfs/Makefile.common index e358db69c..0ce7ea461 100644 --- a/vendor/github.com/prometheus/procfs/Makefile.common +++ b/vendor/github.com/prometheus/procfs/Makefile.common @@ -49,19 +49,19 @@ endif GOTEST := $(GO) test GOTEST_DIR := ifneq ($(CIRCLE_JOB),) -ifneq ($(shell which gotestsum),) +ifneq ($(shell command -v gotestsum > /dev/null),) GOTEST_DIR := test-results GOTEST := gotestsum --junitfile $(GOTEST_DIR)/unit-tests.xml -- endif endif -PROMU_VERSION ?= 0.14.0 +PROMU_VERSION ?= 0.15.0 PROMU_URL := https://github.com/prometheus/promu/releases/download/v$(PROMU_VERSION)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM).tar.gz SKIP_GOLANGCI_LINT := GOLANGCI_LINT := GOLANGCI_LINT_OPTS ?= -GOLANGCI_LINT_VERSION ?= v1.49.0 +GOLANGCI_LINT_VERSION ?= v1.53.3 # golangci-lint only supports linux, darwin and windows platforms on i386/amd64. # windows isn't included here because of the path separator being different. ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux darwin)) @@ -91,6 +91,8 @@ BUILD_DOCKER_ARCHS = $(addprefix common-docker-,$(DOCKER_ARCHS)) PUBLISH_DOCKER_ARCHS = $(addprefix common-docker-publish-,$(DOCKER_ARCHS)) TAG_DOCKER_ARCHS = $(addprefix common-docker-tag-latest-,$(DOCKER_ARCHS)) +SANITIZED_DOCKER_IMAGE_TAG := $(subst +,-,$(DOCKER_IMAGE_TAG)) + ifeq ($(GOHOSTARCH),amd64) ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux freebsd darwin windows)) # Only supported on amd64 @@ -176,7 +178,7 @@ endif .PHONY: common-yamllint common-yamllint: @echo ">> running yamllint on all YAML files in the repository" -ifeq (, $(shell which yamllint)) +ifeq (, $(shell command -v yamllint > /dev/null)) @echo "yamllint not installed so skipping" else yamllint . @@ -205,7 +207,7 @@ common-tarball: promu .PHONY: common-docker $(BUILD_DOCKER_ARCHS) common-docker: $(BUILD_DOCKER_ARCHS) $(BUILD_DOCKER_ARCHS): common-docker-%: - docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG)" \ + docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" \ -f $(DOCKERFILE_PATH) \ --build-arg ARCH="$*" \ --build-arg OS="linux" \ @@ -214,19 +216,19 @@ $(BUILD_DOCKER_ARCHS): common-docker-%: .PHONY: common-docker-publish $(PUBLISH_DOCKER_ARCHS) common-docker-publish: $(PUBLISH_DOCKER_ARCHS) $(PUBLISH_DOCKER_ARCHS): common-docker-publish-%: - docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG)" + docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" DOCKER_MAJOR_VERSION_TAG = $(firstword $(subst ., ,$(shell cat VERSION))) .PHONY: common-docker-tag-latest $(TAG_DOCKER_ARCHS) common-docker-tag-latest: $(TAG_DOCKER_ARCHS) $(TAG_DOCKER_ARCHS): common-docker-tag-latest-%: - docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:latest" - docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:v$(DOCKER_MAJOR_VERSION_TAG)" + docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:latest" + docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:v$(DOCKER_MAJOR_VERSION_TAG)" .PHONY: common-docker-manifest common-docker-manifest: - DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create -a "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" $(foreach ARCH,$(DOCKER_ARCHS),$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$(ARCH):$(DOCKER_IMAGE_TAG)) - DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" + DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create -a "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG)" $(foreach ARCH,$(DOCKER_ARCHS),$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$(ARCH):$(SANITIZED_DOCKER_IMAGE_TAG)) + DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG)" .PHONY: promu promu: $(PROMU) diff --git a/vendor/github.com/prometheus/procfs/README.md b/vendor/github.com/prometheus/procfs/README.md index 43c37735a..1224816c2 100644 --- a/vendor/github.com/prometheus/procfs/README.md +++ b/vendor/github.com/prometheus/procfs/README.md @@ -51,11 +51,11 @@ ensure the `fixtures` directory is up to date by removing the existing directory extracting the ttar file using `make fixtures/.unpacked` or just `make test`. ```bash -rm -rf fixtures +rm -rf testdata/fixtures make test ``` Next, make the required changes to the extracted files in the `fixtures` directory. When the changes are complete, run `make update_fixtures` to create a new `fixtures.ttar` file based on the updated `fixtures` directory. And finally, verify the changes using -`git diff fixtures.ttar`. +`git diff testdata/fixtures.ttar`. diff --git a/vendor/github.com/prometheus/procfs/arp.go b/vendor/github.com/prometheus/procfs/arp.go index 68f36e888..28783e2dd 100644 --- a/vendor/github.com/prometheus/procfs/arp.go +++ b/vendor/github.com/prometheus/procfs/arp.go @@ -55,7 +55,7 @@ type ARPEntry struct { func (fs FS) GatherARPEntries() ([]ARPEntry, error) { data, err := os.ReadFile(fs.proc.Path("net/arp")) if err != nil { - return nil, fmt.Errorf("error reading arp %q: %w", fs.proc.Path("net/arp"), err) + return nil, fmt.Errorf("%s: error reading arp %s: %w", ErrFileRead, fs.proc.Path("net/arp"), err) } return parseARPEntries(data) @@ -78,11 +78,11 @@ func parseARPEntries(data []byte) ([]ARPEntry, error) { } else if width == expectedDataWidth { entry, err := parseARPEntry(columns) if err != nil { - return []ARPEntry{}, fmt.Errorf("failed to parse ARP entry: %w", err) + return []ARPEntry{}, fmt.Errorf("%s: Failed to parse ARP entry: %v: %w", ErrFileParse, entry, err) } entries = append(entries, entry) } else { - return []ARPEntry{}, fmt.Errorf("%d columns were detected, but %d were expected", width, expectedDataWidth) + return []ARPEntry{}, fmt.Errorf("%s: %d columns found, but expected %d: %w", ErrFileParse, width, expectedDataWidth, err) } } diff --git a/vendor/github.com/prometheus/procfs/buddyinfo.go b/vendor/github.com/prometheus/procfs/buddyinfo.go index f5b7939b2..4a173636c 100644 --- a/vendor/github.com/prometheus/procfs/buddyinfo.go +++ b/vendor/github.com/prometheus/procfs/buddyinfo.go @@ -55,7 +55,7 @@ func parseBuddyInfo(r io.Reader) ([]BuddyInfo, error) { parts := strings.Fields(line) if len(parts) < 4 { - return nil, fmt.Errorf("invalid number of fields when parsing buddyinfo") + return nil, fmt.Errorf("%w: Invalid number of fields, found: %v", ErrFileParse, parts) } node := strings.TrimRight(parts[1], ",") @@ -66,7 +66,7 @@ func parseBuddyInfo(r io.Reader) ([]BuddyInfo, error) { bucketCount = arraySize } else { if bucketCount != arraySize { - return nil, fmt.Errorf("mismatch in number of buddyinfo buckets, previous count %d, new count %d", bucketCount, arraySize) + return nil, fmt.Errorf("%w: mismatch in number of buddyinfo buckets, previous count %d, new count %d", ErrFileParse, bucketCount, arraySize) } } @@ -74,7 +74,7 @@ func parseBuddyInfo(r io.Reader) ([]BuddyInfo, error) { for i := 0; i < arraySize; i++ { sizes[i], err = strconv.ParseFloat(parts[i+4], 64) if err != nil { - return nil, fmt.Errorf("invalid value in buddyinfo: %w", err) + return nil, fmt.Errorf("%s: Invalid valid in buddyinfo: %f: %w", ErrFileParse, sizes[i], err) } } diff --git a/vendor/github.com/prometheus/procfs/cpuinfo.go b/vendor/github.com/prometheus/procfs/cpuinfo.go index 06968ca2e..f4f5501c6 100644 --- a/vendor/github.com/prometheus/procfs/cpuinfo.go +++ b/vendor/github.com/prometheus/procfs/cpuinfo.go @@ -79,7 +79,7 @@ func parseCPUInfoX86(info []byte) ([]CPUInfo, error) { // find the first "processor" line firstLine := firstNonEmptyLine(scanner) if !strings.HasPrefix(firstLine, "processor") || !strings.Contains(firstLine, ":") { - return nil, fmt.Errorf("invalid cpuinfo file: %q", firstLine) + return nil, fmt.Errorf("%w: Cannot parse line: %q", ErrFileParse, firstLine) } field := strings.SplitN(firstLine, ": ", 2) v, err := strconv.ParseUint(field[1], 0, 32) @@ -192,9 +192,10 @@ func parseCPUInfoARM(info []byte) ([]CPUInfo, error) { scanner := bufio.NewScanner(bytes.NewReader(info)) firstLine := firstNonEmptyLine(scanner) - match, _ := regexp.MatchString("^[Pp]rocessor", firstLine) + match, err := regexp.MatchString("^[Pp]rocessor", firstLine) if !match || !strings.Contains(firstLine, ":") { - return nil, fmt.Errorf("invalid cpuinfo file: %q", firstLine) + return nil, fmt.Errorf("%s: Cannot parse line: %q: %w", ErrFileParse, firstLine, err) + } field := strings.SplitN(firstLine, ": ", 2) cpuinfo := []CPUInfo{} @@ -258,7 +259,7 @@ func parseCPUInfoS390X(info []byte) ([]CPUInfo, error) { firstLine := firstNonEmptyLine(scanner) if !strings.HasPrefix(firstLine, "vendor_id") || !strings.Contains(firstLine, ":") { - return nil, fmt.Errorf("invalid cpuinfo file: %q", firstLine) + return nil, fmt.Errorf("%w: Cannot parse line: %q", ErrFileParse, firstLine) } field := strings.SplitN(firstLine, ": ", 2) cpuinfo := []CPUInfo{} @@ -283,7 +284,7 @@ func parseCPUInfoS390X(info []byte) ([]CPUInfo, error) { if strings.HasPrefix(line, "processor") { match := cpuinfoS390XProcessorRegexp.FindStringSubmatch(line) if len(match) < 2 { - return nil, fmt.Errorf("invalid cpuinfo file: %q", firstLine) + return nil, fmt.Errorf("%w: %q", ErrFileParse, firstLine) } cpu := commonCPUInfo v, err := strconv.ParseUint(match[1], 0, 32) @@ -343,7 +344,7 @@ func parseCPUInfoMips(info []byte) ([]CPUInfo, error) { // find the first "processor" line firstLine := firstNonEmptyLine(scanner) if !strings.HasPrefix(firstLine, "system type") || !strings.Contains(firstLine, ":") { - return nil, fmt.Errorf("invalid cpuinfo file: %q", firstLine) + return nil, fmt.Errorf("%w: %q", ErrFileParse, firstLine) } field := strings.SplitN(firstLine, ": ", 2) cpuinfo := []CPUInfo{} @@ -421,7 +422,7 @@ func parseCPUInfoPPC(info []byte) ([]CPUInfo, error) { firstLine := firstNonEmptyLine(scanner) if !strings.HasPrefix(firstLine, "processor") || !strings.Contains(firstLine, ":") { - return nil, fmt.Errorf("invalid cpuinfo file: %q", firstLine) + return nil, fmt.Errorf("%w: %q", ErrFileParse, firstLine) } field := strings.SplitN(firstLine, ": ", 2) v, err := strconv.ParseUint(field[1], 0, 32) @@ -466,7 +467,7 @@ func parseCPUInfoRISCV(info []byte) ([]CPUInfo, error) { firstLine := firstNonEmptyLine(scanner) if !strings.HasPrefix(firstLine, "processor") || !strings.Contains(firstLine, ":") { - return nil, fmt.Errorf("invalid cpuinfo file: %q", firstLine) + return nil, fmt.Errorf("%w: %q", ErrFileParse, firstLine) } field := strings.SplitN(firstLine, ": ", 2) v, err := strconv.ParseUint(field[1], 0, 32) diff --git a/vendor/github.com/prometheus/procfs/crypto.go b/vendor/github.com/prometheus/procfs/crypto.go index 5048ad1f2..9a73e2639 100644 --- a/vendor/github.com/prometheus/procfs/crypto.go +++ b/vendor/github.com/prometheus/procfs/crypto.go @@ -55,12 +55,13 @@ func (fs FS) Crypto() ([]Crypto, error) { path := fs.proc.Path("crypto") b, err := util.ReadFileNoStat(path) if err != nil { - return nil, fmt.Errorf("error reading crypto %q: %w", path, err) + return nil, fmt.Errorf("%s: Cannot read file %v: %w", ErrFileRead, b, err) + } crypto, err := parseCrypto(bytes.NewReader(b)) if err != nil { - return nil, fmt.Errorf("error parsing crypto %q: %w", path, err) + return nil, fmt.Errorf("%s: Cannot parse %v: %w", ErrFileParse, crypto, err) } return crypto, nil @@ -83,7 +84,7 @@ func parseCrypto(r io.Reader) ([]Crypto, error) { kv := strings.Split(text, ":") if len(kv) != 2 { - return nil, fmt.Errorf("malformed crypto line: %q", text) + return nil, fmt.Errorf("%w: Cannot parae line: %q", ErrFileParse, text) } k := strings.TrimSpace(kv[0]) diff --git a/vendor/github.com/prometheus/procfs/fs.go b/vendor/github.com/prometheus/procfs/fs.go index 0102ab0fd..4980c875b 100644 --- a/vendor/github.com/prometheus/procfs/fs.go +++ b/vendor/github.com/prometheus/procfs/fs.go @@ -20,7 +20,8 @@ import ( // FS represents the pseudo-filesystem sys, which provides an interface to // kernel data structures. type FS struct { - proc fs.FS + proc fs.FS + isReal bool } // DefaultMountPoint is the common mount point of the proc filesystem. @@ -39,5 +40,11 @@ func NewFS(mountPoint string) (FS, error) { if err != nil { return FS{}, err } - return FS{fs}, nil + + isReal, err := isRealProc(mountPoint) + if err != nil { + return FS{}, err + } + + return FS{fs, isReal}, nil } diff --git a/vendor/github.com/prometheus/procfs/fs_statfs_notype.go b/vendor/github.com/prometheus/procfs/fs_statfs_notype.go new file mode 100644 index 000000000..13d74e395 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/fs_statfs_notype.go @@ -0,0 +1,23 @@ +// Copyright 2018 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build netbsd || openbsd || solaris || windows || nostatfs +// +build netbsd openbsd solaris windows nostatfs + +package procfs + +// isRealProc returns true on architectures that don't have a Type argument +// in their Statfs_t struct +func isRealProc(mountPoint string) (bool, error) { + return true, nil +} diff --git a/vendor/github.com/prometheus/procfs/fs_statfs_type.go b/vendor/github.com/prometheus/procfs/fs_statfs_type.go new file mode 100644 index 000000000..bee151445 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/fs_statfs_type.go @@ -0,0 +1,33 @@ +// Copyright 2018 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build !netbsd && !openbsd && !solaris && !windows && !nostatfs +// +build !netbsd,!openbsd,!solaris,!windows,!nostatfs + +package procfs + +import ( + "syscall" +) + +// isRealProc determines whether supplied mountpoint is really a proc filesystem. +func isRealProc(mountPoint string) (bool, error) { + stat := syscall.Statfs_t{} + err := syscall.Statfs(mountPoint, &stat) + if err != nil { + return false, err + } + + // 0x9fa0 is PROC_SUPER_MAGIC: https://elixir.bootlin.com/linux/v6.1/source/include/uapi/linux/magic.h#L87 + return stat.Type == 0x9fa0, nil +} diff --git a/vendor/github.com/prometheus/procfs/fscache.go b/vendor/github.com/prometheus/procfs/fscache.go index f8070e6e2..f560a8db3 100644 --- a/vendor/github.com/prometheus/procfs/fscache.go +++ b/vendor/github.com/prometheus/procfs/fscache.go @@ -236,7 +236,7 @@ func (fs FS) Fscacheinfo() (Fscacheinfo, error) { m, err := parseFscacheinfo(bytes.NewReader(b)) if err != nil { - return Fscacheinfo{}, fmt.Errorf("failed to parse Fscacheinfo: %w", err) + return Fscacheinfo{}, fmt.Errorf("%s: Cannot parse %v: %w", ErrFileParse, m, err) } return *m, nil @@ -245,7 +245,7 @@ func (fs FS) Fscacheinfo() (Fscacheinfo, error) { func setFSCacheFields(fields []string, setFields ...*uint64) error { var err error if len(fields) < len(setFields) { - return fmt.Errorf("Insufficient number of fields, expected %v, got %v", len(setFields), len(fields)) + return fmt.Errorf("%s: Expected %d, but got %d: %w", ErrFileParse, len(setFields), len(fields), err) } for i := range setFields { @@ -263,7 +263,7 @@ func parseFscacheinfo(r io.Reader) (*Fscacheinfo, error) { for s.Scan() { fields := strings.Fields(s.Text()) if len(fields) < 2 { - return nil, fmt.Errorf("malformed Fscacheinfo line: %q", s.Text()) + return nil, fmt.Errorf("%w: malformed Fscacheinfo line: %q", ErrFileParse, s.Text()) } switch fields[0] { diff --git a/vendor/github.com/prometheus/procfs/internal/util/parse.go b/vendor/github.com/prometheus/procfs/internal/util/parse.go index b030951fa..14272dc78 100644 --- a/vendor/github.com/prometheus/procfs/internal/util/parse.go +++ b/vendor/github.com/prometheus/procfs/internal/util/parse.go @@ -64,6 +64,21 @@ func ParsePInt64s(ss []string) ([]*int64, error) { return us, nil } +// Parses a uint64 from given hex in string. +func ParseHexUint64s(ss []string) ([]*uint64, error) { + us := make([]*uint64, 0, len(ss)) + for _, s := range ss { + u, err := strconv.ParseUint(s, 16, 64) + if err != nil { + return nil, err + } + + us = append(us, &u) + } + + return us, nil +} + // ReadUintFromFile reads a file and attempts to parse a uint64 from it. func ReadUintFromFile(path string) (uint64, error) { data, err := os.ReadFile(path) diff --git a/vendor/github.com/prometheus/procfs/ipvs.go b/vendor/github.com/prometheus/procfs/ipvs.go index 391c07957..5a145bbfe 100644 --- a/vendor/github.com/prometheus/procfs/ipvs.go +++ b/vendor/github.com/prometheus/procfs/ipvs.go @@ -221,15 +221,16 @@ func parseIPPort(s string) (net.IP, uint16, error) { case 46: ip = net.ParseIP(s[1:40]) if ip == nil { - return nil, 0, fmt.Errorf("invalid IPv6 address: %s", s[1:40]) + return nil, 0, fmt.Errorf("%s: Invalid IPv6 addr %s: %w", ErrFileParse, s[1:40], err) } default: - return nil, 0, fmt.Errorf("unexpected IP:Port: %s", s) + return nil, 0, fmt.Errorf("%s: Unexpected IP:Port %s: %w", ErrFileParse, s, err) } portString := s[len(s)-4:] if len(portString) != 4 { - return nil, 0, fmt.Errorf("unexpected port string format: %s", portString) + return nil, 0, + fmt.Errorf("%s: Unexpected port string format %s: %w", ErrFileParse, portString, err) } port, err := strconv.ParseUint(portString, 16, 16) if err != nil { diff --git a/vendor/github.com/prometheus/procfs/loadavg.go b/vendor/github.com/prometheus/procfs/loadavg.go index 0096cafbd..59465c5bb 100644 --- a/vendor/github.com/prometheus/procfs/loadavg.go +++ b/vendor/github.com/prometheus/procfs/loadavg.go @@ -44,14 +44,14 @@ func parseLoad(loadavgBytes []byte) (*LoadAvg, error) { loads := make([]float64, 3) parts := strings.Fields(string(loadavgBytes)) if len(parts) < 3 { - return nil, fmt.Errorf("malformed loadavg line: too few fields in loadavg string: %q", string(loadavgBytes)) + return nil, fmt.Errorf("%w: Malformed line %q", ErrFileParse, string(loadavgBytes)) } var err error for i, load := range parts[0:3] { loads[i], err = strconv.ParseFloat(load, 64) if err != nil { - return nil, fmt.Errorf("could not parse load %q: %w", load, err) + return nil, fmt.Errorf("%s: Cannot parse load: %f: %w", ErrFileParse, loads[i], err) } } return &LoadAvg{ diff --git a/vendor/github.com/prometheus/procfs/mdstat.go b/vendor/github.com/prometheus/procfs/mdstat.go index a95c889cb..fdd4b9544 100644 --- a/vendor/github.com/prometheus/procfs/mdstat.go +++ b/vendor/github.com/prometheus/procfs/mdstat.go @@ -70,7 +70,7 @@ func (fs FS) MDStat() ([]MDStat, error) { } mdstat, err := parseMDStat(data) if err != nil { - return nil, fmt.Errorf("error parsing mdstat %q: %w", fs.proc.Path("mdstat"), err) + return nil, fmt.Errorf("%s: Cannot parse %v: %w", ErrFileParse, fs.proc.Path("mdstat"), err) } return mdstat, nil } @@ -90,13 +90,13 @@ func parseMDStat(mdStatData []byte) ([]MDStat, error) { deviceFields := strings.Fields(line) if len(deviceFields) < 3 { - return nil, fmt.Errorf("not enough fields in mdline (expected at least 3): %s", line) + return nil, fmt.Errorf("%s: Expected 3+ lines, got %q", ErrFileParse, line) } mdName := deviceFields[0] // mdx state := deviceFields[2] // active or inactive if len(lines) <= i+3 { - return nil, fmt.Errorf("error parsing %q: too few lines for md device", mdName) + return nil, fmt.Errorf("%w: Too few lines for md device: %q", ErrFileParse, mdName) } // Failed disks have the suffix (F) & Spare disks have the suffix (S). @@ -105,7 +105,7 @@ func parseMDStat(mdStatData []byte) ([]MDStat, error) { active, total, down, size, err := evalStatusLine(lines[i], lines[i+1]) if err != nil { - return nil, fmt.Errorf("error parsing md device lines: %w", err) + return nil, fmt.Errorf("%s: Cannot parse md device lines: %v: %w", ErrFileParse, active, err) } syncLineIdx := i + 2 @@ -140,7 +140,7 @@ func parseMDStat(mdStatData []byte) ([]MDStat, error) { } else { syncedBlocks, pct, finish, speed, err = evalRecoveryLine(lines[syncLineIdx]) if err != nil { - return nil, fmt.Errorf("error parsing sync line in md device %q: %w", mdName, err) + return nil, fmt.Errorf("%s: Cannot parse sync line in md device: %q: %w", ErrFileParse, mdName, err) } } } @@ -168,13 +168,13 @@ func parseMDStat(mdStatData []byte) ([]MDStat, error) { func evalStatusLine(deviceLine, statusLine string) (active, total, down, size int64, err error) { statusFields := strings.Fields(statusLine) if len(statusFields) < 1 { - return 0, 0, 0, 0, fmt.Errorf("unexpected statusLine %q", statusLine) + return 0, 0, 0, 0, fmt.Errorf("%s: Unexpected statusline %q: %w", ErrFileParse, statusLine, err) } sizeStr := statusFields[0] size, err = strconv.ParseInt(sizeStr, 10, 64) if err != nil { - return 0, 0, 0, 0, fmt.Errorf("unexpected statusLine %q: %w", statusLine, err) + return 0, 0, 0, 0, fmt.Errorf("%s: Unexpected statusline %q: %w", ErrFileParse, statusLine, err) } if strings.Contains(deviceLine, "raid0") || strings.Contains(deviceLine, "linear") { @@ -189,17 +189,17 @@ func evalStatusLine(deviceLine, statusLine string) (active, total, down, size in matches := statusLineRE.FindStringSubmatch(statusLine) if len(matches) != 5 { - return 0, 0, 0, 0, fmt.Errorf("couldn't find all the substring matches: %s", statusLine) + return 0, 0, 0, 0, fmt.Errorf("%s: Could not fild all substring matches %s: %w", ErrFileParse, statusLine, err) } total, err = strconv.ParseInt(matches[2], 10, 64) if err != nil { - return 0, 0, 0, 0, fmt.Errorf("unexpected statusLine %q: %w", statusLine, err) + return 0, 0, 0, 0, fmt.Errorf("%s: Unexpected statusline %q: %w", ErrFileParse, statusLine, err) } active, err = strconv.ParseInt(matches[3], 10, 64) if err != nil { - return 0, 0, 0, 0, fmt.Errorf("unexpected statusLine %q: %w", statusLine, err) + return 0, 0, 0, 0, fmt.Errorf("%s: Unexpected active %d: %w", ErrFileParse, active, err) } down = int64(strings.Count(matches[4], "_")) @@ -209,42 +209,42 @@ func evalStatusLine(deviceLine, statusLine string) (active, total, down, size in func evalRecoveryLine(recoveryLine string) (syncedBlocks int64, pct float64, finish float64, speed float64, err error) { matches := recoveryLineBlocksRE.FindStringSubmatch(recoveryLine) if len(matches) != 2 { - return 0, 0, 0, 0, fmt.Errorf("unexpected recoveryLine: %s", recoveryLine) + return 0, 0, 0, 0, fmt.Errorf("%s: Unexpected recoveryLine %s: %w", ErrFileParse, recoveryLine, err) } syncedBlocks, err = strconv.ParseInt(matches[1], 10, 64) if err != nil { - return 0, 0, 0, 0, fmt.Errorf("error parsing int from recoveryLine %q: %w", recoveryLine, err) + return 0, 0, 0, 0, fmt.Errorf("%s: Unexpected parsing of recoveryLine %q: %w", ErrFileParse, recoveryLine, err) } // Get percentage complete matches = recoveryLinePctRE.FindStringSubmatch(recoveryLine) if len(matches) != 2 { - return syncedBlocks, 0, 0, 0, fmt.Errorf("unexpected recoveryLine matching percentage: %s", recoveryLine) + return syncedBlocks, 0, 0, 0, fmt.Errorf("%w: Unexpected recoveryLine matching percentage %s", ErrFileParse, recoveryLine) } pct, err = strconv.ParseFloat(strings.TrimSpace(matches[1]), 64) if err != nil { - return syncedBlocks, 0, 0, 0, fmt.Errorf("error parsing float from recoveryLine %q: %w", recoveryLine, err) + return syncedBlocks, 0, 0, 0, fmt.Errorf("%w: Error parsing float from recoveryLine %q", ErrFileParse, recoveryLine) } // Get time expected left to complete matches = recoveryLineFinishRE.FindStringSubmatch(recoveryLine) if len(matches) != 2 { - return syncedBlocks, pct, 0, 0, fmt.Errorf("unexpected recoveryLine matching est. finish time: %s", recoveryLine) + return syncedBlocks, pct, 0, 0, fmt.Errorf("%w: Unexpected recoveryLine matching est. finish time: %s", ErrFileParse, recoveryLine) } finish, err = strconv.ParseFloat(matches[1], 64) if err != nil { - return syncedBlocks, pct, 0, 0, fmt.Errorf("error parsing float from recoveryLine %q: %w", recoveryLine, err) + return syncedBlocks, pct, 0, 0, fmt.Errorf("%w: Unable to parse float from recoveryLine: %q", ErrFileParse, recoveryLine) } // Get recovery speed matches = recoveryLineSpeedRE.FindStringSubmatch(recoveryLine) if len(matches) != 2 { - return syncedBlocks, pct, finish, 0, fmt.Errorf("unexpected recoveryLine matching speed: %s", recoveryLine) + return syncedBlocks, pct, finish, 0, fmt.Errorf("%w: Unexpected recoveryLine value: %s", ErrFileParse, recoveryLine) } speed, err = strconv.ParseFloat(matches[1], 64) if err != nil { - return syncedBlocks, pct, finish, 0, fmt.Errorf("error parsing float from recoveryLine %q: %w", recoveryLine, err) + return syncedBlocks, pct, finish, 0, fmt.Errorf("%s: Error parsing float from recoveryLine: %q: %w", ErrFileParse, recoveryLine, err) } return syncedBlocks, pct, finish, speed, nil diff --git a/vendor/github.com/prometheus/procfs/meminfo.go b/vendor/github.com/prometheus/procfs/meminfo.go index f65e174e5..eaf00e224 100644 --- a/vendor/github.com/prometheus/procfs/meminfo.go +++ b/vendor/github.com/prometheus/procfs/meminfo.go @@ -152,7 +152,7 @@ func (fs FS) Meminfo() (Meminfo, error) { m, err := parseMemInfo(bytes.NewReader(b)) if err != nil { - return Meminfo{}, fmt.Errorf("failed to parse meminfo: %w", err) + return Meminfo{}, fmt.Errorf("%s: %w", ErrFileParse, err) } return *m, nil @@ -165,7 +165,7 @@ func parseMemInfo(r io.Reader) (*Meminfo, error) { // Each line has at least a name and value; we ignore the unit. fields := strings.Fields(s.Text()) if len(fields) < 2 { - return nil, fmt.Errorf("malformed meminfo line: %q", s.Text()) + return nil, fmt.Errorf("%w: Malformed line %q", ErrFileParse, s.Text()) } v, err := strconv.ParseUint(fields[1], 0, 64) diff --git a/vendor/github.com/prometheus/procfs/mountinfo.go b/vendor/github.com/prometheus/procfs/mountinfo.go index 59f4d5055..388ebf396 100644 --- a/vendor/github.com/prometheus/procfs/mountinfo.go +++ b/vendor/github.com/prometheus/procfs/mountinfo.go @@ -78,11 +78,11 @@ func parseMountInfoString(mountString string) (*MountInfo, error) { mountInfo := strings.Split(mountString, " ") mountInfoLength := len(mountInfo) if mountInfoLength < 10 { - return nil, fmt.Errorf("couldn't find enough fields in mount string: %s", mountString) + return nil, fmt.Errorf("%w: Too few fields in mount string: %s", ErrFileParse, mountString) } if mountInfo[mountInfoLength-4] != "-" { - return nil, fmt.Errorf("couldn't find separator in expected field: %s", mountInfo[mountInfoLength-4]) + return nil, fmt.Errorf("%w: couldn't find separator in expected field: %s", ErrFileParse, mountInfo[mountInfoLength-4]) } mount := &MountInfo{ @@ -98,18 +98,18 @@ func parseMountInfoString(mountString string) (*MountInfo, error) { mount.MountID, err = strconv.Atoi(mountInfo[0]) if err != nil { - return nil, fmt.Errorf("failed to parse mount ID") + return nil, fmt.Errorf("%w: mount ID: %q", ErrFileParse, mount.MountID) } mount.ParentID, err = strconv.Atoi(mountInfo[1]) if err != nil { - return nil, fmt.Errorf("failed to parse parent ID") + return nil, fmt.Errorf("%w: parent ID: %q", ErrFileParse, mount.ParentID) } // Has optional fields, which is a space separated list of values. // Example: shared:2 master:7 if mountInfo[6] != "" { mount.OptionalFields, err = mountOptionsParseOptionalFields(mountInfo[6 : mountInfoLength-4]) if err != nil { - return nil, err + return nil, fmt.Errorf("%s: %w", ErrFileParse, err) } } return mount, nil diff --git a/vendor/github.com/prometheus/procfs/mountstats.go b/vendor/github.com/prometheus/procfs/mountstats.go index 0c482c18c..852c8c4a0 100644 --- a/vendor/github.com/prometheus/procfs/mountstats.go +++ b/vendor/github.com/prometheus/procfs/mountstats.go @@ -186,6 +186,8 @@ type NFSOperationStats struct { CumulativeTotalResponseMilliseconds uint64 // Duration from when a request was enqueued to when it was completely handled. CumulativeTotalRequestMilliseconds uint64 + // The average time from the point the client sends RPC requests until it receives the response. + AverageRTTMilliseconds float64 // The count of operations that complete with tk_status < 0. These statuses usually indicate error conditions. Errors uint64 } @@ -264,7 +266,7 @@ func parseMountStats(r io.Reader) ([]*Mount, error) { if len(ss) > deviceEntryLen { // Only NFSv3 and v4 are supported for parsing statistics if m.Type != nfs3Type && m.Type != nfs4Type { - return nil, fmt.Errorf("cannot parse MountStats for fstype %q", m.Type) + return nil, fmt.Errorf("%w: Cannot parse MountStats for %q", ErrFileParse, m.Type) } statVersion := strings.TrimPrefix(ss[8], statVersionPrefix) @@ -288,7 +290,7 @@ func parseMountStats(r io.Reader) ([]*Mount, error) { // device [device] mounted on [mount] with fstype [type] func parseMount(ss []string) (*Mount, error) { if len(ss) < deviceEntryLen { - return nil, fmt.Errorf("invalid device entry: %v", ss) + return nil, fmt.Errorf("%w: Invalid device %q", ErrFileParse, ss) } // Check for specific words appearing at specific indices to ensure @@ -306,7 +308,7 @@ func parseMount(ss []string) (*Mount, error) { for _, f := range format { if ss[f.i] != f.s { - return nil, fmt.Errorf("invalid device entry: %v", ss) + return nil, fmt.Errorf("%w: Invalid device %q", ErrFileParse, ss) } } @@ -343,7 +345,7 @@ func parseMountStatsNFS(s *bufio.Scanner, statVersion string) (*MountStatsNFS, e switch ss[0] { case fieldOpts: if len(ss) < 2 { - return nil, fmt.Errorf("not enough information for NFS stats: %v", ss) + return nil, fmt.Errorf("%w: Incomplete information for NFS stats: %v", ErrFileParse, ss) } if stats.Opts == nil { stats.Opts = map[string]string{} @@ -358,7 +360,7 @@ func parseMountStatsNFS(s *bufio.Scanner, statVersion string) (*MountStatsNFS, e } case fieldAge: if len(ss) < 2 { - return nil, fmt.Errorf("not enough information for NFS stats: %v", ss) + return nil, fmt.Errorf("%w: Incomplete information for NFS stats: %v", ErrFileParse, ss) } // Age integer is in seconds d, err := time.ParseDuration(ss[1] + "s") @@ -369,7 +371,7 @@ func parseMountStatsNFS(s *bufio.Scanner, statVersion string) (*MountStatsNFS, e stats.Age = d case fieldBytes: if len(ss) < 2 { - return nil, fmt.Errorf("not enough information for NFS stats: %v", ss) + return nil, fmt.Errorf("%w: Incomplete information for NFS stats: %v", ErrFileParse, ss) } bstats, err := parseNFSBytesStats(ss[1:]) if err != nil { @@ -379,7 +381,7 @@ func parseMountStatsNFS(s *bufio.Scanner, statVersion string) (*MountStatsNFS, e stats.Bytes = *bstats case fieldEvents: if len(ss) < 2 { - return nil, fmt.Errorf("not enough information for NFS stats: %v", ss) + return nil, fmt.Errorf("%w: Incomplete information for NFS events: %v", ErrFileParse, ss) } estats, err := parseNFSEventsStats(ss[1:]) if err != nil { @@ -389,7 +391,7 @@ func parseMountStatsNFS(s *bufio.Scanner, statVersion string) (*MountStatsNFS, e stats.Events = *estats case fieldTransport: if len(ss) < 3 { - return nil, fmt.Errorf("not enough information for NFS transport stats: %v", ss) + return nil, fmt.Errorf("%w: Incomplete information for NFS transport stats: %v", ErrFileParse, ss) } tstats, err := parseNFSTransportStats(ss[1:], statVersion) @@ -428,7 +430,7 @@ func parseMountStatsNFS(s *bufio.Scanner, statVersion string) (*MountStatsNFS, e // integer fields. func parseNFSBytesStats(ss []string) (*NFSBytesStats, error) { if len(ss) != fieldBytesLen { - return nil, fmt.Errorf("invalid NFS bytes stats: %v", ss) + return nil, fmt.Errorf("%w: Invalid NFS bytes stats: %v", ErrFileParse, ss) } ns := make([]uint64, 0, fieldBytesLen) @@ -457,7 +459,7 @@ func parseNFSBytesStats(ss []string) (*NFSBytesStats, error) { // integer fields. func parseNFSEventsStats(ss []string) (*NFSEventsStats, error) { if len(ss) != fieldEventsLen { - return nil, fmt.Errorf("invalid NFS events stats: %v", ss) + return nil, fmt.Errorf("%w: invalid NFS events stats: %v", ErrFileParse, ss) } ns := make([]uint64, 0, fieldEventsLen) @@ -521,7 +523,7 @@ func parseNFSOperationStats(s *bufio.Scanner) ([]NFSOperationStats, error) { } if len(ss) < minFields { - return nil, fmt.Errorf("invalid NFS per-operations stats: %v", ss) + return nil, fmt.Errorf("%w: invalid NFS per-operations stats: %v", ErrFileParse, ss) } // Skip string operation name for integers @@ -534,7 +536,6 @@ func parseNFSOperationStats(s *bufio.Scanner) ([]NFSOperationStats, error) { ns = append(ns, n) } - opStats := NFSOperationStats{ Operation: strings.TrimSuffix(ss[0], ":"), Requests: ns[0], @@ -546,6 +547,9 @@ func parseNFSOperationStats(s *bufio.Scanner) ([]NFSOperationStats, error) { CumulativeTotalResponseMilliseconds: ns[6], CumulativeTotalRequestMilliseconds: ns[7], } + if ns[0] != 0 { + opStats.AverageRTTMilliseconds = float64(ns[6]) / float64(ns[0]) + } if len(ns) > 8 { opStats.Errors = ns[8] @@ -572,10 +576,10 @@ func parseNFSTransportStats(ss []string, statVersion string) (*NFSTransportStats } else if protocol == "udp" { expectedLength = fieldTransport10UDPLen } else { - return nil, fmt.Errorf("invalid NFS protocol \"%s\" in stats 1.0 statement: %v", protocol, ss) + return nil, fmt.Errorf("%w: Invalid NFS protocol \"%s\" in stats 1.0 statement: %v", ErrFileParse, protocol, ss) } if len(ss) != expectedLength { - return nil, fmt.Errorf("invalid NFS transport stats 1.0 statement: %v", ss) + return nil, fmt.Errorf("%w: Invalid NFS transport stats 1.0 statement: %v", ErrFileParse, ss) } case statVersion11: var expectedLength int @@ -584,13 +588,13 @@ func parseNFSTransportStats(ss []string, statVersion string) (*NFSTransportStats } else if protocol == "udp" { expectedLength = fieldTransport11UDPLen } else { - return nil, fmt.Errorf("invalid NFS protocol \"%s\" in stats 1.1 statement: %v", protocol, ss) + return nil, fmt.Errorf("%w: invalid NFS protocol \"%s\" in stats 1.1 statement: %v", ErrFileParse, protocol, ss) } if len(ss) != expectedLength { - return nil, fmt.Errorf("invalid NFS transport stats 1.1 statement: %v", ss) + return nil, fmt.Errorf("%w: invalid NFS transport stats 1.1 statement: %v", ErrFileParse, ss) } default: - return nil, fmt.Errorf("unrecognized NFS transport stats version: %q", statVersion) + return nil, fmt.Errorf("%s: Unrecognized NFS transport stats version: %q", ErrFileParse, statVersion) } // Allocate enough for v1.1 stats since zero value for v1.1 stats will be okay diff --git a/vendor/github.com/prometheus/procfs/net_conntrackstat.go b/vendor/github.com/prometheus/procfs/net_conntrackstat.go index 8300daca0..fdfa45611 100644 --- a/vendor/github.com/prometheus/procfs/net_conntrackstat.go +++ b/vendor/github.com/prometheus/procfs/net_conntrackstat.go @@ -18,7 +18,6 @@ import ( "bytes" "fmt" "io" - "strconv" "strings" "github.com/prometheus/procfs/internal/util" @@ -28,9 +27,13 @@ import ( // and contains netfilter conntrack statistics at one CPU core. type ConntrackStatEntry struct { Entries uint64 + Searched uint64 Found uint64 + New uint64 Invalid uint64 Ignore uint64 + Delete uint64 + DeleteList uint64 Insert uint64 InsertFailed uint64 Drop uint64 @@ -55,7 +58,7 @@ func readConntrackStat(path string) ([]ConntrackStatEntry, error) { stat, err := parseConntrackStat(bytes.NewReader(b)) if err != nil { - return nil, fmt.Errorf("failed to read conntrack stats from %q: %w", path, err) + return nil, fmt.Errorf("%s: Cannot read file: %v: %w", ErrFileRead, path, err) } return stat, nil @@ -81,73 +84,35 @@ func parseConntrackStat(r io.Reader) ([]ConntrackStatEntry, error) { // Parses a ConntrackStatEntry from given array of fields. func parseConntrackStatEntry(fields []string) (*ConntrackStatEntry, error) { - if len(fields) != 17 { - return nil, fmt.Errorf("invalid conntrackstat entry, missing fields") - } - entry := &ConntrackStatEntry{} - - entries, err := parseConntrackStatField(fields[0]) - if err != nil { - return nil, err - } - entry.Entries = entries - - found, err := parseConntrackStatField(fields[2]) - if err != nil { - return nil, err - } - entry.Found = found - - invalid, err := parseConntrackStatField(fields[4]) - if err != nil { - return nil, err - } - entry.Invalid = invalid - - ignore, err := parseConntrackStatField(fields[5]) - if err != nil { - return nil, err - } - entry.Ignore = ignore - - insert, err := parseConntrackStatField(fields[8]) + entries, err := util.ParseHexUint64s(fields) if err != nil { - return nil, err + return nil, fmt.Errorf("%s: Cannot parse entry: %d: %w", ErrFileParse, entries, err) } - entry.Insert = insert - - insertFailed, err := parseConntrackStatField(fields[9]) - if err != nil { - return nil, err + numEntries := len(entries) + if numEntries < 16 || numEntries > 17 { + return nil, + fmt.Errorf("%w: invalid conntrackstat entry, invalid number of fields: %d", ErrFileParse, numEntries) } - entry.InsertFailed = insertFailed - drop, err := parseConntrackStatField(fields[10]) - if err != nil { - return nil, err + stats := &ConntrackStatEntry{ + Entries: *entries[0], + Searched: *entries[1], + Found: *entries[2], + New: *entries[3], + Invalid: *entries[4], + Ignore: *entries[5], + Delete: *entries[6], + DeleteList: *entries[7], + Insert: *entries[8], + InsertFailed: *entries[9], + Drop: *entries[10], + EarlyDrop: *entries[11], } - entry.Drop = drop - earlyDrop, err := parseConntrackStatField(fields[11]) - if err != nil { - return nil, err + // Ignore missing search_restart on Linux < 2.6.35. + if numEntries == 17 { + stats.SearchRestart = *entries[16] } - entry.EarlyDrop = earlyDrop - searchRestart, err := parseConntrackStatField(fields[16]) - if err != nil { - return nil, err - } - entry.SearchRestart = searchRestart - - return entry, nil -} - -// Parses a uint64 from given hex in string. -func parseConntrackStatField(field string) (uint64, error) { - val, err := strconv.ParseUint(field, 16, 64) - if err != nil { - return 0, fmt.Errorf("couldn't parse %q field: %w", field, err) - } - return val, err + return stats, nil } diff --git a/vendor/github.com/prometheus/procfs/net_ip_socket.go b/vendor/github.com/prometheus/procfs/net_ip_socket.go index 7fd57d7f4..4da81ea57 100644 --- a/vendor/github.com/prometheus/procfs/net_ip_socket.go +++ b/vendor/github.com/prometheus/procfs/net_ip_socket.go @@ -130,7 +130,7 @@ func parseIP(hexIP string) (net.IP, error) { var byteIP []byte byteIP, err := hex.DecodeString(hexIP) if err != nil { - return nil, fmt.Errorf("cannot parse address field in socket line %q", hexIP) + return nil, fmt.Errorf("%s: Cannot parse socket field in %q: %w", ErrFileParse, hexIP, err) } switch len(byteIP) { case 4: @@ -144,7 +144,7 @@ func parseIP(hexIP string) (net.IP, error) { } return i, nil default: - return nil, fmt.Errorf("Unable to parse IP %s", hexIP) + return nil, fmt.Errorf("%s: Unable to parse IP %s: %w", ErrFileParse, hexIP, nil) } } @@ -153,7 +153,8 @@ func parseNetIPSocketLine(fields []string) (*netIPSocketLine, error) { line := &netIPSocketLine{} if len(fields) < 10 { return nil, fmt.Errorf( - "cannot parse net socket line as it has less then 10 columns %q", + "%w: Less than 10 columns found %q", + ErrFileParse, strings.Join(fields, " "), ) } @@ -162,64 +163,65 @@ func parseNetIPSocketLine(fields []string) (*netIPSocketLine, error) { // sl s := strings.Split(fields[0], ":") if len(s) != 2 { - return nil, fmt.Errorf("cannot parse sl field in socket line %q", fields[0]) + return nil, fmt.Errorf("%w: Unable to parse sl field in line %q", ErrFileParse, fields[0]) } if line.Sl, err = strconv.ParseUint(s[0], 0, 64); err != nil { - return nil, fmt.Errorf("cannot parse sl value in socket line: %w", err) + return nil, fmt.Errorf("%s: Unable to parse sl field in %q: %w", ErrFileParse, line.Sl, err) } // local_address l := strings.Split(fields[1], ":") if len(l) != 2 { - return nil, fmt.Errorf("cannot parse local_address field in socket line %q", fields[1]) + return nil, fmt.Errorf("%w: Unable to parse local_address field in %q", ErrFileParse, fields[1]) } if line.LocalAddr, err = parseIP(l[0]); err != nil { return nil, err } if line.LocalPort, err = strconv.ParseUint(l[1], 16, 64); err != nil { - return nil, fmt.Errorf("cannot parse local_address port value in socket line: %w", err) + return nil, fmt.Errorf("%s: Unable to parse local_address port value line %q: %w", ErrFileParse, line.LocalPort, err) } // remote_address r := strings.Split(fields[2], ":") if len(r) != 2 { - return nil, fmt.Errorf("cannot parse rem_address field in socket line %q", fields[1]) + return nil, fmt.Errorf("%w: Unable to parse rem_address field in %q", ErrFileParse, fields[1]) } if line.RemAddr, err = parseIP(r[0]); err != nil { return nil, err } if line.RemPort, err = strconv.ParseUint(r[1], 16, 64); err != nil { - return nil, fmt.Errorf("cannot parse rem_address port value in socket line: %w", err) + return nil, fmt.Errorf("%s: Cannot parse rem_address port value in %q: %w", ErrFileParse, line.RemPort, err) } // st if line.St, err = strconv.ParseUint(fields[3], 16, 64); err != nil { - return nil, fmt.Errorf("cannot parse st value in socket line: %w", err) + return nil, fmt.Errorf("%s: Cannot parse st value in %q: %w", ErrFileParse, line.St, err) } // tx_queue and rx_queue q := strings.Split(fields[4], ":") if len(q) != 2 { return nil, fmt.Errorf( - "cannot parse tx/rx queues in socket line as it has a missing colon %q", + "%w: Missing colon for tx/rx queues in socket line %q", + ErrFileParse, fields[4], ) } if line.TxQueue, err = strconv.ParseUint(q[0], 16, 64); err != nil { - return nil, fmt.Errorf("cannot parse tx_queue value in socket line: %w", err) + return nil, fmt.Errorf("%s: Cannot parse tx_queue value in %q: %w", ErrFileParse, line.TxQueue, err) } if line.RxQueue, err = strconv.ParseUint(q[1], 16, 64); err != nil { - return nil, fmt.Errorf("cannot parse rx_queue value in socket line: %w", err) + return nil, fmt.Errorf("%s: Cannot parse trx_queue value in %q: %w", ErrFileParse, line.RxQueue, err) } // uid if line.UID, err = strconv.ParseUint(fields[7], 0, 64); err != nil { - return nil, fmt.Errorf("cannot parse uid value in socket line: %w", err) + return nil, fmt.Errorf("%s: Cannot parse UID value in %q: %w", ErrFileParse, line.UID, err) } // inode if line.Inode, err = strconv.ParseUint(fields[9], 0, 64); err != nil { - return nil, fmt.Errorf("cannot parse inode value in socket line: %w", err) + return nil, fmt.Errorf("%s: Cannot parse inode value in %q: %w", ErrFileParse, line.Inode, err) } return line, nil diff --git a/vendor/github.com/prometheus/procfs/net_protocols.go b/vendor/github.com/prometheus/procfs/net_protocols.go index 374b6f73f..b6c77b709 100644 --- a/vendor/github.com/prometheus/procfs/net_protocols.go +++ b/vendor/github.com/prometheus/procfs/net_protocols.go @@ -131,7 +131,7 @@ func (ps NetProtocolStats) parseLine(rawLine string) (*NetProtocolStatLine, erro } else if fields[6] == disabled { line.Slab = false } else { - return nil, fmt.Errorf("unable to parse capability for protocol: %s", line.Name) + return nil, fmt.Errorf("%w: capability for protocol: %s", ErrFileParse, line.Name) } line.ModuleName = fields[7] @@ -173,7 +173,7 @@ func (pc *NetProtocolCapabilities) parseCapabilities(capabilities []string) erro } else if capabilities[i] == "n" { *capabilityFields[i] = false } else { - return fmt.Errorf("unable to parse capability block for protocol: position %d", i) + return fmt.Errorf("%w: capability block for protocol: position %d", ErrFileParse, i) } } return nil diff --git a/vendor/github.com/prometheus/procfs/net_route.go b/vendor/github.com/prometheus/procfs/net_route.go new file mode 100644 index 000000000..deb7029fe --- /dev/null +++ b/vendor/github.com/prometheus/procfs/net_route.go @@ -0,0 +1,143 @@ +// Copyright 2023 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package procfs + +import ( + "bufio" + "bytes" + "fmt" + "io" + "strconv" + "strings" + + "github.com/prometheus/procfs/internal/util" +) + +const ( + blackholeRepresentation string = "*" + blackholeIfaceName string = "blackhole" + routeLineColumns int = 11 +) + +// A NetRouteLine represents one line from net/route. +type NetRouteLine struct { + Iface string + Destination uint32 + Gateway uint32 + Flags uint32 + RefCnt uint32 + Use uint32 + Metric uint32 + Mask uint32 + MTU uint32 + Window uint32 + IRTT uint32 +} + +func (fs FS) NetRoute() ([]NetRouteLine, error) { + return readNetRoute(fs.proc.Path("net", "route")) +} + +func readNetRoute(path string) ([]NetRouteLine, error) { + b, err := util.ReadFileNoStat(path) + if err != nil { + return nil, err + } + + routelines, err := parseNetRoute(bytes.NewReader(b)) + if err != nil { + return nil, fmt.Errorf("failed to read net route from %s: %w", path, err) + } + return routelines, nil +} + +func parseNetRoute(r io.Reader) ([]NetRouteLine, error) { + var routelines []NetRouteLine + + scanner := bufio.NewScanner(r) + scanner.Scan() + for scanner.Scan() { + fields := strings.Fields(scanner.Text()) + routeline, err := parseNetRouteLine(fields) + if err != nil { + return nil, err + } + routelines = append(routelines, *routeline) + } + return routelines, nil +} + +func parseNetRouteLine(fields []string) (*NetRouteLine, error) { + if len(fields) != routeLineColumns { + return nil, fmt.Errorf("invalid routeline, num of digits: %d", len(fields)) + } + iface := fields[0] + if iface == blackholeRepresentation { + iface = blackholeIfaceName + } + destination, err := strconv.ParseUint(fields[1], 16, 32) + if err != nil { + return nil, err + } + gateway, err := strconv.ParseUint(fields[2], 16, 32) + if err != nil { + return nil, err + } + flags, err := strconv.ParseUint(fields[3], 10, 32) + if err != nil { + return nil, err + } + refcnt, err := strconv.ParseUint(fields[4], 10, 32) + if err != nil { + return nil, err + } + use, err := strconv.ParseUint(fields[5], 10, 32) + if err != nil { + return nil, err + } + metric, err := strconv.ParseUint(fields[6], 10, 32) + if err != nil { + return nil, err + } + mask, err := strconv.ParseUint(fields[7], 16, 32) + if err != nil { + return nil, err + } + mtu, err := strconv.ParseUint(fields[8], 10, 32) + if err != nil { + return nil, err + } + window, err := strconv.ParseUint(fields[9], 10, 32) + if err != nil { + return nil, err + } + irtt, err := strconv.ParseUint(fields[10], 10, 32) + if err != nil { + return nil, err + } + routeline := &NetRouteLine{ + Iface: iface, + Destination: uint32(destination), + Gateway: uint32(gateway), + Flags: uint32(flags), + RefCnt: uint32(refcnt), + Use: uint32(use), + Metric: uint32(metric), + Mask: uint32(mask), + MTU: uint32(mtu), + Window: uint32(window), + IRTT: uint32(irtt), + } + return routeline, nil +} diff --git a/vendor/github.com/prometheus/procfs/net_sockstat.go b/vendor/github.com/prometheus/procfs/net_sockstat.go index e36f4872d..360e36af7 100644 --- a/vendor/github.com/prometheus/procfs/net_sockstat.go +++ b/vendor/github.com/prometheus/procfs/net_sockstat.go @@ -16,7 +16,6 @@ package procfs import ( "bufio" "bytes" - "errors" "fmt" "io" "strings" @@ -70,7 +69,7 @@ func readSockstat(name string) (*NetSockstat, error) { stat, err := parseSockstat(bytes.NewReader(b)) if err != nil { - return nil, fmt.Errorf("failed to read sockstats from %q: %w", name, err) + return nil, fmt.Errorf("%s: sockstats from %q: %w", ErrFileRead, name, err) } return stat, nil @@ -84,13 +83,13 @@ func parseSockstat(r io.Reader) (*NetSockstat, error) { // Expect a minimum of a protocol and one key/value pair. fields := strings.Split(s.Text(), " ") if len(fields) < 3 { - return nil, fmt.Errorf("malformed sockstat line: %q", s.Text()) + return nil, fmt.Errorf("%w: Malformed sockstat line: %q", ErrFileParse, s.Text()) } // The remaining fields are key/value pairs. kvs, err := parseSockstatKVs(fields[1:]) if err != nil { - return nil, fmt.Errorf("error parsing sockstat key/value pairs from %q: %w", s.Text(), err) + return nil, fmt.Errorf("%s: sockstat key/value pairs from %q: %w", ErrFileParse, s.Text(), err) } // The first field is the protocol. We must trim its colon suffix. @@ -119,7 +118,7 @@ func parseSockstat(r io.Reader) (*NetSockstat, error) { // parseSockstatKVs parses a string slice into a map of key/value pairs. func parseSockstatKVs(kvs []string) (map[string]int, error) { if len(kvs)%2 != 0 { - return nil, errors.New("odd number of fields in key/value pairs") + return nil, fmt.Errorf("%w:: Odd number of fields in key/value pairs %q", ErrFileParse, kvs) } // Iterate two values at a time to gather key/value pairs. diff --git a/vendor/github.com/prometheus/procfs/net_softnet.go b/vendor/github.com/prometheus/procfs/net_softnet.go index 06b7b8f21..c77085291 100644 --- a/vendor/github.com/prometheus/procfs/net_softnet.go +++ b/vendor/github.com/prometheus/procfs/net_softnet.go @@ -64,7 +64,7 @@ func (fs FS) NetSoftnetStat() ([]SoftnetStat, error) { entries, err := parseSoftnet(bytes.NewReader(b)) if err != nil { - return nil, fmt.Errorf("failed to parse /proc/net/softnet_stat: %w", err) + return nil, fmt.Errorf("%s: /proc/net/softnet_stat: %w", ErrFileParse, err) } return entries, nil @@ -76,13 +76,14 @@ func parseSoftnet(r io.Reader) ([]SoftnetStat, error) { s := bufio.NewScanner(r) var stats []SoftnetStat + cpuIndex := 0 for s.Scan() { columns := strings.Fields(s.Text()) width := len(columns) softnetStat := SoftnetStat{} if width < minColumns { - return nil, fmt.Errorf("%d columns were detected, but at least %d were expected", width, minColumns) + return nil, fmt.Errorf("%w: detected %d columns, but expected at least %d", ErrFileParse, width, minColumns) } // Linux 2.6.23 https://elixir.bootlin.com/linux/v2.6.23/source/net/core/dev.c#L2347 @@ -127,9 +128,13 @@ func parseSoftnet(r io.Reader) ([]SoftnetStat, error) { softnetStat.SoftnetBacklogLen = us[0] softnetStat.Index = us[1] + } else { + // For older kernels, create the Index based on the scan line number. + softnetStat.Index = uint32(cpuIndex) } softnetStat.Width = width stats = append(stats, softnetStat) + cpuIndex++ } return stats, nil diff --git a/vendor/github.com/prometheus/procfs/net_unix.go b/vendor/github.com/prometheus/procfs/net_unix.go index 98aa8e1c3..acbbc57ea 100644 --- a/vendor/github.com/prometheus/procfs/net_unix.go +++ b/vendor/github.com/prometheus/procfs/net_unix.go @@ -108,14 +108,14 @@ func parseNetUNIX(r io.Reader) (*NetUNIX, error) { line := s.Text() item, err := nu.parseLine(line, hasInode, minFields) if err != nil { - return nil, fmt.Errorf("failed to parse /proc/net/unix data %q: %w", line, err) + return nil, fmt.Errorf("%s: /proc/net/unix encountered data %q: %w", ErrFileParse, line, err) } nu.Rows = append(nu.Rows, item) } if err := s.Err(); err != nil { - return nil, fmt.Errorf("failed to scan /proc/net/unix data: %w", err) + return nil, fmt.Errorf("%s: /proc/net/unix encountered data: %w", ErrFileParse, err) } return &nu, nil @@ -126,7 +126,7 @@ func (u *NetUNIX) parseLine(line string, hasInode bool, min int) (*NetUNIXLine, l := len(fields) if l < min { - return nil, fmt.Errorf("expected at least %d fields but got %d", min, l) + return nil, fmt.Errorf("%w: expected at least %d fields but got %d", ErrFileParse, min, l) } // Field offsets are as follows: @@ -136,29 +136,29 @@ func (u *NetUNIX) parseLine(line string, hasInode bool, min int) (*NetUNIXLine, users, err := u.parseUsers(fields[1]) if err != nil { - return nil, fmt.Errorf("failed to parse ref count %q: %w", fields[1], err) + return nil, fmt.Errorf("%s: ref count %q: %w", ErrFileParse, fields[1], err) } flags, err := u.parseFlags(fields[3]) if err != nil { - return nil, fmt.Errorf("failed to parse flags %q: %w", fields[3], err) + return nil, fmt.Errorf("%s: Unable to parse flags %q: %w", ErrFileParse, fields[3], err) } typ, err := u.parseType(fields[4]) if err != nil { - return nil, fmt.Errorf("failed to parse type %q: %w", fields[4], err) + return nil, fmt.Errorf("%s: Failed to parse type %q: %w", ErrFileParse, fields[4], err) } state, err := u.parseState(fields[5]) if err != nil { - return nil, fmt.Errorf("failed to parse state %q: %w", fields[5], err) + return nil, fmt.Errorf("%s: Failed to parse state %q: %w", ErrFileParse, fields[5], err) } var inode uint64 if hasInode { inode, err = u.parseInode(fields[6]) if err != nil { - return nil, fmt.Errorf("failed to parse inode %q: %w", fields[6], err) + return nil, fmt.Errorf("%s failed to parse inode %q: %w", ErrFileParse, fields[6], err) } } diff --git a/vendor/github.com/prometheus/procfs/net_wireless.go b/vendor/github.com/prometheus/procfs/net_wireless.go new file mode 100644 index 000000000..7443edca9 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/net_wireless.go @@ -0,0 +1,182 @@ +// Copyright 2023 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package procfs + +import ( + "bufio" + "bytes" + "fmt" + "io" + "strconv" + "strings" + + "github.com/prometheus/procfs/internal/util" +) + +// Wireless models the content of /proc/net/wireless. +type Wireless struct { + Name string + + // Status is the current 4-digit hex value status of the interface. + Status uint64 + + // QualityLink is the link quality. + QualityLink int + + // QualityLevel is the signal gain (dBm). + QualityLevel int + + // QualityNoise is the signal noise baseline (dBm). + QualityNoise int + + // DiscardedNwid is the number of discarded packets with wrong nwid/essid. + DiscardedNwid int + + // DiscardedCrypt is the number of discarded packets with wrong code/decode (WEP). + DiscardedCrypt int + + // DiscardedFrag is the number of discarded packets that can't perform MAC reassembly. + DiscardedFrag int + + // DiscardedRetry is the number of discarded packets that reached max MAC retries. + DiscardedRetry int + + // DiscardedMisc is the number of discarded packets for other reasons. + DiscardedMisc int + + // MissedBeacon is the number of missed beacons/superframe. + MissedBeacon int +} + +// Wireless returns kernel wireless statistics. +func (fs FS) Wireless() ([]*Wireless, error) { + b, err := util.ReadFileNoStat(fs.proc.Path("net/wireless")) + if err != nil { + return nil, err + } + + m, err := parseWireless(bytes.NewReader(b)) + if err != nil { + return nil, fmt.Errorf("%s: wireless: %w", ErrFileParse, err) + } + + return m, nil +} + +// parseWireless parses the contents of /proc/net/wireless. +/* +Inter-| sta-| Quality | Discarded packets | Missed | WE +face | tus | link level noise | nwid crypt frag retry misc | beacon | 22 + eth1: 0000 5. -256. -10. 0 1 0 3 0 0 + eth2: 0000 5. -256. -20. 0 2 0 4 0 0 +*/ +func parseWireless(r io.Reader) ([]*Wireless, error) { + var ( + interfaces []*Wireless + scanner = bufio.NewScanner(r) + ) + + for n := 0; scanner.Scan(); n++ { + // Skip the 2 header lines. + if n < 2 { + continue + } + + line := scanner.Text() + + parts := strings.Split(line, ":") + if len(parts) != 2 { + return nil, fmt.Errorf("%w: expected 2 parts after splitting line by ':', got %d for line %q", ErrFileParse, len(parts), line) + } + + name := strings.TrimSpace(parts[0]) + stats := strings.Fields(parts[1]) + + if len(stats) < 10 { + return nil, fmt.Errorf("%w: invalid number of fields in line %d, expected 10+, got %d: %q", ErrFileParse, n, len(stats), line) + } + + status, err := strconv.ParseUint(stats[0], 16, 16) + if err != nil { + return nil, fmt.Errorf("%w: invalid status in line %d: %q", ErrFileParse, n, line) + } + + qlink, err := strconv.Atoi(strings.TrimSuffix(stats[1], ".")) + if err != nil { + return nil, fmt.Errorf("%s: parse Quality:link as integer %q: %w", ErrFileParse, qlink, err) + } + + qlevel, err := strconv.Atoi(strings.TrimSuffix(stats[2], ".")) + if err != nil { + return nil, fmt.Errorf("%s: Quality:level as integer %q: %w", ErrFileParse, qlevel, err) + } + + qnoise, err := strconv.Atoi(strings.TrimSuffix(stats[3], ".")) + if err != nil { + return nil, fmt.Errorf("%s: Quality:noise as integer %q: %w", ErrFileParse, qnoise, err) + } + + dnwid, err := strconv.Atoi(stats[4]) + if err != nil { + return nil, fmt.Errorf("%s: Discarded:nwid as integer %q: %w", ErrFileParse, dnwid, err) + } + + dcrypt, err := strconv.Atoi(stats[5]) + if err != nil { + return nil, fmt.Errorf("%s: Discarded:crypt as integer %q: %w", ErrFileParse, dcrypt, err) + } + + dfrag, err := strconv.Atoi(stats[6]) + if err != nil { + return nil, fmt.Errorf("%s: Discarded:frag as integer %q: %w", ErrFileParse, dfrag, err) + } + + dretry, err := strconv.Atoi(stats[7]) + if err != nil { + return nil, fmt.Errorf("%s: Discarded:retry as integer %q: %w", ErrFileParse, dretry, err) + } + + dmisc, err := strconv.Atoi(stats[8]) + if err != nil { + return nil, fmt.Errorf("%s: Discarded:misc as integer %q: %w", ErrFileParse, dmisc, err) + } + + mbeacon, err := strconv.Atoi(stats[9]) + if err != nil { + return nil, fmt.Errorf("%s: Missed:beacon as integer %q: %w", ErrFileParse, mbeacon, err) + } + + w := &Wireless{ + Name: name, + Status: status, + QualityLink: qlink, + QualityLevel: qlevel, + QualityNoise: qnoise, + DiscardedNwid: dnwid, + DiscardedCrypt: dcrypt, + DiscardedFrag: dfrag, + DiscardedRetry: dretry, + DiscardedMisc: dmisc, + MissedBeacon: mbeacon, + } + + interfaces = append(interfaces, w) + } + + if err := scanner.Err(); err != nil { + return nil, fmt.Errorf("%s: Failed to scan /proc/net/wireless: %w", ErrFileRead, err) + } + + return interfaces, nil +} diff --git a/vendor/github.com/prometheus/procfs/net_xfrm.go b/vendor/github.com/prometheus/procfs/net_xfrm.go index f9d9d243d..932ef2046 100644 --- a/vendor/github.com/prometheus/procfs/net_xfrm.go +++ b/vendor/github.com/prometheus/procfs/net_xfrm.go @@ -115,7 +115,7 @@ func (fs FS) NewXfrmStat() (XfrmStat, error) { fields := strings.Fields(s.Text()) if len(fields) != 2 { - return XfrmStat{}, fmt.Errorf("couldn't parse %q line %q", file.Name(), s.Text()) + return XfrmStat{}, fmt.Errorf("%w: %q line %q", ErrFileParse, file.Name(), s.Text()) } name := fields[0] diff --git a/vendor/github.com/prometheus/procfs/netstat.go b/vendor/github.com/prometheus/procfs/netstat.go index 5cc40aef5..742dff453 100644 --- a/vendor/github.com/prometheus/procfs/netstat.go +++ b/vendor/github.com/prometheus/procfs/netstat.go @@ -15,7 +15,6 @@ package procfs import ( "bufio" - "io" "os" "path/filepath" "strconv" @@ -38,12 +37,7 @@ func (fs FS) NetStat() ([]NetStat, error) { var netStatsTotal []NetStat for _, filePath := range statFiles { - file, err := os.Open(filePath) - if err != nil { - return nil, err - } - - procNetstat, err := parseNetstat(file) + procNetstat, err := parseNetstat(filePath) if err != nil { return nil, err } @@ -56,14 +50,17 @@ func (fs FS) NetStat() ([]NetStat, error) { // parseNetstat parses the metrics from `/proc/net/stat/` file // and returns a NetStat structure. -func parseNetstat(r io.Reader) (NetStat, error) { - var ( - scanner = bufio.NewScanner(r) - netStat = NetStat{ - Stats: make(map[string][]uint64), - } - ) +func parseNetstat(filePath string) (NetStat, error) { + netStat := NetStat{ + Stats: make(map[string][]uint64), + } + file, err := os.Open(filePath) + if err != nil { + return netStat, err + } + defer file.Close() + scanner := bufio.NewScanner(file) scanner.Scan() // First string is always a header for stats diff --git a/vendor/github.com/prometheus/procfs/proc.go b/vendor/github.com/prometheus/procfs/proc.go index c30223af7..d1f71caa5 100644 --- a/vendor/github.com/prometheus/procfs/proc.go +++ b/vendor/github.com/prometheus/procfs/proc.go @@ -15,13 +15,13 @@ package procfs import ( "bytes" + "errors" "fmt" "io" "os" "strconv" "strings" - "github.com/prometheus/procfs/internal/fs" "github.com/prometheus/procfs/internal/util" ) @@ -30,12 +30,18 @@ type Proc struct { // The process ID. PID int - fs fs.FS + fs FS } // Procs represents a list of Proc structs. type Procs []Proc +var ( + ErrFileParse = errors.New("Error Parsing File") + ErrFileRead = errors.New("Error Reading File") + ErrMountPoint = errors.New("Error Accessing Mount point") +) + func (p Procs) Len() int { return len(p) } func (p Procs) Swap(i, j int) { p[i], p[j] = p[j], p[i] } func (p Procs) Less(i, j int) bool { return p[i].PID < p[j].PID } @@ -43,7 +49,7 @@ func (p Procs) Less(i, j int) bool { return p[i].PID < p[j].PID } // Self returns a process for the current process read via /proc/self. func Self() (Proc, error) { fs, err := NewFS(DefaultMountPoint) - if err != nil { + if err != nil || errors.Unwrap(err) == ErrMountPoint { return Proc{}, err } return fs.Self() @@ -92,7 +98,7 @@ func (fs FS) Proc(pid int) (Proc, error) { if _, err := os.Stat(fs.proc.Path(strconv.Itoa(pid))); err != nil { return Proc{}, err } - return Proc{PID: pid, fs: fs.proc}, nil + return Proc{PID: pid, fs: fs}, nil } // AllProcs returns a list of all currently available processes. @@ -105,7 +111,7 @@ func (fs FS) AllProcs() (Procs, error) { names, err := d.Readdirnames(-1) if err != nil { - return Procs{}, fmt.Errorf("could not read %q: %w", d.Name(), err) + return Procs{}, fmt.Errorf("%s: Cannot read file: %v: %w", ErrFileRead, names, err) } p := Procs{} @@ -114,7 +120,7 @@ func (fs FS) AllProcs() (Procs, error) { if err != nil { continue } - p = append(p, Proc{PID: int(pid), fs: fs.proc}) + p = append(p, Proc{PID: int(pid), fs: fs}) } return p, nil @@ -206,7 +212,7 @@ func (p Proc) FileDescriptors() ([]uintptr, error) { for i, n := range names { fd, err := strconv.ParseInt(n, 10, 32) if err != nil { - return nil, fmt.Errorf("could not parse fd %q: %w", n, err) + return nil, fmt.Errorf("%s: Cannot parse line: %v: %w", ErrFileParse, i, err) } fds[i] = uintptr(fd) } @@ -237,6 +243,19 @@ func (p Proc) FileDescriptorTargets() ([]string, error) { // FileDescriptorsLen returns the number of currently open file descriptors of // a process. func (p Proc) FileDescriptorsLen() (int, error) { + // Use fast path if available (Linux v6.2): https://github.com/torvalds/linux/commit/f1f1f2569901 + if p.fs.isReal { + stat, err := os.Stat(p.path("fd")) + if err != nil { + return 0, err + } + + size := stat.Size() + if size > 0 { + return int(size), nil + } + } + fds, err := p.fileDescriptors() if err != nil { return 0, err @@ -278,14 +297,14 @@ func (p Proc) fileDescriptors() ([]string, error) { names, err := d.Readdirnames(-1) if err != nil { - return nil, fmt.Errorf("could not read %q: %w", d.Name(), err) + return nil, fmt.Errorf("%s: Cannot read file: %v: %w", ErrFileRead, names, err) } return names, nil } func (p Proc) path(pa ...string) string { - return p.fs.Path(append([]string{strconv.Itoa(p.PID)}, pa...)...) + return p.fs.proc.Path(append([]string{strconv.Itoa(p.PID)}, pa...)...) } // FileDescriptorsInfo retrieves information about all file descriptors of diff --git a/vendor/github.com/prometheus/procfs/proc_cgroup.go b/vendor/github.com/prometheus/procfs/proc_cgroup.go index ea83a75ff..daeed7f57 100644 --- a/vendor/github.com/prometheus/procfs/proc_cgroup.go +++ b/vendor/github.com/prometheus/procfs/proc_cgroup.go @@ -51,7 +51,7 @@ func parseCgroupString(cgroupStr string) (*Cgroup, error) { fields := strings.SplitN(cgroupStr, ":", 3) if len(fields) < 3 { - return nil, fmt.Errorf("at least 3 fields required, found %d fields in cgroup string: %s", len(fields), cgroupStr) + return nil, fmt.Errorf("%w: 3+ fields required, found %d fields in cgroup string: %s", ErrFileParse, len(fields), cgroupStr) } cgroup := &Cgroup{ @@ -60,7 +60,7 @@ func parseCgroupString(cgroupStr string) (*Cgroup, error) { } cgroup.HierarchyID, err = strconv.Atoi(fields[0]) if err != nil { - return nil, fmt.Errorf("failed to parse hierarchy ID") + return nil, fmt.Errorf("%w: hierarchy ID: %q", ErrFileParse, cgroup.HierarchyID) } if fields[1] != "" { ssNames := strings.Split(fields[1], ",") diff --git a/vendor/github.com/prometheus/procfs/proc_cgroups.go b/vendor/github.com/prometheus/procfs/proc_cgroups.go index 24d4dce9c..5dd493899 100644 --- a/vendor/github.com/prometheus/procfs/proc_cgroups.go +++ b/vendor/github.com/prometheus/procfs/proc_cgroups.go @@ -46,7 +46,7 @@ func parseCgroupSummaryString(CgroupSummaryStr string) (*CgroupSummary, error) { fields := strings.Fields(CgroupSummaryStr) // require at least 4 fields if len(fields) < 4 { - return nil, fmt.Errorf("at least 4 fields required, found %d fields in cgroup info string: %s", len(fields), CgroupSummaryStr) + return nil, fmt.Errorf("%w: 4+ fields required, found %d fields in cgroup info string: %s", ErrFileParse, len(fields), CgroupSummaryStr) } CgroupSummary := &CgroupSummary{ @@ -54,15 +54,15 @@ func parseCgroupSummaryString(CgroupSummaryStr string) (*CgroupSummary, error) { } CgroupSummary.Hierarchy, err = strconv.Atoi(fields[1]) if err != nil { - return nil, fmt.Errorf("failed to parse hierarchy ID") + return nil, fmt.Errorf("%w: Unable to parse hierarchy ID from %q", ErrFileParse, fields[1]) } CgroupSummary.Cgroups, err = strconv.Atoi(fields[2]) if err != nil { - return nil, fmt.Errorf("failed to parse Cgroup Num") + return nil, fmt.Errorf("%w: Unable to parse Cgroup Num from %q", ErrFileParse, fields[2]) } CgroupSummary.Enabled, err = strconv.Atoi(fields[3]) if err != nil { - return nil, fmt.Errorf("failed to parse Enabled") + return nil, fmt.Errorf("%w: Unable to parse Enabled from %q", ErrFileParse, fields[3]) } return CgroupSummary, nil } diff --git a/vendor/github.com/prometheus/procfs/proc_fdinfo.go b/vendor/github.com/prometheus/procfs/proc_fdinfo.go index 1bbdd4a8e..4b7933e4f 100644 --- a/vendor/github.com/prometheus/procfs/proc_fdinfo.go +++ b/vendor/github.com/prometheus/procfs/proc_fdinfo.go @@ -111,7 +111,7 @@ func parseInotifyInfo(line string) (*InotifyInfo, error) { } return i, nil } - return nil, fmt.Errorf("invalid inode entry: %q", line) + return nil, fmt.Errorf("%w: invalid inode entry: %q", ErrFileParse, line) } // ProcFDInfos represents a list of ProcFDInfo structs. diff --git a/vendor/github.com/prometheus/procfs/proc_interrupts.go b/vendor/github.com/prometheus/procfs/proc_interrupts.go index 9df79c237..86b4b4524 100644 --- a/vendor/github.com/prometheus/procfs/proc_interrupts.go +++ b/vendor/github.com/prometheus/procfs/proc_interrupts.go @@ -66,7 +66,7 @@ func parseInterrupts(r io.Reader) (Interrupts, error) { continue } if len(parts) < 2 { - return nil, fmt.Errorf("not enough fields in interrupts (expected at least 2 fields but got %d): %s", len(parts), parts) + return nil, fmt.Errorf("%w: Not enough fields in interrupts (expected 2+ fields but got %d): %s", ErrFileParse, len(parts), parts) } intName := parts[0][:len(parts[0])-1] // remove trailing : diff --git a/vendor/github.com/prometheus/procfs/proc_limits.go b/vendor/github.com/prometheus/procfs/proc_limits.go index 7a1388185..c86d815d7 100644 --- a/vendor/github.com/prometheus/procfs/proc_limits.go +++ b/vendor/github.com/prometheus/procfs/proc_limits.go @@ -103,7 +103,7 @@ func (p Proc) Limits() (ProcLimits, error) { //fields := limitsMatch.Split(s.Text(), limitsFields) fields := limitsMatch.FindStringSubmatch(s.Text()) if len(fields) != limitsFields { - return ProcLimits{}, fmt.Errorf("couldn't parse %q line %q", f.Name(), s.Text()) + return ProcLimits{}, fmt.Errorf("%w: couldn't parse %q line %q", ErrFileParse, f.Name(), s.Text()) } switch fields[1] { @@ -154,7 +154,7 @@ func parseUint(s string) (uint64, error) { } i, err := strconv.ParseUint(s, 10, 64) if err != nil { - return 0, fmt.Errorf("couldn't parse value %q: %w", s, err) + return 0, fmt.Errorf("%s: couldn't parse value %q: %w", ErrFileParse, s, err) } return i, nil } diff --git a/vendor/github.com/prometheus/procfs/proc_maps.go b/vendor/github.com/prometheus/procfs/proc_maps.go index f1bcbf32b..727549a13 100644 --- a/vendor/github.com/prometheus/procfs/proc_maps.go +++ b/vendor/github.com/prometheus/procfs/proc_maps.go @@ -65,7 +65,7 @@ type ProcMap struct { func parseDevice(s string) (uint64, error) { toks := strings.Split(s, ":") if len(toks) < 2 { - return 0, fmt.Errorf("unexpected number of fields") + return 0, fmt.Errorf("%w: unexpected number of fields, expected: 2, got: %q", ErrFileParse, len(toks)) } major, err := strconv.ParseUint(toks[0], 16, 0) @@ -95,7 +95,7 @@ func parseAddress(s string) (uintptr, error) { func parseAddresses(s string) (uintptr, uintptr, error) { toks := strings.Split(s, "-") if len(toks) < 2 { - return 0, 0, fmt.Errorf("invalid address") + return 0, 0, fmt.Errorf("%w: invalid address", ErrFileParse) } saddr, err := parseAddress(toks[0]) @@ -114,7 +114,7 @@ func parseAddresses(s string) (uintptr, uintptr, error) { // parsePermissions parses a token and returns any that are set. func parsePermissions(s string) (*ProcMapPermissions, error) { if len(s) < 4 { - return nil, fmt.Errorf("invalid permissions token") + return nil, fmt.Errorf("%w: invalid permissions token", ErrFileParse) } perms := ProcMapPermissions{} @@ -141,7 +141,7 @@ func parsePermissions(s string) (*ProcMapPermissions, error) { func parseProcMap(text string) (*ProcMap, error) { fields := strings.Fields(text) if len(fields) < 5 { - return nil, fmt.Errorf("truncated procmap entry") + return nil, fmt.Errorf("%w: truncated procmap entry", ErrFileParse) } saddr, eaddr, err := parseAddresses(fields[0]) diff --git a/vendor/github.com/prometheus/procfs/proc_netstat.go b/vendor/github.com/prometheus/procfs/proc_netstat.go index 6a43bb245..8e3ff4d79 100644 --- a/vendor/github.com/prometheus/procfs/proc_netstat.go +++ b/vendor/github.com/prometheus/procfs/proc_netstat.go @@ -195,8 +195,8 @@ func parseProcNetstat(r io.Reader, fileName string) (ProcNetstat, error) { // Remove trailing :. protocol := strings.TrimSuffix(nameParts[0], ":") if len(nameParts) != len(valueParts) { - return procNetstat, fmt.Errorf("mismatch field count mismatch in %s: %s", - fileName, protocol) + return procNetstat, fmt.Errorf("%w: mismatch field count mismatch in %s: %s", + ErrFileParse, fileName, protocol) } for i := 1; i < len(nameParts); i++ { value, err := strconv.ParseFloat(valueParts[i], 64) diff --git a/vendor/github.com/prometheus/procfs/proc_ns.go b/vendor/github.com/prometheus/procfs/proc_ns.go index 391b4cbd1..c22666750 100644 --- a/vendor/github.com/prometheus/procfs/proc_ns.go +++ b/vendor/github.com/prometheus/procfs/proc_ns.go @@ -40,7 +40,7 @@ func (p Proc) Namespaces() (Namespaces, error) { names, err := d.Readdirnames(-1) if err != nil { - return nil, fmt.Errorf("failed to read contents of ns dir: %w", err) + return nil, fmt.Errorf("%s: failed to read contents of ns dir: %w", ErrFileRead, err) } ns := make(Namespaces, len(names)) @@ -52,13 +52,13 @@ func (p Proc) Namespaces() (Namespaces, error) { fields := strings.SplitN(target, ":", 2) if len(fields) != 2 { - return nil, fmt.Errorf("failed to parse namespace type and inode from %q", target) + return nil, fmt.Errorf("%w: namespace type and inode from %q", ErrFileParse, target) } typ := fields[0] inode, err := strconv.ParseUint(strings.Trim(fields[1], "[]"), 10, 32) if err != nil { - return nil, fmt.Errorf("failed to parse inode from %q: %w", fields[1], err) + return nil, fmt.Errorf("%s: inode from %q: %w", ErrFileParse, fields[1], err) } ns[name] = Namespace{typ, uint32(inode)} diff --git a/vendor/github.com/prometheus/procfs/proc_psi.go b/vendor/github.com/prometheus/procfs/proc_psi.go index a68fe1529..fe9dbb425 100644 --- a/vendor/github.com/prometheus/procfs/proc_psi.go +++ b/vendor/github.com/prometheus/procfs/proc_psi.go @@ -61,14 +61,14 @@ type PSIStats struct { func (fs FS) PSIStatsForResource(resource string) (PSIStats, error) { data, err := util.ReadFileNoStat(fs.proc.Path(fmt.Sprintf("%s/%s", "pressure", resource))) if err != nil { - return PSIStats{}, fmt.Errorf("psi_stats: unavailable for %q: %w", resource, err) + return PSIStats{}, fmt.Errorf("%s: psi_stats: unavailable for %q: %w", ErrFileRead, resource, err) } - return parsePSIStats(resource, bytes.NewReader(data)) + return parsePSIStats(bytes.NewReader(data)) } // parsePSIStats parses the specified file for pressure stall information. -func parsePSIStats(resource string, r io.Reader) (PSIStats, error) { +func parsePSIStats(r io.Reader) (PSIStats, error) { psiStats := PSIStats{} scanner := bufio.NewScanner(r) diff --git a/vendor/github.com/prometheus/procfs/proc_smaps.go b/vendor/github.com/prometheus/procfs/proc_smaps.go index 0e97d9957..ad8785a40 100644 --- a/vendor/github.com/prometheus/procfs/proc_smaps.go +++ b/vendor/github.com/prometheus/procfs/proc_smaps.go @@ -135,12 +135,12 @@ func (s *ProcSMapsRollup) parseLine(line string) error { } vBytes := vKBytes * 1024 - s.addValue(k, v, vKBytes, vBytes) + s.addValue(k, vBytes) return nil } -func (s *ProcSMapsRollup) addValue(k string, vString string, vUint uint64, vUintBytes uint64) { +func (s *ProcSMapsRollup) addValue(k string, vUintBytes uint64) { switch k { case "Rss": s.Rss += vUintBytes diff --git a/vendor/github.com/prometheus/procfs/proc_snmp.go b/vendor/github.com/prometheus/procfs/proc_snmp.go index 6c46b7188..b9d2cf642 100644 --- a/vendor/github.com/prometheus/procfs/proc_snmp.go +++ b/vendor/github.com/prometheus/procfs/proc_snmp.go @@ -159,8 +159,8 @@ func parseSnmp(r io.Reader, fileName string) (ProcSnmp, error) { // Remove trailing :. protocol := strings.TrimSuffix(nameParts[0], ":") if len(nameParts) != len(valueParts) { - return procSnmp, fmt.Errorf("mismatch field count mismatch in %s: %s", - fileName, protocol) + return procSnmp, fmt.Errorf("%w: mismatch field count mismatch in %s: %s", + ErrFileParse, fileName, protocol) } for i := 1; i < len(nameParts); i++ { value, err := strconv.ParseFloat(valueParts[i], 64) diff --git a/vendor/github.com/prometheus/procfs/proc_stat.go b/vendor/github.com/prometheus/procfs/proc_stat.go index b278eb2c2..923e55005 100644 --- a/vendor/github.com/prometheus/procfs/proc_stat.go +++ b/vendor/github.com/prometheus/procfs/proc_stat.go @@ -18,7 +18,6 @@ import ( "fmt" "os" - "github.com/prometheus/procfs/internal/fs" "github.com/prometheus/procfs/internal/util" ) @@ -112,7 +111,7 @@ type ProcStat struct { // Aggregated block I/O delays, measured in clock ticks (centiseconds). DelayAcctBlkIOTicks uint64 - proc fs.FS + proc FS } // NewStat returns the current status information of the process. @@ -139,7 +138,7 @@ func (p Proc) Stat() (ProcStat, error) { ) if l < 0 || r < 0 { - return ProcStat{}, fmt.Errorf("unexpected format, couldn't extract comm %q", data) + return ProcStat{}, fmt.Errorf("%w: unexpected format, couldn't extract comm %q", ErrFileParse, data) } s.Comm = string(data[l+1 : r]) @@ -210,8 +209,7 @@ func (s ProcStat) ResidentMemory() int { // StartTime returns the unix timestamp of the process in seconds. func (s ProcStat) StartTime() (float64, error) { - fs := FS{proc: s.proc} - stat, err := fs.Stat() + stat, err := s.proc.Stat() if err != nil { return 0, err } diff --git a/vendor/github.com/prometheus/procfs/proc_status.go b/vendor/github.com/prometheus/procfs/proc_status.go index 3d8c06439..c055d075d 100644 --- a/vendor/github.com/prometheus/procfs/proc_status.go +++ b/vendor/github.com/prometheus/procfs/proc_status.go @@ -15,6 +15,7 @@ package procfs import ( "bytes" + "sort" "strconv" "strings" @@ -76,6 +77,9 @@ type ProcStatus struct { UIDs [4]string // GIDs of the process (Real, effective, saved set, and filesystem GIDs) GIDs [4]string + + // CpusAllowedList: List of cpu cores processes are allowed to run on. + CpusAllowedList []uint64 } // NewStatus returns the current status information of the process. @@ -161,10 +165,38 @@ func (s *ProcStatus) fillStatus(k string, vString string, vUint uint64, vUintByt s.VoluntaryCtxtSwitches = vUint case "nonvoluntary_ctxt_switches": s.NonVoluntaryCtxtSwitches = vUint + case "Cpus_allowed_list": + s.CpusAllowedList = calcCpusAllowedList(vString) } + } // TotalCtxtSwitches returns the total context switch. func (s ProcStatus) TotalCtxtSwitches() uint64 { return s.VoluntaryCtxtSwitches + s.NonVoluntaryCtxtSwitches } + +func calcCpusAllowedList(cpuString string) []uint64 { + s := strings.Split(cpuString, ",") + + var g []uint64 + + for _, cpu := range s { + // parse cpu ranges, example: 1-3=[1,2,3] + if l := strings.Split(strings.TrimSpace(cpu), "-"); len(l) > 1 { + startCPU, _ := strconv.ParseUint(l[0], 10, 64) + endCPU, _ := strconv.ParseUint(l[1], 10, 64) + + for i := startCPU; i <= endCPU; i++ { + g = append(g, i) + } + } else if len(l) == 1 { + cpu, _ := strconv.ParseUint(l[0], 10, 64) + g = append(g, cpu) + } + + } + + sort.Slice(g, func(i, j int) bool { return g[i] < g[j] }) + return g +} diff --git a/vendor/github.com/prometheus/procfs/proc_sys.go b/vendor/github.com/prometheus/procfs/proc_sys.go index d46533ebf..12c5bf05b 100644 --- a/vendor/github.com/prometheus/procfs/proc_sys.go +++ b/vendor/github.com/prometheus/procfs/proc_sys.go @@ -44,7 +44,7 @@ func (fs FS) SysctlInts(sysctl string) ([]int, error) { vp := util.NewValueParser(f) values[i] = vp.Int() if err := vp.Err(); err != nil { - return nil, fmt.Errorf("field %d in sysctl %s is not a valid int: %w", i, sysctl, err) + return nil, fmt.Errorf("%s: field %d in sysctl %s is not a valid int: %w", ErrFileParse, i, sysctl, err) } } return values, nil diff --git a/vendor/github.com/prometheus/procfs/slab.go b/vendor/github.com/prometheus/procfs/slab.go index bc9aaf5c2..8611c9017 100644 --- a/vendor/github.com/prometheus/procfs/slab.go +++ b/vendor/github.com/prometheus/procfs/slab.go @@ -68,7 +68,7 @@ func parseV21SlabEntry(line string) (*Slab, error) { l := slabSpace.ReplaceAllString(line, " ") s := strings.Split(l, " ") if len(s) != 16 { - return nil, fmt.Errorf("unable to parse: %q", line) + return nil, fmt.Errorf("%w: unable to parse: %q", ErrFileParse, line) } var err error i := &Slab{Name: s[0]} diff --git a/vendor/github.com/prometheus/procfs/softirqs.go b/vendor/github.com/prometheus/procfs/softirqs.go index 559129cbc..b8fad677d 100644 --- a/vendor/github.com/prometheus/procfs/softirqs.go +++ b/vendor/github.com/prometheus/procfs/softirqs.go @@ -57,7 +57,7 @@ func parseSoftirqs(r io.Reader) (Softirqs, error) { ) if !scanner.Scan() { - return Softirqs{}, fmt.Errorf("softirqs empty") + return Softirqs{}, fmt.Errorf("%w: softirqs empty", ErrFileRead) } for scanner.Scan() { @@ -74,7 +74,7 @@ func parseSoftirqs(r io.Reader) (Softirqs, error) { softirqs.Hi = make([]uint64, len(perCPU)) for i, count := range perCPU { if softirqs.Hi[i], err = strconv.ParseUint(count, 10, 64); err != nil { - return Softirqs{}, fmt.Errorf("couldn't parse %q (HI%d): %w", count, i, err) + return Softirqs{}, fmt.Errorf("%s: couldn't parse %q (HI%d): %w", ErrFileParse, count, i, err) } } case parts[0] == "TIMER:": @@ -82,7 +82,7 @@ func parseSoftirqs(r io.Reader) (Softirqs, error) { softirqs.Timer = make([]uint64, len(perCPU)) for i, count := range perCPU { if softirqs.Timer[i], err = strconv.ParseUint(count, 10, 64); err != nil { - return Softirqs{}, fmt.Errorf("couldn't parse %q (TIMER%d): %w", count, i, err) + return Softirqs{}, fmt.Errorf("%s: couldn't parse %q (TIMER%d): %w", ErrFileParse, count, i, err) } } case parts[0] == "NET_TX:": @@ -90,7 +90,7 @@ func parseSoftirqs(r io.Reader) (Softirqs, error) { softirqs.NetTx = make([]uint64, len(perCPU)) for i, count := range perCPU { if softirqs.NetTx[i], err = strconv.ParseUint(count, 10, 64); err != nil { - return Softirqs{}, fmt.Errorf("couldn't parse %q (NET_TX%d): %w", count, i, err) + return Softirqs{}, fmt.Errorf("%s: couldn't parse %q (NET_TX%d): %w", ErrFileParse, count, i, err) } } case parts[0] == "NET_RX:": @@ -98,7 +98,7 @@ func parseSoftirqs(r io.Reader) (Softirqs, error) { softirqs.NetRx = make([]uint64, len(perCPU)) for i, count := range perCPU { if softirqs.NetRx[i], err = strconv.ParseUint(count, 10, 64); err != nil { - return Softirqs{}, fmt.Errorf("couldn't parse %q (NET_RX%d): %w", count, i, err) + return Softirqs{}, fmt.Errorf("%s: couldn't parse %q (NET_RX%d): %w", ErrFileParse, count, i, err) } } case parts[0] == "BLOCK:": @@ -106,7 +106,7 @@ func parseSoftirqs(r io.Reader) (Softirqs, error) { softirqs.Block = make([]uint64, len(perCPU)) for i, count := range perCPU { if softirqs.Block[i], err = strconv.ParseUint(count, 10, 64); err != nil { - return Softirqs{}, fmt.Errorf("couldn't parse %q (BLOCK%d): %w", count, i, err) + return Softirqs{}, fmt.Errorf("%s: couldn't parse %q (BLOCK%d): %w", ErrFileParse, count, i, err) } } case parts[0] == "IRQ_POLL:": @@ -114,7 +114,7 @@ func parseSoftirqs(r io.Reader) (Softirqs, error) { softirqs.IRQPoll = make([]uint64, len(perCPU)) for i, count := range perCPU { if softirqs.IRQPoll[i], err = strconv.ParseUint(count, 10, 64); err != nil { - return Softirqs{}, fmt.Errorf("couldn't parse %q (IRQ_POLL%d): %w", count, i, err) + return Softirqs{}, fmt.Errorf("%s: couldn't parse %q (IRQ_POLL%d): %w", ErrFileParse, count, i, err) } } case parts[0] == "TASKLET:": @@ -122,7 +122,7 @@ func parseSoftirqs(r io.Reader) (Softirqs, error) { softirqs.Tasklet = make([]uint64, len(perCPU)) for i, count := range perCPU { if softirqs.Tasklet[i], err = strconv.ParseUint(count, 10, 64); err != nil { - return Softirqs{}, fmt.Errorf("couldn't parse %q (TASKLET%d): %w", count, i, err) + return Softirqs{}, fmt.Errorf("%s: couldn't parse %q (TASKLET%d): %w", ErrFileParse, count, i, err) } } case parts[0] == "SCHED:": @@ -130,7 +130,7 @@ func parseSoftirqs(r io.Reader) (Softirqs, error) { softirqs.Sched = make([]uint64, len(perCPU)) for i, count := range perCPU { if softirqs.Sched[i], err = strconv.ParseUint(count, 10, 64); err != nil { - return Softirqs{}, fmt.Errorf("couldn't parse %q (SCHED%d): %w", count, i, err) + return Softirqs{}, fmt.Errorf("%s: couldn't parse %q (SCHED%d): %w", ErrFileParse, count, i, err) } } case parts[0] == "HRTIMER:": @@ -138,7 +138,7 @@ func parseSoftirqs(r io.Reader) (Softirqs, error) { softirqs.HRTimer = make([]uint64, len(perCPU)) for i, count := range perCPU { if softirqs.HRTimer[i], err = strconv.ParseUint(count, 10, 64); err != nil { - return Softirqs{}, fmt.Errorf("couldn't parse %q (HRTIMER%d): %w", count, i, err) + return Softirqs{}, fmt.Errorf("%s: couldn't parse %q (HRTIMER%d): %w", ErrFileParse, count, i, err) } } case parts[0] == "RCU:": @@ -146,14 +146,14 @@ func parseSoftirqs(r io.Reader) (Softirqs, error) { softirqs.RCU = make([]uint64, len(perCPU)) for i, count := range perCPU { if softirqs.RCU[i], err = strconv.ParseUint(count, 10, 64); err != nil { - return Softirqs{}, fmt.Errorf("couldn't parse %q (RCU%d): %w", count, i, err) + return Softirqs{}, fmt.Errorf("%s: couldn't parse %q (RCU%d): %w", ErrFileParse, count, i, err) } } } } if err := scanner.Err(); err != nil { - return Softirqs{}, fmt.Errorf("couldn't parse softirqs: %w", err) + return Softirqs{}, fmt.Errorf("%s: couldn't parse softirqs: %w", ErrFileParse, err) } return softirqs, scanner.Err() diff --git a/vendor/github.com/prometheus/procfs/stat.go b/vendor/github.com/prometheus/procfs/stat.go index 586af48af..34fc3ee21 100644 --- a/vendor/github.com/prometheus/procfs/stat.go +++ b/vendor/github.com/prometheus/procfs/stat.go @@ -93,10 +93,10 @@ func parseCPUStat(line string) (CPUStat, int64, error) { &cpuStat.Guest, &cpuStat.GuestNice) if err != nil && err != io.EOF { - return CPUStat{}, -1, fmt.Errorf("couldn't parse %q (cpu): %w", line, err) + return CPUStat{}, -1, fmt.Errorf("%s: couldn't parse %q (cpu): %w", ErrFileParse, line, err) } if count == 0 { - return CPUStat{}, -1, fmt.Errorf("couldn't parse %q (cpu): 0 elements parsed", line) + return CPUStat{}, -1, fmt.Errorf("%w: couldn't parse %q (cpu): 0 elements parsed", ErrFileParse, line) } cpuStat.User /= userHZ @@ -116,7 +116,7 @@ func parseCPUStat(line string) (CPUStat, int64, error) { cpuID, err := strconv.ParseInt(cpu[3:], 10, 64) if err != nil { - return CPUStat{}, -1, fmt.Errorf("couldn't parse %q (cpu/cpuid): %w", line, err) + return CPUStat{}, -1, fmt.Errorf("%s: couldn't parse %q (cpu/cpuid): %w", ErrFileParse, line, err) } return cpuStat, cpuID, nil @@ -136,7 +136,7 @@ func parseSoftIRQStat(line string) (SoftIRQStat, uint64, error) { &softIRQStat.Hrtimer, &softIRQStat.Rcu) if err != nil { - return SoftIRQStat{}, 0, fmt.Errorf("couldn't parse %q (softirq): %w", line, err) + return SoftIRQStat{}, 0, fmt.Errorf("%s: couldn't parse %q (softirq): %w", ErrFileParse, line, err) } return softIRQStat, total, nil @@ -187,6 +187,10 @@ func parseStat(r io.Reader, fileName string) (Stat, error) { err error ) + // Increase default scanner buffer to handle very long `intr` lines. + buf := make([]byte, 0, 8*1024) + scanner.Buffer(buf, 1024*1024) + for scanner.Scan() { line := scanner.Text() parts := strings.Fields(scanner.Text()) @@ -197,34 +201,34 @@ func parseStat(r io.Reader, fileName string) (Stat, error) { switch { case parts[0] == "btime": if stat.BootTime, err = strconv.ParseUint(parts[1], 10, 64); err != nil { - return Stat{}, fmt.Errorf("couldn't parse %q (btime): %w", parts[1], err) + return Stat{}, fmt.Errorf("%s: couldn't parse %q (btime): %w", ErrFileParse, parts[1], err) } case parts[0] == "intr": if stat.IRQTotal, err = strconv.ParseUint(parts[1], 10, 64); err != nil { - return Stat{}, fmt.Errorf("couldn't parse %q (intr): %w", parts[1], err) + return Stat{}, fmt.Errorf("%s: couldn't parse %q (intr): %w", ErrFileParse, parts[1], err) } numberedIRQs := parts[2:] stat.IRQ = make([]uint64, len(numberedIRQs)) for i, count := range numberedIRQs { if stat.IRQ[i], err = strconv.ParseUint(count, 10, 64); err != nil { - return Stat{}, fmt.Errorf("couldn't parse %q (intr%d): %w", count, i, err) + return Stat{}, fmt.Errorf("%s: couldn't parse %q (intr%d): %w", ErrFileParse, count, i, err) } } case parts[0] == "ctxt": if stat.ContextSwitches, err = strconv.ParseUint(parts[1], 10, 64); err != nil { - return Stat{}, fmt.Errorf("couldn't parse %q (ctxt): %w", parts[1], err) + return Stat{}, fmt.Errorf("%s: couldn't parse %q (ctxt): %w", ErrFileParse, parts[1], err) } case parts[0] == "processes": if stat.ProcessCreated, err = strconv.ParseUint(parts[1], 10, 64); err != nil { - return Stat{}, fmt.Errorf("couldn't parse %q (processes): %w", parts[1], err) + return Stat{}, fmt.Errorf("%s: couldn't parse %q (processes): %w", ErrFileParse, parts[1], err) } case parts[0] == "procs_running": if stat.ProcessesRunning, err = strconv.ParseUint(parts[1], 10, 64); err != nil { - return Stat{}, fmt.Errorf("couldn't parse %q (procs_running): %w", parts[1], err) + return Stat{}, fmt.Errorf("%s: couldn't parse %q (procs_running): %w", ErrFileParse, parts[1], err) } case parts[0] == "procs_blocked": if stat.ProcessesBlocked, err = strconv.ParseUint(parts[1], 10, 64); err != nil { - return Stat{}, fmt.Errorf("couldn't parse %q (procs_blocked): %w", parts[1], err) + return Stat{}, fmt.Errorf("%s: couldn't parse %q (procs_blocked): %w", ErrFileParse, parts[1], err) } case parts[0] == "softirq": softIRQStats, total, err := parseSoftIRQStat(line) @@ -247,7 +251,7 @@ func parseStat(r io.Reader, fileName string) (Stat, error) { } if err := scanner.Err(); err != nil { - return Stat{}, fmt.Errorf("couldn't parse %q: %w", fileName, err) + return Stat{}, fmt.Errorf("%s: couldn't parse %q: %w", ErrFileParse, fileName, err) } return stat, nil diff --git a/vendor/github.com/prometheus/procfs/swaps.go b/vendor/github.com/prometheus/procfs/swaps.go index 15edc2212..fa00f555d 100644 --- a/vendor/github.com/prometheus/procfs/swaps.go +++ b/vendor/github.com/prometheus/procfs/swaps.go @@ -64,7 +64,7 @@ func parseSwapString(swapString string) (*Swap, error) { swapFields := strings.Fields(swapString) swapLength := len(swapFields) if swapLength < 5 { - return nil, fmt.Errorf("too few fields in swap string: %s", swapString) + return nil, fmt.Errorf("%w: too few fields in swap string: %s", ErrFileParse, swapString) } swap := &Swap{ @@ -74,15 +74,15 @@ func parseSwapString(swapString string) (*Swap, error) { swap.Size, err = strconv.Atoi(swapFields[2]) if err != nil { - return nil, fmt.Errorf("invalid swap size: %s", swapFields[2]) + return nil, fmt.Errorf("%s: invalid swap size: %s: %w", ErrFileParse, swapFields[2], err) } swap.Used, err = strconv.Atoi(swapFields[3]) if err != nil { - return nil, fmt.Errorf("invalid swap used: %s", swapFields[3]) + return nil, fmt.Errorf("%s: invalid swap used: %s: %w", ErrFileParse, swapFields[3], err) } swap.Priority, err = strconv.Atoi(swapFields[4]) if err != nil { - return nil, fmt.Errorf("invalid swap priority: %s", swapFields[4]) + return nil, fmt.Errorf("%s: invalid swap priority: %s: %w", ErrFileParse, swapFields[4], err) } return swap, nil diff --git a/vendor/github.com/prometheus/procfs/thread.go b/vendor/github.com/prometheus/procfs/thread.go index f08bfc769..df2215ece 100644 --- a/vendor/github.com/prometheus/procfs/thread.go +++ b/vendor/github.com/prometheus/procfs/thread.go @@ -45,7 +45,7 @@ func (fs FS) AllThreads(pid int) (Procs, error) { names, err := d.Readdirnames(-1) if err != nil { - return Procs{}, fmt.Errorf("could not read %q: %w", d.Name(), err) + return Procs{}, fmt.Errorf("%s: could not read %q: %w", ErrFileRead, d.Name(), err) } t := Procs{} @@ -54,7 +54,8 @@ func (fs FS) AllThreads(pid int) (Procs, error) { if err != nil { continue } - t = append(t, Proc{PID: int(tid), fs: fsi.FS(taskPath)}) + + t = append(t, Proc{PID: int(tid), fs: FS{fsi.FS(taskPath), fs.isReal}}) } return t, nil @@ -66,13 +67,13 @@ func (fs FS) Thread(pid, tid int) (Proc, error) { if _, err := os.Stat(taskPath); err != nil { return Proc{}, err } - return Proc{PID: tid, fs: fsi.FS(taskPath)}, nil + return Proc{PID: tid, fs: FS{fsi.FS(taskPath), fs.isReal}}, nil } // Thread returns a process for a given TID of Proc. func (proc Proc) Thread(tid int) (Proc, error) { - tfs := fsi.FS(proc.path("task")) - if _, err := os.Stat(tfs.Path(strconv.Itoa(tid))); err != nil { + tfs := FS{fsi.FS(proc.path("task")), proc.fs.isReal} + if _, err := os.Stat(tfs.proc.Path(strconv.Itoa(tid))); err != nil { return Proc{}, err } return Proc{PID: tid, fs: tfs}, nil diff --git a/vendor/github.com/prometheus/procfs/vm.go b/vendor/github.com/prometheus/procfs/vm.go index cdedcae99..51c49d89e 100644 --- a/vendor/github.com/prometheus/procfs/vm.go +++ b/vendor/github.com/prometheus/procfs/vm.go @@ -86,7 +86,7 @@ func (fs FS) VM() (*VM, error) { return nil, err } if !file.Mode().IsDir() { - return nil, fmt.Errorf("%s is not a directory", path) + return nil, fmt.Errorf("%w: %s is not a directory", ErrFileRead, path) } files, err := os.ReadDir(path) diff --git a/vendor/github.com/prometheus/procfs/zoneinfo.go b/vendor/github.com/prometheus/procfs/zoneinfo.go index c745a4c04..ce5fefa5b 100644 --- a/vendor/github.com/prometheus/procfs/zoneinfo.go +++ b/vendor/github.com/prometheus/procfs/zoneinfo.go @@ -75,11 +75,11 @@ var nodeZoneRE = regexp.MustCompile(`(\d+), zone\s+(\w+)`) func (fs FS) Zoneinfo() ([]Zoneinfo, error) { data, err := os.ReadFile(fs.proc.Path("zoneinfo")) if err != nil { - return nil, fmt.Errorf("error reading zoneinfo %q: %w", fs.proc.Path("zoneinfo"), err) + return nil, fmt.Errorf("%s: error reading zoneinfo %q: %w", ErrFileRead, fs.proc.Path("zoneinfo"), err) } zoneinfo, err := parseZoneinfo(data) if err != nil { - return nil, fmt.Errorf("error parsing zoneinfo %q: %w", fs.proc.Path("zoneinfo"), err) + return nil, fmt.Errorf("%s: error parsing zoneinfo %q: %w", ErrFileParse, fs.proc.Path("zoneinfo"), err) } return zoneinfo, nil } diff --git a/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/Makefile b/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/Makefile index f4c85e963..890e4f18f 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/Makefile +++ b/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/Makefile @@ -4,7 +4,8 @@ PROTO_FILES = pagination.proto \ sort.proto \ platformresource.proto \ selector.proto \ - revision.proto + revision.proto \ + healthcheck.proto all: $(PROTO_FILES) diff --git a/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/healthcheck.pb.go b/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/healthcheck.pb.go new file mode 100644 index 000000000..a9873bfda --- /dev/null +++ b/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/healthcheck.pb.go @@ -0,0 +1,492 @@ +// Please use the following editor setup for this file: +// Tab size=2; Tabs as spaces; Clean up trailing whitepsace +// +// In vim add: au FileType proto setl sw=2 ts=2 expandtab list +// +// In vscode install vscode-proto3 extension and add this to your settings.json: +// "[proto3]": { +// "editor.tabSize": 2, +// "editor.insertSpaces": true, +// "editor.rulers": [80], +// "editor.detectIndentation": true, +// "files.trimTrailingWhitespace": true +// } +// + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.32.0 +// protoc v4.25.3 +// source: public/portworx/common/apiv1/healthcheck.proto + +package common + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Type of health check restult +type HealthCheckResultTypes_Type int32 + +const ( + // Unspecified, do not use. + HealthCheckResultTypes_TYPE_UNSPECIFIED HealthCheckResultTypes_Type = 0 + // Check was successful. + HealthCheckResultTypes_SUCCESS HealthCheckResultTypes_Type = 1 + // Check encountered an issue and returned with a warning. + HealthCheckResultTypes_WARNING HealthCheckResultTypes_Type = 2 + // Check found an error. + HealthCheckResultTypes_ERROR HealthCheckResultTypes_Type = 3 +) + +// Enum value maps for HealthCheckResultTypes_Type. +var ( + HealthCheckResultTypes_Type_name = map[int32]string{ + 0: "TYPE_UNSPECIFIED", + 1: "SUCCESS", + 2: "WARNING", + 3: "ERROR", + } + HealthCheckResultTypes_Type_value = map[string]int32{ + "TYPE_UNSPECIFIED": 0, + "SUCCESS": 1, + "WARNING": 2, + "ERROR": 3, + } +) + +func (x HealthCheckResultTypes_Type) Enum() *HealthCheckResultTypes_Type { + p := new(HealthCheckResultTypes_Type) + *p = x + return p +} + +func (x HealthCheckResultTypes_Type) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (HealthCheckResultTypes_Type) Descriptor() protoreflect.EnumDescriptor { + return file_public_portworx_common_apiv1_healthcheck_proto_enumTypes[0].Descriptor() +} + +func (HealthCheckResultTypes_Type) Type() protoreflect.EnumType { + return &file_public_portworx_common_apiv1_healthcheck_proto_enumTypes[0] +} + +func (x HealthCheckResultTypes_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use HealthCheckResultTypes_Type.Descriptor instead. +func (HealthCheckResultTypes_Type) EnumDescriptor() ([]byte, []int) { + return file_public_portworx_common_apiv1_healthcheck_proto_rawDescGZIP(), []int{0, 0} +} + +// The health check result. +type HealthCheckResultTypes struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *HealthCheckResultTypes) Reset() { + *x = HealthCheckResultTypes{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_common_apiv1_healthcheck_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HealthCheckResultTypes) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HealthCheckResultTypes) ProtoMessage() {} + +func (x *HealthCheckResultTypes) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_common_apiv1_healthcheck_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HealthCheckResultTypes.ProtoReflect.Descriptor instead. +func (*HealthCheckResultTypes) Descriptor() ([]byte, []int) { + return file_public_portworx_common_apiv1_healthcheck_proto_rawDescGZIP(), []int{0} +} + +// Information about each health check. +type HealthCheck struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Description of the health check. + Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` + // A url providing the reader with more information about the check. + Hint string `protobuf:"bytes,2,opt,name=hint,proto3" json:"hint,omitempty"` + // Error found if any. + Error string `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"` + // The result of the health check. + Result HealthCheckResultTypes_Type `protobuf:"varint,4,opt,name=result,proto3,enum=public.portworx.common.v1.HealthCheckResultTypes_Type" json:"result,omitempty"` +} + +func (x *HealthCheck) Reset() { + *x = HealthCheck{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_common_apiv1_healthcheck_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HealthCheck) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HealthCheck) ProtoMessage() {} + +func (x *HealthCheck) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_common_apiv1_healthcheck_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HealthCheck.ProtoReflect.Descriptor instead. +func (*HealthCheck) Descriptor() ([]byte, []int) { + return file_public_portworx_common_apiv1_healthcheck_proto_rawDescGZIP(), []int{1} +} + +func (x *HealthCheck) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *HealthCheck) GetHint() string { + if x != nil { + return x.Hint + } + return "" +} + +func (x *HealthCheck) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +func (x *HealthCheck) GetResult() HealthCheckResultTypes_Type { + if x != nil { + return x.Result + } + return HealthCheckResultTypes_TYPE_UNSPECIFIED +} + +// A set of health checks. +type HealthCheckCategory struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The name of the category of health checks. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // The results of the health checks that were executed. + Checks []*HealthCheck `protobuf:"bytes,2,rep,name=checks,proto3" json:"checks,omitempty"` +} + +func (x *HealthCheckCategory) Reset() { + *x = HealthCheckCategory{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_common_apiv1_healthcheck_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HealthCheckCategory) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HealthCheckCategory) ProtoMessage() {} + +func (x *HealthCheckCategory) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_common_apiv1_healthcheck_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HealthCheckCategory.ProtoReflect.Descriptor instead. +func (*HealthCheckCategory) Descriptor() ([]byte, []int) { + return file_public_portworx_common_apiv1_healthcheck_proto_rawDescGZIP(), []int{2} +} + +func (x *HealthCheckCategory) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *HealthCheckCategory) GetChecks() []*HealthCheck { + if x != nil { + return x.Checks + } + return nil +} + +// The results from a health check run. +type HealthCheckResults struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // True if none of the health checks returned an error. + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + // True if any of the tests returned a warning + Warning bool `protobuf:"varint,2,opt,name=warning,proto3" json:"warning,omitempty"` + // Collection of results from all the category of health checks + Categories []*HealthCheckCategory `protobuf:"bytes,3,rep,name=categories,proto3" json:"categories,omitempty"` +} + +func (x *HealthCheckResults) Reset() { + *x = HealthCheckResults{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_common_apiv1_healthcheck_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HealthCheckResults) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HealthCheckResults) ProtoMessage() {} + +func (x *HealthCheckResults) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_common_apiv1_healthcheck_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HealthCheckResults.ProtoReflect.Descriptor instead. +func (*HealthCheckResults) Descriptor() ([]byte, []int) { + return file_public_portworx_common_apiv1_healthcheck_proto_rawDescGZIP(), []int{3} +} + +func (x *HealthCheckResults) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *HealthCheckResults) GetWarning() bool { + if x != nil { + return x.Warning + } + return false +} + +func (x *HealthCheckResults) GetCategories() []*HealthCheckCategory { + if x != nil { + return x.Categories + } + return nil +} + +var File_public_portworx_common_apiv1_healthcheck_proto protoreflect.FileDescriptor + +var file_public_portworx_common_apiv1_healthcheck_proto_rawDesc = []byte{ + 0x0a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x68, + 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x19, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x22, 0x5b, 0x0a, 0x16, 0x48, + 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x41, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, + 0x10, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, + 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x09, 0x0a, + 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x22, 0xa9, 0x01, 0x0a, 0x0b, 0x48, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x69, + 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x69, 0x6e, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x12, 0x4e, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, + 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x22, 0x69, 0x0a, 0x13, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x3e, 0x0a, 0x06, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, + 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x06, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x22, + 0x98, 0x01, 0x0a, 0x12, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x12, 0x18, 0x0a, 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x4e, 0x0a, 0x0a, 0x63, 0x61, + 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, + 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, + 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x0a, + 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x42, 0x70, 0x0a, 0x1d, 0x63, 0x6f, + 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x10, 0x48, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, + 0x2d, 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, + 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, + 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_public_portworx_common_apiv1_healthcheck_proto_rawDescOnce sync.Once + file_public_portworx_common_apiv1_healthcheck_proto_rawDescData = file_public_portworx_common_apiv1_healthcheck_proto_rawDesc +) + +func file_public_portworx_common_apiv1_healthcheck_proto_rawDescGZIP() []byte { + file_public_portworx_common_apiv1_healthcheck_proto_rawDescOnce.Do(func() { + file_public_portworx_common_apiv1_healthcheck_proto_rawDescData = protoimpl.X.CompressGZIP(file_public_portworx_common_apiv1_healthcheck_proto_rawDescData) + }) + return file_public_portworx_common_apiv1_healthcheck_proto_rawDescData +} + +var file_public_portworx_common_apiv1_healthcheck_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_public_portworx_common_apiv1_healthcheck_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_public_portworx_common_apiv1_healthcheck_proto_goTypes = []interface{}{ + (HealthCheckResultTypes_Type)(0), // 0: public.portworx.common.v1.HealthCheckResultTypes.Type + (*HealthCheckResultTypes)(nil), // 1: public.portworx.common.v1.HealthCheckResultTypes + (*HealthCheck)(nil), // 2: public.portworx.common.v1.HealthCheck + (*HealthCheckCategory)(nil), // 3: public.portworx.common.v1.HealthCheckCategory + (*HealthCheckResults)(nil), // 4: public.portworx.common.v1.HealthCheckResults +} +var file_public_portworx_common_apiv1_healthcheck_proto_depIdxs = []int32{ + 0, // 0: public.portworx.common.v1.HealthCheck.result:type_name -> public.portworx.common.v1.HealthCheckResultTypes.Type + 2, // 1: public.portworx.common.v1.HealthCheckCategory.checks:type_name -> public.portworx.common.v1.HealthCheck + 3, // 2: public.portworx.common.v1.HealthCheckResults.categories:type_name -> public.portworx.common.v1.HealthCheckCategory + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_public_portworx_common_apiv1_healthcheck_proto_init() } +func file_public_portworx_common_apiv1_healthcheck_proto_init() { + if File_public_portworx_common_apiv1_healthcheck_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_public_portworx_common_apiv1_healthcheck_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HealthCheckResultTypes); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_common_apiv1_healthcheck_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HealthCheck); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_common_apiv1_healthcheck_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HealthCheckCategory); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_common_apiv1_healthcheck_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HealthCheckResults); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_public_portworx_common_apiv1_healthcheck_proto_rawDesc, + NumEnums: 1, + NumMessages: 4, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_public_portworx_common_apiv1_healthcheck_proto_goTypes, + DependencyIndexes: file_public_portworx_common_apiv1_healthcheck_proto_depIdxs, + EnumInfos: file_public_portworx_common_apiv1_healthcheck_proto_enumTypes, + MessageInfos: file_public_portworx_common_apiv1_healthcheck_proto_msgTypes, + }.Build() + File_public_portworx_common_apiv1_healthcheck_proto = out.File + file_public_portworx_common_apiv1_healthcheck_proto_rawDesc = nil + file_public_portworx_common_apiv1_healthcheck_proto_goTypes = nil + file_public_portworx_common_apiv1_healthcheck_proto_depIdxs = nil +} diff --git a/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/healthcheck.pb.md b/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/healthcheck.pb.md new file mode 100644 index 000000000..4848a799c --- /dev/null +++ b/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/healthcheck.pb.md @@ -0,0 +1,109 @@ +[//]: # (Generated by grpc-framework using protoc-gen-doc) +[//]: # (Do not edit) + + +# healthcheck + +## Contents + + +- Messages + - [HealthCheck](#healthcheck) + - [HealthCheckCategory](#healthcheckcategory) + - [HealthCheckResultTypes](#healthcheckresulttypes) + - [HealthCheckResults](#healthcheckresults) + + + + +- [Scalar Value Types](#scalar-value-types) + + + + + +## Messages + + +### HealthCheck {#healthcheck} +Information about each health check. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| description | [ string](#string) | Description of the health check. | +| hint | [ string](#string) | A url providing the reader with more information about the check. | +| error | [ string](#string) | Error found if any. | +| result | [ HealthCheckResultTypes.Type](#healthcheckresulttypestype) | The result of the health check. | + + + + +### HealthCheckCategory {#healthcheckcategory} +A set of health checks. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| name | [ string](#string) | The name of the category of health checks. | +| checks | [repeated HealthCheck](#healthcheck) | The results of the health checks that were executed. | + + + + +### HealthCheckResultTypes {#healthcheckresulttypes} +The health check result. + + + + +### HealthCheckResults {#healthcheckresults} +The results from a health check run. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| success | [ bool](#bool) | True if none of the health checks returned an error. | +| warning | [ bool](#bool) | True if any of the tests returned a warning | +| categories | [repeated HealthCheckCategory](#healthcheckcategory) | Collection of results from all the category of health checks | + + + + +## Enums + + +### HealthCheckResultTypes.Type {#healthcheckresulttypestype} +Type of health check restult + +| Name | Number | Description | +| ---- | ------ | ----------- | +| TYPE_UNSPECIFIED | 0 | Unspecified, do not use. | +| SUCCESS | 1 | Check was successful. | +| WARNING | 2 | Check encountered an issue and returned with a warning. | +| ERROR | 3 | Check found an error. | + + + + + +## Scalar Value Types + +| .proto Type | Notes | C++ Type | Java Type | Python Type | +| ----------- | ----- | -------- | --------- | ----------- | +|

double | | double | double | float | +|

float | | float | float | float | +|

int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | +|

int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | +|

uint32 | Uses variable-length encoding. | uint32 | int | int/long | +|

uint64 | Uses variable-length encoding. | uint64 | long | int/long | +|

sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | +|

sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | +|

fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int | +|

fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long | +|

sfixed32 | Always four bytes. | int32 | int | int | +|

sfixed64 | Always eight bytes. | int64 | long | int/long | +|

bool | | bool | boolean | boolean | +|

string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | +|

bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | + diff --git a/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/healthcheck.proto b/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/healthcheck.proto new file mode 100644 index 000000000..3a9172255 --- /dev/null +++ b/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/healthcheck.proto @@ -0,0 +1,68 @@ +// Please use the following editor setup for this file: +// Tab size=2; Tabs as spaces; Clean up trailing whitepsace +// +// In vim add: au FileType proto setl sw=2 ts=2 expandtab list +// +// In vscode install vscode-proto3 extension and add this to your settings.json: +// "[proto3]": { +// "editor.tabSize": 2, +// "editor.insertSpaces": true, +// "editor.rulers": [80], +// "editor.detectIndentation": true, +// "files.trimTrailingWhitespace": true +// } +// + +syntax = "proto3"; + +package public.portworx.common.v1; + +option go_package = "github.com/pure-px/apis/public/portworx/common/apiv1;common"; +option java_multiple_files = true; +option java_package = "com.public.portworx.common.v1"; +option java_outer_classname = "HealthCheckProto"; + +// The health check result. +message HealthCheckResultTypes { + // Type of health check restult + enum Type { + // Unspecified, do not use. + TYPE_UNSPECIFIED = 0; + // Check was successful. + SUCCESS = 1; + // Check encountered an issue and returned with a warning. + WARNING = 2; + // Check found an error. + ERROR = 3; + } +} + +// Information about each health check. +message HealthCheck { + // Description of the health check. + string description = 1; + // A url providing the reader with more information about the check. + string hint = 2; + // Error found if any. + string error = 3; + // The result of the health check. + HealthCheckResultTypes.Type result = 4; +} + +// A set of health checks. +message HealthCheckCategory { + // The name of the category of health checks. + string name = 1; + // The results of the health checks that were executed. + repeated HealthCheck checks = 2; +} + +// The results from a health check run. +message HealthCheckResults { + // True if none of the health checks returned an error. + bool success = 1; + // True if any of the tests returned a warning + bool warning = 2; + // Collection of results from all the category of health checks + repeated HealthCheckCategory categories = 3; +} diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymenttopology/apiv1/deploymenttopology.swagger.json b/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/healthcheck.swagger.json similarity index 91% rename from vendor/github.com/pure-px/apis/public/portworx/pds/deploymenttopology/apiv1/deploymenttopology.swagger.json rename to vendor/github.com/pure-px/apis/public/portworx/common/apiv1/healthcheck.swagger.json index f37820f75..a84486519 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymenttopology/apiv1/deploymenttopology.swagger.json +++ b/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/healthcheck.swagger.json @@ -1,7 +1,7 @@ { "openapi": "3.0.0", "info": { - "title": "public/portworx/pds/deploymenttopology/apiv1/deploymenttopology.proto", + "title": "public/portworx/common/apiv1/healthcheck.proto", "version": "version not set" }, "paths": {}, diff --git a/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/platformresource.pb.go b/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/platformresource.pb.go index 6b14f73ec..eb9b067cd 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/platformresource.pb.go +++ b/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/platformresource.pb.go @@ -125,7 +125,7 @@ const ( ApplicationResource_TYPE_UNSPECIFIED ApplicationResource_Type = 0 // List of supported PDS application resources. // PDS application resource of type deployment. - ApplicationResource_PDS_DEPLOYMENT ApplicationResource_Type = 1 + ApplicationResource_PDS_DATA_SERVICE_DEPLOYMENT ApplicationResource_Type = 1 // PDS application resource of type backup. ApplicationResource_PDS_BACKUPCONFIG ApplicationResource_Type = 2 // PDS application resource of type restore. @@ -139,17 +139,17 @@ const ( var ( ApplicationResource_Type_name = map[int32]string{ 0: "TYPE_UNSPECIFIED", - 1: "PDS_DEPLOYMENT", + 1: "PDS_DATA_SERVICE_DEPLOYMENT", 2: "PDS_BACKUPCONFIG", 3: "PDS_RESTORE", 4: "BAAS_BACKUP", } ApplicationResource_Type_value = map[string]int32{ - "TYPE_UNSPECIFIED": 0, - "PDS_DEPLOYMENT": 1, - "PDS_BACKUPCONFIG": 2, - "PDS_RESTORE": 3, - "BAAS_BACKUP": 4, + "TYPE_UNSPECIFIED": 0, + "PDS_DATA_SERVICE_DEPLOYMENT": 1, + "PDS_BACKUPCONFIG": 2, + "PDS_RESTORE": 3, + "BAAS_BACKUP": 4, } ) @@ -278,22 +278,23 @@ var file_public_portworx_common_apiv1_platformresource_proto_rawDesc = []byte{ 0x43, 0x4b, 0x55, 0x50, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x07, 0x12, 0x11, 0x0a, 0x0d, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x10, 0x08, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x45, 0x4d, 0x50, 0x4c, 0x41, 0x54, 0x45, 0x10, 0x09, - 0x22, 0x7f, 0x0a, 0x13, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x68, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x44, 0x53, 0x5f, 0x44, 0x45, 0x50, - 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x44, 0x53, - 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x02, 0x12, - 0x0f, 0x0a, 0x0b, 0x50, 0x44, 0x53, 0x5f, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x10, 0x03, - 0x12, 0x0f, 0x0a, 0x0b, 0x42, 0x41, 0x41, 0x53, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x10, - 0x04, 0x42, 0x75, 0x0a, 0x1d, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, - 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x42, 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3b, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, 0x2f, - 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, - 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x22, 0x8c, 0x01, 0x0a, 0x13, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x75, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1f, 0x0a, 0x1b, 0x50, 0x44, 0x53, 0x5f, 0x44, 0x41, + 0x54, 0x41, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x44, 0x45, 0x50, 0x4c, 0x4f, + 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x44, 0x53, 0x5f, 0x42, + 0x41, 0x43, 0x4b, 0x55, 0x50, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x02, 0x12, 0x0f, 0x0a, + 0x0b, 0x50, 0x44, 0x53, 0x5f, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x10, 0x03, 0x12, 0x0f, + 0x0a, 0x0b, 0x42, 0x41, 0x41, 0x53, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x10, 0x04, 0x42, + 0x75, 0x0a, 0x1d, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, + 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x42, 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, 0x2f, 0x61, 0x70, + 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/platformresource.pb.md b/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/platformresource.pb.md index f54b8d576..b6fcce605 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/platformresource.pb.md +++ b/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/platformresource.pb.md @@ -44,7 +44,7 @@ Type of the resource can be associated to the project. | Name | Number | Description | | ---- | ------ | ----------- | | TYPE_UNSPECIFIED | 0 | Unspecified, do not use. | -| PDS_DEPLOYMENT | 1 | List of supported PDS application resources. PDS application resource of type deployment. | +| PDS_DATA_SERVICE_DEPLOYMENT | 1 | List of supported PDS application resources. PDS application resource of type deployment. | | PDS_BACKUPCONFIG | 2 | PDS application resource of type backup. | | PDS_RESTORE | 3 | PDS application resource of type restore. | | BAAS_BACKUP | 4 | List of supported BAAS application resources. BAAS application resource of type backup. | diff --git a/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/platformresource.proto b/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/platformresource.proto index 4db2df010..7e90d7e51 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/platformresource.proto +++ b/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/platformresource.proto @@ -59,7 +59,7 @@ message ApplicationResource { TYPE_UNSPECIFIED = 0; // List of supported PDS application resources. // PDS application resource of type deployment. - PDS_DEPLOYMENT = 1; + PDS_DATA_SERVICE_DEPLOYMENT = 1; // PDS application resource of type backup. PDS_BACKUPCONFIG = 2; // PDS application resource of type restore. diff --git a/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/selector.pb.go b/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/selector.pb.go index ff0f88f95..6d65201a8 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/selector.pb.go +++ b/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/selector.pb.go @@ -102,6 +102,8 @@ const ( Selector_IN Selector_Operator = 1 // NOT_IN specifies that the key should not be associated with any of the element in value list. Selector_NOT_IN Selector_Operator = 2 + // LIKE specified that the key should be of a specified pattern + Selector_LIKE Selector_Operator = 3 ) // Enum value maps for Selector_Operator. @@ -110,11 +112,13 @@ var ( 0: "OPERATOR_UNSPECIFIED", 1: "IN", 2: "NOT_IN", + 3: "LIKE", } Selector_Operator_value = map[string]int32{ "OPERATOR_UNSPECIFIED": 0, "IN": 1, "NOT_IN": 2, + "LIKE": 3, } ) @@ -388,7 +392,7 @@ var file_public_portworx_common_apiv1_selector_proto_rawDesc = []byte{ 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x1a, 0x33, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xfc, 0x01, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x86, 0x02, 0x0a, 0x08, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x44, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, @@ -401,42 +405,43 @@ var file_public_portworx_common_apiv1_selector_proto_rawDesc = []byte{ 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x67, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x22, 0x38, 0x0a, 0x08, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x18, + 0x65, 0x73, 0x22, 0x42, 0x0a, 0x08, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x14, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x49, 0x4e, 0x10, 0x01, - 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x10, 0x02, 0x22, 0xc1, 0x02, 0x0a, - 0x10, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x12, 0x70, 0x0a, 0x16, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, - 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x14, 0x69, - 0x6e, 0x66, 0x72, 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x73, 0x1a, 0xba, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x02, 0x6f, 0x70, - 0x18, 0x66, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, - 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x18, 0x67, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, - 0x2a, 0x44, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x15, - 0x52, 0x45, 0x53, 0x50, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x44, 0x45, 0x58, - 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x54, 0x45, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, - 0x46, 0x55, 0x4c, 0x4c, 0x10, 0x03, 0x42, 0x6d, 0x0a, 0x1d, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, + 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, + 0x4c, 0x49, 0x4b, 0x45, 0x10, 0x03, 0x22, 0xc1, 0x02, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x70, 0x0a, 0x16, 0x69, + 0x6e, 0x66, 0x72, 0x61, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x0d, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, - 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, - 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x14, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x1a, 0xba, 0x01, + 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x12, 0x52, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x66, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x2c, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x02, + 0x6f, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x67, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2a, 0x44, 0x0a, 0x08, 0x52, 0x65, + 0x73, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x15, 0x52, 0x45, 0x53, 0x50, 0x5f, 0x44, + 0x41, 0x54, 0x41, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, + 0x4c, 0x49, 0x54, 0x45, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x55, 0x4c, 0x4c, 0x10, 0x03, + 0x42, 0x6d, 0x0a, 0x1d, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x42, 0x0d, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, + 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/selector.pb.md b/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/selector.pb.md index 93e41b1ae..ce26f796d 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/selector.pb.md +++ b/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/selector.pb.md @@ -102,6 +102,7 @@ Operator specifies the relationship between the provided (key,value) pairs in th | OPERATOR_UNSPECIFIED | 0 | Unspecified, do not use. | | IN | 1 | IN specifies that the key should be associated with atleast 1 of the element in value list. | | NOT_IN | 2 | NOT_IN specifies that the key should not be associated with any of the element in value list. | +| LIKE | 3 | LIKE specified that the key should be of a specified pattern | diff --git a/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/selector.proto b/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/selector.proto index 398bfc678..4101c87b7 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/selector.proto +++ b/vendor/github.com/pure-px/apis/public/portworx/common/apiv1/selector.proto @@ -34,6 +34,8 @@ message Selector{ IN = 1; // NOT_IN specifies that the key should not be associated with any of the element in value list. NOT_IN = 2; + // LIKE specified that the key should be of a specified pattern + LIKE = 3; } // Filter for a given key. diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/backup/apiv1/backup.pb.go b/vendor/github.com/pure-px/apis/public/portworx/pds/backup/apiv1/backup.pb.go index 633e04ee9..a2ec83ba8 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/backup/apiv1/backup.pb.go +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/backup/apiv1/backup.pb.go @@ -39,7 +39,7 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// Enum for Phase of the Deployment. +// Enum for Phase of the DataService Deployment. type Status_Phase int32 const ( @@ -290,6 +290,8 @@ type Status struct { ErrorMessage string `protobuf:"bytes,6,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` // FileSize of the CloudSnap image. FileSize int64 `protobuf:"varint,7,opt,name=file_size,json=fileSize,proto3" json:"file_size,omitempty"` + // DataService Deployment Meta Data. + DataServiceDeploymentMetaData *DataServiceDeploymentMetaData `protobuf:"bytes,8,opt,name=data_service_deployment_meta_data,json=dataServiceDeploymentMetaData,proto3" json:"data_service_deployment_meta_data,omitempty"` } func (x *Status) Reset() { @@ -373,6 +375,125 @@ func (x *Status) GetFileSize() int64 { return 0 } +func (x *Status) GetDataServiceDeploymentMetaData() *DataServiceDeploymentMetaData { + if x != nil { + return x.DataServiceDeploymentMetaData + } + return nil +} + +// DataService Deployment Meta Data contains the details of the deployment associated with the backup. +type DataServiceDeploymentMetaData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name of the data service deployment. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Custom Resource Name is the kubernetes resource name for the deployment meta data. + CustomResourceName string `protobuf:"bytes,2,opt,name=custom_resource_name,json=customResourceName,proto3" json:"custom_resource_name,omitempty"` + // Target cluster Name associated with the backup. + TargetClusterName string `protobuf:"bytes,3,opt,name=target_cluster_name,json=targetClusterName,proto3" json:"target_cluster_name,omitempty"` + // Namespace name to which the backup is associated. + NamespaceName string `protobuf:"bytes,4,opt,name=namespace_name,json=namespaceName,proto3" json:"namespace_name,omitempty"` + // Flag to check whether Transport Layer Security support is enabled or not. + TlsEnabled bool `protobuf:"varint,5,opt,name=tls_enabled,json=tlsEnabled,proto3" json:"tls_enabled,omitempty"` + // Name of the data service of data service deployment. + DataServiceName string `protobuf:"bytes,6,opt,name=data_service_name,json=dataServiceName,proto3" json:"data_service_name,omitempty"` + // Name of the version of data service. + DataServiceVersion string `protobuf:"bytes,7,opt,name=data_service_version,json=dataServiceVersion,proto3" json:"data_service_version,omitempty"` + // build tag of the image for the data service version. + ImageBuild string `protobuf:"bytes,8,opt,name=image_build,json=imageBuild,proto3" json:"image_build,omitempty"` +} + +func (x *DataServiceDeploymentMetaData) Reset() { + *x = DataServiceDeploymentMetaData{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DataServiceDeploymentMetaData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DataServiceDeploymentMetaData) ProtoMessage() {} + +func (x *DataServiceDeploymentMetaData) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DataServiceDeploymentMetaData.ProtoReflect.Descriptor instead. +func (*DataServiceDeploymentMetaData) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_backup_apiv1_backup_proto_rawDescGZIP(), []int{4} +} + +func (x *DataServiceDeploymentMetaData) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *DataServiceDeploymentMetaData) GetCustomResourceName() string { + if x != nil { + return x.CustomResourceName + } + return "" +} + +func (x *DataServiceDeploymentMetaData) GetTargetClusterName() string { + if x != nil { + return x.TargetClusterName + } + return "" +} + +func (x *DataServiceDeploymentMetaData) GetNamespaceName() string { + if x != nil { + return x.NamespaceName + } + return "" +} + +func (x *DataServiceDeploymentMetaData) GetTlsEnabled() bool { + if x != nil { + return x.TlsEnabled + } + return false +} + +func (x *DataServiceDeploymentMetaData) GetDataServiceName() string { + if x != nil { + return x.DataServiceName + } + return "" +} + +func (x *DataServiceDeploymentMetaData) GetDataServiceVersion() string { + if x != nil { + return x.DataServiceVersion + } + return "" +} + +func (x *DataServiceDeploymentMetaData) GetImageBuild() string { + if x != nil { + return x.ImageBuild + } + return "" +} + // Request to get the Backup resource. type GetBackupRequest struct { state protoimpl.MessageState @@ -386,7 +507,7 @@ type GetBackupRequest struct { func (x *GetBackupRequest) Reset() { *x = GetBackupRequest{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[4] + mi := &file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -399,7 +520,7 @@ func (x *GetBackupRequest) String() string { func (*GetBackupRequest) ProtoMessage() {} func (x *GetBackupRequest) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[4] + mi := &file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -412,7 +533,7 @@ func (x *GetBackupRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBackupRequest.ProtoReflect.Descriptor instead. func (*GetBackupRequest) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_backup_apiv1_backup_proto_rawDescGZIP(), []int{4} + return file_public_portworx_pds_backup_apiv1_backup_proto_rawDescGZIP(), []int{5} } func (x *GetBackupRequest) GetId() string { @@ -430,12 +551,14 @@ type DeleteBackupRequest struct { // UID of the Backup. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Force flag to delete backup from control plane only. + Force bool `protobuf:"varint,2,opt,name=force,proto3" json:"force,omitempty"` } func (x *DeleteBackupRequest) Reset() { *x = DeleteBackupRequest{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[5] + mi := &file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -448,7 +571,7 @@ func (x *DeleteBackupRequest) String() string { func (*DeleteBackupRequest) ProtoMessage() {} func (x *DeleteBackupRequest) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[5] + mi := &file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -461,7 +584,7 @@ func (x *DeleteBackupRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteBackupRequest.ProtoReflect.Descriptor instead. func (*DeleteBackupRequest) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_backup_apiv1_backup_proto_rawDescGZIP(), []int{5} + return file_public_portworx_pds_backup_apiv1_backup_proto_rawDescGZIP(), []int{6} } func (x *DeleteBackupRequest) GetId() string { @@ -471,6 +594,13 @@ func (x *DeleteBackupRequest) GetId() string { return "" } +func (x *DeleteBackupRequest) GetForce() bool { + if x != nil { + return x.Force + } + return false +} + // Request to list the Backup resources. type ListBackupsRequest struct { state protoimpl.MessageState @@ -481,21 +611,19 @@ type ListBackupsRequest struct { // // Types that are assignable to ListBy: // - // *ListBackupsRequest_DeploymentId - // *ListBackupsRequest_TargetClusterId - // *ListBackupsRequest_NamespaceId + // *ListBackupsRequest_DataServiceDeploymentId // *ListBackupsRequest_BackupConfigId ListBy isListBackupsRequest_ListBy `protobuf_oneof:"list_by"` // Pagination parameters for listing backups. - Pagination *apiv1.PageBasedPaginationRequest `protobuf:"bytes,5,opt,name=pagination,proto3" json:"pagination,omitempty"` + Pagination *apiv1.PageBasedPaginationRequest `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"` // Sorting details using which requested list of backups to be sorted. - Sort *apiv1.Sort `protobuf:"bytes,6,opt,name=sort,proto3" json:"sort,omitempty"` + Sort *apiv1.Sort `protobuf:"bytes,4,opt,name=sort,proto3" json:"sort,omitempty"` } func (x *ListBackupsRequest) Reset() { *x = ListBackupsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[6] + mi := &file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -508,7 +636,7 @@ func (x *ListBackupsRequest) String() string { func (*ListBackupsRequest) ProtoMessage() {} func (x *ListBackupsRequest) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[6] + mi := &file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -521,7 +649,7 @@ func (x *ListBackupsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListBackupsRequest.ProtoReflect.Descriptor instead. func (*ListBackupsRequest) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_backup_apiv1_backup_proto_rawDescGZIP(), []int{6} + return file_public_portworx_pds_backup_apiv1_backup_proto_rawDescGZIP(), []int{7} } func (m *ListBackupsRequest) GetListBy() isListBackupsRequest_ListBy { @@ -531,23 +659,9 @@ func (m *ListBackupsRequest) GetListBy() isListBackupsRequest_ListBy { return nil } -func (x *ListBackupsRequest) GetDeploymentId() string { - if x, ok := x.GetListBy().(*ListBackupsRequest_DeploymentId); ok { - return x.DeploymentId - } - return "" -} - -func (x *ListBackupsRequest) GetTargetClusterId() string { - if x, ok := x.GetListBy().(*ListBackupsRequest_TargetClusterId); ok { - return x.TargetClusterId - } - return "" -} - -func (x *ListBackupsRequest) GetNamespaceId() string { - if x, ok := x.GetListBy().(*ListBackupsRequest_NamespaceId); ok { - return x.NamespaceId +func (x *ListBackupsRequest) GetDataServiceDeploymentId() string { + if x, ok := x.GetListBy().(*ListBackupsRequest_DataServiceDeploymentId); ok { + return x.DataServiceDeploymentId } return "" } @@ -577,31 +691,17 @@ type isListBackupsRequest_ListBy interface { isListBackupsRequest_ListBy() } -type ListBackupsRequest_DeploymentId struct { - // Deployment ID for which the backups will be listed. - DeploymentId string `protobuf:"bytes,1,opt,name=deployment_id,json=deploymentId,proto3,oneof"` -} - -type ListBackupsRequest_TargetClusterId struct { - // Cluster ID for which the backups will be listed. - TargetClusterId string `protobuf:"bytes,2,opt,name=target_cluster_id,json=targetClusterId,proto3,oneof"` -} - -type ListBackupsRequest_NamespaceId struct { - // Namespace ID for which the backups will be listed. - NamespaceId string `protobuf:"bytes,3,opt,name=namespace_id,json=namespaceId,proto3,oneof"` +type ListBackupsRequest_DataServiceDeploymentId struct { + // Data service Deployment ID for which the backups will be listed. + DataServiceDeploymentId string `protobuf:"bytes,1,opt,name=data_service_deployment_id,json=dataServiceDeploymentId,proto3,oneof"` } type ListBackupsRequest_BackupConfigId struct { // Backup Configuration ID for which the backups will be listed. - BackupConfigId string `protobuf:"bytes,4,opt,name=backup_config_id,json=backupConfigId,proto3,oneof"` + BackupConfigId string `protobuf:"bytes,2,opt,name=backup_config_id,json=backupConfigId,proto3,oneof"` } -func (*ListBackupsRequest_DeploymentId) isListBackupsRequest_ListBy() {} - -func (*ListBackupsRequest_TargetClusterId) isListBackupsRequest_ListBy() {} - -func (*ListBackupsRequest_NamespaceId) isListBackupsRequest_ListBy() {} +func (*ListBackupsRequest_DataServiceDeploymentId) isListBackupsRequest_ListBy() {} func (*ListBackupsRequest_BackupConfigId) isListBackupsRequest_ListBy() {} @@ -623,7 +723,7 @@ type ListBackupsResponse struct { func (x *ListBackupsResponse) Reset() { *x = ListBackupsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[7] + mi := &file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -636,7 +736,7 @@ func (x *ListBackupsResponse) String() string { func (*ListBackupsResponse) ProtoMessage() {} func (x *ListBackupsResponse) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[7] + mi := &file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -649,7 +749,7 @@ func (x *ListBackupsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListBackupsResponse.ProtoReflect.Descriptor instead. func (*ListBackupsResponse) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_backup_apiv1_backup_proto_rawDescGZIP(), []int{7} + return file_public_portworx_pds_backup_apiv1_backup_proto_rawDescGZIP(), []int{8} } func (x *ListBackupsResponse) GetBackups() []*Backup { @@ -712,7 +812,7 @@ var file_public_portworx_pds_backup_apiv1_backup_proto_rawDesc = []byte{ 0x6b, 0x75, 0x70, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x27, 0x0a, 0x0a, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, - 0x6d, 0x61, 0x67, 0x65, 0x49, 0x64, 0x22, 0x9c, 0x03, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x6d, 0x61, 0x67, 0x65, 0x49, 0x64, 0x22, 0xa5, 0x04, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, @@ -733,83 +833,111 @@ var file_public_portworx_pds_backup_apiv1_backup_proto_rawDesc = []byte{ 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x4a, 0x0a, 0x05, 0x50, 0x68, 0x61, - 0x73, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4e, 0x5f, - 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, - 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, - 0x4c, 0x45, 0x44, 0x10, 0x03, 0x22, 0x22, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x25, 0x0a, 0x13, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x22, 0xd6, 0x02, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x86, 0x01, 0x0a, 0x21, 0x64, 0x61, + 0x74, 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x1d, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, + 0x74, 0x61, 0x22, 0x4a, 0x0a, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x50, + 0x48, 0x41, 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, + 0x53, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, + 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x22, 0xdc, + 0x02, 0x0a, 0x1d, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x11, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, + 0x0b, 0x74, 0x6c, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0a, 0x74, 0x6c, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2a, + 0x0a, 0x11, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x61, + 0x74, 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x22, 0x22, 0x0a, + 0x10, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x40, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x05, 0x66, 0x6f, + 0x72, 0x63, 0x65, 0x22, 0x9b, 0x02, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x1a, 0x64, 0x61, + 0x74, 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x0c, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x2c, - 0x0a, 0x11, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0f, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0c, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, - 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x62, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x5a, 0x0a, - 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, - 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, - 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x70, - 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x04, 0x73, 0x6f, 0x72, - 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x09, - 0x0a, 0x07, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x62, 0x79, 0x22, 0xae, 0x01, 0x0a, 0x13, 0x4c, 0x69, - 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3f, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, - 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x73, 0x12, 0x56, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, - 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, - 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x32, 0x9d, 0x03, 0x0a, 0x0d, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x81, 0x01, 0x0a, - 0x09, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x2f, 0x2e, 0x70, 0x75, 0x62, + 0x52, 0x17, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x62, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x5a, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, + 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x33, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x72, 0x74, + 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x62, + 0x79, 0x22, 0xae, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x07, 0x62, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, - 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, - 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x70, 0x64, 0x73, - 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, - 0x12, 0x78, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x12, 0x32, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, - 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1c, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x16, 0x2a, 0x14, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x8d, 0x01, 0x0a, 0x0b, 0x4c, - 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x12, 0x31, 0x2e, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, - 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, - 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x70, 0x64, 0x73, 0x2f, - 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x42, 0x73, 0x0a, 0x21, 0x63, 0x6f, - 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, - 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x42, - 0x0b, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3f, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, - 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, - 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x12, 0x56, 0x0a, 0x0a, 0x70, 0x61, + 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, + 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, + 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x32, 0x9d, 0x03, 0x0a, 0x0d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x12, 0x2f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, + 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, + 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x16, 0x12, 0x14, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x78, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x32, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x2a, 0x14, 0x2f, 0x70, + 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x12, 0x8d, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x73, 0x12, 0x31, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, + 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x11, 0x12, 0x0f, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x73, 0x42, 0x73, 0x0a, 0x21, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, + 0x70, 0x64, 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, + 0x3b, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -825,47 +953,49 @@ func file_public_portworx_pds_backup_apiv1_backup_proto_rawDescGZIP() []byte { } var file_public_portworx_pds_backup_apiv1_backup_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes = make([]protoimpl.MessageInfo, 9) var file_public_portworx_pds_backup_apiv1_backup_proto_goTypes = []interface{}{ (Status_Phase)(0), // 0: public.portworx.pds.backup.v1.Status.Phase (*Backup)(nil), // 1: public.portworx.pds.backup.v1.Backup (*Config)(nil), // 2: public.portworx.pds.backup.v1.Config (*References)(nil), // 3: public.portworx.pds.backup.v1.References (*Status)(nil), // 4: public.portworx.pds.backup.v1.Status - (*GetBackupRequest)(nil), // 5: public.portworx.pds.backup.v1.GetBackupRequest - (*DeleteBackupRequest)(nil), // 6: public.portworx.pds.backup.v1.DeleteBackupRequest - (*ListBackupsRequest)(nil), // 7: public.portworx.pds.backup.v1.ListBackupsRequest - (*ListBackupsResponse)(nil), // 8: public.portworx.pds.backup.v1.ListBackupsResponse - (*apiv1.Meta)(nil), // 9: public.portworx.common.v1.Meta - (*timestamppb.Timestamp)(nil), // 10: google.protobuf.Timestamp - (*apiv1.PageBasedPaginationRequest)(nil), // 11: public.portworx.common.v1.PageBasedPaginationRequest - (*apiv1.Sort)(nil), // 12: public.portworx.common.v1.Sort - (*apiv1.PageBasedPaginationResponse)(nil), // 13: public.portworx.common.v1.PageBasedPaginationResponse - (*emptypb.Empty)(nil), // 14: google.protobuf.Empty + (*DataServiceDeploymentMetaData)(nil), // 5: public.portworx.pds.backup.v1.DataServiceDeploymentMetaData + (*GetBackupRequest)(nil), // 6: public.portworx.pds.backup.v1.GetBackupRequest + (*DeleteBackupRequest)(nil), // 7: public.portworx.pds.backup.v1.DeleteBackupRequest + (*ListBackupsRequest)(nil), // 8: public.portworx.pds.backup.v1.ListBackupsRequest + (*ListBackupsResponse)(nil), // 9: public.portworx.pds.backup.v1.ListBackupsResponse + (*apiv1.Meta)(nil), // 10: public.portworx.common.v1.Meta + (*timestamppb.Timestamp)(nil), // 11: google.protobuf.Timestamp + (*apiv1.PageBasedPaginationRequest)(nil), // 12: public.portworx.common.v1.PageBasedPaginationRequest + (*apiv1.Sort)(nil), // 13: public.portworx.common.v1.Sort + (*apiv1.PageBasedPaginationResponse)(nil), // 14: public.portworx.common.v1.PageBasedPaginationResponse + (*emptypb.Empty)(nil), // 15: google.protobuf.Empty } var file_public_portworx_pds_backup_apiv1_backup_proto_depIdxs = []int32{ - 9, // 0: public.portworx.pds.backup.v1.Backup.meta:type_name -> public.portworx.common.v1.Meta + 10, // 0: public.portworx.pds.backup.v1.Backup.meta:type_name -> public.portworx.common.v1.Meta 2, // 1: public.portworx.pds.backup.v1.Backup.config:type_name -> public.portworx.pds.backup.v1.Config 4, // 2: public.portworx.pds.backup.v1.Backup.status:type_name -> public.portworx.pds.backup.v1.Status 3, // 3: public.portworx.pds.backup.v1.Config.references:type_name -> public.portworx.pds.backup.v1.References - 10, // 4: public.portworx.pds.backup.v1.Status.start_time:type_name -> google.protobuf.Timestamp - 10, // 5: public.portworx.pds.backup.v1.Status.completion_time:type_name -> google.protobuf.Timestamp + 11, // 4: public.portworx.pds.backup.v1.Status.start_time:type_name -> google.protobuf.Timestamp + 11, // 5: public.portworx.pds.backup.v1.Status.completion_time:type_name -> google.protobuf.Timestamp 0, // 6: public.portworx.pds.backup.v1.Status.phase:type_name -> public.portworx.pds.backup.v1.Status.Phase - 11, // 7: public.portworx.pds.backup.v1.ListBackupsRequest.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationRequest - 12, // 8: public.portworx.pds.backup.v1.ListBackupsRequest.sort:type_name -> public.portworx.common.v1.Sort - 1, // 9: public.portworx.pds.backup.v1.ListBackupsResponse.backups:type_name -> public.portworx.pds.backup.v1.Backup - 13, // 10: public.portworx.pds.backup.v1.ListBackupsResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse - 5, // 11: public.portworx.pds.backup.v1.BackupService.GetBackup:input_type -> public.portworx.pds.backup.v1.GetBackupRequest - 6, // 12: public.portworx.pds.backup.v1.BackupService.DeleteBackup:input_type -> public.portworx.pds.backup.v1.DeleteBackupRequest - 7, // 13: public.portworx.pds.backup.v1.BackupService.ListBackups:input_type -> public.portworx.pds.backup.v1.ListBackupsRequest - 1, // 14: public.portworx.pds.backup.v1.BackupService.GetBackup:output_type -> public.portworx.pds.backup.v1.Backup - 14, // 15: public.portworx.pds.backup.v1.BackupService.DeleteBackup:output_type -> google.protobuf.Empty - 8, // 16: public.portworx.pds.backup.v1.BackupService.ListBackups:output_type -> public.portworx.pds.backup.v1.ListBackupsResponse - 14, // [14:17] is the sub-list for method output_type - 11, // [11:14] is the sub-list for method input_type - 11, // [11:11] is the sub-list for extension type_name - 11, // [11:11] is the sub-list for extension extendee - 0, // [0:11] is the sub-list for field type_name + 5, // 7: public.portworx.pds.backup.v1.Status.data_service_deployment_meta_data:type_name -> public.portworx.pds.backup.v1.DataServiceDeploymentMetaData + 12, // 8: public.portworx.pds.backup.v1.ListBackupsRequest.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationRequest + 13, // 9: public.portworx.pds.backup.v1.ListBackupsRequest.sort:type_name -> public.portworx.common.v1.Sort + 1, // 10: public.portworx.pds.backup.v1.ListBackupsResponse.backups:type_name -> public.portworx.pds.backup.v1.Backup + 14, // 11: public.portworx.pds.backup.v1.ListBackupsResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse + 6, // 12: public.portworx.pds.backup.v1.BackupService.GetBackup:input_type -> public.portworx.pds.backup.v1.GetBackupRequest + 7, // 13: public.portworx.pds.backup.v1.BackupService.DeleteBackup:input_type -> public.portworx.pds.backup.v1.DeleteBackupRequest + 8, // 14: public.portworx.pds.backup.v1.BackupService.ListBackups:input_type -> public.portworx.pds.backup.v1.ListBackupsRequest + 1, // 15: public.portworx.pds.backup.v1.BackupService.GetBackup:output_type -> public.portworx.pds.backup.v1.Backup + 15, // 16: public.portworx.pds.backup.v1.BackupService.DeleteBackup:output_type -> google.protobuf.Empty + 9, // 17: public.portworx.pds.backup.v1.BackupService.ListBackups:output_type -> public.portworx.pds.backup.v1.ListBackupsResponse + 15, // [15:18] is the sub-list for method output_type + 12, // [12:15] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name } func init() { file_public_portworx_pds_backup_apiv1_backup_proto_init() } @@ -923,7 +1053,7 @@ func file_public_portworx_pds_backup_apiv1_backup_proto_init() { } } file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBackupRequest); i { + switch v := v.(*DataServiceDeploymentMetaData); i { case 0: return &v.state case 1: @@ -935,7 +1065,7 @@ func file_public_portworx_pds_backup_apiv1_backup_proto_init() { } } file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteBackupRequest); i { + switch v := v.(*GetBackupRequest); i { case 0: return &v.state case 1: @@ -947,7 +1077,7 @@ func file_public_portworx_pds_backup_apiv1_backup_proto_init() { } } file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListBackupsRequest); i { + switch v := v.(*DeleteBackupRequest); i { case 0: return &v.state case 1: @@ -959,6 +1089,18 @@ func file_public_portworx_pds_backup_apiv1_backup_proto_init() { } } file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListBackupsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListBackupsResponse); i { case 0: return &v.state @@ -971,10 +1113,8 @@ func file_public_portworx_pds_backup_apiv1_backup_proto_init() { } } } - file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[6].OneofWrappers = []interface{}{ - (*ListBackupsRequest_DeploymentId)(nil), - (*ListBackupsRequest_TargetClusterId)(nil), - (*ListBackupsRequest_NamespaceId)(nil), + file_public_portworx_pds_backup_apiv1_backup_proto_msgTypes[7].OneofWrappers = []interface{}{ + (*ListBackupsRequest_DataServiceDeploymentId)(nil), (*ListBackupsRequest_BackupConfigId)(nil), } type x struct{} @@ -983,7 +1123,7 @@ func file_public_portworx_pds_backup_apiv1_backup_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_public_portworx_pds_backup_apiv1_backup_proto_rawDesc, NumEnums: 1, - NumMessages: 8, + NumMessages: 9, NumExtensions: 0, NumServices: 1, }, diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/backup/apiv1/backup.pb.gw.go b/vendor/github.com/pure-px/apis/public/portworx/pds/backup/apiv1/backup.pb.gw.go index 1504df26a..156b14312 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/backup/apiv1/backup.pb.gw.go +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/backup/apiv1/backup.pb.gw.go @@ -83,6 +83,10 @@ func local_request_BackupService_GetBackup_0(ctx context.Context, marshaler runt } +var ( + filter_BackupService_DeleteBackup_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + func request_BackupService_DeleteBackup_0(ctx context.Context, marshaler runtime.Marshaler, client BackupServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq DeleteBackupRequest var metadata runtime.ServerMetadata @@ -104,6 +108,13 @@ func request_BackupService_DeleteBackup_0(ctx context.Context, marshaler runtime return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) } + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BackupService_DeleteBackup_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := client.DeleteBackup(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err @@ -130,6 +141,13 @@ func local_request_BackupService_DeleteBackup_0(ctx context.Context, marshaler r return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) } + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BackupService_DeleteBackup_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := server.DeleteBackup(ctx, &protoReq) return msg, metadata, err diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/backup/apiv1/backup.pb.md b/vendor/github.com/pure-px/apis/public/portworx/pds/backup/apiv1/backup.pb.md index 7c97e8add..2521ca58f 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/backup/apiv1/backup.pb.md +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/backup/apiv1/backup.pb.md @@ -14,6 +14,7 @@ - Messages - [Backup](#backup) - [Config](#config) + - [DataServiceDeploymentMetaData](#dataservicedeploymentmetadata) - [DeleteBackupRequest](#deletebackuprequest) - [GetBackupRequest](#getbackuprequest) - [ListBackupsRequest](#listbackupsrequest) @@ -81,6 +82,24 @@ Desired configuration of the Backup. +### DataServiceDeploymentMetaData {#dataservicedeploymentmetadata} +DataService Deployment Meta Data contains the details of the deployment associated with the backup. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| name | [ string](#string) | Name of the data service deployment. | +| custom_resource_name | [ string](#string) | Custom Resource Name is the kubernetes resource name for the deployment meta data. | +| target_cluster_name | [ string](#string) | Target cluster Name associated with the backup. | +| namespace_name | [ string](#string) | Namespace name to which the backup is associated. | +| tls_enabled | [ bool](#bool) | Flag to check whether Transport Layer Security support is enabled or not. | +| data_service_name | [ string](#string) | Name of the data service of data service deployment. | +| data_service_version | [ string](#string) | Name of the version of data service. | +| image_build | [ string](#string) | build tag of the image for the data service version. | + + + + ### DeleteBackupRequest {#deletebackuprequest} Request to delete the Backup resource. @@ -88,6 +107,7 @@ Request to delete the Backup resource. | Field | Type | Description | | ----- | ---- | ----------- | | id | [ string](#string) | UID of the Backup. | +| force | [ bool](#bool) | Force flag to delete backup from control plane only. | @@ -109,9 +129,7 @@ Request to list the Backup resources. | Field | Type | Description | | ----- | ---- | ----------- | -| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.deployment_id | [ string](#string) | Deployment ID for which the backups will be listed. | -| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.target_cluster_id | [ string](#string) | Cluster ID for which the backups will be listed. | -| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.namespace_id | [ string](#string) | Namespace ID for which the backups will be listed. | +| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.data_service_deployment_id | [ string](#string) | Data service Deployment ID for which the backups will be listed. | | [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.backup_config_id | [ string](#string) | Backup Configuration ID for which the backups will be listed. | | pagination | [ public.portworx.common.v1.PageBasedPaginationRequest](#publicportworxcommonv1pagebasedpaginationrequest) | Pagination parameters for listing backups. | | sort | [ public.portworx.common.v1.Sort](#publicportworxcommonv1sort) | Sorting details using which requested list of backups to be sorted. | @@ -155,6 +173,7 @@ Status of the Backup. | error_code | [ string](#string) | ErrorCode if CompletionStatus is "Failed". | | error_message | [ string](#string) | ErrorMessage associated with the ErrorCode. | | file_size | [ int64](#int64) | FileSize of the CloudSnap image. | +| data_service_deployment_meta_data | [ DataServiceDeploymentMetaData](#dataservicedeploymentmetadata) | DataService Deployment Meta Data. | @@ -163,7 +182,7 @@ Status of the Backup. ### Status.Phase {#statusphase} -Enum for Phase of the Deployment. +Enum for Phase of the DataService Deployment. | Name | Number | Description | | ---- | ------ | ----------- | diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/backup/apiv1/backup.proto b/vendor/github.com/pure-px/apis/public/portworx/pds/backup/apiv1/backup.proto index b361969b1..f3256a5dc 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/backup/apiv1/backup.proto +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/backup/apiv1/backup.proto @@ -98,7 +98,7 @@ message Status { // Completion time of the backup. google.protobuf.Timestamp completion_time =3; - // Enum for Phase of the Deployment. + // Enum for Phase of the DataService Deployment. enum Phase { // Phase is unspecified. PHASE_UNSPECIFIED = 0; @@ -124,6 +124,36 @@ message Status { // FileSize of the CloudSnap image. int64 file_size = 7; + + // DataService Deployment Meta Data. + DataServiceDeploymentMetaData data_service_deployment_meta_data = 8; +} + +// DataService Deployment Meta Data contains the details of the deployment associated with the backup. +message DataServiceDeploymentMetaData { + // Name of the data service deployment. + string name = 1; + + // Custom Resource Name is the kubernetes resource name for the deployment meta data. + string custom_resource_name = 2; + + // Target cluster Name associated with the backup. + string target_cluster_name = 3; + + // Namespace name to which the backup is associated. + string namespace_name = 4; + + // Flag to check whether Transport Layer Security support is enabled or not. + bool tls_enabled = 5; + + // Name of the data service of data service deployment. + string data_service_name = 6; + + // Name of the version of data service. + string data_service_version = 7; + + // build tag of the image for the data service version. + string image_build = 8; } // Request to get the Backup resource. @@ -136,30 +166,27 @@ message GetBackupRequest { message DeleteBackupRequest { // UID of the Backup. string id = 1; + + // Force flag to delete backup from control plane only. + bool force = 2 [(google.api.field_behavior) = OPTIONAL]; } // Request to list the Backup resources. message ListBackupsRequest { // Specifies a filter to list the Backups. oneof list_by { - // Deployment ID for which the backups will be listed. - string deployment_id = 1; - - // Cluster ID for which the backups will be listed. - string target_cluster_id = 2; - - // Namespace ID for which the backups will be listed. - string namespace_id = 3; + // Data service Deployment ID for which the backups will be listed. + string data_service_deployment_id = 1; // Backup Configuration ID for which the backups will be listed. - string backup_config_id = 4; + string backup_config_id = 2; } // Pagination parameters for listing backups. - public.portworx.common.v1.PageBasedPaginationRequest pagination = 5 [(google.api.field_behavior) = OPTIONAL]; + public.portworx.common.v1.PageBasedPaginationRequest pagination = 3 [(google.api.field_behavior) = OPTIONAL]; // Sorting details using which requested list of backups to be sorted. - public.portworx.common.v1.Sort sort = 6; + public.portworx.common.v1.Sort sort = 4; } // Response to list Backup request. @@ -171,5 +198,4 @@ message ListBackupsResponse { // (-- api-linter: core::0132::response-unknown-fields=disabled // aip.dev/not-precedent: We need this field for pagination. --) public.portworx.common.v1.PageBasedPaginationResponse pagination = 2; -} - +} \ No newline at end of file diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/backup/apiv1/backup.swagger.json b/vendor/github.com/pure-px/apis/public/portworx/pds/backup/apiv1/backup.swagger.json index dc783d759..3b3cf9c4f 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/backup/apiv1/backup.swagger.json +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/backup/apiv1/backup.swagger.json @@ -38,26 +38,8 @@ }, "parameters": [ { - "name": "deploymentId", - "description": "Deployment ID for which the backups will be listed.", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "targetClusterId", - "description": "Cluster ID for which the backups will be listed.", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "namespaceId", - "description": "Namespace ID for which the backups will be listed.", + "name": "dataServiceDeploymentId", + "description": "Data service Deployment ID for which the backups will be listed.", "in": "query", "required": false, "schema": { @@ -207,6 +189,15 @@ "schema": { "type": "string" } + }, + { + "name": "force", + "description": "Force flag to delete backup from control plane only.", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } } ], "tags": [ @@ -248,7 +239,7 @@ "FAILED" ], "default": "PHASE_UNSPECIFIED", - "description": "Enum for Phase of the Deployment.\n\n - PHASE_UNSPECIFIED: Phase is unspecified.\n - IN_PROGRESS: Backup is in_progress.\n - COMPLETED: Backup is completed.\n - FAILED: Backup is failed." + "description": "Enum for Phase of the DataService Deployment.\n\n - PHASE_UNSPECIFIED: Phase is unspecified.\n - IN_PROGRESS: Backup is in_progress.\n - COMPLETED: Backup is completed.\n - FAILED: Backup is failed." }, "backupv1Status": { "type": "object", @@ -282,6 +273,9 @@ "type": "string", "format": "int64", "description": "FileSize of the CloudSnap image." + }, + "dataServiceDeploymentMetaData": { + "$ref": "#/components/schemas/v1DataServiceDeploymentMetaData" } }, "description": "Status of the Backup." @@ -341,6 +335,44 @@ }, "description": "Desired configuration of the Backup." }, + "v1DataServiceDeploymentMetaData": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the data service deployment." + }, + "customResourceName": { + "type": "string", + "description": "Custom Resource Name is the kubernetes resource name for the deployment meta data." + }, + "targetClusterName": { + "type": "string", + "description": "Target cluster Name associated with the backup." + }, + "namespaceName": { + "type": "string", + "description": "Namespace name to which the backup is associated." + }, + "tlsEnabled": { + "type": "boolean", + "description": "Flag to check whether Transport Layer Security support is enabled or not." + }, + "dataServiceName": { + "type": "string", + "description": "Name of the data service of data service deployment." + }, + "dataServiceVersion": { + "type": "string", + "description": "Name of the version of data service." + }, + "imageBuild": { + "type": "string", + "description": "build tag of the image for the data service version." + } + }, + "description": "DataService Deployment Meta Data contains the details of the deployment associated with the backup." + }, "v1ListBackupsResponse": { "type": "object", "properties": { diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig.pb.go b/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig.pb.go index 97ba615b7..4429b99a3 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig.pb.go +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig.pb.go @@ -38,6 +38,128 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// BackupConfigSuspended to accept value for suspended flag. +type BackupConfigSuspended int32 + +const ( + // List all backup configs. + BackupConfigSuspended_BACKUP_CONFIG_SUSPENDED_UNSPECIFIED BackupConfigSuspended = 0 + // List only suspended backup configs. + BackupConfigSuspended_TRUE BackupConfigSuspended = 1 + // List only disabled backup configs. + BackupConfigSuspended_FALSE BackupConfigSuspended = 2 +) + +// Enum value maps for BackupConfigSuspended. +var ( + BackupConfigSuspended_name = map[int32]string{ + 0: "BACKUP_CONFIG_SUSPENDED_UNSPECIFIED", + 1: "TRUE", + 2: "FALSE", + } + BackupConfigSuspended_value = map[string]int32{ + "BACKUP_CONFIG_SUSPENDED_UNSPECIFIED": 0, + "TRUE": 1, + "FALSE": 2, + } +) + +func (x BackupConfigSuspended) Enum() *BackupConfigSuspended { + p := new(BackupConfigSuspended) + *p = x + return p +} + +func (x BackupConfigSuspended) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BackupConfigSuspended) Descriptor() protoreflect.EnumDescriptor { + return file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_enumTypes[0].Descriptor() +} + +func (BackupConfigSuspended) Type() protoreflect.EnumType { + return &file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_enumTypes[0] +} + +func (x BackupConfigSuspended) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use BackupConfigSuspended.Descriptor instead. +func (BackupConfigSuspended) EnumDescriptor() ([]byte, []int) { + return file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_rawDescGZIP(), []int{0} +} + +// Enum for Phases of the backup configuration. +type Phase int32 + +const ( + // Unspecified state. + Phase_PHASE_UNSPECIFIED Phase = 0 + // Preparing state before creation is successful. + Phase_PREPARING Phase = 1 + // Applied state when create/update is successful. + Phase_APPLIED Phase = 2 + // Updating state. + Phase_UPDATING Phase = 3 + // Failed state. + Phase_FAILED Phase = 4 + // Suspended state. + Phase_SUSPENDED Phase = 5 + // Deleting state. + Phase_DELETING Phase = 6 +) + +// Enum value maps for Phase. +var ( + Phase_name = map[int32]string{ + 0: "PHASE_UNSPECIFIED", + 1: "PREPARING", + 2: "APPLIED", + 3: "UPDATING", + 4: "FAILED", + 5: "SUSPENDED", + 6: "DELETING", + } + Phase_value = map[string]int32{ + "PHASE_UNSPECIFIED": 0, + "PREPARING": 1, + "APPLIED": 2, + "UPDATING": 3, + "FAILED": 4, + "SUSPENDED": 5, + "DELETING": 6, + } +) + +func (x Phase) Enum() *Phase { + p := new(Phase) + *p = x + return p +} + +func (x Phase) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Phase) Descriptor() protoreflect.EnumDescriptor { + return file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_enumTypes[1].Descriptor() +} + +func (Phase) Type() protoreflect.EnumType { + return &file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_enumTypes[1] +} + +func (x Phase) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Phase.Descriptor instead. +func (Phase) EnumDescriptor() ([]byte, []int) { + return file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_rawDescGZIP(), []int{1} +} + // Enum for Backup Type of the backup configuration. type Config_BackupType int32 @@ -75,11 +197,11 @@ func (x Config_BackupType) String() string { } func (Config_BackupType) Descriptor() protoreflect.EnumDescriptor { - return file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_enumTypes[0].Descriptor() + return file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_enumTypes[2].Descriptor() } func (Config_BackupType) Type() protoreflect.EnumType { - return &file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_enumTypes[0] + return &file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_enumTypes[2] } func (x Config_BackupType) Number() protoreflect.EnumNumber { @@ -128,11 +250,11 @@ func (x Config_BackupLevel) String() string { } func (Config_BackupLevel) Descriptor() protoreflect.EnumDescriptor { - return file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_enumTypes[1].Descriptor() + return file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_enumTypes[3].Descriptor() } func (Config_BackupLevel) Type() protoreflect.EnumType { - return &file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_enumTypes[1] + return &file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_enumTypes[3] } func (x Config_BackupLevel) Number() protoreflect.EnumNumber { @@ -181,11 +303,11 @@ func (x Config_ReclaimPolicyType) String() string { } func (Config_ReclaimPolicyType) Descriptor() protoreflect.EnumDescriptor { - return file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_enumTypes[2].Descriptor() + return file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_enumTypes[4].Descriptor() } func (Config_ReclaimPolicyType) Type() protoreflect.EnumType { - return &file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_enumTypes[2] + return &file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_enumTypes[4] } func (x Config_ReclaimPolicyType) Number() protoreflect.EnumNumber { @@ -197,71 +319,6 @@ func (Config_ReclaimPolicyType) EnumDescriptor() ([]byte, []int) { return file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_rawDescGZIP(), []int{7, 2} } -// Enum for Phases of the backup configuration. -type Status_Phase int32 - -const ( - // Unspecified state. - Status_PHASE_UNSPECIFIED Status_Phase = 0 - // Preparing state before creation is successful. - Status_PREPARING Status_Phase = 1 - // Applied state when create/update is successful. - Status_APPLIED Status_Phase = 2 - // Updating state. - Status_UPDATING Status_Phase = 3 - // Failed state. - Status_FAILED Status_Phase = 4 - // Suspended state. - Status_SUSPENDED Status_Phase = 5 -) - -// Enum value maps for Status_Phase. -var ( - Status_Phase_name = map[int32]string{ - 0: "PHASE_UNSPECIFIED", - 1: "PREPARING", - 2: "APPLIED", - 3: "UPDATING", - 4: "FAILED", - 5: "SUSPENDED", - } - Status_Phase_value = map[string]int32{ - "PHASE_UNSPECIFIED": 0, - "PREPARING": 1, - "APPLIED": 2, - "UPDATING": 3, - "FAILED": 4, - "SUSPENDED": 5, - } -) - -func (x Status_Phase) Enum() *Status_Phase { - p := new(Status_Phase) - *p = x - return p -} - -func (x Status_Phase) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Status_Phase) Descriptor() protoreflect.EnumDescriptor { - return file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_enumTypes[3].Descriptor() -} - -func (Status_Phase) Type() protoreflect.EnumType { - return &file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_enumTypes[3] -} - -func (x Status_Phase) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Status_Phase.Descriptor instead. -func (Status_Phase) EnumDescriptor() ([]byte, []int) { - return file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_rawDescGZIP(), []int{10, 0} -} - // Request to get the backup configuration of the specified backup. type GetBackupConfigRequest struct { state protoimpl.MessageState @@ -321,17 +378,18 @@ type ListBackupConfigsRequest struct { // // Types that are assignable to ListBy: // - // *ListBackupConfigsRequest_AccountId // *ListBackupConfigsRequest_TenantId // *ListBackupConfigsRequest_ProjectId // *ListBackupConfigsRequest_TargetClusterId // *ListBackupConfigsRequest_NamespaceId - // *ListBackupConfigsRequest_DeploymentId + // *ListBackupConfigsRequest_DataServiceDeploymentId ListBy isListBackupConfigsRequest_ListBy `protobuf_oneof:"list_by"` // Pagination metadata for listing backup configuration. - Pagination *apiv1.PageBasedPaginationRequest `protobuf:"bytes,7,opt,name=pagination,proto3" json:"pagination,omitempty"` + Pagination *apiv1.PageBasedPaginationRequest `protobuf:"bytes,6,opt,name=pagination,proto3" json:"pagination,omitempty"` // Sorting details using which requested list of backup configurations to be sorted. - Sort *apiv1.Sort `protobuf:"bytes,8,opt,name=sort,proto3" json:"sort,omitempty"` + Sort *apiv1.Sort `protobuf:"bytes,7,opt,name=sort,proto3" json:"sort,omitempty"` + // Filter backup configs based on suspended flag. + Suspended BackupConfigSuspended `protobuf:"varint,8,opt,name=suspended,proto3,enum=public.portworx.pds.backupconfig.v1.BackupConfigSuspended" json:"suspended,omitempty"` } func (x *ListBackupConfigsRequest) Reset() { @@ -373,13 +431,6 @@ func (m *ListBackupConfigsRequest) GetListBy() isListBackupConfigsRequest_ListBy return nil } -func (x *ListBackupConfigsRequest) GetAccountId() string { - if x, ok := x.GetListBy().(*ListBackupConfigsRequest_AccountId); ok { - return x.AccountId - } - return "" -} - func (x *ListBackupConfigsRequest) GetTenantId() string { if x, ok := x.GetListBy().(*ListBackupConfigsRequest_TenantId); ok { return x.TenantId @@ -408,9 +459,9 @@ func (x *ListBackupConfigsRequest) GetNamespaceId() string { return "" } -func (x *ListBackupConfigsRequest) GetDeploymentId() string { - if x, ok := x.GetListBy().(*ListBackupConfigsRequest_DeploymentId); ok { - return x.DeploymentId +func (x *ListBackupConfigsRequest) GetDataServiceDeploymentId() string { + if x, ok := x.GetListBy().(*ListBackupConfigsRequest_DataServiceDeploymentId); ok { + return x.DataServiceDeploymentId } return "" } @@ -429,42 +480,42 @@ func (x *ListBackupConfigsRequest) GetSort() *apiv1.Sort { return nil } -type isListBackupConfigsRequest_ListBy interface { - isListBackupConfigsRequest_ListBy() +func (x *ListBackupConfigsRequest) GetSuspended() BackupConfigSuspended { + if x != nil { + return x.Suspended + } + return BackupConfigSuspended_BACKUP_CONFIG_SUSPENDED_UNSPECIFIED } -type ListBackupConfigsRequest_AccountId struct { - // Account ID for which the backup configurations will be listed. - AccountId string `protobuf:"bytes,1,opt,name=account_id,json=accountId,proto3,oneof"` +type isListBackupConfigsRequest_ListBy interface { + isListBackupConfigsRequest_ListBy() } type ListBackupConfigsRequest_TenantId struct { // Tenant ID for which the backup configurations will be listed. - TenantId string `protobuf:"bytes,2,opt,name=tenant_id,json=tenantId,proto3,oneof"` + TenantId string `protobuf:"bytes,1,opt,name=tenant_id,json=tenantId,proto3,oneof"` } type ListBackupConfigsRequest_ProjectId struct { // Project ID for which the backup configurations will be listed. - ProjectId string `protobuf:"bytes,3,opt,name=project_id,json=projectId,proto3,oneof"` + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3,oneof"` } type ListBackupConfigsRequest_TargetClusterId struct { // Cluster ID for which the backup configurations will be listed. - TargetClusterId string `protobuf:"bytes,4,opt,name=target_cluster_id,json=targetClusterId,proto3,oneof"` + TargetClusterId string `protobuf:"bytes,3,opt,name=target_cluster_id,json=targetClusterId,proto3,oneof"` } type ListBackupConfigsRequest_NamespaceId struct { // Namespace ID for which the backup configurations will be listed. - NamespaceId string `protobuf:"bytes,5,opt,name=namespace_id,json=namespaceId,proto3,oneof"` + NamespaceId string `protobuf:"bytes,4,opt,name=namespace_id,json=namespaceId,proto3,oneof"` } -type ListBackupConfigsRequest_DeploymentId struct { - // Deployment ID for which the backup configurations will be listed. - DeploymentId string `protobuf:"bytes,6,opt,name=deployment_id,json=deploymentId,proto3,oneof"` +type ListBackupConfigsRequest_DataServiceDeploymentId struct { + // Data service Deployment ID for which the backup configurations will be listed. + DataServiceDeploymentId string `protobuf:"bytes,5,opt,name=data_service_deployment_id,json=dataServiceDeploymentId,proto3,oneof"` } -func (*ListBackupConfigsRequest_AccountId) isListBackupConfigsRequest_ListBy() {} - func (*ListBackupConfigsRequest_TenantId) isListBackupConfigsRequest_ListBy() {} func (*ListBackupConfigsRequest_ProjectId) isListBackupConfigsRequest_ListBy() {} @@ -473,7 +524,7 @@ func (*ListBackupConfigsRequest_TargetClusterId) isListBackupConfigsRequest_List func (*ListBackupConfigsRequest_NamespaceId) isListBackupConfigsRequest_ListBy() {} -func (*ListBackupConfigsRequest_DeploymentId) isListBackupConfigsRequest_ListBy() {} +func (*ListBackupConfigsRequest_DataServiceDeploymentId) isListBackupConfigsRequest_ListBy() {} // Response of list of backup configurations. type ListBackupConfigsResponse struct { @@ -564,8 +615,8 @@ type CreateBackupConfigRequest struct { // aip.dev/not-precedent: We really need this field to be required // to support creation of the resource in the deployment context.. --) // - // Deployment id associated with the backup configuration. - DeploymentId string `protobuf:"bytes,2,opt,name=deployment_id,json=deploymentId,proto3" json:"deployment_id,omitempty"` + // Data service Deployment id associated with the backup configuration. + DataServiceDeploymentId string `protobuf:"bytes,2,opt,name=data_service_deployment_id,json=dataServiceDeploymentId,proto3" json:"data_service_deployment_id,omitempty"` // Backup configuration for the backup. BackupConfig *BackupConfig `protobuf:"bytes,3,opt,name=backup_config,json=backupConfig,proto3" json:"backup_config,omitempty"` } @@ -609,9 +660,9 @@ func (x *CreateBackupConfigRequest) GetProjectId() string { return "" } -func (x *CreateBackupConfigRequest) GetDeploymentId() string { +func (x *CreateBackupConfigRequest) GetDataServiceDeploymentId() string { if x != nil { - return x.DeploymentId + return x.DataServiceDeploymentId } return "" } @@ -634,8 +685,8 @@ type UpdateBackupConfigRequest struct { // ID of the backup configuration. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // Job History Limit is a number of retained backup jobs. Must be greater than or equal to 1. - JobHistoryLimit int32 `protobuf:"varint,2,opt,name=job_history_limit,json=jobHistoryLimit,proto3" json:"job_history_limit,omitempty"` + // Suspend flag is used to suspend or resume a scheduled backup. + Suspend BackupConfigSuspended `protobuf:"varint,2,opt,name=suspend,proto3,enum=public.portworx.pds.backupconfig.v1.BackupConfigSuspended" json:"suspend,omitempty"` // Labels to apply to the Backup Config object. Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Annotations for the Backup Config object. @@ -681,11 +732,11 @@ func (x *UpdateBackupConfigRequest) GetId() string { return "" } -func (x *UpdateBackupConfigRequest) GetJobHistoryLimit() int32 { +func (x *UpdateBackupConfigRequest) GetSuspend() BackupConfigSuspended { if x != nil { - return x.JobHistoryLimit + return x.Suspend } - return 0 + return BackupConfigSuspended_BACKUP_CONFIG_SUSPENDED_UNSPECIFIED } func (x *UpdateBackupConfigRequest) GetLabels() map[string]string { @@ -710,6 +761,8 @@ type DeleteBackupConfigRequest struct { // ID of the backup configuration. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Force flag to delete backup configuration from control plane only. + Force bool `protobuf:"varint,9,opt,name=force,proto3" json:"force,omitempty"` } func (x *DeleteBackupConfigRequest) Reset() { @@ -751,6 +804,13 @@ func (x *DeleteBackupConfigRequest) GetId() string { return "" } +func (x *DeleteBackupConfigRequest) GetForce() bool { + if x != nil { + return x.Force + } + return false +} + // Resource representing the backup configuration for a backup. type BackupConfig struct { state protoimpl.MessageState @@ -826,18 +886,16 @@ type Config struct { // References to the associated objects for backup configuration. References *References `protobuf:"bytes,1,opt,name=references,proto3" json:"references,omitempty"` - // Job History Limit is a number of retained backup jobs. Must be greater than or equal to 1. - JobHistoryLimit int32 `protobuf:"varint,2,opt,name=job_history_limit,json=jobHistoryLimit,proto3" json:"job_history_limit,omitempty"` // BackupPolicy associated with the backup config. - BackupPolicy *BackupPolicy `protobuf:"bytes,3,opt,name=backup_policy,json=backupPolicy,proto3" json:"backup_policy,omitempty"` - // Suspend flag is used to suspend a scheduled backup from creating new backup jobs. - Suspend bool `protobuf:"varint,4,opt,name=suspend,proto3" json:"suspend,omitempty"` + BackupPolicy *BackupPolicy `protobuf:"bytes,2,opt,name=backup_policy,json=backupPolicy,proto3" json:"backup_policy,omitempty"` + // Suspend flag is used to suspend a scheduled backup from creating new backups. + Suspend bool `protobuf:"varint,3,opt,name=suspend,proto3" json:"suspend,omitempty"` // Backup Type for the backup configuration. - BackupType Config_BackupType `protobuf:"varint,5,opt,name=backup_type,json=backupType,proto3,enum=public.portworx.pds.backupconfig.v1.Config_BackupType" json:"backup_type,omitempty"` + BackupType Config_BackupType `protobuf:"varint,4,opt,name=backup_type,json=backupType,proto3,enum=public.portworx.pds.backupconfig.v1.Config_BackupType" json:"backup_type,omitempty"` // Backup Level for the backup configuration. - BackupLevel Config_BackupLevel `protobuf:"varint,6,opt,name=backup_level,json=backupLevel,proto3,enum=public.portworx.pds.backupconfig.v1.Config_BackupLevel" json:"backup_level,omitempty"` + BackupLevel Config_BackupLevel `protobuf:"varint,5,opt,name=backup_level,json=backupLevel,proto3,enum=public.portworx.pds.backupconfig.v1.Config_BackupLevel" json:"backup_level,omitempty"` // Reclaim Policy decides if the volume snapshots should get deleted when a Backup CR gets deleted. - ReclaimPolicy Config_ReclaimPolicyType `protobuf:"varint,7,opt,name=reclaim_policy,json=reclaimPolicy,proto3,enum=public.portworx.pds.backupconfig.v1.Config_ReclaimPolicyType" json:"reclaim_policy,omitempty"` + ReclaimPolicy Config_ReclaimPolicyType `protobuf:"varint,6,opt,name=reclaim_policy,json=reclaimPolicy,proto3,enum=public.portworx.pds.backupconfig.v1.Config_ReclaimPolicyType" json:"reclaim_policy,omitempty"` } func (x *Config) Reset() { @@ -879,13 +937,6 @@ func (x *Config) GetReferences() *References { return nil } -func (x *Config) GetJobHistoryLimit() int32 { - if x != nil { - return x.JobHistoryLimit - } - return 0 -} - func (x *Config) GetBackupPolicy() *BackupPolicy { if x != nil { return x.BackupPolicy @@ -927,8 +978,8 @@ type References struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // UID of the deployment to which the backup configuration belong. - DeploymentId string `protobuf:"bytes,1,opt,name=deployment_id,json=deploymentId,proto3" json:"deployment_id,omitempty"` + // UID of the data service deployment to which the backup configuration belong. + DataServiceDeploymentId string `protobuf:"bytes,1,opt,name=data_service_deployment_id,json=dataServiceDeploymentId,proto3" json:"data_service_deployment_id,omitempty"` // UID of the backup target to which the backup configuration belong. BackupLocationId string `protobuf:"bytes,2,opt,name=backup_location_id,json=backupLocationId,proto3" json:"backup_location_id,omitempty"` // UID of the data service to which the backup configuration belong. @@ -967,9 +1018,9 @@ func (*References) Descriptor() ([]byte, []int) { return file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_rawDescGZIP(), []int{8} } -func (x *References) GetDeploymentId() string { +func (x *References) GetDataServiceDeploymentId() string { if x != nil { - return x.DeploymentId + return x.DataServiceDeploymentId } return "" } @@ -1053,13 +1104,17 @@ type Status struct { unknownFields protoimpl.UnknownFields // Phase specifies the phase of backup CR in target cluster. - Phase Status_Phase `protobuf:"varint,1,opt,name=phase,proto3,enum=public.portworx.pds.backupconfig.v1.Status_Phase" json:"phase,omitempty"` + Phase Phase `protobuf:"varint,1,opt,name=phase,proto3,enum=public.portworx.pds.backupconfig.v1.Phase" json:"phase,omitempty"` // Custom Resource Name is the kubernetes resource name for the backup that is built from ID. CustomResourceName string `protobuf:"bytes,2,opt,name=custom_resource_name,json=customResourceName,proto3" json:"custom_resource_name,omitempty"` // Flag to check if the backup policy is synchronized or not. IsBackupPolicySynchronized bool `protobuf:"varint,3,opt,name=is_backup_policy_synchronized,json=isBackupPolicySynchronized,proto3" json:"is_backup_policy_synchronized,omitempty"` - // Deployment Meta Data. - DeploymentMetaData *DeploymentMetaData `protobuf:"bytes,4,opt,name=deployment_meta_data,json=deploymentMetaData,proto3" json:"deployment_meta_data,omitempty"` + // DataService Deployment Meta Data. + DataServiceDeploymentMetaData *DataServiceDeploymentMetaData `protobuf:"bytes,4,opt,name=data_service_deployment_meta_data,json=dataServiceDeploymentMetaData,proto3" json:"data_service_deployment_meta_data,omitempty"` + // Error code. + ErrorCode string `protobuf:"bytes,5,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"` + // Error message. + ErrorMessage string `protobuf:"bytes,6,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` } func (x *Status) Reset() { @@ -1094,11 +1149,11 @@ func (*Status) Descriptor() ([]byte, []int) { return file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_rawDescGZIP(), []int{10} } -func (x *Status) GetPhase() Status_Phase { +func (x *Status) GetPhase() Phase { if x != nil { return x.Phase } - return Status_PHASE_UNSPECIFIED + return Phase_PHASE_UNSPECIFIED } func (x *Status) GetCustomResourceName() string { @@ -1115,33 +1170,47 @@ func (x *Status) GetIsBackupPolicySynchronized() bool { return false } -func (x *Status) GetDeploymentMetaData() *DeploymentMetaData { +func (x *Status) GetDataServiceDeploymentMetaData() *DataServiceDeploymentMetaData { if x != nil { - return x.DeploymentMetaData + return x.DataServiceDeploymentMetaData } return nil } -// Deployment Meta Data contains the details of the deployment associated with the backup configuration. -type DeploymentMetaData struct { +func (x *Status) GetErrorCode() string { + if x != nil { + return x.ErrorCode + } + return "" +} + +func (x *Status) GetErrorMessage() string { + if x != nil { + return x.ErrorMessage + } + return "" +} + +// DataServiceDeployment Meta Data contains the details of the DataService deployment associated with the backup configuration. +type DataServiceDeploymentMetaData struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Name of the deployment. + // Name of the DataService deployment. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Custom Resource Name is the kubernetes resource name for the deployment meta data. CustomResourceName string `protobuf:"bytes,2,opt,name=custom_resource_name,json=customResourceName,proto3" json:"custom_resource_name,omitempty"` - // Deployment Target Name associated with the backup configuration. - DeploymentTargetName string `protobuf:"bytes,3,opt,name=deployment_target_name,json=deploymentTargetName,proto3" json:"deployment_target_name,omitempty"` + // Target cluster Name associated with the backup configuration. + TargetClusterName string `protobuf:"bytes,3,opt,name=target_cluster_name,json=targetClusterName,proto3" json:"target_cluster_name,omitempty"` // Namespace name to which the backup configuration is associated. NamespaceName string `protobuf:"bytes,4,opt,name=namespace_name,json=namespaceName,proto3" json:"namespace_name,omitempty"` // Flag to check whether Transport Layer Security support is enabled or not. TlsEnabled bool `protobuf:"varint,5,opt,name=tls_enabled,json=tlsEnabled,proto3" json:"tls_enabled,omitempty"` } -func (x *DeploymentMetaData) Reset() { - *x = DeploymentMetaData{} +func (x *DataServiceDeploymentMetaData) Reset() { + *x = DataServiceDeploymentMetaData{} if protoimpl.UnsafeEnabled { mi := &file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1149,13 +1218,13 @@ func (x *DeploymentMetaData) Reset() { } } -func (x *DeploymentMetaData) String() string { +func (x *DataServiceDeploymentMetaData) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DeploymentMetaData) ProtoMessage() {} +func (*DataServiceDeploymentMetaData) ProtoMessage() {} -func (x *DeploymentMetaData) ProtoReflect() protoreflect.Message { +func (x *DataServiceDeploymentMetaData) ProtoReflect() protoreflect.Message { mi := &file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1167,40 +1236,40 @@ func (x *DeploymentMetaData) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DeploymentMetaData.ProtoReflect.Descriptor instead. -func (*DeploymentMetaData) Descriptor() ([]byte, []int) { +// Deprecated: Use DataServiceDeploymentMetaData.ProtoReflect.Descriptor instead. +func (*DataServiceDeploymentMetaData) Descriptor() ([]byte, []int) { return file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_rawDescGZIP(), []int{11} } -func (x *DeploymentMetaData) GetName() string { +func (x *DataServiceDeploymentMetaData) GetName() string { if x != nil { return x.Name } return "" } -func (x *DeploymentMetaData) GetCustomResourceName() string { +func (x *DataServiceDeploymentMetaData) GetCustomResourceName() string { if x != nil { return x.CustomResourceName } return "" } -func (x *DeploymentMetaData) GetDeploymentTargetName() string { +func (x *DataServiceDeploymentMetaData) GetTargetClusterName() string { if x != nil { - return x.DeploymentTargetName + return x.TargetClusterName } return "" } -func (x *DeploymentMetaData) GetNamespaceName() string { +func (x *DataServiceDeploymentMetaData) GetNamespaceName() string { if x != nil { return x.NamespaceName } return "" } -func (x *DeploymentMetaData) GetTlsEnabled() bool { +func (x *DataServiceDeploymentMetaData) GetTlsEnabled() bool { if x != nil { return x.TlsEnabled } @@ -1232,267 +1301,290 @@ var file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_rawDesc = []b 0x76, 0x31, 0x2f, 0x73, 0x6f, 0x72, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x28, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x8c, 0x03, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xe2, 0x03, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0d, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, - 0x55, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x6c, - 0x69, 0x73, 0x74, 0x5f, 0x62, 0x79, 0x22, 0xcd, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, - 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x0d, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x56, - 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xc6, 0x01, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x09, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0d, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x12, 0x5b, 0x0a, 0x0d, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, - 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x03, 0xe0, 0x41, - 0x02, 0x52, 0x0c, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, - 0xa9, 0x03, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2a, 0x0a, - 0x11, 0x6a, 0x6f, 0x62, 0x5f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x6a, 0x6f, 0x62, 0x48, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x62, 0x0a, 0x06, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, - 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x71, 0x0a, - 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x1a, 0x64, 0x61, 0x74, 0x61, 0x5f, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x17, 0x64, + 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x55, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, + 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, + 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x73, 0x6f, + 0x72, 0x74, 0x12, 0x5d, 0x0a, 0x09, 0x73, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x65, + 0x64, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x09, 0x73, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x65, + 0x64, 0x42, 0x09, 0x0a, 0x07, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x62, 0x79, 0x22, 0xcd, 0x01, 0x0a, + 0x19, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0e, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3e, 0x0a, 0x10, 0x41, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2b, 0x0a, 0x19, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xd2, 0x01, 0x0a, 0x0c, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x33, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x43, - 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, - 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, - 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x48, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xfa, 0x05, - 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4f, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, - 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x0a, 0x72, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6a, 0x6f, 0x62, - 0x5f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x6a, 0x6f, 0x62, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, - 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x5b, 0x0a, 0x0d, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x73, 0x12, 0x56, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, + 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xde, 0x01, 0x0a, + 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, + 0xe0, 0x41, 0x02, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x40, + 0x0a, 0x1a, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x17, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x12, 0x5b, 0x0a, 0x0d, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, + 0x0c, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xd3, 0x03, + 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x54, 0x0a, 0x07, 0x73, + 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, - 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0c, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x0b, - 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, + 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, + 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x52, 0x07, 0x73, 0x75, 0x73, 0x70, 0x65, 0x6e, + 0x64, 0x12, 0x62, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x4a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x5a, 0x0a, 0x0c, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, - 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x37, 0x2e, 0x70, 0x75, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x71, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, + 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x46, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x19, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x42, + 0x03, 0xe0, 0x41, 0x01, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0xd2, 0x01, 0x0a, 0x0c, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x33, 0x0a, 0x04, + 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, + 0x61, 0x12, 0x43, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x48, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, + 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x22, 0xce, 0x05, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4f, 0x0a, 0x0a, 0x72, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, + 0x52, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x5b, 0x0a, 0x0d, + 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, + 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0c, 0x62, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x73, + 0x70, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x73, 0x70, + 0x65, 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x0b, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x5a, 0x0a, 0x0c, + 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x37, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, + 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x0b, 0x62, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x64, 0x0a, 0x0e, 0x72, 0x65, 0x63, 0x6c, + 0x61, 0x69, 0x6d, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x3d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x0d, 0x72, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x43, + 0x0a, 0x0a, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x17, + 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x44, 0x48, + 0x4f, 0x43, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, + 0x44, 0x10, 0x02, 0x22, 0x4a, 0x0a, 0x0b, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x12, 0x1c, 0x0a, 0x18, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x5f, 0x4c, 0x45, 0x56, + 0x45, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x4e, 0x41, 0x50, 0x53, 0x48, 0x4f, 0x54, 0x10, 0x01, 0x12, 0x0f, + 0x0a, 0x0b, 0x49, 0x4e, 0x43, 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x41, 0x4c, 0x10, 0x02, 0x22, + 0x50, 0x0a, 0x11, 0x52, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x1f, 0x52, 0x45, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, + 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4c, + 0x45, 0x54, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x54, 0x41, 0x49, 0x4e, 0x10, + 0x02, 0x22, 0xae, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, + 0x12, 0x40, 0x0a, 0x1a, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x17, 0x64, 0x61, 0x74, 0x61, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x12, 0x31, 0x0a, 0x12, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, + 0xe0, 0x41, 0x02, 0x52, 0x10, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, + 0xe0, 0x41, 0x03, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x49, 0x64, 0x22, 0x49, 0x0a, 0x0c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x92, 0x03, + 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x40, 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x68, + 0x61, 0x73, 0x65, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x63, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x1d, + 0x69, 0x73, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x1a, 0x69, 0x73, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x53, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x12, + 0x8c, 0x01, 0x0a, 0x21, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, + 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x52, 0x0b, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x12, 0x64, 0x0a, 0x0e, 0x72, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3d, 0x2e, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, - 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x72, 0x65, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x43, 0x0a, 0x0a, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x44, 0x48, 0x4f, 0x43, 0x10, 0x01, 0x12, 0x0d, 0x0a, - 0x09, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x22, 0x4a, 0x0a, 0x0b, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1c, 0x0a, 0x18, 0x42, - 0x41, 0x43, 0x4b, 0x55, 0x50, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x4e, 0x41, - 0x50, 0x53, 0x48, 0x4f, 0x54, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4e, 0x43, 0x52, 0x45, - 0x4d, 0x45, 0x4e, 0x54, 0x41, 0x4c, 0x10, 0x02, 0x22, 0x50, 0x0a, 0x11, 0x52, 0x65, 0x63, 0x6c, - 0x61, 0x69, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, - 0x1f, 0x52, 0x45, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x01, 0x12, 0x0a, - 0x0a, 0x06, 0x52, 0x45, 0x54, 0x41, 0x49, 0x4e, 0x10, 0x02, 0x22, 0x96, 0x01, 0x0a, 0x0a, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0d, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x12, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x03, 0xe0, 0x41, 0x02, 0x52, 0x10, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x49, 0x64, 0x22, 0x49, 0x0a, 0x0c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x96, - 0x03, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x47, 0x0a, 0x05, 0x70, 0x68, 0x61, - 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x52, 0x05, 0x70, 0x68, 0x61, - 0x73, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x1d, 0x69, 0x73, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, - 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x69, 0x73, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x53, 0x79, 0x6e, 0x63, 0x68, - 0x72, 0x6f, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x69, 0x0a, 0x14, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, - 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x12, - 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, - 0x74, 0x61, 0x22, 0x63, 0x0a, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x50, - 0x48, 0x41, 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x10, - 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, - 0x0a, 0x08, 0x55, 0x50, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, - 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x55, 0x53, 0x50, - 0x45, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x05, 0x22, 0xdd, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x14, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x1d, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1d, + 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, + 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x22, 0xe2, 0x01, 0x0a, 0x1d, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x14, 0x63, 0x75, 0x73, 0x74, + 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x12, 0x63, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x2e, 0x0a, 0x13, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6c, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x74, 0x6c, 0x73, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x32, 0xf7, 0x06, 0x0a, 0x13, 0x42, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0xa5, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x3b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x31, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, - 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x70, 0x64, - 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xb1, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x3d, 0x2e, + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2a, 0x55, 0x0a, 0x15, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x64, + 0x12, 0x27, 0x0a, 0x23, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, + 0x47, 0x5f, 0x53, 0x55, 0x53, 0x50, 0x45, 0x4e, 0x44, 0x45, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, + 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x02, 0x2a, 0x71, + 0x0a, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x48, 0x41, 0x53, 0x45, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, + 0x0a, 0x09, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, + 0x07, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x55, 0x50, + 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, + 0x45, 0x44, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x55, 0x53, 0x50, 0x45, 0x4e, 0x44, 0x45, + 0x44, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, 0x10, + 0x06, 0x32, 0xf7, 0x06, 0x0a, 0x13, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xa5, 0x01, 0x0a, 0x0f, 0x47, 0x65, + 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, - 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0xbf, 0x01, 0x0a, 0x12, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x3e, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x01, 0x2a, - 0x22, 0x2b, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0xae, 0x01, - 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3e, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, - 0x01, 0x2a, 0x1a, 0x1a, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x90, - 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3e, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, - 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x22, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x62, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, + 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x22, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, - 0x7d, 0x42, 0x8b, 0x01, 0x0a, 0x27, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x7d, 0x12, 0xb1, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x3d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x42, 0x11, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x50, 0x01, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, - 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x70, 0x64, 0x73, 0x2f, - 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x3b, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, + 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, + 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0xbf, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3e, 0x2e, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, + 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, + 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, + 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x01, 0x2a, 0x22, 0x2b, 0x2f, 0x70, 0x64, 0x73, + 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0xae, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3e, + 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, + 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, + 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, + 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x1a, 0x1a, 0x2f, 0x70, + 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x90, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x3e, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, + 0x1a, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x42, 0x8b, 0x01, 0x0a, 0x27, + 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x42, 0x11, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4b, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, + 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, + 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x62, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -1507,66 +1599,69 @@ func file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_rawDescGZIP( return file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_rawDescData } -var file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_enumTypes = make([]protoimpl.EnumInfo, 4) +var file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_enumTypes = make([]protoimpl.EnumInfo, 5) var file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_msgTypes = make([]protoimpl.MessageInfo, 14) var file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_goTypes = []interface{}{ - (Config_BackupType)(0), // 0: public.portworx.pds.backupconfig.v1.Config.BackupType - (Config_BackupLevel)(0), // 1: public.portworx.pds.backupconfig.v1.Config.BackupLevel - (Config_ReclaimPolicyType)(0), // 2: public.portworx.pds.backupconfig.v1.Config.ReclaimPolicyType - (Status_Phase)(0), // 3: public.portworx.pds.backupconfig.v1.Status.Phase - (*GetBackupConfigRequest)(nil), // 4: public.portworx.pds.backupconfig.v1.GetBackupConfigRequest - (*ListBackupConfigsRequest)(nil), // 5: public.portworx.pds.backupconfig.v1.ListBackupConfigsRequest - (*ListBackupConfigsResponse)(nil), // 6: public.portworx.pds.backupconfig.v1.ListBackupConfigsResponse - (*CreateBackupConfigRequest)(nil), // 7: public.portworx.pds.backupconfig.v1.CreateBackupConfigRequest - (*UpdateBackupConfigRequest)(nil), // 8: public.portworx.pds.backupconfig.v1.UpdateBackupConfigRequest - (*DeleteBackupConfigRequest)(nil), // 9: public.portworx.pds.backupconfig.v1.DeleteBackupConfigRequest - (*BackupConfig)(nil), // 10: public.portworx.pds.backupconfig.v1.BackupConfig - (*Config)(nil), // 11: public.portworx.pds.backupconfig.v1.Config - (*References)(nil), // 12: public.portworx.pds.backupconfig.v1.References - (*BackupPolicy)(nil), // 13: public.portworx.pds.backupconfig.v1.BackupPolicy - (*Status)(nil), // 14: public.portworx.pds.backupconfig.v1.Status - (*DeploymentMetaData)(nil), // 15: public.portworx.pds.backupconfig.v1.DeploymentMetaData - nil, // 16: public.portworx.pds.backupconfig.v1.UpdateBackupConfigRequest.LabelsEntry - nil, // 17: public.portworx.pds.backupconfig.v1.UpdateBackupConfigRequest.AnnotationsEntry - (*apiv1.PageBasedPaginationRequest)(nil), // 18: public.portworx.common.v1.PageBasedPaginationRequest - (*apiv1.Sort)(nil), // 19: public.portworx.common.v1.Sort - (*apiv1.PageBasedPaginationResponse)(nil), // 20: public.portworx.common.v1.PageBasedPaginationResponse - (*apiv1.Meta)(nil), // 21: public.portworx.common.v1.Meta - (*emptypb.Empty)(nil), // 22: google.protobuf.Empty + (BackupConfigSuspended)(0), // 0: public.portworx.pds.backupconfig.v1.BackupConfigSuspended + (Phase)(0), // 1: public.portworx.pds.backupconfig.v1.Phase + (Config_BackupType)(0), // 2: public.portworx.pds.backupconfig.v1.Config.BackupType + (Config_BackupLevel)(0), // 3: public.portworx.pds.backupconfig.v1.Config.BackupLevel + (Config_ReclaimPolicyType)(0), // 4: public.portworx.pds.backupconfig.v1.Config.ReclaimPolicyType + (*GetBackupConfigRequest)(nil), // 5: public.portworx.pds.backupconfig.v1.GetBackupConfigRequest + (*ListBackupConfigsRequest)(nil), // 6: public.portworx.pds.backupconfig.v1.ListBackupConfigsRequest + (*ListBackupConfigsResponse)(nil), // 7: public.portworx.pds.backupconfig.v1.ListBackupConfigsResponse + (*CreateBackupConfigRequest)(nil), // 8: public.portworx.pds.backupconfig.v1.CreateBackupConfigRequest + (*UpdateBackupConfigRequest)(nil), // 9: public.portworx.pds.backupconfig.v1.UpdateBackupConfigRequest + (*DeleteBackupConfigRequest)(nil), // 10: public.portworx.pds.backupconfig.v1.DeleteBackupConfigRequest + (*BackupConfig)(nil), // 11: public.portworx.pds.backupconfig.v1.BackupConfig + (*Config)(nil), // 12: public.portworx.pds.backupconfig.v1.Config + (*References)(nil), // 13: public.portworx.pds.backupconfig.v1.References + (*BackupPolicy)(nil), // 14: public.portworx.pds.backupconfig.v1.BackupPolicy + (*Status)(nil), // 15: public.portworx.pds.backupconfig.v1.Status + (*DataServiceDeploymentMetaData)(nil), // 16: public.portworx.pds.backupconfig.v1.DataServiceDeploymentMetaData + nil, // 17: public.portworx.pds.backupconfig.v1.UpdateBackupConfigRequest.LabelsEntry + nil, // 18: public.portworx.pds.backupconfig.v1.UpdateBackupConfigRequest.AnnotationsEntry + (*apiv1.PageBasedPaginationRequest)(nil), // 19: public.portworx.common.v1.PageBasedPaginationRequest + (*apiv1.Sort)(nil), // 20: public.portworx.common.v1.Sort + (*apiv1.PageBasedPaginationResponse)(nil), // 21: public.portworx.common.v1.PageBasedPaginationResponse + (*apiv1.Meta)(nil), // 22: public.portworx.common.v1.Meta + (*emptypb.Empty)(nil), // 23: google.protobuf.Empty } var file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_depIdxs = []int32{ - 18, // 0: public.portworx.pds.backupconfig.v1.ListBackupConfigsRequest.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationRequest - 19, // 1: public.portworx.pds.backupconfig.v1.ListBackupConfigsRequest.sort:type_name -> public.portworx.common.v1.Sort - 10, // 2: public.portworx.pds.backupconfig.v1.ListBackupConfigsResponse.backup_configs:type_name -> public.portworx.pds.backupconfig.v1.BackupConfig - 20, // 3: public.portworx.pds.backupconfig.v1.ListBackupConfigsResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse - 10, // 4: public.portworx.pds.backupconfig.v1.CreateBackupConfigRequest.backup_config:type_name -> public.portworx.pds.backupconfig.v1.BackupConfig - 16, // 5: public.portworx.pds.backupconfig.v1.UpdateBackupConfigRequest.labels:type_name -> public.portworx.pds.backupconfig.v1.UpdateBackupConfigRequest.LabelsEntry - 17, // 6: public.portworx.pds.backupconfig.v1.UpdateBackupConfigRequest.annotations:type_name -> public.portworx.pds.backupconfig.v1.UpdateBackupConfigRequest.AnnotationsEntry - 21, // 7: public.portworx.pds.backupconfig.v1.BackupConfig.meta:type_name -> public.portworx.common.v1.Meta - 11, // 8: public.portworx.pds.backupconfig.v1.BackupConfig.config:type_name -> public.portworx.pds.backupconfig.v1.Config - 14, // 9: public.portworx.pds.backupconfig.v1.BackupConfig.status:type_name -> public.portworx.pds.backupconfig.v1.Status - 12, // 10: public.portworx.pds.backupconfig.v1.Config.references:type_name -> public.portworx.pds.backupconfig.v1.References - 13, // 11: public.portworx.pds.backupconfig.v1.Config.backup_policy:type_name -> public.portworx.pds.backupconfig.v1.BackupPolicy - 0, // 12: public.portworx.pds.backupconfig.v1.Config.backup_type:type_name -> public.portworx.pds.backupconfig.v1.Config.BackupType - 1, // 13: public.portworx.pds.backupconfig.v1.Config.backup_level:type_name -> public.portworx.pds.backupconfig.v1.Config.BackupLevel - 2, // 14: public.portworx.pds.backupconfig.v1.Config.reclaim_policy:type_name -> public.portworx.pds.backupconfig.v1.Config.ReclaimPolicyType - 3, // 15: public.portworx.pds.backupconfig.v1.Status.phase:type_name -> public.portworx.pds.backupconfig.v1.Status.Phase - 15, // 16: public.portworx.pds.backupconfig.v1.Status.deployment_meta_data:type_name -> public.portworx.pds.backupconfig.v1.DeploymentMetaData - 4, // 17: public.portworx.pds.backupconfig.v1.BackupConfigService.GetBackupConfig:input_type -> public.portworx.pds.backupconfig.v1.GetBackupConfigRequest - 5, // 18: public.portworx.pds.backupconfig.v1.BackupConfigService.ListBackupConfigs:input_type -> public.portworx.pds.backupconfig.v1.ListBackupConfigsRequest - 7, // 19: public.portworx.pds.backupconfig.v1.BackupConfigService.CreateBackupConfig:input_type -> public.portworx.pds.backupconfig.v1.CreateBackupConfigRequest - 8, // 20: public.portworx.pds.backupconfig.v1.BackupConfigService.UpdateBackupConfig:input_type -> public.portworx.pds.backupconfig.v1.UpdateBackupConfigRequest - 9, // 21: public.portworx.pds.backupconfig.v1.BackupConfigService.DeleteBackupConfig:input_type -> public.portworx.pds.backupconfig.v1.DeleteBackupConfigRequest - 10, // 22: public.portworx.pds.backupconfig.v1.BackupConfigService.GetBackupConfig:output_type -> public.portworx.pds.backupconfig.v1.BackupConfig - 6, // 23: public.portworx.pds.backupconfig.v1.BackupConfigService.ListBackupConfigs:output_type -> public.portworx.pds.backupconfig.v1.ListBackupConfigsResponse - 10, // 24: public.portworx.pds.backupconfig.v1.BackupConfigService.CreateBackupConfig:output_type -> public.portworx.pds.backupconfig.v1.BackupConfig - 10, // 25: public.portworx.pds.backupconfig.v1.BackupConfigService.UpdateBackupConfig:output_type -> public.portworx.pds.backupconfig.v1.BackupConfig - 22, // 26: public.portworx.pds.backupconfig.v1.BackupConfigService.DeleteBackupConfig:output_type -> google.protobuf.Empty - 22, // [22:27] is the sub-list for method output_type - 17, // [17:22] is the sub-list for method input_type - 17, // [17:17] is the sub-list for extension type_name - 17, // [17:17] is the sub-list for extension extendee - 0, // [0:17] is the sub-list for field type_name + 19, // 0: public.portworx.pds.backupconfig.v1.ListBackupConfigsRequest.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationRequest + 20, // 1: public.portworx.pds.backupconfig.v1.ListBackupConfigsRequest.sort:type_name -> public.portworx.common.v1.Sort + 0, // 2: public.portworx.pds.backupconfig.v1.ListBackupConfigsRequest.suspended:type_name -> public.portworx.pds.backupconfig.v1.BackupConfigSuspended + 11, // 3: public.portworx.pds.backupconfig.v1.ListBackupConfigsResponse.backup_configs:type_name -> public.portworx.pds.backupconfig.v1.BackupConfig + 21, // 4: public.portworx.pds.backupconfig.v1.ListBackupConfigsResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse + 11, // 5: public.portworx.pds.backupconfig.v1.CreateBackupConfigRequest.backup_config:type_name -> public.portworx.pds.backupconfig.v1.BackupConfig + 0, // 6: public.portworx.pds.backupconfig.v1.UpdateBackupConfigRequest.suspend:type_name -> public.portworx.pds.backupconfig.v1.BackupConfigSuspended + 17, // 7: public.portworx.pds.backupconfig.v1.UpdateBackupConfigRequest.labels:type_name -> public.portworx.pds.backupconfig.v1.UpdateBackupConfigRequest.LabelsEntry + 18, // 8: public.portworx.pds.backupconfig.v1.UpdateBackupConfigRequest.annotations:type_name -> public.portworx.pds.backupconfig.v1.UpdateBackupConfigRequest.AnnotationsEntry + 22, // 9: public.portworx.pds.backupconfig.v1.BackupConfig.meta:type_name -> public.portworx.common.v1.Meta + 12, // 10: public.portworx.pds.backupconfig.v1.BackupConfig.config:type_name -> public.portworx.pds.backupconfig.v1.Config + 15, // 11: public.portworx.pds.backupconfig.v1.BackupConfig.status:type_name -> public.portworx.pds.backupconfig.v1.Status + 13, // 12: public.portworx.pds.backupconfig.v1.Config.references:type_name -> public.portworx.pds.backupconfig.v1.References + 14, // 13: public.portworx.pds.backupconfig.v1.Config.backup_policy:type_name -> public.portworx.pds.backupconfig.v1.BackupPolicy + 2, // 14: public.portworx.pds.backupconfig.v1.Config.backup_type:type_name -> public.portworx.pds.backupconfig.v1.Config.BackupType + 3, // 15: public.portworx.pds.backupconfig.v1.Config.backup_level:type_name -> public.portworx.pds.backupconfig.v1.Config.BackupLevel + 4, // 16: public.portworx.pds.backupconfig.v1.Config.reclaim_policy:type_name -> public.portworx.pds.backupconfig.v1.Config.ReclaimPolicyType + 1, // 17: public.portworx.pds.backupconfig.v1.Status.phase:type_name -> public.portworx.pds.backupconfig.v1.Phase + 16, // 18: public.portworx.pds.backupconfig.v1.Status.data_service_deployment_meta_data:type_name -> public.portworx.pds.backupconfig.v1.DataServiceDeploymentMetaData + 5, // 19: public.portworx.pds.backupconfig.v1.BackupConfigService.GetBackupConfig:input_type -> public.portworx.pds.backupconfig.v1.GetBackupConfigRequest + 6, // 20: public.portworx.pds.backupconfig.v1.BackupConfigService.ListBackupConfigs:input_type -> public.portworx.pds.backupconfig.v1.ListBackupConfigsRequest + 8, // 21: public.portworx.pds.backupconfig.v1.BackupConfigService.CreateBackupConfig:input_type -> public.portworx.pds.backupconfig.v1.CreateBackupConfigRequest + 9, // 22: public.portworx.pds.backupconfig.v1.BackupConfigService.UpdateBackupConfig:input_type -> public.portworx.pds.backupconfig.v1.UpdateBackupConfigRequest + 10, // 23: public.portworx.pds.backupconfig.v1.BackupConfigService.DeleteBackupConfig:input_type -> public.portworx.pds.backupconfig.v1.DeleteBackupConfigRequest + 11, // 24: public.portworx.pds.backupconfig.v1.BackupConfigService.GetBackupConfig:output_type -> public.portworx.pds.backupconfig.v1.BackupConfig + 7, // 25: public.portworx.pds.backupconfig.v1.BackupConfigService.ListBackupConfigs:output_type -> public.portworx.pds.backupconfig.v1.ListBackupConfigsResponse + 11, // 26: public.portworx.pds.backupconfig.v1.BackupConfigService.CreateBackupConfig:output_type -> public.portworx.pds.backupconfig.v1.BackupConfig + 11, // 27: public.portworx.pds.backupconfig.v1.BackupConfigService.UpdateBackupConfig:output_type -> public.portworx.pds.backupconfig.v1.BackupConfig + 23, // 28: public.portworx.pds.backupconfig.v1.BackupConfigService.DeleteBackupConfig:output_type -> google.protobuf.Empty + 24, // [24:29] is the sub-list for method output_type + 19, // [19:24] is the sub-list for method input_type + 19, // [19:19] is the sub-list for extension type_name + 19, // [19:19] is the sub-list for extension extendee + 0, // [0:19] is the sub-list for field type_name } func init() { file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_init() } @@ -1708,7 +1803,7 @@ func file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_init() { } } file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeploymentMetaData); i { + switch v := v.(*DataServiceDeploymentMetaData); i { case 0: return &v.state case 1: @@ -1721,19 +1816,18 @@ func file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_init() { } } file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_msgTypes[1].OneofWrappers = []interface{}{ - (*ListBackupConfigsRequest_AccountId)(nil), (*ListBackupConfigsRequest_TenantId)(nil), (*ListBackupConfigsRequest_ProjectId)(nil), (*ListBackupConfigsRequest_TargetClusterId)(nil), (*ListBackupConfigsRequest_NamespaceId)(nil), - (*ListBackupConfigsRequest_DeploymentId)(nil), + (*ListBackupConfigsRequest_DataServiceDeploymentId)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_public_portworx_pds_backupconfig_apiv1_backupconfig_proto_rawDesc, - NumEnums: 4, + NumEnums: 5, NumMessages: 14, NumExtensions: 0, NumServices: 1, diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig.pb.gw.go b/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig.pb.gw.go index bb17dc59c..b537ae9db 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig.pb.gw.go +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig.pb.gw.go @@ -239,6 +239,10 @@ func local_request_BackupConfigService_UpdateBackupConfig_0(ctx context.Context, } +var ( + filter_BackupConfigService_DeleteBackupConfig_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + func request_BackupConfigService_DeleteBackupConfig_0(ctx context.Context, marshaler runtime.Marshaler, client BackupConfigServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq DeleteBackupConfigRequest var metadata runtime.ServerMetadata @@ -260,6 +264,13 @@ func request_BackupConfigService_DeleteBackupConfig_0(ctx context.Context, marsh return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) } + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BackupConfigService_DeleteBackupConfig_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := client.DeleteBackupConfig(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err @@ -286,6 +297,13 @@ func local_request_BackupConfigService_DeleteBackupConfig_0(ctx context.Context, return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) } + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BackupConfigService_DeleteBackupConfig_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := server.DeleteBackupConfig(ctx, &protoReq) return msg, metadata, err diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig.pb.md b/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig.pb.md index bd1bff3c6..2103545c9 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig.pb.md +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig.pb.md @@ -16,8 +16,8 @@ - [BackupPolicy](#backuppolicy) - [Config](#config) - [CreateBackupConfigRequest](#createbackupconfigrequest) + - [DataServiceDeploymentMetaData](#dataservicedeploymentmetadata) - [DeleteBackupConfigRequest](#deletebackupconfigrequest) - - [DeploymentMetaData](#deploymentmetadata) - [GetBackupConfigRequest](#getbackupconfigrequest) - [ListBackupConfigsRequest](#listbackupconfigsrequest) - [ListBackupConfigsResponse](#listbackupconfigsresponse) @@ -29,6 +29,14 @@ +- Enums + - [BackupConfigSuspended](#backupconfigsuspended) + - [Config.BackupLevel](#configbackuplevel) + - [Config.BackupType](#configbackuptype) + - [Config.ReclaimPolicyType](#configreclaimpolicytype) + - [Phase](#phase) + + - [Scalar Value Types](#scalar-value-types) @@ -49,7 +57,7 @@ GetBackupConfig API returns the the backup configuration resource. > **rpc** ListBackupConfigs([ListBackupConfigsRequest](#listbackupconfigsrequest)) [ListBackupConfigsResponse](#listbackupconfigsresponse) -ListBackupConfigs API lists all the backup configuration for a deployment. +ListBackupConfigs API lists all the backup configuration for a data service deployment. ### CreateBackupConfig {#methodpublicportworxpdsbackupconfigv1backupconfigservicecreatebackupconfig} > **rpc** CreateBackupConfig([CreateBackupConfigRequest](#createbackupconfigrequest)) @@ -106,9 +114,8 @@ Desired config of the backup configuration. | Field | Type | Description | | ----- | ---- | ----------- | | references | [ References](#references) | References to the associated objects for backup configuration. | -| job_history_limit | [ int32](#int32) | Job History Limit is a number of retained backup jobs. Must be greater than or equal to 1. | | backup_policy | [ BackupPolicy](#backuppolicy) | BackupPolicy associated with the backup config. | -| suspend | [ bool](#bool) | Suspend flag is used to suspend a scheduled backup from creating new backup jobs. | +| suspend | [ bool](#bool) | Suspend flag is used to suspend a scheduled backup from creating new backups. | | backup_type | [ Config.BackupType](#configbackuptype) | Backup Type for the backup configuration. | | backup_level | [ Config.BackupLevel](#configbackuplevel) | Backup Level for the backup configuration. | | reclaim_policy | [ Config.ReclaimPolicyType](#configreclaimpolicytype) | Reclaim Policy decides if the volume snapshots should get deleted when a Backup CR gets deleted. | @@ -123,34 +130,35 @@ Request to create a backup configuration. | Field | Type | Description | | ----- | ---- | ----------- | | project_id | [ string](#string) | (-- api-linter: core::0133::request-required-fields=disabled aip.dev/not-precedent: We really need this field to be required to support creation of the resource in the project context. --) (-- api-linter: core::0133::request-unknown-fields=disabled aip.dev/not-precedent: We really need this field to be required to support creation of the resource in the project context. --) The parent project id under which backup configuration will be created. | -| deployment_id | [ string](#string) | (-- api-linter: core::0133::request-unknown-fields=disabled aip.dev/not-precedent: We really need this field to be required to support creation of the resource in the deployment context.. --) (-- api-linter: core::0133::request-required-fields=disabled aip.dev/not-precedent: We really need this field to be required to support creation of the resource in the deployment context.. --) Deployment id associated with the backup configuration. | +| data_service_deployment_id | [ string](#string) | (-- api-linter: core::0133::request-unknown-fields=disabled aip.dev/not-precedent: We really need this field to be required to support creation of the resource in the deployment context.. --) (-- api-linter: core::0133::request-required-fields=disabled aip.dev/not-precedent: We really need this field to be required to support creation of the resource in the deployment context.. --) Data service Deployment id associated with the backup configuration. | | backup_config | [ BackupConfig](#backupconfig) | Backup configuration for the backup. | -### DeleteBackupConfigRequest {#deletebackupconfigrequest} -Request to delete a backup configuration. +### DataServiceDeploymentMetaData {#dataservicedeploymentmetadata} +DataServiceDeployment Meta Data contains the details of the DataService deployment associated with the backup configuration. | Field | Type | Description | | ----- | ---- | ----------- | -| id | [ string](#string) | ID of the backup configuration. | +| name | [ string](#string) | Name of the DataService deployment. | +| custom_resource_name | [ string](#string) | Custom Resource Name is the kubernetes resource name for the deployment meta data. | +| target_cluster_name | [ string](#string) | Target cluster Name associated with the backup configuration. | +| namespace_name | [ string](#string) | Namespace name to which the backup configuration is associated. | +| tls_enabled | [ bool](#bool) | Flag to check whether Transport Layer Security support is enabled or not. | -### DeploymentMetaData {#deploymentmetadata} -Deployment Meta Data contains the details of the deployment associated with the backup configuration. +### DeleteBackupConfigRequest {#deletebackupconfigrequest} +Request to delete a backup configuration. | Field | Type | Description | | ----- | ---- | ----------- | -| name | [ string](#string) | Name of the deployment. | -| custom_resource_name | [ string](#string) | Custom Resource Name is the kubernetes resource name for the deployment meta data. | -| deployment_target_name | [ string](#string) | Deployment Target Name associated with the backup configuration. | -| namespace_name | [ string](#string) | Namespace name to which the backup configuration is associated. | -| tls_enabled | [ bool](#bool) | Flag to check whether Transport Layer Security support is enabled or not. | +| id | [ string](#string) | ID of the backup configuration. | +| force | [ bool](#bool) | Force flag to delete backup configuration from control plane only. | @@ -172,14 +180,14 @@ Request to list all the backup configurations. | Field | Type | Description | | ----- | ---- | ----------- | -| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.account_id | [ string](#string) | Account ID for which the backup configurations will be listed. | | [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.tenant_id | [ string](#string) | Tenant ID for which the backup configurations will be listed. | | [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.project_id | [ string](#string) | Project ID for which the backup configurations will be listed. | | [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.target_cluster_id | [ string](#string) | Cluster ID for which the backup configurations will be listed. | | [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.namespace_id | [ string](#string) | Namespace ID for which the backup configurations will be listed. | -| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.deployment_id | [ string](#string) | Deployment ID for which the backup configurations will be listed. | +| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.data_service_deployment_id | [ string](#string) | Data service Deployment ID for which the backup configurations will be listed. | | pagination | [ public.portworx.common.v1.PageBasedPaginationRequest](#publicportworxcommonv1pagebasedpaginationrequest) | Pagination metadata for listing backup configuration. | | sort | [ public.portworx.common.v1.Sort](#publicportworxcommonv1sort) | Sorting details using which requested list of backup configurations to be sorted. | +| suspended | [ BackupConfigSuspended](#backupconfigsuspended) | Filter backup configs based on suspended flag. | @@ -202,7 +210,7 @@ References to the associated resources for backup configuration. | Field | Type | Description | | ----- | ---- | ----------- | -| deployment_id | [ string](#string) | UID of the deployment to which the backup configuration belong. | +| data_service_deployment_id | [ string](#string) | UID of the data service deployment to which the backup configuration belong. | | backup_location_id | [ string](#string) | UID of the backup target to which the backup configuration belong. | | data_service_id | [ string](#string) | UID of the data service to which the backup configuration belong. | @@ -215,10 +223,12 @@ Status for backup configuration. | Field | Type | Description | | ----- | ---- | ----------- | -| phase | [ Status.Phase](#statusphase) | Phase specifies the phase of backup CR in target cluster. | +| phase | [ Phase](#phase) | Phase specifies the phase of backup CR in target cluster. | | custom_resource_name | [ string](#string) | Custom Resource Name is the kubernetes resource name for the backup that is built from ID. | | is_backup_policy_synchronized | [ bool](#bool) | Flag to check if the backup policy is synchronized or not. | -| deployment_meta_data | [ DeploymentMetaData](#deploymentmetadata) | Deployment Meta Data. | +| data_service_deployment_meta_data | [ DataServiceDeploymentMetaData](#dataservicedeploymentmetadata) | DataService Deployment Meta Data. | +| error_code | [ string](#string) | Error code. | +| error_message | [ string](#string) | Error message. | @@ -232,7 +242,7 @@ Request to update a backup configuration. | Field | Type | Description | | ----- | ---- | ----------- | | id | [ string](#string) | ID of the backup configuration. | -| job_history_limit | [ int32](#int32) | Job History Limit is a number of retained backup jobs. Must be greater than or equal to 1. | +| suspend | [ BackupConfigSuspended](#backupconfigsuspended) | Suspend flag is used to suspend or resume a scheduled backup. | | labels | [map UpdateBackupConfigRequest.LabelsEntry](#updatebackupconfigrequestlabelsentry) | Labels to apply to the Backup Config object. | | annotations | [map UpdateBackupConfigRequest.AnnotationsEntry](#updatebackupconfigrequestannotationsentry) | Annotations for the Backup Config object. | @@ -266,6 +276,18 @@ Request to update a backup configuration. ## Enums +### BackupConfigSuspended {#backupconfigsuspended} +BackupConfigSuspended to accept value for suspended flag. + +| Name | Number | Description | +| ---- | ------ | ----------- | +| BACKUP_CONFIG_SUSPENDED_UNSPECIFIED | 0 | List all backup configs. | +| TRUE | 1 | List only suspended backup configs. | +| FALSE | 2 | List only disabled backup configs. | + + + + ### Config.BackupLevel {#configbackuplevel} Enum for Backup Level of the backup configuration. @@ -302,7 +324,7 @@ Enum for Reclaim Policy for the backup configuration. -### Status.Phase {#statusphase} +### Phase {#phase} Enum for Phases of the backup configuration. | Name | Number | Description | @@ -313,6 +335,7 @@ Enum for Phases of the backup configuration. | UPDATING | 3 | Updating state. | | FAILED | 4 | Failed state. | | SUSPENDED | 5 | Suspended state. | +| DELETING | 6 | Deleting state. | diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig.proto b/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig.proto index ef8848249..a16eddd92 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig.proto +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig.proto @@ -24,7 +24,7 @@ import "public/portworx/common/apiv1/meta.proto"; import "public/portworx/common/apiv1/pagination.proto"; import "public/portworx/common/apiv1/sort.proto"; -option go_package = "github.com/pure-px/apis/public/portworx/pds/apiv1/backupconfig;backupconfig"; +option go_package = "github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1;backupconfig"; option java_multiple_files = true; option java_package = "com.public.portworx.pds.backupconfig.v1"; option java_outer_classname = "BackupConfigProto"; @@ -39,7 +39,7 @@ service BackupConfigService { }; } - // ListBackupConfigs API lists all the backup configuration for a deployment. + // ListBackupConfigs API lists all the backup configuration for a data service deployment. rpc ListBackupConfigs(ListBackupConfigsRequest) returns (ListBackupConfigsResponse) { option(google.api.http) = { @@ -84,30 +84,30 @@ message GetBackupConfigRequest { message ListBackupConfigsRequest { // Specifies a filter to list the backup configurations. oneof list_by { - // Account ID for which the backup configurations will be listed. - string account_id = 1; - // Tenant ID for which the backup configurations will be listed. - string tenant_id = 2; + string tenant_id = 1; // Project ID for which the backup configurations will be listed. - string project_id = 3; + string project_id = 2; // Cluster ID for which the backup configurations will be listed. - string target_cluster_id = 4; + string target_cluster_id = 3; // Namespace ID for which the backup configurations will be listed. - string namespace_id = 5; + string namespace_id = 4; - // Deployment ID for which the backup configurations will be listed. - string deployment_id = 6; + // Data service Deployment ID for which the backup configurations will be listed. + string data_service_deployment_id = 5; } // Pagination metadata for listing backup configuration. - public.portworx.common.v1.PageBasedPaginationRequest pagination = 7; + public.portworx.common.v1.PageBasedPaginationRequest pagination = 6; // Sorting details using which requested list of backup configurations to be sorted. - public.portworx.common.v1.Sort sort = 8; + public.portworx.common.v1.Sort sort = 7; + + // Filter backup configs based on suspended flag. + BackupConfigSuspended suspended = 8 [(google.api.field_behavior) = OPTIONAL]; } // Response of list of backup configurations. @@ -138,8 +138,8 @@ message CreateBackupConfigRequest { // (-- api-linter: core::0133::request-required-fields=disabled // aip.dev/not-precedent: We really need this field to be required // to support creation of the resource in the deployment context.. --) - // Deployment id associated with the backup configuration. - string deployment_id = 2 [(google.api.field_behavior) = REQUIRED]; + // Data service Deployment id associated with the backup configuration. + string data_service_deployment_id = 2 [(google.api.field_behavior) = REQUIRED]; // Backup configuration for the backup. BackupConfig backup_config = 3 [(google.api.field_behavior) = REQUIRED]; @@ -152,8 +152,8 @@ message UpdateBackupConfigRequest { // ID of the backup configuration. string id = 1; - // Job History Limit is a number of retained backup jobs. Must be greater than or equal to 1. - int32 job_history_limit = 2; + // Suspend flag is used to suspend or resume a scheduled backup. + BackupConfigSuspended suspend = 2; // Labels to apply to the Backup Config object. map labels = 3; @@ -166,6 +166,9 @@ message UpdateBackupConfigRequest { message DeleteBackupConfigRequest { // ID of the backup configuration. string id = 1; + + // Force flag to delete backup configuration from control plane only. + bool force = 9 [(google.api.field_behavior) = OPTIONAL]; } // Resource representing the backup configuration for a backup. @@ -185,14 +188,11 @@ message Config { // References to the associated objects for backup configuration. References references = 1; - // Job History Limit is a number of retained backup jobs. Must be greater than or equal to 1. - int32 job_history_limit = 2; - // BackupPolicy associated with the backup config. - BackupPolicy backup_policy = 3 [(google.api.field_behavior) = OPTIONAL]; + BackupPolicy backup_policy = 2 [(google.api.field_behavior) = OPTIONAL]; - // Suspend flag is used to suspend a scheduled backup from creating new backup jobs. - bool suspend = 4; + // Suspend flag is used to suspend a scheduled backup from creating new backups. + bool suspend = 3; // Enum for Backup Type of the backup configuration. enum BackupType { @@ -207,7 +207,7 @@ message Config { } // Backup Type for the backup configuration. - BackupType backup_type = 5; + BackupType backup_type = 4; // Enum for Backup Level of the backup configuration. enum BackupLevel { @@ -222,7 +222,7 @@ message Config { } // Backup Level for the backup configuration. - BackupLevel backup_level = 6; + BackupLevel backup_level = 5; // Enum for Reclaim Policy for the backup configuration. enum ReclaimPolicyType { @@ -237,13 +237,13 @@ message Config { } // Reclaim Policy decides if the volume snapshots should get deleted when a Backup CR gets deleted. - ReclaimPolicyType reclaim_policy = 7; + ReclaimPolicyType reclaim_policy = 6; } // References to the associated resources for backup configuration. message References { - // UID of the deployment to which the backup configuration belong. - string deployment_id = 1 [(google.api.field_behavior) = REQUIRED]; + // UID of the data service deployment to which the backup configuration belong. + string data_service_deployment_id = 1 [(google.api.field_behavior) = REQUIRED]; // UID of the backup target to which the backup configuration belong. string backup_location_id = 2 [(google.api.field_behavior) = REQUIRED]; @@ -263,27 +263,6 @@ message BackupPolicy { // Status for backup configuration. message Status { - // Enum for Phases of the backup configuration. - enum Phase { - // Unspecified state. - PHASE_UNSPECIFIED = 0; - - // Preparing state before creation is successful. - PREPARING = 1; - - // Applied state when create/update is successful. - APPLIED = 2; - - // Updating state. - UPDATING = 3; - - // Failed state. - FAILED = 4; - - // Suspended state. - SUSPENDED = 5; - } - // Phase specifies the phase of backup CR in target cluster. Phase phase = 1; @@ -293,20 +272,26 @@ message Status { // Flag to check if the backup policy is synchronized or not. bool is_backup_policy_synchronized = 3; - // Deployment Meta Data. - DeploymentMetaData deployment_meta_data = 4; + // DataService Deployment Meta Data. + DataServiceDeploymentMetaData data_service_deployment_meta_data = 4; + + // Error code. + string error_code = 5; + + // Error message. + string error_message = 6; } -// Deployment Meta Data contains the details of the deployment associated with the backup configuration. -message DeploymentMetaData { - // Name of the deployment. +// DataServiceDeployment Meta Data contains the details of the DataService deployment associated with the backup configuration. +message DataServiceDeploymentMetaData { + // Name of the DataService deployment. string name = 1; // Custom Resource Name is the kubernetes resource name for the deployment meta data. string custom_resource_name = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; - // Deployment Target Name associated with the backup configuration. - string deployment_target_name = 3; + // Target cluster Name associated with the backup configuration. + string target_cluster_name = 3; // Namespace name to which the backup configuration is associated. string namespace_name = 4; @@ -314,3 +299,37 @@ message DeploymentMetaData { // Flag to check whether Transport Layer Security support is enabled or not. bool tls_enabled = 5; } + +// BackupConfigSuspended to accept value for suspended flag. +enum BackupConfigSuspended { + // List all backup configs. + BACKUP_CONFIG_SUSPENDED_UNSPECIFIED = 0; + // List only suspended backup configs. + TRUE = 1; + // List only disabled backup configs. + FALSE = 2; +} + +// Enum for Phases of the backup configuration. +enum Phase { + // Unspecified state. + PHASE_UNSPECIFIED = 0; + + // Preparing state before creation is successful. + PREPARING = 1; + + // Applied state when create/update is successful. + APPLIED = 2; + + // Updating state. + UPDATING = 3; + + // Failed state. + FAILED = 4; + + // Suspended state. + SUSPENDED = 5; + + // Deleting state. + DELETING = 6; +} \ No newline at end of file diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig.swagger.json b/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig.swagger.json index eb47071b4..917b4cab4 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig.swagger.json +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig.swagger.json @@ -12,7 +12,7 @@ "paths": { "/pds/v1/backupConfigs": { "get": { - "summary": "ListBackupConfigs API lists all the backup configuration for a deployment.", + "summary": "ListBackupConfigs API lists all the backup configuration for a data service deployment.", "operationId": "BackupConfigService_ListBackupConfigs", "responses": { "200": { @@ -37,15 +37,6 @@ } }, "parameters": [ - { - "name": "accountId", - "description": "Account ID for which the backup configurations will be listed.", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - }, { "name": "tenantId", "description": "Tenant ID for which the backup configurations will be listed.", @@ -83,8 +74,8 @@ } }, { - "name": "deploymentId", - "description": "Deployment ID for which the backup configurations will be listed.", + "name": "dataServiceDeploymentId", + "description": "Data service Deployment ID for which the backup configurations will be listed.", "in": "query", "required": false, "schema": { @@ -142,6 +133,21 @@ ], "default": "VALUE_UNSPECIFIED" } + }, + { + "name": "suspended", + "description": "Filter backup configs based on suspended flag.\n\n - BACKUP_CONFIG_SUSPENDED_UNSPECIFIED: List all backup configs.\n - TRUE: List only suspended backup configs.\n - FALSE: List only disabled backup configs.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "BACKUP_CONFIG_SUSPENDED_UNSPECIFIED", + "TRUE", + "FALSE" + ], + "default": "BACKUP_CONFIG_SUSPENDED_UNSPECIFIED" + } } ], "tags": [ @@ -225,6 +231,15 @@ "schema": { "type": "string" } + }, + { + "name": "force", + "description": "Force flag to delete backup configuration from control plane only.", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } } ], "tags": [ @@ -340,9 +355,9 @@ "BackupConfigServiceCreateBackupConfigBody": { "type": "object", "properties": { - "deploymentId": { + "dataServiceDeploymentId": { "type": "string", - "description": "\nDeployment id associated with the backup configuration." + "description": "\nData service Deployment id associated with the backup configuration." }, "backupConfig": { "$ref": "#/components/schemas/v1BackupConfig" @@ -350,17 +365,15 @@ }, "description": "Request to create a backup configuration.", "required": [ - "deploymentId", + "dataServiceDeploymentId", "backupConfig" ] }, "BackupConfigServiceUpdateBackupConfigBody": { "type": "object", "properties": { - "jobHistoryLimit": { - "type": "integer", - "format": "int32", - "description": "Job History Limit is a number of retained backup jobs. Must be greater than or equal to 1." + "suspend": { + "$ref": "#/components/schemas/v1BackupConfigSuspended" }, "labels": { "type": "object", @@ -431,24 +444,11 @@ "default": "VALUE_UNSPECIFIED", "description": "Value of sort order for the list of resources.\n\n - VALUE_UNSPECIFIED: Unspecified, do not use.\n - ASC: Sort order ascending.\n - DESC: Sort order descending." }, - "StatusPhase": { - "type": "string", - "enum": [ - "PHASE_UNSPECIFIED", - "PREPARING", - "APPLIED", - "UPDATING", - "FAILED", - "SUSPENDED" - ], - "default": "PHASE_UNSPECIFIED", - "description": "Enum for Phases of the backup configuration.\n\n - PHASE_UNSPECIFIED: Unspecified state.\n - PREPARING: Preparing state before creation is successful.\n - APPLIED: Applied state when create/update is successful.\n - UPDATING: Updating state.\n - FAILED: Failed state.\n - SUSPENDED: Suspended state." - }, "backupconfigv1Status": { "type": "object", "properties": { "phase": { - "$ref": "#/components/schemas/StatusPhase" + "$ref": "#/components/schemas/v1Phase" }, "customResourceName": { "type": "string", @@ -458,8 +458,16 @@ "type": "boolean", "description": "Flag to check if the backup policy is synchronized or not." }, - "deploymentMetaData": { - "$ref": "#/components/schemas/v1DeploymentMetaData" + "dataServiceDeploymentMetaData": { + "$ref": "#/components/schemas/v1DataServiceDeploymentMetaData" + }, + "errorCode": { + "type": "string", + "description": "Error code." + }, + "errorMessage": { + "type": "string", + "description": "Error message." } }, "description": "Status for backup configuration." @@ -506,6 +514,16 @@ }, "description": "Resource representing the backup configuration for a backup." }, + "v1BackupConfigSuspended": { + "type": "string", + "enum": [ + "BACKUP_CONFIG_SUSPENDED_UNSPECIFIED", + "TRUE", + "FALSE" + ], + "default": "BACKUP_CONFIG_SUSPENDED_UNSPECIFIED", + "description": "BackupConfigSuspended to accept value for suspended flag.\n\n - BACKUP_CONFIG_SUSPENDED_UNSPECIFIED: List all backup configs.\n - TRUE: List only suspended backup configs.\n - FALSE: List only disabled backup configs." + }, "v1BackupPolicy": { "type": "object", "properties": { @@ -526,17 +544,12 @@ "references": { "$ref": "#/components/schemas/v1References" }, - "jobHistoryLimit": { - "type": "integer", - "format": "int32", - "description": "Job History Limit is a number of retained backup jobs. Must be greater than or equal to 1." - }, "backupPolicy": { "$ref": "#/components/schemas/v1BackupPolicy" }, "suspend": { "type": "boolean", - "description": "Suspend flag is used to suspend a scheduled backup from creating new backup jobs." + "description": "Suspend flag is used to suspend a scheduled backup from creating new backups." }, "backupType": { "$ref": "#/components/schemas/ConfigBackupType" @@ -550,21 +563,21 @@ }, "description": "Desired config of the backup configuration." }, - "v1DeploymentMetaData": { + "v1DataServiceDeploymentMetaData": { "type": "object", "properties": { "name": { "type": "string", - "description": "Name of the deployment." + "description": "Name of the DataService deployment." }, "customResourceName": { "type": "string", "description": "Custom Resource Name is the kubernetes resource name for the deployment meta data.", "readOnly": true }, - "deploymentTargetName": { + "targetClusterName": { "type": "string", - "description": "Deployment Target Name associated with the backup configuration." + "description": "Target cluster Name associated with the backup configuration." }, "namespaceName": { "type": "string", @@ -575,7 +588,7 @@ "description": "Flag to check whether Transport Layer Security support is enabled or not." } }, - "description": "Deployment Meta Data contains the details of the deployment associated with the backup configuration." + "description": "DataServiceDeployment Meta Data contains the details of the DataService deployment associated with the backup configuration." }, "v1ListBackupConfigsResponse": { "type": "object", @@ -704,6 +717,20 @@ }, "description": "Metadata related to page based pagination for paginated API responses." }, + "v1Phase": { + "type": "string", + "enum": [ + "PHASE_UNSPECIFIED", + "PREPARING", + "APPLIED", + "UPDATING", + "FAILED", + "SUSPENDED", + "DELETING" + ], + "default": "PHASE_UNSPECIFIED", + "description": "Enum for Phases of the backup configuration.\n\n - PHASE_UNSPECIFIED: Unspecified state.\n - PREPARING: Preparing state before creation is successful.\n - APPLIED: Applied state when create/update is successful.\n - UPDATING: Updating state.\n - FAILED: Failed state.\n - SUSPENDED: Suspended state.\n - DELETING: Deleting state." + }, "v1Reference": { "type": "object", "properties": { @@ -725,9 +752,9 @@ "v1References": { "type": "object", "properties": { - "deploymentId": { + "dataServiceDeploymentId": { "type": "string", - "description": "UID of the deployment to which the backup configuration belong." + "description": "UID of the data service deployment to which the backup configuration belong." }, "backupLocationId": { "type": "string", @@ -741,7 +768,7 @@ }, "description": "References to the associated resources for backup configuration.", "required": [ - "deploymentId", + "dataServiceDeploymentId", "backupLocationId" ] }, diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig_grpc.pb.go b/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig_grpc.pb.go index db233a7b6..8999ffee6 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig_grpc.pb.go +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1/backupconfig_grpc.pb.go @@ -48,7 +48,7 @@ const ( type BackupConfigServiceClient interface { // GetBackupConfig API returns the the backup configuration resource. GetBackupConfig(ctx context.Context, in *GetBackupConfigRequest, opts ...grpc.CallOption) (*BackupConfig, error) - // ListBackupConfigs API lists all the backup configuration for a deployment. + // ListBackupConfigs API lists all the backup configuration for a data service deployment. ListBackupConfigs(ctx context.Context, in *ListBackupConfigsRequest, opts ...grpc.CallOption) (*ListBackupConfigsResponse, error) // CreateBackupConfig API creates the backup configuration of the backup. CreateBackupConfig(ctx context.Context, in *CreateBackupConfigRequest, opts ...grpc.CallOption) (*BackupConfig, error) @@ -117,7 +117,7 @@ func (c *backupConfigServiceClient) DeleteBackupConfig(ctx context.Context, in * type BackupConfigServiceServer interface { // GetBackupConfig API returns the the backup configuration resource. GetBackupConfig(context.Context, *GetBackupConfigRequest) (*BackupConfig, error) - // ListBackupConfigs API lists all the backup configuration for a deployment. + // ListBackupConfigs API lists all the backup configuration for a data service deployment. ListBackupConfigs(context.Context, *ListBackupConfigsRequest) (*ListBackupConfigsResponse, error) // CreateBackupConfig API creates the backup configuration of the backup. CreateBackupConfig(context.Context, *CreateBackupConfigRequest) (*BackupConfig, error) diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition.pb.go b/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition.pb.go index 668f736da..5b309b7d2 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition.pb.go +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition.pb.go @@ -22,11 +22,11 @@ package templatedefinition import ( + _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" apiv1 "github.com/pure-px/apis/public/portworx/common/apiv1" _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - _ "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" ) @@ -38,6 +38,55 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// Request to get the template sample resource. +type GetTemplateSampleRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // UID of the template sample. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *GetTemplateSampleRequest) Reset() { + *x = GetTemplateSampleRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTemplateSampleRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTemplateSampleRequest) ProtoMessage() {} + +func (x *GetTemplateSampleRequest) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetTemplateSampleRequest.ProtoReflect.Descriptor instead. +func (*GetTemplateSampleRequest) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDescGZIP(), []int{0} +} + +func (x *GetTemplateSampleRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + // ListTemplateKindResponse listing request. type ListTemplateKindsRequest struct { state protoimpl.MessageState @@ -57,7 +106,7 @@ type ListTemplateKindsRequest struct { func (x *ListTemplateKindsRequest) Reset() { *x = ListTemplateKindsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[0] + mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -70,7 +119,7 @@ func (x *ListTemplateKindsRequest) String() string { func (*ListTemplateKindsRequest) ProtoMessage() {} func (x *ListTemplateKindsRequest) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[0] + mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -83,7 +132,7 @@ func (x *ListTemplateKindsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListTemplateKindsRequest.ProtoReflect.Descriptor instead. func (*ListTemplateKindsRequest) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDescGZIP(), []int{0} + return file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDescGZIP(), []int{1} } func (x *ListTemplateKindsRequest) GetSemanticVersion() string { @@ -137,7 +186,7 @@ type ListTemplateKindsResponse struct { func (x *ListTemplateKindsResponse) Reset() { *x = ListTemplateKindsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[1] + mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -150,7 +199,7 @@ func (x *ListTemplateKindsResponse) String() string { func (*ListTemplateKindsResponse) ProtoMessage() {} func (x *ListTemplateKindsResponse) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[1] + mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -163,7 +212,7 @@ func (x *ListTemplateKindsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListTemplateKindsResponse.ProtoReflect.Descriptor instead. func (*ListTemplateKindsResponse) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDescGZIP(), []int{1} + return file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDescGZIP(), []int{2} } func (x *ListTemplateKindsResponse) GetKinds() []string { @@ -195,7 +244,7 @@ type ListTemplateTypesRequest struct { func (x *ListTemplateTypesRequest) Reset() { *x = ListTemplateTypesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[2] + mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -208,7 +257,7 @@ func (x *ListTemplateTypesRequest) String() string { func (*ListTemplateTypesRequest) ProtoMessage() {} func (x *ListTemplateTypesRequest) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[2] + mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -221,7 +270,7 @@ func (x *ListTemplateTypesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListTemplateTypesRequest.ProtoReflect.Descriptor instead. func (*ListTemplateTypesRequest) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDescGZIP(), []int{2} + return file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDescGZIP(), []int{3} } func (x *ListTemplateTypesRequest) GetPagination() *apiv1.PageBasedPaginationRequest { @@ -256,7 +305,7 @@ type ListTemplateTypesResponse struct { func (x *ListTemplateTypesResponse) Reset() { *x = ListTemplateTypesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[3] + mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -269,7 +318,7 @@ func (x *ListTemplateTypesResponse) String() string { func (*ListTemplateTypesResponse) ProtoMessage() {} func (x *ListTemplateTypesResponse) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[3] + mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -282,7 +331,7 @@ func (x *ListTemplateTypesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListTemplateTypesResponse.ProtoReflect.Descriptor instead. func (*ListTemplateTypesResponse) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDescGZIP(), []int{3} + return file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDescGZIP(), []int{4} } func (x *ListTemplateTypesResponse) GetTemplateTypes() []*TemplateType { @@ -312,7 +361,7 @@ type GetTemplateTypeRequest struct { func (x *GetTemplateTypeRequest) Reset() { *x = GetTemplateTypeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[4] + mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -325,7 +374,7 @@ func (x *GetTemplateTypeRequest) String() string { func (*GetTemplateTypeRequest) ProtoMessage() {} func (x *GetTemplateTypeRequest) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[4] + mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -338,7 +387,7 @@ func (x *GetTemplateTypeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTemplateTypeRequest.ProtoReflect.Descriptor instead. func (*GetTemplateTypeRequest) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDescGZIP(), []int{4} + return file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDescGZIP(), []int{5} } func (x *GetTemplateTypeRequest) GetId() string { @@ -365,7 +414,7 @@ type TemplateType struct { func (x *TemplateType) Reset() { *x = TemplateType{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[5] + mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -378,7 +427,7 @@ func (x *TemplateType) String() string { func (*TemplateType) ProtoMessage() {} func (x *TemplateType) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[5] + mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -391,7 +440,7 @@ func (x *TemplateType) ProtoReflect() protoreflect.Message { // Deprecated: Use TemplateType.ProtoReflect.Descriptor instead. func (*TemplateType) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDescGZIP(), []int{5} + return file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDescGZIP(), []int{6} } func (x *TemplateType) GetUid() int64 { @@ -423,12 +472,14 @@ type ListTemplateSamplesRequest struct { // filter sample templates based on kind, this accepts wild card, eg: pds:service:postgre* Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` + // Pagination metadata for this request. + Pagination *apiv1.PageBasedPaginationRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } func (x *ListTemplateSamplesRequest) Reset() { *x = ListTemplateSamplesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[6] + mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -441,7 +492,7 @@ func (x *ListTemplateSamplesRequest) String() string { func (*ListTemplateSamplesRequest) ProtoMessage() {} func (x *ListTemplateSamplesRequest) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[6] + mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -454,7 +505,7 @@ func (x *ListTemplateSamplesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListTemplateSamplesRequest.ProtoReflect.Descriptor instead. func (*ListTemplateSamplesRequest) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDescGZIP(), []int{6} + return file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDescGZIP(), []int{7} } func (x *ListTemplateSamplesRequest) GetKind() string { @@ -464,6 +515,13 @@ func (x *ListTemplateSamplesRequest) GetKind() string { return "" } +func (x *ListTemplateSamplesRequest) GetPagination() *apiv1.PageBasedPaginationRequest { + if x != nil { + return x.Pagination + } + return nil +} + // ListTemplateSamplesResponse list templates samples response. type ListTemplateSamplesResponse struct { state protoimpl.MessageState @@ -487,7 +545,7 @@ type ListTemplateSamplesResponse struct { func (x *ListTemplateSamplesResponse) Reset() { *x = ListTemplateSamplesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[7] + mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -500,7 +558,7 @@ func (x *ListTemplateSamplesResponse) String() string { func (*ListTemplateSamplesResponse) ProtoMessage() {} func (x *ListTemplateSamplesResponse) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[7] + mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -513,7 +571,7 @@ func (x *ListTemplateSamplesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListTemplateSamplesResponse.ProtoReflect.Descriptor instead. func (*ListTemplateSamplesResponse) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDescGZIP(), []int{7} + return file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDescGZIP(), []int{8} } func (x *ListTemplateSamplesResponse) GetTemplateSamples() []*TemplateSample { @@ -545,7 +603,7 @@ type TemplateSample struct { func (x *TemplateSample) Reset() { *x = TemplateSample{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[8] + mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -558,7 +616,7 @@ func (x *TemplateSample) String() string { func (*TemplateSample) ProtoMessage() {} func (x *TemplateSample) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[8] + mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -571,7 +629,7 @@ func (x *TemplateSample) ProtoReflect() protoreflect.Message { // Deprecated: Use TemplateSample.ProtoReflect.Descriptor instead. func (*TemplateSample) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDescGZIP(), []int{8} + return file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDescGZIP(), []int{9} } func (x *TemplateSample) GetMeta() *apiv1.Meta { @@ -596,14 +654,14 @@ type Info struct { // Kind of the template Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` - // values of the sample template. - Values map[string]string `protobuf:"bytes,2,rep,name=values,proto3" json:"values,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // template_values of the sample template. + TemplateValues map[string]string `protobuf:"bytes,2,rep,name=template_values,json=templateValues,proto3" json:"template_values,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *Info) Reset() { *x = Info{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[9] + mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -616,7 +674,7 @@ func (x *Info) String() string { func (*Info) ProtoMessage() {} func (x *Info) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[9] + mi := &file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -629,7 +687,7 @@ func (x *Info) ProtoReflect() protoreflect.Message { // Deprecated: Use Info.ProtoReflect.Descriptor instead. func (*Info) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDescGZIP(), []int{9} + return file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDescGZIP(), []int{10} } func (x *Info) GetKind() string { @@ -639,9 +697,9 @@ func (x *Info) GetKind() string { return "" } -func (x *Info) GetValues() map[string]string { +func (x *Info) GetTemplateValues() map[string]string { if x != nil { - return x.Values + return x.TemplateValues } return nil } @@ -659,211 +717,240 @@ var file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition 0x70, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x27, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, - 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, - 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2b, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, - 0x69, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, - 0x76, 0x31, 0x2f, 0x73, 0x6f, 0x72, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xfd, 0x01, - 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4b, 0x69, - 0x6e, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x10, 0x73, 0x65, - 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0f, 0x73, 0x65, 0x6d, 0x61, 0x6e, - 0x74, 0x69, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x06, 0x70, 0x72, - 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, - 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x38, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, - 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, - 0x74, 0x12, 0x5a, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, - 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x03, 0xe0, 0x41, - 0x01, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x89, 0x01, - 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4b, 0x69, - 0x6e, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6b, - 0x69, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x69, 0x6e, 0x64, - 0x73, 0x12, 0x56, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, - 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, - 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb0, 0x01, 0x0a, 0x18, 0x4c, 0x69, - 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5a, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, - 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, - 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x72, - 0x74, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x22, 0xdb, 0x01, 0x0a, - 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x0e, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, - 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x73, 0x12, 0x56, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, + 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, + 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x27, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, + 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2b, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, + 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, + 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, + 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, + 0x70, 0x69, 0x76, 0x31, 0x2f, 0x73, 0x6f, 0x72, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0x2a, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xfd, 0x01, 0x0a, 0x18, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4b, 0x69, 0x6e, 0x64, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x10, 0x73, 0x65, 0x6d, 0x61, + 0x6e, 0x74, 0x69, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0f, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, + 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, + 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x06, 0x70, + 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x38, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, + 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x6f, 0x72, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, + 0x5a, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, + 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, + 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x89, 0x01, 0x0a, 0x19, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4b, 0x69, 0x6e, 0x64, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6b, 0x69, 0x6e, + 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x69, 0x6e, 0x64, 0x73, 0x12, + 0x56, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, + 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb0, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x5a, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, + 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, + 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x38, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x42, + 0x03, 0xe0, 0x41, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x22, 0xdb, 0x01, 0x0a, 0x19, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x0e, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x3f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, + 0x12, 0x56, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, + 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, + 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x28, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x22, 0x56, 0x0a, 0x0c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x03, 0x75, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x91, 0x01, 0x0a, 0x1a, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x04, 0x6b, 0x69, 0x6e, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x04, 0x6b, 0x69, + 0x6e, 0x64, 0x12, 0x5a, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, - 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x28, 0x0a, 0x16, 0x47, 0x65, - 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x22, 0x56, 0x0a, 0x0c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x35, 0x0a, 0x1a, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x04, 0x6b, 0x69, - 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x04, 0x6b, - 0x69, 0x6e, 0x64, 0x22, 0xe3, 0x01, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, - 0x70, 0x64, 0x73, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x12, 0x56, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x03, 0xe0, + 0x41, 0x01, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xe3, + 0x01, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, + 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x64, + 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x0f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x0a, + 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, + 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x92, 0x01, 0x0a, 0x0e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x33, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, - 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x92, 0x01, 0x0a, 0x0e, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x33, 0x0a, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x12, 0x4b, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x37, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x4b, 0x0a, 0x04, + 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, + 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0xd3, 0x01, 0x0a, 0x04, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x74, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x4b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0xb2, - 0x01, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x5b, 0x0a, 0x06, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x75, + 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x41, 0x0a, 0x13, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x32, + 0xaa, 0x0c, 0x0a, 0x19, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x9b, 0x01, + 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x2e, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, 0x2f, 0x70, 0x64, 0x73, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x72, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x67, 0x65, 0x74, 0x12, 0x87, 0x02, 0x0a, 0x0d, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2f, 0x2e, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, + 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x92, 0x01, 0x92, 0x41, 0x21, 0x12, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x41, 0x50, 0x49, + 0x20, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x68, 0x5a, 0x38, 0x3a, + 0x01, 0x2a, 0x22, 0x33, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x3a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x2c, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x72, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xe0, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x73, 0x12, 0x4b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x32, 0xec, 0x09, 0x0a, 0x19, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x9b, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x2d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, - 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x23, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, - 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, 0x2f, - 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2f, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x2f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x67, 0x65, 0x74, 0x12, - 0xa8, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x2f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, - 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x70, - 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x2f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xe0, 0x01, 0x0a, 0x11, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x73, - 0x12, 0x4b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, - 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4c, 0x2e, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, - 0x70, 0x64, 0x73, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4b, 0x69, - 0x6e, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x74, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4b, 0x69, 0x6e, 0x64, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4c, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x64, + 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, + 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x2f, 0x6b, 0x69, 0x6e, 0x64, 0x73, 0x12, 0xe0, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x4b, + 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, + 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4c, 0x2e, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, + 0x73, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x2a, 0x12, 0x28, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x67, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0xd4, 0x01, 0x0a, 0x0f, + 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x49, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, + 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x35, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x2f, 0x12, 0x2d, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, - 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6b, 0x69, 0x6e, 0x64, 0x73, 0x12, 0xe0, 0x01, - 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x73, 0x12, 0x4b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x12, 0xe8, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x4d, 0x2e, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, + 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4e, 0x2e, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x2c, 0x12, 0x2a, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x67, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x12, 0xdc, 0x01, + 0x0a, 0x11, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x12, 0x4b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x4c, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x41, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x12, 0xd4, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x49, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, - 0x6f, 0x67, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x3f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, - 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x12, 0x2d, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xe8, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x12, - 0x4d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, - 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4e, - 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, - 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x73, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x42, 0xb3, 0x01, 0x0a, 0x35, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x63, - 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x64, - 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x17, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x5f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, - 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, - 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, - 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x70, 0x64, + 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, + 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x42, 0xb3, 0x01, 0x0a, + 0x35, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, + 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, + 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x17, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x5f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, + 0x72, 0x65, 0x2d, 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x64, + 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -878,58 +965,62 @@ func file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinitio return file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDescData } -var file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes = make([]protoimpl.MessageInfo, 12) var file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_goTypes = []interface{}{ - (*ListTemplateKindsRequest)(nil), // 0: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateKindsRequest - (*ListTemplateKindsResponse)(nil), // 1: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateKindsResponse - (*ListTemplateTypesRequest)(nil), // 2: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateTypesRequest - (*ListTemplateTypesResponse)(nil), // 3: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateTypesResponse - (*GetTemplateTypeRequest)(nil), // 4: public.portworx.pds.catalog.templatedefinition.v1.GetTemplateTypeRequest - (*TemplateType)(nil), // 5: public.portworx.pds.catalog.templatedefinition.v1.TemplateType - (*ListTemplateSamplesRequest)(nil), // 6: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateSamplesRequest - (*ListTemplateSamplesResponse)(nil), // 7: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateSamplesResponse - (*TemplateSample)(nil), // 8: public.portworx.pds.catalog.templatedefinition.v1.TemplateSample - (*Info)(nil), // 9: public.portworx.pds.catalog.templatedefinition.v1.Info - nil, // 10: public.portworx.pds.catalog.templatedefinition.v1.Info.ValuesEntry - (*apiv1.Sort)(nil), // 11: public.portworx.common.v1.Sort - (*apiv1.PageBasedPaginationRequest)(nil), // 12: public.portworx.common.v1.PageBasedPaginationRequest - (*apiv1.PageBasedPaginationResponse)(nil), // 13: public.portworx.common.v1.PageBasedPaginationResponse - (*apiv1.Meta)(nil), // 14: public.portworx.common.v1.Meta - (*apiv1.GetRevisionRequest)(nil), // 15: public.portworx.common.v1.GetRevisionRequest - (*apiv1.ListRevisionsRequest)(nil), // 16: public.portworx.common.v1.ListRevisionsRequest - (*apiv1.Revision)(nil), // 17: public.portworx.common.v1.Revision - (*apiv1.ListRevisionsResponse)(nil), // 18: public.portworx.common.v1.ListRevisionsResponse + (*GetTemplateSampleRequest)(nil), // 0: public.portworx.pds.catalog.templatedefinition.v1.GetTemplateSampleRequest + (*ListTemplateKindsRequest)(nil), // 1: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateKindsRequest + (*ListTemplateKindsResponse)(nil), // 2: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateKindsResponse + (*ListTemplateTypesRequest)(nil), // 3: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateTypesRequest + (*ListTemplateTypesResponse)(nil), // 4: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateTypesResponse + (*GetTemplateTypeRequest)(nil), // 5: public.portworx.pds.catalog.templatedefinition.v1.GetTemplateTypeRequest + (*TemplateType)(nil), // 6: public.portworx.pds.catalog.templatedefinition.v1.TemplateType + (*ListTemplateSamplesRequest)(nil), // 7: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateSamplesRequest + (*ListTemplateSamplesResponse)(nil), // 8: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateSamplesResponse + (*TemplateSample)(nil), // 9: public.portworx.pds.catalog.templatedefinition.v1.TemplateSample + (*Info)(nil), // 10: public.portworx.pds.catalog.templatedefinition.v1.Info + nil, // 11: public.portworx.pds.catalog.templatedefinition.v1.Info.TemplateValuesEntry + (*apiv1.Sort)(nil), // 12: public.portworx.common.v1.Sort + (*apiv1.PageBasedPaginationRequest)(nil), // 13: public.portworx.common.v1.PageBasedPaginationRequest + (*apiv1.PageBasedPaginationResponse)(nil), // 14: public.portworx.common.v1.PageBasedPaginationResponse + (*apiv1.Meta)(nil), // 15: public.portworx.common.v1.Meta + (*apiv1.GetRevisionRequest)(nil), // 16: public.portworx.common.v1.GetRevisionRequest + (*apiv1.ListRevisionsRequest)(nil), // 17: public.portworx.common.v1.ListRevisionsRequest + (*apiv1.Revision)(nil), // 18: public.portworx.common.v1.Revision + (*apiv1.ListRevisionsResponse)(nil), // 19: public.portworx.common.v1.ListRevisionsResponse } var file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_depIdxs = []int32{ - 11, // 0: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateKindsRequest.sort:type_name -> public.portworx.common.v1.Sort - 12, // 1: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateKindsRequest.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationRequest - 13, // 2: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateKindsResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse - 12, // 3: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateTypesRequest.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationRequest - 11, // 4: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateTypesRequest.sort:type_name -> public.portworx.common.v1.Sort - 5, // 5: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateTypesResponse.template_types:type_name -> public.portworx.pds.catalog.templatedefinition.v1.TemplateType - 13, // 6: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateTypesResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse - 8, // 7: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateSamplesResponse.template_samples:type_name -> public.portworx.pds.catalog.templatedefinition.v1.TemplateSample - 13, // 8: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateSamplesResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse - 14, // 9: public.portworx.pds.catalog.templatedefinition.v1.TemplateSample.meta:type_name -> public.portworx.common.v1.Meta - 9, // 10: public.portworx.pds.catalog.templatedefinition.v1.TemplateSample.info:type_name -> public.portworx.pds.catalog.templatedefinition.v1.Info - 10, // 11: public.portworx.pds.catalog.templatedefinition.v1.Info.values:type_name -> public.portworx.pds.catalog.templatedefinition.v1.Info.ValuesEntry - 15, // 12: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.GetRevision:input_type -> public.portworx.common.v1.GetRevisionRequest - 16, // 13: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.ListRevisions:input_type -> public.portworx.common.v1.ListRevisionsRequest - 0, // 14: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.ListTemplateKinds:input_type -> public.portworx.pds.catalog.templatedefinition.v1.ListTemplateKindsRequest - 2, // 15: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.ListTemplateTypes:input_type -> public.portworx.pds.catalog.templatedefinition.v1.ListTemplateTypesRequest - 4, // 16: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.GetTemplateType:input_type -> public.portworx.pds.catalog.templatedefinition.v1.GetTemplateTypeRequest - 6, // 17: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.ListTemplateSamples:input_type -> public.portworx.pds.catalog.templatedefinition.v1.ListTemplateSamplesRequest - 17, // 18: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.GetRevision:output_type -> public.portworx.common.v1.Revision - 18, // 19: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.ListRevisions:output_type -> public.portworx.common.v1.ListRevisionsResponse - 1, // 20: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.ListTemplateKinds:output_type -> public.portworx.pds.catalog.templatedefinition.v1.ListTemplateKindsResponse - 3, // 21: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.ListTemplateTypes:output_type -> public.portworx.pds.catalog.templatedefinition.v1.ListTemplateTypesResponse - 5, // 22: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.GetTemplateType:output_type -> public.portworx.pds.catalog.templatedefinition.v1.TemplateType - 7, // 23: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.ListTemplateSamples:output_type -> public.portworx.pds.catalog.templatedefinition.v1.ListTemplateSamplesResponse - 18, // [18:24] is the sub-list for method output_type - 12, // [12:18] is the sub-list for method input_type - 12, // [12:12] is the sub-list for extension type_name - 12, // [12:12] is the sub-list for extension extendee - 0, // [0:12] is the sub-list for field type_name + 12, // 0: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateKindsRequest.sort:type_name -> public.portworx.common.v1.Sort + 13, // 1: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateKindsRequest.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationRequest + 14, // 2: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateKindsResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse + 13, // 3: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateTypesRequest.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationRequest + 12, // 4: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateTypesRequest.sort:type_name -> public.portworx.common.v1.Sort + 6, // 5: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateTypesResponse.template_types:type_name -> public.portworx.pds.catalog.templatedefinition.v1.TemplateType + 14, // 6: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateTypesResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse + 13, // 7: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateSamplesRequest.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationRequest + 9, // 8: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateSamplesResponse.template_samples:type_name -> public.portworx.pds.catalog.templatedefinition.v1.TemplateSample + 14, // 9: public.portworx.pds.catalog.templatedefinition.v1.ListTemplateSamplesResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse + 15, // 10: public.portworx.pds.catalog.templatedefinition.v1.TemplateSample.meta:type_name -> public.portworx.common.v1.Meta + 10, // 11: public.portworx.pds.catalog.templatedefinition.v1.TemplateSample.info:type_name -> public.portworx.pds.catalog.templatedefinition.v1.Info + 11, // 12: public.portworx.pds.catalog.templatedefinition.v1.Info.template_values:type_name -> public.portworx.pds.catalog.templatedefinition.v1.Info.TemplateValuesEntry + 16, // 13: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.GetRevision:input_type -> public.portworx.common.v1.GetRevisionRequest + 17, // 14: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.ListRevisions:input_type -> public.portworx.common.v1.ListRevisionsRequest + 1, // 15: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.ListTemplateKinds:input_type -> public.portworx.pds.catalog.templatedefinition.v1.ListTemplateKindsRequest + 3, // 16: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.ListTemplateTypes:input_type -> public.portworx.pds.catalog.templatedefinition.v1.ListTemplateTypesRequest + 5, // 17: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.GetTemplateType:input_type -> public.portworx.pds.catalog.templatedefinition.v1.GetTemplateTypeRequest + 7, // 18: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.ListTemplateSamples:input_type -> public.portworx.pds.catalog.templatedefinition.v1.ListTemplateSamplesRequest + 0, // 19: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.GetTemplateSample:input_type -> public.portworx.pds.catalog.templatedefinition.v1.GetTemplateSampleRequest + 18, // 20: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.GetRevision:output_type -> public.portworx.common.v1.Revision + 19, // 21: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.ListRevisions:output_type -> public.portworx.common.v1.ListRevisionsResponse + 2, // 22: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.ListTemplateKinds:output_type -> public.portworx.pds.catalog.templatedefinition.v1.ListTemplateKindsResponse + 4, // 23: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.ListTemplateTypes:output_type -> public.portworx.pds.catalog.templatedefinition.v1.ListTemplateTypesResponse + 6, // 24: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.GetTemplateType:output_type -> public.portworx.pds.catalog.templatedefinition.v1.TemplateType + 8, // 25: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.ListTemplateSamples:output_type -> public.portworx.pds.catalog.templatedefinition.v1.ListTemplateSamplesResponse + 9, // 26: public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService.GetTemplateSample:output_type -> public.portworx.pds.catalog.templatedefinition.v1.TemplateSample + 20, // [20:27] is the sub-list for method output_type + 13, // [13:20] is the sub-list for method input_type + 13, // [13:13] is the sub-list for extension type_name + 13, // [13:13] is the sub-list for extension extendee + 0, // [0:13] is the sub-list for field type_name } func init() { @@ -941,7 +1032,7 @@ func file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinitio } if !protoimpl.UnsafeEnabled { file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListTemplateKindsRequest); i { + switch v := v.(*GetTemplateSampleRequest); i { case 0: return &v.state case 1: @@ -953,7 +1044,7 @@ func file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinitio } } file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListTemplateKindsResponse); i { + switch v := v.(*ListTemplateKindsRequest); i { case 0: return &v.state case 1: @@ -965,7 +1056,7 @@ func file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinitio } } file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListTemplateTypesRequest); i { + switch v := v.(*ListTemplateKindsResponse); i { case 0: return &v.state case 1: @@ -977,7 +1068,7 @@ func file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinitio } } file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListTemplateTypesResponse); i { + switch v := v.(*ListTemplateTypesRequest); i { case 0: return &v.state case 1: @@ -989,7 +1080,7 @@ func file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinitio } } file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTemplateTypeRequest); i { + switch v := v.(*ListTemplateTypesResponse); i { case 0: return &v.state case 1: @@ -1001,7 +1092,7 @@ func file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinitio } } file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TemplateType); i { + switch v := v.(*GetTemplateTypeRequest); i { case 0: return &v.state case 1: @@ -1013,7 +1104,7 @@ func file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinitio } } file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListTemplateSamplesRequest); i { + switch v := v.(*TemplateType); i { case 0: return &v.state case 1: @@ -1025,7 +1116,7 @@ func file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinitio } } file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListTemplateSamplesResponse); i { + switch v := v.(*ListTemplateSamplesRequest); i { case 0: return &v.state case 1: @@ -1037,7 +1128,7 @@ func file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinitio } } file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TemplateSample); i { + switch v := v.(*ListTemplateSamplesResponse); i { case 0: return &v.state case 1: @@ -1049,6 +1140,18 @@ func file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinitio } } file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TemplateSample); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Info); i { case 0: return &v.state @@ -1067,7 +1170,7 @@ func file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinitio GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_public_portworx_pds_catalog_templatedefinition_apiv1_templatedefinition_proto_rawDesc, NumEnums: 0, - NumMessages: 11, + NumMessages: 12, NumExtensions: 0, NumServices: 1, }, diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition.pb.gw.go b/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition.pb.gw.go index 400594efc..52303fb73 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition.pb.gw.go +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition.pb.gw.go @@ -104,6 +104,32 @@ func local_request_TemplateDefinitionService_ListRevisions_0(ctx context.Context } +func request_TemplateDefinitionService_ListRevisions_1(ctx context.Context, marshaler runtime.Marshaler, client TemplateDefinitionServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq common.ListRevisionsRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListRevisions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_TemplateDefinitionService_ListRevisions_1(ctx context.Context, marshaler runtime.Marshaler, server TemplateDefinitionServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq common.ListRevisionsRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListRevisions(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_TemplateDefinitionService_ListTemplateKinds_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) @@ -264,6 +290,58 @@ func local_request_TemplateDefinitionService_ListTemplateSamples_0(ctx context.C } +func request_TemplateDefinitionService_GetTemplateSample_0(ctx context.Context, marshaler runtime.Marshaler, client TemplateDefinitionServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetTemplateSampleRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.GetTemplateSample(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_TemplateDefinitionService_GetTemplateSample_0(ctx context.Context, marshaler runtime.Marshaler, server TemplateDefinitionServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetTemplateSampleRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.GetTemplateSample(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterTemplateDefinitionServiceHandlerServer registers the http handlers for service TemplateDefinitionService to "mux". // UnaryRPC :call TemplateDefinitionServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -320,6 +398,31 @@ func RegisterTemplateDefinitionServiceHandlerServer(ctx context.Context, mux *ru }) + mux.Handle("POST", pattern_TemplateDefinitionService_ListRevisions_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService/ListRevisions", runtime.WithHTTPPathPattern("/pds/v1/catalog/templateDefinition/revisions:search")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_TemplateDefinitionService_ListRevisions_1(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TemplateDefinitionService_ListRevisions_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_TemplateDefinitionService_ListTemplateKinds_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -420,6 +523,31 @@ func RegisterTemplateDefinitionServiceHandlerServer(ctx context.Context, mux *ru }) + mux.Handle("GET", pattern_TemplateDefinitionService_GetTemplateSample_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService/GetTemplateSample", runtime.WithHTTPPathPattern("/pds/v1/catalog/templateDefinition/samples/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_TemplateDefinitionService_GetTemplateSample_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TemplateDefinitionService_GetTemplateSample_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -505,6 +633,28 @@ func RegisterTemplateDefinitionServiceHandlerClient(ctx context.Context, mux *ru }) + mux.Handle("POST", pattern_TemplateDefinitionService_ListRevisions_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService/ListRevisions", runtime.WithHTTPPathPattern("/pds/v1/catalog/templateDefinition/revisions:search")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TemplateDefinitionService_ListRevisions_1(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TemplateDefinitionService_ListRevisions_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_TemplateDefinitionService_ListTemplateKinds_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -593,6 +743,28 @@ func RegisterTemplateDefinitionServiceHandlerClient(ctx context.Context, mux *ru }) + mux.Handle("GET", pattern_TemplateDefinitionService_GetTemplateSample_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService/GetTemplateSample", runtime.WithHTTPPathPattern("/pds/v1/catalog/templateDefinition/samples/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TemplateDefinitionService_GetTemplateSample_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TemplateDefinitionService_GetTemplateSample_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -601,6 +773,8 @@ var ( pattern_TemplateDefinitionService_ListRevisions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"pds", "v1", "catalog", "templateDefinition", "revisions"}, "")) + pattern_TemplateDefinitionService_ListRevisions_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"pds", "v1", "catalog", "templateDefinition", "revisions"}, "search")) + pattern_TemplateDefinitionService_ListTemplateKinds_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"pds", "v1", "catalog", "templateDefinition", "kinds"}, "")) pattern_TemplateDefinitionService_ListTemplateTypes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"pds", "v1", "catalog", "templateDefinition", "types"}, "")) @@ -608,6 +782,8 @@ var ( pattern_TemplateDefinitionService_GetTemplateType_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"pds", "v1", "catalog", "templateDefinition", "types", "id"}, "")) pattern_TemplateDefinitionService_ListTemplateSamples_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"pds", "v1", "catalog", "templateDefinition", "samples"}, "")) + + pattern_TemplateDefinitionService_GetTemplateSample_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"pds", "v1", "catalog", "templateDefinition", "samples", "id"}, "")) ) var ( @@ -615,6 +791,8 @@ var ( forward_TemplateDefinitionService_ListRevisions_0 = runtime.ForwardResponseMessage + forward_TemplateDefinitionService_ListRevisions_1 = runtime.ForwardResponseMessage + forward_TemplateDefinitionService_ListTemplateKinds_0 = runtime.ForwardResponseMessage forward_TemplateDefinitionService_ListTemplateTypes_0 = runtime.ForwardResponseMessage @@ -622,4 +800,6 @@ var ( forward_TemplateDefinitionService_GetTemplateType_0 = runtime.ForwardResponseMessage forward_TemplateDefinitionService_ListTemplateSamples_0 = runtime.ForwardResponseMessage + + forward_TemplateDefinitionService_GetTemplateSample_0 = runtime.ForwardResponseMessage ) diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition.pb.md b/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition.pb.md index 1218001c5..019decbdb 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition.pb.md +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition.pb.md @@ -12,9 +12,10 @@ - Messages + - [GetTemplateSampleRequest](#gettemplatesamplerequest) - [GetTemplateTypeRequest](#gettemplatetyperequest) - [Info](#info) - - [Info.ValuesEntry](#infovaluesentry) + - [Info.TemplateValuesEntry](#infotemplatevaluesentry) - [ListTemplateKindsRequest](#listtemplatekindsrequest) - [ListTemplateKindsResponse](#listtemplatekindsresponse) - [ListTemplateSamplesRequest](#listtemplatesamplesrequest) @@ -46,6 +47,11 @@ GetRevision gets the revision details, containing the actual schema. > **rpc** ListRevisions([.public.portworx.common.v1.ListRevisionsRequest](#publicportworxcommonv1listrevisionsrequest)) [.public.portworx.common.v1.ListRevisionsResponse](#publicportworxcommonv1listrevisionsresponse) +(-- api-linter: core::0132::http-body=disabled + api-linter: core::0132::http-method=disabled + aip.dev/not-precedent: We need to do this because +we can't have advance filters as query params. +--) ListRevisions list the revisions. ### ListTemplateKinds {#methodpublicportworxpdscatalogtemplatedefinitionv1templatedefinitionservicelisttemplatekinds} @@ -71,12 +77,29 @@ GetTemplateType API returns the template type by id. [ListTemplateSamplesResponse](#listtemplatesamplesresponse) ListTemplateSamples: Used to list template sample schema. +### GetTemplateSample {#methodpublicportworxpdscatalogtemplatedefinitionv1templatedefinitionservicegettemplatesample} + +> **rpc** GetTemplateSample([GetTemplateSampleRequest](#gettemplatesamplerequest)) + [TemplateSample](#templatesample) + +GetTemplateSample API returns the template sample for a given template id. ## Messages +### GetTemplateSampleRequest {#gettemplatesamplerequest} +Request to get the template sample resource. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| id | [ string](#string) | UID of the template sample. | + + + + ### GetTemplateTypeRequest {#gettemplatetyperequest} Request to get template type. @@ -95,12 +118,12 @@ Info of sample template. | Field | Type | Description | | ----- | ---- | ----------- | | kind | [ string](#string) | Kind of the template | -| values | [map Info.ValuesEntry](#infovaluesentry) | values of the sample template. | +| template_values | [map Info.TemplateValuesEntry](#infotemplatevaluesentry) | template_values of the sample template. | -### Info.ValuesEntry {#infovaluesentry} +### Info.TemplateValuesEntry {#infotemplatevaluesentry} @@ -145,6 +168,7 @@ ListTemplateSamplesRequest list templates samples request. | Field | Type | Description | | ----- | ---- | ----------- | | kind | [ string](#string) | filter sample templates based on kind, this accepts wild card, eg: pds:service:postgre* | +| pagination | [ public.portworx.common.v1.PageBasedPaginationRequest](#publicportworxcommonv1pagebasedpaginationrequest) | Pagination metadata for this request. | diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition.proto b/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition.proto index 24f1a2a6a..7cb4a940f 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition.proto +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition.proto @@ -17,12 +17,11 @@ syntax = "proto3"; package public.portworx.pds.catalog.templatedefinition.v1; import "google/api/field_behavior.proto"; -import "google/protobuf/timestamp.proto"; import "google/api/annotations.proto"; +import "protoc-gen-openapiv2/options/annotations.proto"; import "public/portworx/common/apiv1/meta.proto"; import "public/portworx/common/apiv1/revision.proto"; -import "public/portworx/common/apiv1/selector.proto"; import "public/portworx/common/apiv1/pagination.proto"; import "public/portworx/common/apiv1/sort.proto"; @@ -41,11 +40,23 @@ service TemplateDefinitionService{ }; } + // (-- api-linter: core::0132::http-body=disabled + // api-linter: core::0132::http-method=disabled + // aip.dev/not-precedent: We need to do this because + // we can't have advance filters as query params. + // --) // ListRevisions list the revisions. rpc ListRevisions (public.portworx.common.v1.ListRevisionsRequest) returns (public.portworx.common.v1.ListRevisionsResponse){ option(google.api.http) = { get: "/pds/v1/catalog/templateDefinition/revisions" + additional_bindings: { + post: "/pds/v1/catalog/templateDefinition/revisions:search" + body: "*" + } + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "List API lists all the revision" }; } @@ -81,6 +92,20 @@ service TemplateDefinitionService{ get: "/pds/v1/catalog/templateDefinition/samples" }; } + + // GetTemplateSample API returns the template sample for a given template id. + rpc GetTemplateSample(GetTemplateSampleRequest) + returns (TemplateSample){ + option(google.api.http) = { + get: "/pds/v1/catalog/templateDefinition/samples/{id}" + }; + } +} + +// Request to get the template sample resource. +message GetTemplateSampleRequest { + // UID of the template sample. + string id = 1; } // ListTemplateKindResponse listing request. @@ -149,6 +174,9 @@ message TemplateType { message ListTemplateSamplesRequest{ // filter sample templates based on kind, this accepts wild card, eg: pds:service:postgre* string kind = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Pagination metadata for this request. + public.portworx.common.v1.PageBasedPaginationRequest pagination = 2 [(google.api.field_behavior) = OPTIONAL]; } // ListTemplateSamplesResponse list templates samples response. @@ -177,6 +205,6 @@ message Info { // Kind of the template string kind = 1; - // values of the sample template. - map values = 2; + // template_values of the sample template. + map template_values = 2; } \ No newline at end of file diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition.swagger.json b/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition.swagger.json index 7a62afe13..f72615bca 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition.swagger.json +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition.swagger.json @@ -115,7 +115,7 @@ }, "/pds/v1/catalog/templateDefinition/revisions": { "get": { - "summary": "ListRevisions list the revisions.", + "summary": "List API lists all the revision", "operationId": "TemplateDefinitionService_ListRevisions", "responses": { "200": { @@ -258,6 +258,48 @@ ] } }, + "/pds/v1/catalog/templateDefinition/revisions:search": { + "post": { + "summary": "List API lists all the revision", + "operationId": "TemplateDefinitionService_ListRevisions2", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v1ListRevisionsResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v1ListRevisionsRequest" + } + } + }, + "description": "Request parameters for listing revisions.", + "required": true + }, + "tags": [ + "TemplateDefinitionService" + ] + } + }, "/pds/v1/catalog/templateDefinition/samples": { "get": { "summary": "ListTemplateSamples: Used to list template sample schema.", @@ -293,6 +335,68 @@ "schema": { "type": "string" } + }, + { + "name": "pagination.pageNumber", + "description": "Page number is the page number to return based on the size.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "int64" + } + }, + { + "name": "pagination.pageSize", + "description": "Page size is the maximum number of records to include per page.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "int64" + } + } + ], + "tags": [ + "TemplateDefinitionService" + ] + } + }, + "/pds/v1/catalog/templateDefinition/samples/{id}": { + "get": { + "summary": "GetTemplateSample API returns the template sample for a given template id.", + "operationId": "TemplateDefinitionService_GetTemplateSample", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v1TemplateSample" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "UID of the template sample.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } } ], "tags": [ @@ -473,10 +577,11 @@ "enum": [ "OPERATOR_UNSPECIFIED", "IN", - "NOT_IN" + "NOT_IN", + "LIKE" ], "default": "OPERATOR_UNSPECIFIED", - "description": "Operator specifies the relationship between the provided (key,value) pairs in the response.\n\n - OPERATOR_UNSPECIFIED: Unspecified, do not use.\n - IN: IN specifies that the key should be associated with atleast 1 of the element in value list.\n - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list." + "description": "Operator specifies the relationship between the provided (key,value) pairs in the response.\n\n - OPERATOR_UNSPECIFIED: Unspecified, do not use.\n - IN: IN specifies that the key should be associated with atleast 1 of the element in value list.\n - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list.\n - LIKE: LIKE specified that the key should be of a specified pattern" }, "SortByField": { "type": "string", @@ -525,23 +630,38 @@ } } }, - "v1Info": { + "templatedefinitionv1Info": { "type": "object", "properties": { "kind": { "type": "string", "title": "Kind of the template" }, - "values": { + "templateValues": { "type": "object", "additionalProperties": { "type": "string" }, - "description": "values of the sample template." + "description": "template_values of the sample template." } }, "description": "Info of sample template." }, + "v1ListRevisionsRequest": { + "type": "object", + "properties": { + "fieldSelector": { + "$ref": "#/components/schemas/v1Selector" + }, + "sort": { + "$ref": "#/components/schemas/v1Sort" + }, + "pagination": { + "$ref": "#/components/schemas/v1PageBasedPaginationRequest" + } + }, + "description": "Request parameters for listing revisions." + }, "v1ListRevisionsResponse": { "type": "object", "properties": { @@ -811,7 +931,7 @@ "$ref": "#/components/schemas/v1Meta" }, "info": { - "$ref": "#/components/schemas/v1Info" + "$ref": "#/components/schemas/templatedefinitionv1Info" } }, "description": "TemplateSample represents the sample template schema." diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition_grpc.pb.go b/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition_grpc.pb.go index a98e0975b..4b339111a 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition_grpc.pb.go +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition_grpc.pb.go @@ -41,6 +41,7 @@ const ( TemplateDefinitionService_ListTemplateTypes_FullMethodName = "/public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService/ListTemplateTypes" TemplateDefinitionService_GetTemplateType_FullMethodName = "/public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService/GetTemplateType" TemplateDefinitionService_ListTemplateSamples_FullMethodName = "/public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService/ListTemplateSamples" + TemplateDefinitionService_GetTemplateSample_FullMethodName = "/public.portworx.pds.catalog.templatedefinition.v1.TemplateDefinitionService/GetTemplateSample" ) // TemplateDefinitionServiceClient is the client API for TemplateDefinitionService service. @@ -49,6 +50,13 @@ const ( type TemplateDefinitionServiceClient interface { // GetRevision gets the revision details, containing the actual schema. GetRevision(ctx context.Context, in *apiv1.GetRevisionRequest, opts ...grpc.CallOption) (*apiv1.Revision, error) + // (-- api-linter: core::0132::http-body=disabled + // + // api-linter: core::0132::http-method=disabled + // aip.dev/not-precedent: We need to do this because + // + // we can't have advance filters as query params. + // --) // ListRevisions list the revisions. ListRevisions(ctx context.Context, in *apiv1.ListRevisionsRequest, opts ...grpc.CallOption) (*apiv1.ListRevisionsResponse, error) // ListTemplateKindRequest: Used to list unique template kind(names). @@ -59,6 +67,8 @@ type TemplateDefinitionServiceClient interface { GetTemplateType(ctx context.Context, in *GetTemplateTypeRequest, opts ...grpc.CallOption) (*TemplateType, error) // ListTemplateSamples: Used to list template sample schema. ListTemplateSamples(ctx context.Context, in *ListTemplateSamplesRequest, opts ...grpc.CallOption) (*ListTemplateSamplesResponse, error) + // GetTemplateSample API returns the template sample for a given template id. + GetTemplateSample(ctx context.Context, in *GetTemplateSampleRequest, opts ...grpc.CallOption) (*TemplateSample, error) } type templateDefinitionServiceClient struct { @@ -123,12 +133,28 @@ func (c *templateDefinitionServiceClient) ListTemplateSamples(ctx context.Contex return out, nil } +func (c *templateDefinitionServiceClient) GetTemplateSample(ctx context.Context, in *GetTemplateSampleRequest, opts ...grpc.CallOption) (*TemplateSample, error) { + out := new(TemplateSample) + err := c.cc.Invoke(ctx, TemplateDefinitionService_GetTemplateSample_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // TemplateDefinitionServiceServer is the server API for TemplateDefinitionService service. // All implementations must embed UnimplementedTemplateDefinitionServiceServer // for forward compatibility type TemplateDefinitionServiceServer interface { // GetRevision gets the revision details, containing the actual schema. GetRevision(context.Context, *apiv1.GetRevisionRequest) (*apiv1.Revision, error) + // (-- api-linter: core::0132::http-body=disabled + // + // api-linter: core::0132::http-method=disabled + // aip.dev/not-precedent: We need to do this because + // + // we can't have advance filters as query params. + // --) // ListRevisions list the revisions. ListRevisions(context.Context, *apiv1.ListRevisionsRequest) (*apiv1.ListRevisionsResponse, error) // ListTemplateKindRequest: Used to list unique template kind(names). @@ -139,6 +165,8 @@ type TemplateDefinitionServiceServer interface { GetTemplateType(context.Context, *GetTemplateTypeRequest) (*TemplateType, error) // ListTemplateSamples: Used to list template sample schema. ListTemplateSamples(context.Context, *ListTemplateSamplesRequest) (*ListTemplateSamplesResponse, error) + // GetTemplateSample API returns the template sample for a given template id. + GetTemplateSample(context.Context, *GetTemplateSampleRequest) (*TemplateSample, error) mustEmbedUnimplementedTemplateDefinitionServiceServer() } @@ -164,6 +192,9 @@ func (UnimplementedTemplateDefinitionServiceServer) GetTemplateType(context.Cont func (UnimplementedTemplateDefinitionServiceServer) ListTemplateSamples(context.Context, *ListTemplateSamplesRequest) (*ListTemplateSamplesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListTemplateSamples not implemented") } +func (UnimplementedTemplateDefinitionServiceServer) GetTemplateSample(context.Context, *GetTemplateSampleRequest) (*TemplateSample, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetTemplateSample not implemented") +} func (UnimplementedTemplateDefinitionServiceServer) mustEmbedUnimplementedTemplateDefinitionServiceServer() { } @@ -286,6 +317,24 @@ func _TemplateDefinitionService_ListTemplateSamples_Handler(srv interface{}, ctx return interceptor(ctx, in, info, handler) } +func _TemplateDefinitionService_GetTemplateSample_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTemplateSampleRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TemplateDefinitionServiceServer).GetTemplateSample(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: TemplateDefinitionService_GetTemplateSample_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TemplateDefinitionServiceServer).GetTemplateSample(ctx, req.(*GetTemplateSampleRequest)) + } + return interceptor(ctx, in, info, handler) +} + // TemplateDefinitionService_ServiceDesc is the grpc.ServiceDesc for TemplateDefinitionService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -317,6 +366,10 @@ var TemplateDefinitionService_ServiceDesc = grpc.ServiceDesc{ MethodName: "ListTemplateSamples", Handler: _TemplateDefinitionService_ListTemplateSamples_Handler, }, + { + MethodName: "GetTemplateSample", + Handler: _TemplateDefinitionService_GetTemplateSample_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "public/portworx/pds/catalog/templatedefinition/apiv1/templatedefinition.proto", diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/Makefile b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/Makefile similarity index 54% rename from vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/Makefile rename to vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/Makefile index 09d4d8cfa..b114d263a 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/Makefile +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/Makefile @@ -1,4 +1,4 @@ -PROTO_FILES = deployment.proto +PROTO_FILES = dataservicedeployment.proto all: $(PROTO_FILES) diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.pb.go b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.pb.go new file mode 100644 index 000000000..29a95a272 --- /dev/null +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.pb.go @@ -0,0 +1,1552 @@ +// Please use the following editor setup for this file: +// Tab size=2; Tabs as spaces; Clean up trailing whitepsace +// +// In vim add: au FileType proto setl sw=2 ts=2 expandtab list +// +// In vscode install vscode-proto3 extension and add this to your settings.json: +// "[proto3]": { +// "editor.tabSize": 2, +// "editor.insertSpaces": true, +// "editor.rulers": [80], +// "editor.detectIndentation": true, +// "files.trimTrailingWhitespace": true +// } +// + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.32.0 +// protoc v4.25.3 +// source: public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto + +package dataservicedeployment + +import ( + apiv1 "github.com/pure-px/apis/public/portworx/common/apiv1" + apiv11 "github.com/pure-px/apis/public/portworx/pds/dataservicedeploymenttopology/apiv1" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + structpb "google.golang.org/protobuf/types/known/structpb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Enum for Health of the DataService Deployment. +type Status_Health int32 + +const ( + // Health is unspecified. + Status_HEALTH_UNSPECIFIED Status_Health = 0 + // DataService Deployment is Available. + Status_AVAILABLE Status_Health = 1 + // DataService Deployment is PartiallyAvailable. + Status_PARTIALLY_AVAILABLE Status_Health = 2 + // DataService Deployment is Unavailable. + Status_UNAVAILABLE Status_Health = 3 + // DataService Deployment is deleted from cluster. + Status_NOT_APPLICABLE Status_Health = 4 +) + +// Enum value maps for Status_Health. +var ( + Status_Health_name = map[int32]string{ + 0: "HEALTH_UNSPECIFIED", + 1: "AVAILABLE", + 2: "PARTIALLY_AVAILABLE", + 3: "UNAVAILABLE", + 4: "NOT_APPLICABLE", + } + Status_Health_value = map[string]int32{ + "HEALTH_UNSPECIFIED": 0, + "AVAILABLE": 1, + "PARTIALLY_AVAILABLE": 2, + "UNAVAILABLE": 3, + "NOT_APPLICABLE": 4, + } +) + +func (x Status_Health) Enum() *Status_Health { + p := new(Status_Health) + *p = x + return p +} + +func (x Status_Health) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Status_Health) Descriptor() protoreflect.EnumDescriptor { + return file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_enumTypes[0].Descriptor() +} + +func (Status_Health) Type() protoreflect.EnumType { + return &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_enumTypes[0] +} + +func (x Status_Health) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Status_Health.Descriptor instead. +func (Status_Health) EnumDescriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDescGZIP(), []int{5, 0} +} + +// Enum for Status of the DataService Deployment. +type Status_Phase int32 + +const ( + // Phase is unspecified. + Status_PHASE_UNSPECIFIED Status_Phase = 0 + // Restore of DataService Deployment is in progress. + Status_RESTORING Status_Phase = 1 + // DataService Deployment is Failed. + Status_FAILED Status_Phase = 2 + // DataService Deployment is being deleted. + Status_DELETING Status_Phase = 3 + // DataService Deployment is Preparing. + Status_PREPARING Status_Phase = 4 + // DataService Deployment is Deploying. + Status_DEPLOYING Status_Phase = 5 + // DataService Deployment is Deployed. + Status_DEPLOYED Status_Phase = 6 + // DataService Deployment is Updating. + Status_UPDATING Status_Phase = 7 + // DataService Deployment is Timeout. + Status_TIMED_OUT Status_Phase = 8 + // DataService Deployment is deleted from cluster. + Status_DELETED_FROM_CLUSTER Status_Phase = 9 +) + +// Enum value maps for Status_Phase. +var ( + Status_Phase_name = map[int32]string{ + 0: "PHASE_UNSPECIFIED", + 1: "RESTORING", + 2: "FAILED", + 3: "DELETING", + 4: "PREPARING", + 5: "DEPLOYING", + 6: "DEPLOYED", + 7: "UPDATING", + 8: "TIMED_OUT", + 9: "DELETED_FROM_CLUSTER", + } + Status_Phase_value = map[string]int32{ + "PHASE_UNSPECIFIED": 0, + "RESTORING": 1, + "FAILED": 2, + "DELETING": 3, + "PREPARING": 4, + "DEPLOYING": 5, + "DEPLOYED": 6, + "UPDATING": 7, + "TIMED_OUT": 8, + "DELETED_FROM_CLUSTER": 9, + } +) + +func (x Status_Phase) Enum() *Status_Phase { + p := new(Status_Phase) + *p = x + return p +} + +func (x Status_Phase) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Status_Phase) Descriptor() protoreflect.EnumDescriptor { + return file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_enumTypes[1].Descriptor() +} + +func (Status_Phase) Type() protoreflect.EnumType { + return &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_enumTypes[1] +} + +func (x Status_Phase) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Status_Phase.Descriptor instead. +func (Status_Phase) EnumDescriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDescGZIP(), []int{5, 1} +} + +// Resource representing a DataService Deployment. +type DataServiceDeployment struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Metadata of the resource. + Meta *apiv1.Meta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + // Desired configuration of the DataService Deployment. + Config *Config `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` + // Current status of the DataService Deployment. + Status *Status `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *DataServiceDeployment) Reset() { + *x = DataServiceDeployment{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DataServiceDeployment) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DataServiceDeployment) ProtoMessage() {} + +func (x *DataServiceDeployment) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DataServiceDeployment.ProtoReflect.Descriptor instead. +func (*DataServiceDeployment) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDescGZIP(), []int{0} +} + +func (x *DataServiceDeployment) GetMeta() *apiv1.Meta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *DataServiceDeployment) GetConfig() *Config { + if x != nil { + return x.Config + } + return nil +} + +func (x *DataServiceDeployment) GetStatus() *Status { + if x != nil { + return x.Status + } + return nil +} + +// Credentials to access a DataService Deployment. +type DataServiceDeploymentCredentials struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // secret to access the resource. + Secret string `protobuf:"bytes,1,opt,name=secret,proto3" json:"secret,omitempty"` +} + +func (x *DataServiceDeploymentCredentials) Reset() { + *x = DataServiceDeploymentCredentials{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DataServiceDeploymentCredentials) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DataServiceDeploymentCredentials) ProtoMessage() {} + +func (x *DataServiceDeploymentCredentials) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DataServiceDeploymentCredentials.ProtoReflect.Descriptor instead. +func (*DataServiceDeploymentCredentials) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDescGZIP(), []int{1} +} + +func (x *DataServiceDeploymentCredentials) GetSecret() string { + if x != nil { + return x.Secret + } + return "" +} + +// Desired configuration of the DataService Deployment. +type Config struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // References to other objects. + References *References `protobuf:"bytes,1,opt,name=references,proto3" json:"references,omitempty"` + // TLS configuration for the Data Service. + TlsConfig *TLSConfig `protobuf:"bytes,2,opt,name=tls_config,json=tlsConfig,proto3" json:"tls_config,omitempty"` + // A DataService deployment topology contains a number of nodes that have various attributes as a collective group. + DataServiceDeploymentTopologies []*apiv11.DataServiceDeploymentTopology `protobuf:"bytes,3,rep,name=data_service_deployment_topologies,json=dataServiceDeploymentTopologies,proto3" json:"data_service_deployment_topologies,omitempty"` +} + +func (x *Config) Reset() { + *x = Config{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Config) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Config) ProtoMessage() {} + +func (x *Config) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Config.ProtoReflect.Descriptor instead. +func (*Config) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDescGZIP(), []int{2} +} + +func (x *Config) GetReferences() *References { + if x != nil { + return x.References + } + return nil +} + +func (x *Config) GetTlsConfig() *TLSConfig { + if x != nil { + return x.TlsConfig + } + return nil +} + +func (x *Config) GetDataServiceDeploymentTopologies() []*apiv11.DataServiceDeploymentTopology { + if x != nil { + return x.DataServiceDeploymentTopologies + } + return nil +} + +// TLS configuration for the Data Service. +type TLSConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Flag to enable TLS for the Data Service. + Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` + // Issuer (Certificate Authority) name for the TLS certificates. + IssuerName string `protobuf:"bytes,2,opt,name=issuer_name,json=issuerName,proto3" json:"issuer_name,omitempty"` +} + +func (x *TLSConfig) Reset() { + *x = TLSConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TLSConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TLSConfig) ProtoMessage() {} + +func (x *TLSConfig) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TLSConfig.ProtoReflect.Descriptor instead. +func (*TLSConfig) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDescGZIP(), []int{3} +} + +func (x *TLSConfig) GetEnabled() bool { + if x != nil { + return x.Enabled + } + return false +} + +func (x *TLSConfig) GetIssuerName() string { + if x != nil { + return x.IssuerName + } + return "" +} + +// References to other resources. +type References struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // UID of the target cluster in which Data Service will be deployed. + TargetClusterId string `protobuf:"bytes,1,opt,name=target_cluster_id,json=targetClusterId,proto3" json:"target_cluster_id,omitempty"` + // UID of the image to be used for the Data Service Deployment. + ImageId string `protobuf:"bytes,2,opt,name=image_id,json=imageId,proto3" json:"image_id,omitempty"` + // UID of the project to which DataService Deployment associated. + ProjectId string `protobuf:"bytes,3,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // UID of the restore id for the data service Deployment. + RestoreId string `protobuf:"bytes,4,opt,name=restore_id,json=restoreId,proto3" json:"restore_id,omitempty"` + // UID of the data service + DataServiceId string `protobuf:"bytes,5,opt,name=data_service_id,json=dataServiceId,proto3" json:"data_service_id,omitempty"` +} + +func (x *References) Reset() { + *x = References{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *References) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*References) ProtoMessage() {} + +func (x *References) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use References.ProtoReflect.Descriptor instead. +func (*References) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDescGZIP(), []int{4} +} + +func (x *References) GetTargetClusterId() string { + if x != nil { + return x.TargetClusterId + } + return "" +} + +func (x *References) GetImageId() string { + if x != nil { + return x.ImageId + } + return "" +} + +func (x *References) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *References) GetRestoreId() string { + if x != nil { + return x.RestoreId + } + return "" +} + +func (x *References) GetDataServiceId() string { + if x != nil { + return x.DataServiceId + } + return "" +} + +// Status of the DataService Deployment. +type Status struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Health of the DataService Deployment. + Health Status_Health `protobuf:"varint,1,opt,name=health,proto3,enum=public.portworx.pds.dataservicedeployment.v1.Status_Health" json:"health,omitempty"` + // Status of the DataService Deployment. + Phase Status_Phase `protobuf:"varint,2,opt,name=phase,proto3,enum=public.portworx.pds.dataservicedeployment.v1.Status_Phase" json:"phase,omitempty"` + // ConnectionDetails urls, ports, credentials, etc for connecting to the data service. + ConnectionInfo *structpb.Struct `protobuf:"bytes,3,opt,name=connection_info,json=connectionInfo,proto3" json:"connection_info,omitempty"` + // Initialize used to control startup scripts. + Initialized string `protobuf:"bytes,4,opt,name=initialized,proto3" json:"initialized,omitempty"` + // Status of the deployment topology. + DataServiceDeploymentTopologyStatus []*apiv11.DataServiceDeploymentTopologyStatus `protobuf:"bytes,5,rep,name=data_service_deployment_topology_status,json=dataServiceDeploymentTopologyStatus,proto3" json:"data_service_deployment_topology_status,omitempty"` + // Custom Resource Name is the kubernetes resource name for the deployment that is built from ID. + CustomResourceName string `protobuf:"bytes,6,opt,name=custom_resource_name,json=customResourceName,proto3" json:"custom_resource_name,omitempty"` + // dns zone of the deployment. + DnsZone string `protobuf:"bytes,7,opt,name=dns_zone,json=dnsZone,proto3" json:"dns_zone,omitempty"` +} + +func (x *Status) Reset() { + *x = Status{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Status) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Status) ProtoMessage() {} + +func (x *Status) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Status.ProtoReflect.Descriptor instead. +func (*Status) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDescGZIP(), []int{5} +} + +func (x *Status) GetHealth() Status_Health { + if x != nil { + return x.Health + } + return Status_HEALTH_UNSPECIFIED +} + +func (x *Status) GetPhase() Status_Phase { + if x != nil { + return x.Phase + } + return Status_PHASE_UNSPECIFIED +} + +func (x *Status) GetConnectionInfo() *structpb.Struct { + if x != nil { + return x.ConnectionInfo + } + return nil +} + +func (x *Status) GetInitialized() string { + if x != nil { + return x.Initialized + } + return "" +} + +func (x *Status) GetDataServiceDeploymentTopologyStatus() []*apiv11.DataServiceDeploymentTopologyStatus { + if x != nil { + return x.DataServiceDeploymentTopologyStatus + } + return nil +} + +func (x *Status) GetCustomResourceName() string { + if x != nil { + return x.CustomResourceName + } + return "" +} + +func (x *Status) GetDnsZone() string { + if x != nil { + return x.DnsZone + } + return "" +} + +// Request to get the DataService Deployment resource. +type GetDataServiceDeploymentRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // UID of the DataService Deployment. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *GetDataServiceDeploymentRequest) Reset() { + *x = GetDataServiceDeploymentRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetDataServiceDeploymentRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetDataServiceDeploymentRequest) ProtoMessage() {} + +func (x *GetDataServiceDeploymentRequest) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetDataServiceDeploymentRequest.ProtoReflect.Descriptor instead. +func (*GetDataServiceDeploymentRequest) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDescGZIP(), []int{6} +} + +func (x *GetDataServiceDeploymentRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +// Request to get the DataService Deployment Credentials resource. +type GetDataServiceDeploymentCredentialsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // UID of the DataService Deployment. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *GetDataServiceDeploymentCredentialsRequest) Reset() { + *x = GetDataServiceDeploymentCredentialsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetDataServiceDeploymentCredentialsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetDataServiceDeploymentCredentialsRequest) ProtoMessage() {} + +func (x *GetDataServiceDeploymentCredentialsRequest) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetDataServiceDeploymentCredentialsRequest.ProtoReflect.Descriptor instead. +func (*GetDataServiceDeploymentCredentialsRequest) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDescGZIP(), []int{7} +} + +func (x *GetDataServiceDeploymentCredentialsRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +// Request to delete the DataService Deployment resource. +type DeleteDataServiceDeploymentRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // UID of the DataService Deployment. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Force flag to delete backup configuration from control plane only. + Force bool `protobuf:"varint,9,opt,name=force,proto3" json:"force,omitempty"` +} + +func (x *DeleteDataServiceDeploymentRequest) Reset() { + *x = DeleteDataServiceDeploymentRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteDataServiceDeploymentRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteDataServiceDeploymentRequest) ProtoMessage() {} + +func (x *DeleteDataServiceDeploymentRequest) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteDataServiceDeploymentRequest.ProtoReflect.Descriptor instead. +func (*DeleteDataServiceDeploymentRequest) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDescGZIP(), []int{8} +} + +func (x *DeleteDataServiceDeploymentRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *DeleteDataServiceDeploymentRequest) GetForce() bool { + if x != nil { + return x.Force + } + return false +} + +// Request to create the DataService Deployment resource. +type CreateDataServiceDeploymentRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // UID of the namespace resource where this DataService deployment will be created. + // (-- api-linter: core::0133::request-unknown-fields=disabled + // + // aip.dev/not-precedent: We need this field for to support creation of + // the resource in the namespace context. --) + NamespaceId string `protobuf:"bytes,1,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"` + // UID of the project. + // (-- api-linter: core::0133::request-unknown-fields=disabled + // + // aip.dev/not-precedent: We need this field for to know the project with which the deployment is associated with. --) + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // DataService Deployment resource. + DataServiceDeployment *DataServiceDeployment `protobuf:"bytes,3,opt,name=data_service_deployment,json=dataServiceDeployment,proto3" json:"data_service_deployment,omitempty"` +} + +func (x *CreateDataServiceDeploymentRequest) Reset() { + *x = CreateDataServiceDeploymentRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateDataServiceDeploymentRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateDataServiceDeploymentRequest) ProtoMessage() {} + +func (x *CreateDataServiceDeploymentRequest) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateDataServiceDeploymentRequest.ProtoReflect.Descriptor instead. +func (*CreateDataServiceDeploymentRequest) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDescGZIP(), []int{9} +} + +func (x *CreateDataServiceDeploymentRequest) GetNamespaceId() string { + if x != nil { + return x.NamespaceId + } + return "" +} + +func (x *CreateDataServiceDeploymentRequest) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *CreateDataServiceDeploymentRequest) GetDataServiceDeployment() *DataServiceDeployment { + if x != nil { + return x.DataServiceDeployment + } + return nil +} + +// Request to list the data service deployment resources. +type ListDataServiceDeploymentsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // tenant ID for which data service deployments need to be fetched. + TenantId string `protobuf:"bytes,1,opt,name=tenant_id,json=tenantId,proto3" json:"tenant_id,omitempty"` + // Provides the key in labels and associated values for which data service deployments need to be listed. + LabelSelector *apiv1.Selector `protobuf:"bytes,2,opt,name=label_selector,json=labelSelector,proto3" json:"label_selector,omitempty"` + // Field selector is used to filter data service deployments based on the fields in the deployments's proto message. + FieldSelector *apiv1.Selector `protobuf:"bytes,3,opt,name=field_selector,json=fieldSelector,proto3" json:"field_selector,omitempty"` + // Infra_resource_selector is used to filter deployments based on the infra resources associated with the data service deployments. + // Supported infra resource filters: PROJECT, CLUSTER, NAMESPACE. + InfraResourceSelector *apiv1.ResourceSelector `protobuf:"bytes,4,opt,name=infra_resource_selector,json=infraResourceSelector,proto3" json:"infra_resource_selector,omitempty"` + // Sorting details using which requested list of data service deployments to be sorted. + Sort *apiv1.Sort `protobuf:"bytes,5,opt,name=sort,proto3" json:"sort,omitempty"` + // Pagination parameters for listing data service deployments. + Pagination *apiv1.PageBasedPaginationRequest `protobuf:"bytes,6,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *ListDataServiceDeploymentsRequest) Reset() { + *x = ListDataServiceDeploymentsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListDataServiceDeploymentsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListDataServiceDeploymentsRequest) ProtoMessage() {} + +func (x *ListDataServiceDeploymentsRequest) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListDataServiceDeploymentsRequest.ProtoReflect.Descriptor instead. +func (*ListDataServiceDeploymentsRequest) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDescGZIP(), []int{10} +} + +func (x *ListDataServiceDeploymentsRequest) GetTenantId() string { + if x != nil { + return x.TenantId + } + return "" +} + +func (x *ListDataServiceDeploymentsRequest) GetLabelSelector() *apiv1.Selector { + if x != nil { + return x.LabelSelector + } + return nil +} + +func (x *ListDataServiceDeploymentsRequest) GetFieldSelector() *apiv1.Selector { + if x != nil { + return x.FieldSelector + } + return nil +} + +func (x *ListDataServiceDeploymentsRequest) GetInfraResourceSelector() *apiv1.ResourceSelector { + if x != nil { + return x.InfraResourceSelector + } + return nil +} + +func (x *ListDataServiceDeploymentsRequest) GetSort() *apiv1.Sort { + if x != nil { + return x.Sort + } + return nil +} + +func (x *ListDataServiceDeploymentsRequest) GetPagination() *apiv1.PageBasedPaginationRequest { + if x != nil { + return x.Pagination + } + return nil +} + +// Response to list DataService Deployment request. +type ListDataServiceDeploymentsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // List of DataService deployment resources. + DataServiceDeployments []*DataServiceDeployment `protobuf:"bytes,1,rep,name=data_service_deployments,json=dataServiceDeployments,proto3" json:"data_service_deployments,omitempty"` + // Pagination metadata for this response. + // (-- api-linter: core::0132::response-unknown-fields=disabled + // + // aip.dev/not-precedent: We need this field for pagination. --) + Pagination *apiv1.PageBasedPaginationResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *ListDataServiceDeploymentsResponse) Reset() { + *x = ListDataServiceDeploymentsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListDataServiceDeploymentsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListDataServiceDeploymentsResponse) ProtoMessage() {} + +func (x *ListDataServiceDeploymentsResponse) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListDataServiceDeploymentsResponse.ProtoReflect.Descriptor instead. +func (*ListDataServiceDeploymentsResponse) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDescGZIP(), []int{11} +} + +func (x *ListDataServiceDeploymentsResponse) GetDataServiceDeployments() []*DataServiceDeployment { + if x != nil { + return x.DataServiceDeployments + } + return nil +} + +func (x *ListDataServiceDeploymentsResponse) GetPagination() *apiv1.PageBasedPaginationResponse { + if x != nil { + return x.Pagination + } + return nil +} + +var File_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto protoreflect.FileDescriptor + +var file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDesc = []byte{ + 0x0a, 0x4b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x78, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x76, + 0x31, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2c, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, + 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, + 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, + 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, + 0x69, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2b, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x5b, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x70, 0x64, 0x73, + 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2f, 0x61, + 0x70, 0x69, 0x76, 0x31, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, + 0x67, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, + 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, + 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x73, 0x6f, 0x72, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0xed, 0x01, 0x0a, 0x15, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x04, 0x6d, 0x65, + 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, + 0x4c, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x34, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x51, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, + 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x22, 0x3a, 0x0a, 0x20, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0xe2, 0x02, 0x0a, + 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x58, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, + 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x73, 0x12, 0x5b, 0x0a, 0x0a, 0x74, 0x6c, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x4c, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x03, + 0xe0, 0x41, 0x01, 0x52, 0x09, 0x74, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0xa0, + 0x01, 0x0a, 0x22, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, + 0x6f, 0x67, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x53, 0x2e, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, + 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, + 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, + 0x52, 0x1f, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, + 0x73, 0x22, 0x46, 0x0a, 0x09, 0x54, 0x4c, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, + 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x73, 0x75, + 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, + 0x73, 0x73, 0x75, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xcd, 0x01, 0x0a, 0x0a, 0x52, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x11, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0a, 0x72, 0x65, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, + 0x03, 0x52, 0x09, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x0f, + 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x22, 0xae, 0x06, 0x0a, 0x06, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x53, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, + 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, + 0x68, 0x52, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x50, 0x0a, 0x05, 0x70, 0x68, 0x61, + 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, + 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x50, + 0x68, 0x61, 0x73, 0x65, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x0f, 0x63, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0e, 0x63, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, + 0x0b, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, + 0xaf, 0x01, 0x0a, 0x27, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x70, 0x6f, + 0x6c, 0x6f, 0x67, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x59, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, + 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x6f, + 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x23, 0x64, 0x61, + 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x30, 0x0a, 0x14, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x6e, 0x73, 0x5f, 0x7a, 0x6f, 0x6e, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x6e, 0x73, 0x5a, 0x6f, 0x6e, 0x65, 0x22, 0x6d, + 0x0a, 0x06, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x12, 0x48, 0x45, 0x41, 0x4c, + 0x54, 0x48, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, + 0x17, 0x0a, 0x13, 0x50, 0x41, 0x52, 0x54, 0x49, 0x41, 0x4c, 0x4c, 0x59, 0x5f, 0x41, 0x56, 0x41, + 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x41, 0x56, + 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x4e, 0x4f, 0x54, + 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x04, 0x22, 0xaa, 0x01, + 0x0a, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x48, 0x41, 0x53, 0x45, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, + 0x0a, 0x09, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0a, 0x0a, + 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, 0x4c, + 0x45, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x52, 0x45, 0x50, 0x41, + 0x52, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, + 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x45, + 0x44, 0x10, 0x06, 0x12, 0x0c, 0x0a, 0x08, 0x55, 0x50, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, + 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x44, 0x5f, 0x4f, 0x55, 0x54, 0x10, 0x08, + 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x5f, 0x46, 0x52, 0x4f, 0x4d, + 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x10, 0x09, 0x22, 0x31, 0x0a, 0x1f, 0x47, 0x65, + 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x3c, 0x0a, + 0x2a, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4f, 0x0a, 0x22, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x19, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, + 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0xe3, 0x01, 0x0a, + 0x22, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x7b, 0x0a, 0x17, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, + 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, + 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x15, 0x64, 0x61, 0x74, + 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x22, 0xd8, 0x03, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, + 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x4a, 0x0a, 0x0e, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, + 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x0d, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x4a, 0x0a, 0x0e, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, + 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x52, 0x0d, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x12, 0x63, 0x0a, 0x17, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x5f, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, + 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x52, 0x15, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x38, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, + 0x74, 0x12, 0x5a, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x03, 0xe0, 0x41, + 0x01, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xfb, 0x01, + 0x0a, 0x22, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x18, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, + 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, + 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x16, 0x64, 0x61, 0x74, + 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x12, 0x56, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, + 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x32, 0xac, 0x09, 0x0a, 0x1c, + 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xf7, 0x01, 0x0a, + 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x50, 0x2e, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, + 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, + 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, + 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, + 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x3a, 0x01, 0x2a, 0x22, 0x36, + 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0xdb, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x61, + 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x4d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, + 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, + 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, + 0x23, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, + 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xb4, 0x01, 0x0a, 0x1b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x50, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, + 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2b, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x2a, 0x23, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, + 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xf1, 0x01, 0x0a, 0x1a, + 0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x4f, 0x2e, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, + 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, + 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x50, 0x2e, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, + 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, + 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x3a, 0x01, 0x2a, 0x22, 0x25, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, + 0x31, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, + 0x88, 0x02, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x58, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, + 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x4e, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x73, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x70, 0x64, 0x73, 0x2f, + 0x76, 0x31, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x63, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x42, 0xaf, 0x01, 0x0a, 0x30, 0x63, + 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, + 0x1a, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x5d, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, + 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, + 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDescOnce sync.Once + file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDescData = file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDesc +) + +func file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDescGZIP() []byte { + file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDescOnce.Do(func() { + file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDescData = protoimpl.X.CompressGZIP(file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDescData) + }) + return file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDescData +} + +var file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes = make([]protoimpl.MessageInfo, 12) +var file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_goTypes = []interface{}{ + (Status_Health)(0), // 0: public.portworx.pds.dataservicedeployment.v1.Status.Health + (Status_Phase)(0), // 1: public.portworx.pds.dataservicedeployment.v1.Status.Phase + (*DataServiceDeployment)(nil), // 2: public.portworx.pds.dataservicedeployment.v1.DataServiceDeployment + (*DataServiceDeploymentCredentials)(nil), // 3: public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentCredentials + (*Config)(nil), // 4: public.portworx.pds.dataservicedeployment.v1.Config + (*TLSConfig)(nil), // 5: public.portworx.pds.dataservicedeployment.v1.TLSConfig + (*References)(nil), // 6: public.portworx.pds.dataservicedeployment.v1.References + (*Status)(nil), // 7: public.portworx.pds.dataservicedeployment.v1.Status + (*GetDataServiceDeploymentRequest)(nil), // 8: public.portworx.pds.dataservicedeployment.v1.GetDataServiceDeploymentRequest + (*GetDataServiceDeploymentCredentialsRequest)(nil), // 9: public.portworx.pds.dataservicedeployment.v1.GetDataServiceDeploymentCredentialsRequest + (*DeleteDataServiceDeploymentRequest)(nil), // 10: public.portworx.pds.dataservicedeployment.v1.DeleteDataServiceDeploymentRequest + (*CreateDataServiceDeploymentRequest)(nil), // 11: public.portworx.pds.dataservicedeployment.v1.CreateDataServiceDeploymentRequest + (*ListDataServiceDeploymentsRequest)(nil), // 12: public.portworx.pds.dataservicedeployment.v1.ListDataServiceDeploymentsRequest + (*ListDataServiceDeploymentsResponse)(nil), // 13: public.portworx.pds.dataservicedeployment.v1.ListDataServiceDeploymentsResponse + (*apiv1.Meta)(nil), // 14: public.portworx.common.v1.Meta + (*apiv11.DataServiceDeploymentTopology)(nil), // 15: public.portworx.pds.dataservicedeploymenttopology.v1.DataServiceDeploymentTopology + (*structpb.Struct)(nil), // 16: google.protobuf.Struct + (*apiv11.DataServiceDeploymentTopologyStatus)(nil), // 17: public.portworx.pds.dataservicedeploymenttopology.v1.DataServiceDeploymentTopologyStatus + (*apiv1.Selector)(nil), // 18: public.portworx.common.v1.Selector + (*apiv1.ResourceSelector)(nil), // 19: public.portworx.common.v1.ResourceSelector + (*apiv1.Sort)(nil), // 20: public.portworx.common.v1.Sort + (*apiv1.PageBasedPaginationRequest)(nil), // 21: public.portworx.common.v1.PageBasedPaginationRequest + (*apiv1.PageBasedPaginationResponse)(nil), // 22: public.portworx.common.v1.PageBasedPaginationResponse + (*emptypb.Empty)(nil), // 23: google.protobuf.Empty +} +var file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_depIdxs = []int32{ + 14, // 0: public.portworx.pds.dataservicedeployment.v1.DataServiceDeployment.meta:type_name -> public.portworx.common.v1.Meta + 4, // 1: public.portworx.pds.dataservicedeployment.v1.DataServiceDeployment.config:type_name -> public.portworx.pds.dataservicedeployment.v1.Config + 7, // 2: public.portworx.pds.dataservicedeployment.v1.DataServiceDeployment.status:type_name -> public.portworx.pds.dataservicedeployment.v1.Status + 6, // 3: public.portworx.pds.dataservicedeployment.v1.Config.references:type_name -> public.portworx.pds.dataservicedeployment.v1.References + 5, // 4: public.portworx.pds.dataservicedeployment.v1.Config.tls_config:type_name -> public.portworx.pds.dataservicedeployment.v1.TLSConfig + 15, // 5: public.portworx.pds.dataservicedeployment.v1.Config.data_service_deployment_topologies:type_name -> public.portworx.pds.dataservicedeploymenttopology.v1.DataServiceDeploymentTopology + 0, // 6: public.portworx.pds.dataservicedeployment.v1.Status.health:type_name -> public.portworx.pds.dataservicedeployment.v1.Status.Health + 1, // 7: public.portworx.pds.dataservicedeployment.v1.Status.phase:type_name -> public.portworx.pds.dataservicedeployment.v1.Status.Phase + 16, // 8: public.portworx.pds.dataservicedeployment.v1.Status.connection_info:type_name -> google.protobuf.Struct + 17, // 9: public.portworx.pds.dataservicedeployment.v1.Status.data_service_deployment_topology_status:type_name -> public.portworx.pds.dataservicedeploymenttopology.v1.DataServiceDeploymentTopologyStatus + 2, // 10: public.portworx.pds.dataservicedeployment.v1.CreateDataServiceDeploymentRequest.data_service_deployment:type_name -> public.portworx.pds.dataservicedeployment.v1.DataServiceDeployment + 18, // 11: public.portworx.pds.dataservicedeployment.v1.ListDataServiceDeploymentsRequest.label_selector:type_name -> public.portworx.common.v1.Selector + 18, // 12: public.portworx.pds.dataservicedeployment.v1.ListDataServiceDeploymentsRequest.field_selector:type_name -> public.portworx.common.v1.Selector + 19, // 13: public.portworx.pds.dataservicedeployment.v1.ListDataServiceDeploymentsRequest.infra_resource_selector:type_name -> public.portworx.common.v1.ResourceSelector + 20, // 14: public.portworx.pds.dataservicedeployment.v1.ListDataServiceDeploymentsRequest.sort:type_name -> public.portworx.common.v1.Sort + 21, // 15: public.portworx.pds.dataservicedeployment.v1.ListDataServiceDeploymentsRequest.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationRequest + 2, // 16: public.portworx.pds.dataservicedeployment.v1.ListDataServiceDeploymentsResponse.data_service_deployments:type_name -> public.portworx.pds.dataservicedeployment.v1.DataServiceDeployment + 22, // 17: public.portworx.pds.dataservicedeployment.v1.ListDataServiceDeploymentsResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse + 11, // 18: public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService.CreateDataServiceDeployment:input_type -> public.portworx.pds.dataservicedeployment.v1.CreateDataServiceDeploymentRequest + 8, // 19: public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService.GetDataServiceDeployment:input_type -> public.portworx.pds.dataservicedeployment.v1.GetDataServiceDeploymentRequest + 10, // 20: public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService.DeleteDataServiceDeployment:input_type -> public.portworx.pds.dataservicedeployment.v1.DeleteDataServiceDeploymentRequest + 12, // 21: public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService.ListDataServiceDeployments:input_type -> public.portworx.pds.dataservicedeployment.v1.ListDataServiceDeploymentsRequest + 9, // 22: public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService.GetDataServiceDeploymentCredentials:input_type -> public.portworx.pds.dataservicedeployment.v1.GetDataServiceDeploymentCredentialsRequest + 2, // 23: public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService.CreateDataServiceDeployment:output_type -> public.portworx.pds.dataservicedeployment.v1.DataServiceDeployment + 2, // 24: public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService.GetDataServiceDeployment:output_type -> public.portworx.pds.dataservicedeployment.v1.DataServiceDeployment + 23, // 25: public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService.DeleteDataServiceDeployment:output_type -> google.protobuf.Empty + 13, // 26: public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService.ListDataServiceDeployments:output_type -> public.portworx.pds.dataservicedeployment.v1.ListDataServiceDeploymentsResponse + 3, // 27: public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService.GetDataServiceDeploymentCredentials:output_type -> public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentCredentials + 23, // [23:28] is the sub-list for method output_type + 18, // [18:23] is the sub-list for method input_type + 18, // [18:18] is the sub-list for extension type_name + 18, // [18:18] is the sub-list for extension extendee + 0, // [0:18] is the sub-list for field type_name +} + +func init() { file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_init() } +func file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_init() { + if File_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DataServiceDeployment); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DataServiceDeploymentCredentials); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Config); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TLSConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*References); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Status); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetDataServiceDeploymentRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetDataServiceDeploymentCredentialsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteDataServiceDeploymentRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateDataServiceDeploymentRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListDataServiceDeploymentsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListDataServiceDeploymentsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDesc, + NumEnums: 2, + NumMessages: 12, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_goTypes, + DependencyIndexes: file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_depIdxs, + EnumInfos: file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_enumTypes, + MessageInfos: file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_msgTypes, + }.Build() + File_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto = out.File + file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_rawDesc = nil + file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_goTypes = nil + file_public_portworx_pds_dataservicedeployment_apiv1_dataservicedeployment_proto_depIdxs = nil +} diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.pb.gw.go b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.pb.gw.go new file mode 100644 index 000000000..46a34f934 --- /dev/null +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.pb.gw.go @@ -0,0 +1,601 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto + +/* +Package dataservicedeployment is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package dataservicedeployment + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_DataServiceDeploymentService_CreateDataServiceDeployment_0(ctx context.Context, marshaler runtime.Marshaler, client DataServiceDeploymentServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateDataServiceDeploymentRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["namespace_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace_id") + } + + protoReq.NamespaceId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace_id", err) + } + + msg, err := client.CreateDataServiceDeployment(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_DataServiceDeploymentService_CreateDataServiceDeployment_0(ctx context.Context, marshaler runtime.Marshaler, server DataServiceDeploymentServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateDataServiceDeploymentRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["namespace_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace_id") + } + + protoReq.NamespaceId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace_id", err) + } + + msg, err := server.CreateDataServiceDeployment(ctx, &protoReq) + return msg, metadata, err + +} + +func request_DataServiceDeploymentService_GetDataServiceDeployment_0(ctx context.Context, marshaler runtime.Marshaler, client DataServiceDeploymentServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetDataServiceDeploymentRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.GetDataServiceDeployment(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_DataServiceDeploymentService_GetDataServiceDeployment_0(ctx context.Context, marshaler runtime.Marshaler, server DataServiceDeploymentServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetDataServiceDeploymentRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.GetDataServiceDeployment(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_DataServiceDeploymentService_DeleteDataServiceDeployment_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_DataServiceDeploymentService_DeleteDataServiceDeployment_0(ctx context.Context, marshaler runtime.Marshaler, client DataServiceDeploymentServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteDataServiceDeploymentRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_DataServiceDeploymentService_DeleteDataServiceDeployment_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.DeleteDataServiceDeployment(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_DataServiceDeploymentService_DeleteDataServiceDeployment_0(ctx context.Context, marshaler runtime.Marshaler, server DataServiceDeploymentServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteDataServiceDeploymentRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_DataServiceDeploymentService_DeleteDataServiceDeployment_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.DeleteDataServiceDeployment(ctx, &protoReq) + return msg, metadata, err + +} + +func request_DataServiceDeploymentService_ListDataServiceDeployments_0(ctx context.Context, marshaler runtime.Marshaler, client DataServiceDeploymentServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListDataServiceDeploymentsRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListDataServiceDeployments(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_DataServiceDeploymentService_ListDataServiceDeployments_0(ctx context.Context, marshaler runtime.Marshaler, server DataServiceDeploymentServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListDataServiceDeploymentsRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListDataServiceDeployments(ctx, &protoReq) + return msg, metadata, err + +} + +func request_DataServiceDeploymentService_GetDataServiceDeploymentCredentials_0(ctx context.Context, marshaler runtime.Marshaler, client DataServiceDeploymentServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetDataServiceDeploymentCredentialsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.GetDataServiceDeploymentCredentials(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_DataServiceDeploymentService_GetDataServiceDeploymentCredentials_0(ctx context.Context, marshaler runtime.Marshaler, server DataServiceDeploymentServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetDataServiceDeploymentCredentialsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.GetDataServiceDeploymentCredentials(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterDataServiceDeploymentServiceHandlerServer registers the http handlers for service DataServiceDeploymentService to "mux". +// UnaryRPC :call DataServiceDeploymentServiceServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterDataServiceDeploymentServiceHandlerFromEndpoint instead. +func RegisterDataServiceDeploymentServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server DataServiceDeploymentServiceServer) error { + + mux.Handle("POST", pattern_DataServiceDeploymentService_CreateDataServiceDeployment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService/CreateDataServiceDeployment", runtime.WithHTTPPathPattern("/pds/v1/namespace/{namespace_id}/dataServiceDeployment")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_DataServiceDeploymentService_CreateDataServiceDeployment_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_DataServiceDeploymentService_CreateDataServiceDeployment_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_DataServiceDeploymentService_GetDataServiceDeployment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService/GetDataServiceDeployment", runtime.WithHTTPPathPattern("/pds/v1/dataServiceDeployments/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_DataServiceDeploymentService_GetDataServiceDeployment_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_DataServiceDeploymentService_GetDataServiceDeployment_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_DataServiceDeploymentService_DeleteDataServiceDeployment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService/DeleteDataServiceDeployment", runtime.WithHTTPPathPattern("/pds/v1/dataServiceDeployments/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_DataServiceDeploymentService_DeleteDataServiceDeployment_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_DataServiceDeploymentService_DeleteDataServiceDeployment_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_DataServiceDeploymentService_ListDataServiceDeployments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService/ListDataServiceDeployments", runtime.WithHTTPPathPattern("/pds/v1/dataServiceDeployments:search")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_DataServiceDeploymentService_ListDataServiceDeployments_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_DataServiceDeploymentService_ListDataServiceDeployments_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_DataServiceDeploymentService_GetDataServiceDeploymentCredentials_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService/GetDataServiceDeploymentCredentials", runtime.WithHTTPPathPattern("/pds/v1/dataServiceDeployments/{id}:credentials")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_DataServiceDeploymentService_GetDataServiceDeploymentCredentials_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_DataServiceDeploymentService_GetDataServiceDeploymentCredentials_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterDataServiceDeploymentServiceHandlerFromEndpoint is same as RegisterDataServiceDeploymentServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterDataServiceDeploymentServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.DialContext(ctx, endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterDataServiceDeploymentServiceHandler(ctx, mux, conn) +} + +// RegisterDataServiceDeploymentServiceHandler registers the http handlers for service DataServiceDeploymentService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterDataServiceDeploymentServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterDataServiceDeploymentServiceHandlerClient(ctx, mux, NewDataServiceDeploymentServiceClient(conn)) +} + +// RegisterDataServiceDeploymentServiceHandlerClient registers the http handlers for service DataServiceDeploymentService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "DataServiceDeploymentServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "DataServiceDeploymentServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "DataServiceDeploymentServiceClient" to call the correct interceptors. +func RegisterDataServiceDeploymentServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client DataServiceDeploymentServiceClient) error { + + mux.Handle("POST", pattern_DataServiceDeploymentService_CreateDataServiceDeployment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService/CreateDataServiceDeployment", runtime.WithHTTPPathPattern("/pds/v1/namespace/{namespace_id}/dataServiceDeployment")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_DataServiceDeploymentService_CreateDataServiceDeployment_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_DataServiceDeploymentService_CreateDataServiceDeployment_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_DataServiceDeploymentService_GetDataServiceDeployment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService/GetDataServiceDeployment", runtime.WithHTTPPathPattern("/pds/v1/dataServiceDeployments/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_DataServiceDeploymentService_GetDataServiceDeployment_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_DataServiceDeploymentService_GetDataServiceDeployment_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_DataServiceDeploymentService_DeleteDataServiceDeployment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService/DeleteDataServiceDeployment", runtime.WithHTTPPathPattern("/pds/v1/dataServiceDeployments/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_DataServiceDeploymentService_DeleteDataServiceDeployment_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_DataServiceDeploymentService_DeleteDataServiceDeployment_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_DataServiceDeploymentService_ListDataServiceDeployments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService/ListDataServiceDeployments", runtime.WithHTTPPathPattern("/pds/v1/dataServiceDeployments:search")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_DataServiceDeploymentService_ListDataServiceDeployments_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_DataServiceDeploymentService_ListDataServiceDeployments_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_DataServiceDeploymentService_GetDataServiceDeploymentCredentials_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService/GetDataServiceDeploymentCredentials", runtime.WithHTTPPathPattern("/pds/v1/dataServiceDeployments/{id}:credentials")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_DataServiceDeploymentService_GetDataServiceDeploymentCredentials_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_DataServiceDeploymentService_GetDataServiceDeploymentCredentials_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_DataServiceDeploymentService_CreateDataServiceDeployment_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"pds", "v1", "namespace", "namespace_id", "dataServiceDeployment"}, "")) + + pattern_DataServiceDeploymentService_GetDataServiceDeployment_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"pds", "v1", "dataServiceDeployments", "id"}, "")) + + pattern_DataServiceDeploymentService_DeleteDataServiceDeployment_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"pds", "v1", "dataServiceDeployments", "id"}, "")) + + pattern_DataServiceDeploymentService_ListDataServiceDeployments_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"pds", "v1", "dataServiceDeployments"}, "search")) + + pattern_DataServiceDeploymentService_GetDataServiceDeploymentCredentials_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"pds", "v1", "dataServiceDeployments", "id"}, "credentials")) +) + +var ( + forward_DataServiceDeploymentService_CreateDataServiceDeployment_0 = runtime.ForwardResponseMessage + + forward_DataServiceDeploymentService_GetDataServiceDeployment_0 = runtime.ForwardResponseMessage + + forward_DataServiceDeploymentService_DeleteDataServiceDeployment_0 = runtime.ForwardResponseMessage + + forward_DataServiceDeploymentService_ListDataServiceDeployments_0 = runtime.ForwardResponseMessage + + forward_DataServiceDeploymentService_GetDataServiceDeploymentCredentials_0 = runtime.ForwardResponseMessage +) diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.pb.md b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.pb.md new file mode 100644 index 000000000..ad9c1fab9 --- /dev/null +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.pb.md @@ -0,0 +1,290 @@ +[//]: # (Generated by grpc-framework using protoc-gen-doc) +[//]: # (Do not edit) + + +# dataservicedeployment + +## Contents + +- Services + - [DataServiceDeploymentService](#servicepublicportworxpdsdataservicedeploymentv1dataservicedeploymentservice) + + + +- Messages + - [Config](#config) + - [CreateDataServiceDeploymentRequest](#createdataservicedeploymentrequest) + - [DataServiceDeployment](#dataservicedeployment) + - [DataServiceDeploymentCredentials](#dataservicedeploymentcredentials) + - [DeleteDataServiceDeploymentRequest](#deletedataservicedeploymentrequest) + - [GetDataServiceDeploymentCredentialsRequest](#getdataservicedeploymentcredentialsrequest) + - [GetDataServiceDeploymentRequest](#getdataservicedeploymentrequest) + - [ListDataServiceDeploymentsRequest](#listdataservicedeploymentsrequest) + - [ListDataServiceDeploymentsResponse](#listdataservicedeploymentsresponse) + - [References](#references) + - [Status](#status) + - [TLSConfig](#tlsconfig) + + + + +- [Scalar Value Types](#scalar-value-types) + + + + +## DataServiceDeploymentService {#servicepublicportworxpdsdataservicedeploymentv1dataservicedeploymentservice} +DataServiceDeploymentService serves DataService Deployment resource APIs. + +### CreateDataServiceDeployment {#methodpublicportworxpdsdataservicedeploymentv1dataservicedeploymentservicecreatedataservicedeployment} + +> **rpc** CreateDataServiceDeployment([CreateDataServiceDeploymentRequest](#createdataservicedeploymentrequest)) + [DataServiceDeployment](#dataservicedeployment) + +CreateDataServiceDeployment API creates the Deployment resource. +### GetDataServiceDeployment {#methodpublicportworxpdsdataservicedeploymentv1dataservicedeploymentservicegetdataservicedeployment} + +> **rpc** GetDataServiceDeployment([GetDataServiceDeploymentRequest](#getdataservicedeploymentrequest)) + [DataServiceDeployment](#dataservicedeployment) + +GetDataServiceDeployment API returns the DataService Deployment resource. +### DeleteDataServiceDeployment {#methodpublicportworxpdsdataservicedeploymentv1dataservicedeploymentservicedeletedataservicedeployment} + +> **rpc** DeleteDataServiceDeployment([DeleteDataServiceDeploymentRequest](#deletedataservicedeploymentrequest)) + [.google.protobuf.Empty](#googleprotobufempty) + +DeleteDataServiceDeployment API deletes the DataService Deployment resource. +### ListDataServiceDeployments {#methodpublicportworxpdsdataservicedeploymentv1dataservicedeploymentservicelistdataservicedeployments} + +> **rpc** ListDataServiceDeployments([ListDataServiceDeploymentsRequest](#listdataservicedeploymentsrequest)) + [ListDataServiceDeploymentsResponse](#listdataservicedeploymentsresponse) + +(-- api-linter: core::0132::http-body=disabled + api-linter: core::0132::http-method=disabled + aip.dev/not-precedent: We need to do this because we can't have advance filters as query params. --) +ListDataServiceDeployments API lists the DataService Deployment resources. +### GetDataServiceDeploymentCredentials {#methodpublicportworxpdsdataservicedeploymentv1dataservicedeploymentservicegetdataservicedeploymentcredentials} + +> **rpc** GetDataServiceDeploymentCredentials([GetDataServiceDeploymentCredentialsRequest](#getdataservicedeploymentcredentialsrequest)) + [DataServiceDeploymentCredentials](#dataservicedeploymentcredentials) + +GetDataServiceDeploymentCredentials API returns the Credentials to be used to access the DataService Deployment. + + + +## Messages + + +### Config {#config} +Desired configuration of the DataService Deployment. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| references | [ References](#references) | References to other objects. | +| tls_config | [ TLSConfig](#tlsconfig) | TLS configuration for the Data Service. | +| data_service_deployment_topologies | [repeated public.portworx.pds.dataservicedeploymenttopology.v1.DataServiceDeploymentTopology](#publicportworxpdsdataservicedeploymenttopologyv1dataservicedeploymenttopology) | A DataService deployment topology contains a number of nodes that have various attributes as a collective group. | + + + + +### CreateDataServiceDeploymentRequest {#createdataservicedeploymentrequest} +Request to create the DataService Deployment resource. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| namespace_id | [ string](#string) | UID of the namespace resource where this DataService deployment will be created. (-- api-linter: core::0133::request-unknown-fields=disabled aip.dev/not-precedent: We need this field for to support creation of the resource in the namespace context. --) | +| project_id | [ string](#string) | UID of the project. (-- api-linter: core::0133::request-unknown-fields=disabled aip.dev/not-precedent: We need this field for to know the project with which the deployment is associated with. --) | +| data_service_deployment | [ DataServiceDeployment](#dataservicedeployment) | DataService Deployment resource. | + + + + +### DataServiceDeployment {#dataservicedeployment} +Resource representing a DataService Deployment. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| meta | [ public.portworx.common.v1.Meta](#publicportworxcommonv1meta) | Metadata of the resource. | +| config | [ Config](#config) | Desired configuration of the DataService Deployment. | +| status | [ Status](#status) | Current status of the DataService Deployment. | + + + + +### DataServiceDeploymentCredentials {#dataservicedeploymentcredentials} +Credentials to access a DataService Deployment. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| secret | [ string](#string) | secret to access the resource. | + + + + +### DeleteDataServiceDeploymentRequest {#deletedataservicedeploymentrequest} +Request to delete the DataService Deployment resource. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| id | [ string](#string) | UID of the DataService Deployment. | +| force | [ bool](#bool) | Force flag to delete backup configuration from control plane only. | + + + + +### GetDataServiceDeploymentCredentialsRequest {#getdataservicedeploymentcredentialsrequest} +Request to get the DataService Deployment Credentials resource. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| id | [ string](#string) | UID of the DataService Deployment. | + + + + +### GetDataServiceDeploymentRequest {#getdataservicedeploymentrequest} +Request to get the DataService Deployment resource. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| id | [ string](#string) | UID of the DataService Deployment. | + + + + +### ListDataServiceDeploymentsRequest {#listdataservicedeploymentsrequest} +Request to list the data service deployment resources. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| tenant_id | [ string](#string) | tenant ID for which data service deployments need to be fetched. | +| label_selector | [ public.portworx.common.v1.Selector](#publicportworxcommonv1selector) | Provides the key in labels and associated values for which data service deployments need to be listed. | +| field_selector | [ public.portworx.common.v1.Selector](#publicportworxcommonv1selector) | Field selector is used to filter data service deployments based on the fields in the deployments's proto message. | +| infra_resource_selector | [ public.portworx.common.v1.ResourceSelector](#publicportworxcommonv1resourceselector) | Infra_resource_selector is used to filter deployments based on the infra resources associated with the data service deployments. Supported infra resource filters: PROJECT, CLUSTER, NAMESPACE. | +| sort | [ public.portworx.common.v1.Sort](#publicportworxcommonv1sort) | Sorting details using which requested list of data service deployments to be sorted. | +| pagination | [ public.portworx.common.v1.PageBasedPaginationRequest](#publicportworxcommonv1pagebasedpaginationrequest) | Pagination parameters for listing data service deployments. | + + + + +### ListDataServiceDeploymentsResponse {#listdataservicedeploymentsresponse} +Response to list DataService Deployment request. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| data_service_deployments | [repeated DataServiceDeployment](#dataservicedeployment) | List of DataService deployment resources. | +| pagination | [ public.portworx.common.v1.PageBasedPaginationResponse](#publicportworxcommonv1pagebasedpaginationresponse) | Pagination metadata for this response. (-- api-linter: core::0132::response-unknown-fields=disabled aip.dev/not-precedent: We need this field for pagination. --) | + + + + +### References {#references} +References to other resources. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| target_cluster_id | [ string](#string) | UID of the target cluster in which Data Service will be deployed. | +| image_id | [ string](#string) | UID of the image to be used for the Data Service Deployment. | +| project_id | [ string](#string) | UID of the project to which DataService Deployment associated. | +| restore_id | [ string](#string) | UID of the restore id for the data service Deployment. | +| data_service_id | [ string](#string) | UID of the data service | + + + + +### Status {#status} +Status of the DataService Deployment. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| health | [ Status.Health](#statushealth) | Health of the DataService Deployment. | +| phase | [ Status.Phase](#statusphase) | Status of the DataService Deployment. | +| connection_info | [ google.protobuf.Struct](#googleprotobufstruct) | ConnectionDetails urls, ports, credentials, etc for connecting to the data service. | +| initialized | [ string](#string) | Initialize used to control startup scripts. | +| data_service_deployment_topology_status | [repeated public.portworx.pds.dataservicedeploymenttopology.v1.DataServiceDeploymentTopologyStatus](#publicportworxpdsdataservicedeploymenttopologyv1dataservicedeploymenttopologystatus) | Status of the deployment topology. | +| custom_resource_name | [ string](#string) | Custom Resource Name is the kubernetes resource name for the deployment that is built from ID. | +| dns_zone | [ string](#string) | dns zone of the deployment. | + + + + +### TLSConfig {#tlsconfig} +TLS configuration for the Data Service. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| enabled | [ bool](#bool) | Flag to enable TLS for the Data Service. | +| issuer_name | [ string](#string) | Issuer (Certificate Authority) name for the TLS certificates. | + + + + +## Enums + + +### Status.Health {#statushealth} +Enum for Health of the DataService Deployment. + +| Name | Number | Description | +| ---- | ------ | ----------- | +| HEALTH_UNSPECIFIED | 0 | Health is unspecified. | +| AVAILABLE | 1 | DataService Deployment is Available. | +| PARTIALLY_AVAILABLE | 2 | DataService Deployment is PartiallyAvailable. | +| UNAVAILABLE | 3 | DataService Deployment is Unavailable. | +| NOT_APPLICABLE | 4 | DataService Deployment is deleted from cluster. | + + + + +### Status.Phase {#statusphase} +Enum for Status of the DataService Deployment. + +| Name | Number | Description | +| ---- | ------ | ----------- | +| PHASE_UNSPECIFIED | 0 | Phase is unspecified. | +| RESTORING | 1 | Restore of DataService Deployment is in progress. | +| FAILED | 2 | DataService Deployment is Failed. | +| DELETING | 3 | DataService Deployment is being deleted. | +| PREPARING | 4 | DataService Deployment is Preparing. | +| DEPLOYING | 5 | DataService Deployment is Deploying. | +| DEPLOYED | 6 | DataService Deployment is Deployed. | +| UPDATING | 7 | DataService Deployment is Updating. | +| TIMED_OUT | 8 | DataService Deployment is Timeout. | +| DELETED_FROM_CLUSTER | 9 | DataService Deployment is deleted from cluster. | + + + + + +## Scalar Value Types + +| .proto Type | Notes | C++ Type | Java Type | Python Type | +| ----------- | ----- | -------- | --------- | ----------- | +|

double | | double | double | float | +|

float | | float | float | float | +|

int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | +|

int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | +|

uint32 | Uses variable-length encoding. | uint32 | int | int/long | +|

uint64 | Uses variable-length encoding. | uint64 | long | int/long | +|

sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | +|

sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | +|

fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int | +|

fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long | +|

sfixed32 | Always four bytes. | int32 | int | int | +|

sfixed64 | Always eight bytes. | int64 | long | int/long | +|

bool | | bool | boolean | boolean | +|

string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | +|

bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | + diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto new file mode 100644 index 000000000..a569aba97 --- /dev/null +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto @@ -0,0 +1,285 @@ + +// Please use the following editor setup for this file: +// Tab size=2; Tabs as spaces; Clean up trailing whitepsace +// +// In vim add: au FileType proto setl sw=2 ts=2 expandtab list +// +// In vscode install vscode-proto3 extension and add this to your settings.json: +// "[proto3]": { +// "editor.tabSize": 2, +// "editor.insertSpaces": true, +// "editor.rulers": [80], +// "editor.detectIndentation": true, +// "files.trimTrailingWhitespace": true +// } +// + +syntax = "proto3"; + +package public.portworx.pds.dataservicedeployment.v1; + +import "google/api/annotations.proto"; +import "google/api/field_behavior.proto"; +import "google/protobuf/empty.proto"; +import "google/protobuf/struct.proto"; +import "public/portworx/common/apiv1/meta.proto"; +import "public/portworx/common/apiv1/selector.proto"; +import "public/portworx/pds/dataservicedeploymenttopology/apiv1/dataservicedeploymenttopology.proto"; +import "public/portworx/common/apiv1/pagination.proto"; +import "public/portworx/common/apiv1/sort.proto"; + +option go_package = "github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1;dataservicedeployment"; +option java_multiple_files = true; +option java_package = "com.public.portworx.pds.dataservicedeployment.v1"; +option java_outer_classname = "DataServiceDeploymentProto"; + +// DataServiceDeploymentService serves DataService Deployment resource APIs. +service DataServiceDeploymentService { + // CreateDataServiceDeployment API creates the Deployment resource. + rpc CreateDataServiceDeployment(CreateDataServiceDeploymentRequest) + returns (DataServiceDeployment) { + option(google.api.http) = { + post: "/pds/v1/namespace/{namespace_id}/dataServiceDeployment" + body: "*" + }; + } + + // GetDataServiceDeployment API returns the DataService Deployment resource. + rpc GetDataServiceDeployment(GetDataServiceDeploymentRequest) + returns (DataServiceDeployment) { + option(google.api.http) = { + get: "/pds/v1/dataServiceDeployments/{id}" + }; + } + + // DeleteDataServiceDeployment API deletes the DataService Deployment resource. + rpc DeleteDataServiceDeployment(DeleteDataServiceDeploymentRequest) + returns (google.protobuf.Empty) { + option(google.api.http) = { + delete: "/pds/v1/dataServiceDeployments/{id}" + }; + } + + // (-- api-linter: core::0132::http-body=disabled + // api-linter: core::0132::http-method=disabled + // aip.dev/not-precedent: We need to do this because we can't have advance filters as query params. --) + // ListDataServiceDeployments API lists the DataService Deployment resources. + rpc ListDataServiceDeployments(ListDataServiceDeploymentsRequest) + returns (ListDataServiceDeploymentsResponse) { + option(google.api.http) = { + post: "/pds/v1/dataServiceDeployments:search" + body: "*" + }; + } + + // GetDataServiceDeploymentCredentials API returns the Credentials to be used to access the DataService Deployment. + rpc GetDataServiceDeploymentCredentials(GetDataServiceDeploymentCredentialsRequest) + returns (DataServiceDeploymentCredentials) { + option(google.api.http) = { + get: "/pds/v1/dataServiceDeployments/{id}:credentials" + }; + } +} + +// Resource representing a DataService Deployment. +message DataServiceDeployment { + // Metadata of the resource. + public.portworx.common.v1.Meta meta = 1; + + // Desired configuration of the DataService Deployment. + Config config = 2; + + // Current status of the DataService Deployment. + Status status = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Credentials to access a DataService Deployment. +message DataServiceDeploymentCredentials { + // secret to access the resource. + string secret = 1; +} + +// Desired configuration of the DataService Deployment. +message Config { + // References to other objects. + References references = 1; + + // TLS configuration for the Data Service. + TLSConfig tls_config = 2 [(google.api.field_behavior) = OPTIONAL]; + + // A DataService deployment topology contains a number of nodes that have various attributes as a collective group. + repeated public.portworx.pds.dataservicedeploymenttopology.v1.DataServiceDeploymentTopology data_service_deployment_topologies = 3; +} + +// TLS configuration for the Data Service. +message TLSConfig { + // Flag to enable TLS for the Data Service. + bool enabled = 1; + // Issuer (Certificate Authority) name for the TLS certificates. + string issuer_name = 2; +} + +// References to other resources. +message References { + // UID of the target cluster in which Data Service will be deployed. + string target_cluster_id = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // UID of the image to be used for the Data Service Deployment. + string image_id = 2; + + // UID of the project to which DataService Deployment associated. + string project_id = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // UID of the restore id for the data service Deployment. + string restore_id = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // UID of the data service + string data_service_id = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Status of the DataService Deployment. +message Status { + // Enum for Health of the DataService Deployment. + enum Health { + // Health is unspecified. + HEALTH_UNSPECIFIED = 0; + + // DataService Deployment is Available. + AVAILABLE = 1; + + // DataService Deployment is PartiallyAvailable. + PARTIALLY_AVAILABLE = 2; + + // DataService Deployment is Unavailable. + UNAVAILABLE = 3; + + // DataService Deployment is deleted from cluster. + NOT_APPLICABLE = 4; + } + + // Health of the DataService Deployment. + Health health = 1; + + // Enum for Status of the DataService Deployment. + enum Phase { + // Phase is unspecified. + PHASE_UNSPECIFIED = 0; + + // Restore of DataService Deployment is in progress. + RESTORING = 1; + + // DataService Deployment is Failed. + FAILED = 2; + + // DataService Deployment is being deleted. + DELETING = 3; + + // DataService Deployment is Preparing. + PREPARING = 4; + + // DataService Deployment is Deploying. + DEPLOYING = 5; + + // DataService Deployment is Deployed. + DEPLOYED = 6; + + // DataService Deployment is Updating. + UPDATING = 7; + + // DataService Deployment is Timeout. + TIMED_OUT = 8; + + // DataService Deployment is deleted from cluster. + DELETED_FROM_CLUSTER = 9; + } + + // Status of the DataService Deployment. + Phase phase = 2; + + // ConnectionDetails urls, ports, credentials, etc for connecting to the data service. + google.protobuf.Struct connection_info = 3; + + // Initialize used to control startup scripts. + string initialized = 4; + + // Status of the deployment topology. + repeated public.portworx.pds.dataservicedeploymenttopology.v1.DataServiceDeploymentTopologyStatus data_service_deployment_topology_status = 5; + + // Custom Resource Name is the kubernetes resource name for the deployment that is built from ID. + string custom_resource_name = 6; + + // dns zone of the deployment. + string dns_zone = 7; +} + +// Request to get the DataService Deployment resource. +message GetDataServiceDeploymentRequest { + // UID of the DataService Deployment. + string id = 1; +} + +// Request to get the DataService Deployment Credentials resource. +message GetDataServiceDeploymentCredentialsRequest { + // UID of the DataService Deployment. + string id = 1; +} + +// Request to delete the DataService Deployment resource. +message DeleteDataServiceDeploymentRequest { + // UID of the DataService Deployment. + string id = 1; + + // Force flag to delete backup configuration from control plane only. + bool force = 9 [(google.api.field_behavior) = OPTIONAL]; +} + +// Request to create the DataService Deployment resource. +message CreateDataServiceDeploymentRequest { + // UID of the namespace resource where this DataService deployment will be created. + // (-- api-linter: core::0133::request-unknown-fields=disabled + // aip.dev/not-precedent: We need this field for to support creation of + // the resource in the namespace context. --) + string namespace_id = 1; + + // UID of the project. + // (-- api-linter: core::0133::request-unknown-fields=disabled + // aip.dev/not-precedent: We need this field for to know the project with which the deployment is associated with. --) + string project_id = 2; + + // DataService Deployment resource. + DataServiceDeployment data_service_deployment = 3; +} + +// Request to list the data service deployment resources. +message ListDataServiceDeploymentsRequest { + // tenant ID for which data service deployments need to be fetched. + string tenant_id = 1 [(google.api.field_behavior) = REQUIRED]; + + // Provides the key in labels and associated values for which data service deployments need to be listed. + public.portworx.common.v1.Selector label_selector = 2; + + // Field selector is used to filter data service deployments based on the fields in the deployments's proto message. + public.portworx.common.v1.Selector field_selector = 3; + + // Infra_resource_selector is used to filter deployments based on the infra resources associated with the data service deployments. + // Supported infra resource filters: PROJECT, CLUSTER, NAMESPACE. + public.portworx.common.v1.ResourceSelector infra_resource_selector = 4; + + // Sorting details using which requested list of data service deployments to be sorted. + public.portworx.common.v1.Sort sort = 5 [(google.api.field_behavior) = OPTIONAL]; + + // Pagination parameters for listing data service deployments. + public.portworx.common.v1.PageBasedPaginationRequest pagination = 6 [(google.api.field_behavior) = OPTIONAL]; +} + + +// Response to list DataService Deployment request. +message ListDataServiceDeploymentsResponse { + // List of DataService deployment resources. + repeated DataServiceDeployment data_service_deployments = 1; + + // Pagination metadata for this response. + // (-- api-linter: core::0132::response-unknown-fields=disabled + // aip.dev/not-precedent: We need this field for pagination. --) + public.portworx.common.v1.PageBasedPaginationResponse pagination = 2; +} \ No newline at end of file diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment.swagger.json b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.swagger.json similarity index 62% rename from vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment.swagger.json rename to vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.swagger.json index 498bbe984..2f9625f6f 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment.swagger.json +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.swagger.json @@ -1,26 +1,26 @@ { "openapi": "3.0.0", "info": { - "title": "public/portworx/pds/deployment/apiv1/deployment.proto", + "title": "public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto", "version": "version not set" }, "tags": [ { - "name": "DeploymentService" + "name": "DataServiceDeploymentService" } ], "paths": { - "/pds/v1/deployments": { + "/pds/v1/dataServiceDeployments/{id}": { "get": { - "summary": "ListDeployments API lists the Deployment resources.", - "operationId": "DeploymentService_ListDeployments", + "summary": "GetDataServiceDeployment API returns the DataService Deployment resource.", + "operationId": "DataServiceDeploymentService_GetDataServiceDeployment", "responses": { "200": { "description": "A successful response.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/v1ListDeploymentsResponse" + "$ref": "#/components/schemas/v1DataServiceDeployment" } } } @@ -38,119 +38,30 @@ }, "parameters": [ { - "name": "accountId", - "description": "UID of the account.", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "tenantId", - "description": "UID of the tenant.", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "clusterId", - "description": "UID of the target cluster.", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "namespaceId", - "description": "UID of the namespace.", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "projectId", - "description": "UID of the project.", - "in": "query", - "required": false, + "name": "id", + "description": "UID of the DataService Deployment.", + "in": "path", + "required": true, "schema": { "type": "string" } - }, - { - "name": "pagination.pageNumber", - "description": "Page number is the page number to return based on the size.", - "in": "query", - "required": false, - "schema": { - "type": "string", - "format": "int64" - } - }, - { - "name": "pagination.pageSize", - "description": "Page size is the maximum number of records to include per page.", - "in": "query", - "required": false, - "schema": { - "type": "string", - "format": "int64" - } - }, - { - "name": "sort.sortBy", - "description": "Name of the attribute to sort results by.\n\n - FIELD_UNSPECIFIED: Unspecified, do not use.\n - NAME: Sorting based on the name of the resource.\n - CREATED_AT: Sorting on create time of the resource.\n - UPDATED_AT: Sorting on update time of the resource.\n - PHASE: Sorting on phase of the resource.", - "in": "query", - "required": false, - "schema": { - "type": "string", - "enum": [ - "FIELD_UNSPECIFIED", - "NAME", - "CREATED_AT", - "UPDATED_AT", - "PHASE" - ], - "default": "FIELD_UNSPECIFIED" - } - }, - { - "name": "sort.sortOrder", - "description": "Order of sorting to be applied on requested list.\nIf sort_by having some value and sort_order is not provided, by default ascending order will be used to sort the list.\n\n - VALUE_UNSPECIFIED: Unspecified, do not use.\n - ASC: Sort order ascending.\n - DESC: Sort order descending.", - "in": "query", - "required": false, - "schema": { - "type": "string", - "enum": [ - "VALUE_UNSPECIFIED", - "ASC", - "DESC" - ], - "default": "VALUE_UNSPECIFIED" - } } ], "tags": [ - "DeploymentService" + "DataServiceDeploymentService" ] - } - }, - "/pds/v1/deployments/{deployment.meta.uid}": { - "put": { - "summary": "UpdateDeployment API updates the Deployment resource.", - "operationId": "DeploymentService_UpdateDeployment", + }, + "delete": { + "summary": "DeleteDataServiceDeployment API deletes the DataService Deployment resource.", + "operationId": "DataServiceDeploymentService_DeleteDataServiceDeployment", "responses": { "200": { "description": "A successful response.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/v1Deployment" + "type": "object", + "properties": {} } } } @@ -168,148 +79,40 @@ }, "parameters": [ { - "name": "deployment.meta.uid", - "description": "UID of the resource of the format -.", + "name": "id", + "description": "UID of the DataService Deployment.", "in": "path", "required": true, "schema": { "type": "string" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "meta": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Name of the resource." - }, - "description": { - "type": "string", - "description": "Description of the resource." - }, - "resourceVersion": { - "type": "string", - "description": "A string that identifies the version of this object that can be used by clients to determine when objects have changed.\nThis value must be passed unmodified back to the server by the client." - }, - "createTime": { - "type": "string", - "format": "date-time", - "description": "Creation time of the object.", - "readOnly": true - }, - "updateTime": { - "type": "string", - "format": "date-time", - "description": "Update time of the object.", - "readOnly": true - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Labels to apply to the object." - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Annotations for the object." - }, - "parentReference": { - "$ref": "#/components/schemas/v1Reference" - }, - "resourceNames": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Resource names holds the mapping between the resource IDs and its display name which will be consumed by the frontend.", - "readOnly": true - } - }, - "description": "Metadata of the resource.", - "title": "Metadata of the resource." - }, - "config": { - "$ref": "#/components/schemas/v1Config" - }, - "status": { - "$ref": "#/components/schemas/deploymentv1Status" - } - }, - "title": "Deployment resource." - } - } - }, - "description": "Deployment resource.", - "required": true - }, - "tags": [ - "DeploymentService" - ] - } - }, - "/pds/v1/deployments/{id}": { - "get": { - "summary": "GetDeployment API returns the Deployment resource.", - "operationId": "DeploymentService_GetDeployment", - "responses": { - "200": { - "description": "A successful response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/v1Deployment" - } - } - } }, - "default": { - "description": "An unexpected error response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/googlerpcStatus" - } - } - } - } - }, - "parameters": [ { - "name": "id", - "description": "UID of the Deployment.", - "in": "path", - "required": true, + "name": "force", + "description": "Force flag to delete backup configuration from control plane only.", + "in": "query", + "required": false, "schema": { - "type": "string" + "type": "boolean" } } ], "tags": [ - "DeploymentService" + "DataServiceDeploymentService" ] - }, - "delete": { - "summary": "DeleteDeployment API deletes the Deployment resource.", - "operationId": "DeploymentService_DeleteDeployment", + } + }, + "/pds/v1/dataServiceDeployments/{id}:credentials": { + "get": { + "summary": "GetDataServiceDeploymentCredentials API returns the Credentials to be used to access the DataService Deployment.", + "operationId": "DataServiceDeploymentService_GetDataServiceDeploymentCredentials", "responses": { "200": { "description": "A successful response.", "content": { "application/json": { "schema": { - "type": "object", - "properties": {} + "$ref": "#/components/schemas/v1DataServiceDeploymentCredentials" } } } @@ -328,7 +131,7 @@ "parameters": [ { "name": "id", - "description": "UID of the Deployment.", + "description": "UID of the DataService Deployment.", "in": "path", "required": true, "schema": { @@ -337,21 +140,21 @@ } ], "tags": [ - "DeploymentService" + "DataServiceDeploymentService" ] } }, - "/pds/v1/deployments/{id}:credentials": { - "get": { - "summary": "GetDeploymentCredentials API returns the Credentials to be used to access the Deployment.", - "operationId": "DeploymentService_GetDeploymentCredentials", + "/pds/v1/dataServiceDeployments:search": { + "post": { + "summary": "ListDataServiceDeployments API lists the DataService Deployment resources.", + "operationId": "DataServiceDeploymentService_ListDataServiceDeployments", "responses": { "200": { "description": "A successful response.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/v1DeploymentCredentials" + "$ref": "#/components/schemas/v1ListDataServiceDeploymentsResponse" } } } @@ -367,33 +170,33 @@ } } }, - "parameters": [ - { - "name": "id", - "description": "UID of the Deployment.", - "in": "path", - "required": true, - "schema": { - "type": "string" + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v1ListDataServiceDeploymentsRequest" + } } - } - ], + }, + "description": "Request to list the data service deployment resources.", + "required": true + }, "tags": [ - "DeploymentService" + "DataServiceDeploymentService" ] } }, - "/pds/v1/namespace/{namespaceId}/deployment": { + "/pds/v1/namespace/{namespaceId}/dataServiceDeployment": { "post": { - "summary": "CreateDeployment API creates the Deployment resource.", - "operationId": "DeploymentService_CreateDeployment", + "summary": "CreateDataServiceDeployment API creates the Deployment resource.", + "operationId": "DataServiceDeploymentService_CreateDataServiceDeployment", "responses": { "200": { "description": "A successful response.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/v1Deployment" + "$ref": "#/components/schemas/v1DataServiceDeployment" } } } @@ -412,7 +215,7 @@ "parameters": [ { "name": "namespaceId", - "description": "UID of the namespace resource where this deployment will be created.", + "description": "UID of the namespace resource where this DataService deployment will be created.", "in": "path", "required": true, "schema": { @@ -424,32 +227,82 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeploymentServiceCreateDeploymentBody" + "$ref": "#/components/schemas/DataServiceDeploymentServiceCreateDataServiceDeploymentBody" } } }, "required": true }, "tags": [ - "DeploymentService" + "DataServiceDeploymentService" ] } } }, "components": { "schemas": { - "DeploymentServiceCreateDeploymentBody": { + "DataServiceDeploymentServiceCreateDataServiceDeploymentBody": { "type": "object", "properties": { "projectId": { "type": "string", "description": "UID of the project." }, - "deployment": { - "$ref": "#/components/schemas/v1Deployment" + "dataServiceDeployment": { + "$ref": "#/components/schemas/v1DataServiceDeployment" + } + }, + "description": "Request to create the DataService Deployment resource." + }, + "ResourceSelectorResourceFilter": { + "type": "object", + "properties": { + "resourceType": { + "$ref": "#/components/schemas/v1InfraResourceType" + }, + "op": { + "$ref": "#/components/schemas/SelectorOperator" + }, + "values": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Value of key,value pair against which filtering needs to be performs." + } + }, + "description": "ResourceFilter is filter for a given resource type." + }, + "SelectorFilter": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "Key of key,value pair against which filtering needs to be performs." + }, + "op": { + "$ref": "#/components/schemas/SelectorOperator" + }, + "values": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Value of key,value pair against which filtering needs to be performs if operator is EXIST, value should be an empty array." } }, - "description": "Request to create the Deployment resource." + "description": "Filter for a given key." + }, + "SelectorOperator": { + "type": "string", + "enum": [ + "OPERATOR_UNSPECIFIED", + "IN", + "NOT_IN", + "LIKE" + ], + "default": "OPERATOR_UNSPECIFIED", + "description": "Operator specifies the relationship between the provided (key,value) pairs in the response.\n\n - OPERATOR_UNSPECIFIED: Unspecified, do not use.\n - IN: IN specifies that the key should be associated with atleast 1 of the element in value list.\n - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list.\n - LIKE: LIKE specified that the key should be of a specified pattern" }, "SortByField": { "type": "string", @@ -463,7 +316,7 @@ "default": "FIELD_UNSPECIFIED", "description": "Field names for sorting the list of resources.\n\n - FIELD_UNSPECIFIED: Unspecified, do not use.\n - NAME: Sorting based on the name of the resource.\n - CREATED_AT: Sorting on create time of the resource.\n - UPDATED_AT: Sorting on update time of the resource.\n - PHASE: Sorting on phase of the resource." }, - "deploymentv1Status": { + "dataservicedeploymentv1Status": { "type": "object", "properties": { "health": { @@ -480,15 +333,23 @@ "type": "string", "description": "Initialize used to control startup scripts." }, - "deploymentTopologyStatus": { + "dataServiceDeploymentTopologyStatus": { "type": "array", "items": { - "$ref": "#/components/schemas/v1DeploymentTopologyStatus" + "$ref": "#/components/schemas/v1DataServiceDeploymentTopologyStatus" }, "description": "Status of the deployment topology." + }, + "customResourceName": { + "type": "string", + "description": "Custom Resource Name is the kubernetes resource name for the deployment that is built from ID." + }, + "dnsZone": { + "type": "string", + "description": "dns zone of the deployment." } }, - "description": "Status of the Deployment." + "description": "Status of the DataService Deployment." }, "googlerpcStatus": { "type": "object", @@ -534,25 +395,25 @@ "tlsConfig": { "$ref": "#/components/schemas/v1TLSConfig" }, - "deploymentTopologies": { + "dataServiceDeploymentTopologies": { "type": "array", "items": { - "$ref": "#/components/schemas/v1DeploymentTopology" + "$ref": "#/components/schemas/v1DataServiceDeploymentTopology" }, - "description": "A deployment topology contains a number of nodes that have various attributes as a collective group." + "description": "A DataService deployment topology contains a number of nodes that have various attributes as a collective group." } }, - "description": "Desired configuration of the Deployment." + "description": "Desired configuration of the DataService Deployment." }, "v1ConnectionDetails": { "type": "object", "properties": { - "nodes": { + "instances": { "type": "array", "items": { "type": "string" }, - "description": "Nodes of the data service." + "description": "Instances of the data service deployment." }, "ports": { "type": "object", @@ -560,7 +421,7 @@ "type": "integer", "format": "int32" }, - "description": "Ports provided by the data service (name and number)." + "description": "Ports provided by the data service deployment (name and number)." } }, "description": "ConnectionDetails of data service." @@ -568,19 +429,19 @@ "v1ConnectionInfo": { "type": "object", "properties": { - "pods": { + "readyInstances": { "type": "array", "items": { - "$ref": "#/components/schemas/v1PodInfo" + "$ref": "#/components/schemas/v1InstanceInfo" }, - "description": "Ready pods." + "description": "Ready instances." }, - "notReadyPods": { + "notReadyInstances": { "type": "array", "items": { - "$ref": "#/components/schemas/v1PodInfo" + "$ref": "#/components/schemas/v1InstanceInfo" }, - "description": "Pods that are not ready." + "description": "Instances that are not ready." }, "connectionDetails": { "$ref": "#/components/schemas/v1ConnectionDetails" @@ -590,9 +451,9 @@ "description": "Stores details about the cluster." } }, - "description": "Connection Information for the Deployment Topology." + "description": "Connection Information for the DataServiceDeployment Topology." }, - "v1Deployment": { + "v1DataServiceDeployment": { "type": "object", "properties": { "meta": { @@ -602,12 +463,12 @@ "$ref": "#/components/schemas/v1Config" }, "status": { - "$ref": "#/components/schemas/deploymentv1Status" + "$ref": "#/components/schemas/dataservicedeploymentv1Status" } }, - "description": "Resource representing a Data Service Deployment." + "description": "Resource representing a DataService Deployment." }, - "v1DeploymentCredentials": { + "v1DataServiceDeploymentCredentials": { "type": "object", "properties": { "secret": { @@ -615,23 +476,23 @@ "description": "secret to access the resource." } }, - "description": "Credentials to access a Data Service Deployment." + "description": "Credentials to access a DataService Deployment." }, - "v1DeploymentTopology": { + "v1DataServiceDeploymentTopology": { "type": "object", "properties": { "name": { "type": "string", - "description": "Name of the deployment topology." + "description": "Name of the DataServiceDeployment topology." }, "description": { "type": "string", - "description": "Description of the deployment topology." + "description": "Description of the DataServiceDeployment topology." }, - "replicas": { + "instances": { "type": "string", "format": "int64", - "description": "Number of replicas of data services." + "description": "Number of instances of data services." }, "serviceType": { "type": "string", @@ -658,29 +519,29 @@ "$ref": "#/components/schemas/v1Template" } }, - "description": "A deployment topology contains a number of nodes that have various attributes as a collective group.\nThis is consumed in a deployment and the functionality is being controlled by the CRUD APIs of deployment." + "description": "A DataService topology contains a number of nodes that have various attributes as a collective group.\nThis is consumed in a DataService Deployment and the functionality is being controlled by the CRUD APIs of DataService Deployment." }, - "v1DeploymentTopologyStatus": { + "v1DataServiceDeploymentTopologyStatus": { "type": "object", "properties": { "health": { - "$ref": "#/components/schemas/v1DeploymentTopologyStatusHealth" + "$ref": "#/components/schemas/v1DataServiceDeploymentTopologyStatusHealth" }, "phase": { - "$ref": "#/components/schemas/v1DeploymentTopologyStatusPhase" + "$ref": "#/components/schemas/v1DataServiceDeploymentTopologyStatusPhase" }, - "readyReplicas": { + "readyInstances": { "type": "string", "format": "int64", - "description": "Number of replicas reported by Target Cluster that are up and running." + "description": "Number of ready replicas reported by Target Cluster that are up and running." }, "connectionInfo": { "$ref": "#/components/schemas/v1ConnectionInfo" } }, - "description": "Status of the deployment topology. It is consumed in Deployment." + "description": "Status of the data service topology. It is consumed in DataServiceDeployment." }, - "v1DeploymentTopologyStatusHealth": { + "v1DataServiceDeploymentTopologyStatusHealth": { "type": "string", "enum": [ "UNKNOWN", @@ -689,9 +550,9 @@ "AVAILABLE" ], "default": "UNKNOWN", - "description": "Enum for Health of the deployment topology.\n\n - UNKNOWN: Health is unknown.\n - UNAVAILABLE: Deployment Topology is Unavailable.\n - PARTIALLY_AVAILABLE: Deployment Topology is Partially available.\n - AVAILABLE: Deployment Topology is available." + "description": "Enum for Health of the data service topology.\n\n - UNKNOWN: Health is unknown.\n - UNAVAILABLE: DataServiceDeployment Topology is Unavailable.\n - PARTIALLY_AVAILABLE: DataServiceDeployment Topology is Partially available.\n - AVAILABLE: DataServiceDeployment Topology is available." }, - "v1DeploymentTopologyStatusPhase": { + "v1DataServiceDeploymentTopologyStatusPhase": { "type": "string", "enum": [ "PHASE_UNSPECIFIED", @@ -704,23 +565,86 @@ "TIMED_OUT" ], "default": "PHASE_UNSPECIFIED", - "description": "Enum for Phase of the Deployment Topology.\n\n - PHASE_UNSPECIFIED: Unspecified status.\n - IN_PROGRESS: In progress Status.\n - PARTIAL_SUCCESS: Partial Success Status.\n - SUCCESS: Successful Status.\n - DELETE_PENDING: Delete is pending Status.\n - DELETING: Delete in progress Status.\n - FAILED: Failed Status.\n - TIMED_OUT: Timed Out Status." + "description": "Enum for Phase of the DataServiceDeployment Topology.\n\n - PHASE_UNSPECIFIED: Unspecified status.\n - IN_PROGRESS: In progress Status.\n - PARTIAL_SUCCESS: Partial Success Status.\n - SUCCESS: Successful Status.\n - DELETE_PENDING: Delete is pending Status.\n - DELETING: Delete in progress Status.\n - FAILED: Failed Status.\n - TIMED_OUT: Timed Out Status." }, - "v1ListDeploymentsResponse": { + "v1InfraResourceType": { + "type": "string", + "enum": [ + "TYPE_UNSPECIFIED", + "ACCOUNT", + "TENANT", + "PROJECT", + "TARGET_CLUSTER", + "NAMESPACE", + "CREDENTIAL", + "BACKUP_LOCATION", + "BACKUP_POLICY", + "TEMPLATE" + ], + "default": "TYPE_UNSPECIFIED", + "description": "Type of the resource.\n\n - TYPE_UNSPECIFIED: Unspecified, do not use.\n - ACCOUNT: Currently supported infra resources.\nInfra resource of type account.\n - TENANT: Infra resource of type tenant.\n - PROJECT: Infra resource of type projects.\n - TARGET_CLUSTER: Infra resource target cluster.\n - NAMESPACE: Infra resource of type namespace.\n - CREDENTIAL: Infra resource of type credential.\n - BACKUP_LOCATION: Infra resource of type backup location.\n - BACKUP_POLICY: Infra resource of type backup policy.\n - TEMPLATE: Infra resource of type template." + }, + "v1InstanceInfo": { "type": "object", "properties": { - "deployments": { + "ip": { + "type": "string", + "description": "The IP of a instance." + }, + "name": { + "type": "string", + "description": "Name is the Hostname of a instance." + }, + "workerNode": { + "type": "string", + "description": "Node that hosts a particular instance." + } + }, + "description": "InstanceInfo contains information about a instance." + }, + "v1ListDataServiceDeploymentsRequest": { + "type": "object", + "properties": { + "tenantId": { + "type": "string", + "description": "tenant ID for which data service deployments need to be fetched." + }, + "labelSelector": { + "$ref": "#/components/schemas/v1Selector" + }, + "fieldSelector": { + "$ref": "#/components/schemas/v1Selector" + }, + "infraResourceSelector": { + "$ref": "#/components/schemas/v1ResourceSelector" + }, + "sort": { + "$ref": "#/components/schemas/v1Sort" + }, + "pagination": { + "$ref": "#/components/schemas/v1PageBasedPaginationRequest" + } + }, + "description": "Request to list the data service deployment resources.", + "required": [ + "tenantId" + ] + }, + "v1ListDataServiceDeploymentsResponse": { + "type": "object", + "properties": { + "dataServiceDeployments": { "type": "array", "items": { - "$ref": "#/components/schemas/v1Deployment" + "$ref": "#/components/schemas/v1DataServiceDeployment" }, - "description": "List of deployment resources." + "description": "List of DataService deployment resources." }, "pagination": { "$ref": "#/components/schemas/v1PageBasedPaginationResponse" } }, - "description": "Response to list Deployment request." + "description": "Response to list DataService Deployment request." }, "v1Meta": { "type": "object", @@ -833,24 +757,6 @@ }, "description": "Metadata related to page based pagination for paginated API responses." }, - "v1PodInfo": { - "type": "object", - "properties": { - "ip": { - "type": "string", - "description": "The IP of a pod." - }, - "name": { - "type": "string", - "description": "Name is the Hostname of a pod." - }, - "workerNode": { - "type": "string", - "description": "Node that hosts a particular pod." - } - }, - "description": "PodInfo contains information about a pod." - }, "v1Reference": { "type": "object", "properties": { @@ -888,12 +794,43 @@ }, "restoreId": { "type": "string", - "description": "UID of the restore id for the Deployment.", + "description": "UID of the restore id for the data service Deployment.", + "readOnly": true + }, + "dataServiceId": { + "type": "string", + "title": "UID of the data service", "readOnly": true } }, "description": "References to other resources." }, + "v1ResourceSelector": { + "type": "object", + "properties": { + "infraResourceFilters": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ResourceSelectorResourceFilter" + }, + "description": "Infra_resource_filters is the list of all filters that should be applied to fetch data related to infra resource.\nEach filter will have AND relationship." + } + }, + "description": "ResourceSelector is used to query resources using the associated infra resources." + }, + "v1Selector": { + "type": "object", + "properties": { + "filters": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SelectorFilter" + }, + "description": "FilterList is the list of all filters that should be applied." + } + }, + "description": "Selector is used to query resources using the associated labels or field names." + }, "v1Sort": { "type": "object", "properties": { @@ -922,10 +859,11 @@ "HEALTH_UNSPECIFIED", "AVAILABLE", "PARTIALLY_AVAILABLE", - "UNAVAILABLE" + "UNAVAILABLE", + "NOT_APPLICABLE" ], "default": "HEALTH_UNSPECIFIED", - "description": "Enum for Health of the Deployment.\n\n - HEALTH_UNSPECIFIED: Health is unspecified.\n - AVAILABLE: Deployment is Available.\n - PARTIALLY_AVAILABLE: Deployment is PartiallyAvailable.\n - UNAVAILABLE: Deployment is Unavailable." + "description": "Enum for Health of the DataService Deployment.\n\n - HEALTH_UNSPECIFIED: Health is unspecified.\n - AVAILABLE: DataService Deployment is Available.\n - PARTIALLY_AVAILABLE: DataService Deployment is PartiallyAvailable.\n - UNAVAILABLE: DataService Deployment is Unavailable.\n - NOT_APPLICABLE: DataService Deployment is deleted from cluster." }, "v1StatusPhase": { "type": "string", @@ -938,10 +876,11 @@ "DEPLOYING", "DEPLOYED", "UPDATING", - "TIMED_OUT" + "TIMED_OUT", + "DELETED_FROM_CLUSTER" ], "default": "PHASE_UNSPECIFIED", - "description": "Enum for Status of the Deployment.\n\n - PHASE_UNSPECIFIED: Phase is unspecified.\n - RESTORING: Restore of Deployment is in progress.\n - FAILED: Deployment is Failed.\n - DELETING: Deployment is being deleted.\n - PREPARING: Deployment is Preparing.\n - DEPLOYING: Deployment is Deploying.\n - DEPLOYED: Deployment is Deployed.\n - UPDATING: Deployment is Updating.\n - TIMED_OUT: Deployment is Timeout." + "description": "Enum for Status of the DataService Deployment.\n\n - PHASE_UNSPECIFIED: Phase is unspecified.\n - RESTORING: Restore of DataService Deployment is in progress.\n - FAILED: DataService Deployment is Failed.\n - DELETING: DataService Deployment is being deleted.\n - PREPARING: DataService Deployment is Preparing.\n - DEPLOYING: DataService Deployment is Deploying.\n - DEPLOYED: DataService Deployment is Deployed.\n - UPDATING: DataService Deployment is Updating.\n - TIMED_OUT: DataService Deployment is Timeout.\n - DELETED_FROM_CLUSTER: DataService Deployment is deleted from cluster." }, "v1TLSConfig": { "type": "object", diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment_grpc.pb.go b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment_grpc.pb.go new file mode 100644 index 000000000..cf5d8a685 --- /dev/null +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment_grpc.pb.go @@ -0,0 +1,294 @@ +// Please use the following editor setup for this file: +// Tab size=2; Tabs as spaces; Clean up trailing whitepsace +// +// In vim add: au FileType proto setl sw=2 ts=2 expandtab list +// +// In vscode install vscode-proto3 extension and add this to your settings.json: +// "[proto3]": { +// "editor.tabSize": 2, +// "editor.insertSpaces": true, +// "editor.rulers": [80], +// "editor.detectIndentation": true, +// "files.trimTrailingWhitespace": true +// } +// + +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v4.25.3 +// source: public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto + +package dataservicedeployment + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + DataServiceDeploymentService_CreateDataServiceDeployment_FullMethodName = "/public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService/CreateDataServiceDeployment" + DataServiceDeploymentService_GetDataServiceDeployment_FullMethodName = "/public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService/GetDataServiceDeployment" + DataServiceDeploymentService_DeleteDataServiceDeployment_FullMethodName = "/public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService/DeleteDataServiceDeployment" + DataServiceDeploymentService_ListDataServiceDeployments_FullMethodName = "/public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService/ListDataServiceDeployments" + DataServiceDeploymentService_GetDataServiceDeploymentCredentials_FullMethodName = "/public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService/GetDataServiceDeploymentCredentials" +) + +// DataServiceDeploymentServiceClient is the client API for DataServiceDeploymentService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type DataServiceDeploymentServiceClient interface { + // CreateDataServiceDeployment API creates the Deployment resource. + CreateDataServiceDeployment(ctx context.Context, in *CreateDataServiceDeploymentRequest, opts ...grpc.CallOption) (*DataServiceDeployment, error) + // GetDataServiceDeployment API returns the DataService Deployment resource. + GetDataServiceDeployment(ctx context.Context, in *GetDataServiceDeploymentRequest, opts ...grpc.CallOption) (*DataServiceDeployment, error) + // DeleteDataServiceDeployment API deletes the DataService Deployment resource. + DeleteDataServiceDeployment(ctx context.Context, in *DeleteDataServiceDeploymentRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + // (-- api-linter: core::0132::http-body=disabled + // + // api-linter: core::0132::http-method=disabled + // aip.dev/not-precedent: We need to do this because we can't have advance filters as query params. --) + // + // ListDataServiceDeployments API lists the DataService Deployment resources. + ListDataServiceDeployments(ctx context.Context, in *ListDataServiceDeploymentsRequest, opts ...grpc.CallOption) (*ListDataServiceDeploymentsResponse, error) + // GetDataServiceDeploymentCredentials API returns the Credentials to be used to access the DataService Deployment. + GetDataServiceDeploymentCredentials(ctx context.Context, in *GetDataServiceDeploymentCredentialsRequest, opts ...grpc.CallOption) (*DataServiceDeploymentCredentials, error) +} + +type dataServiceDeploymentServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewDataServiceDeploymentServiceClient(cc grpc.ClientConnInterface) DataServiceDeploymentServiceClient { + return &dataServiceDeploymentServiceClient{cc} +} + +func (c *dataServiceDeploymentServiceClient) CreateDataServiceDeployment(ctx context.Context, in *CreateDataServiceDeploymentRequest, opts ...grpc.CallOption) (*DataServiceDeployment, error) { + out := new(DataServiceDeployment) + err := c.cc.Invoke(ctx, DataServiceDeploymentService_CreateDataServiceDeployment_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dataServiceDeploymentServiceClient) GetDataServiceDeployment(ctx context.Context, in *GetDataServiceDeploymentRequest, opts ...grpc.CallOption) (*DataServiceDeployment, error) { + out := new(DataServiceDeployment) + err := c.cc.Invoke(ctx, DataServiceDeploymentService_GetDataServiceDeployment_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dataServiceDeploymentServiceClient) DeleteDataServiceDeployment(ctx context.Context, in *DeleteDataServiceDeploymentRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, DataServiceDeploymentService_DeleteDataServiceDeployment_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dataServiceDeploymentServiceClient) ListDataServiceDeployments(ctx context.Context, in *ListDataServiceDeploymentsRequest, opts ...grpc.CallOption) (*ListDataServiceDeploymentsResponse, error) { + out := new(ListDataServiceDeploymentsResponse) + err := c.cc.Invoke(ctx, DataServiceDeploymentService_ListDataServiceDeployments_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dataServiceDeploymentServiceClient) GetDataServiceDeploymentCredentials(ctx context.Context, in *GetDataServiceDeploymentCredentialsRequest, opts ...grpc.CallOption) (*DataServiceDeploymentCredentials, error) { + out := new(DataServiceDeploymentCredentials) + err := c.cc.Invoke(ctx, DataServiceDeploymentService_GetDataServiceDeploymentCredentials_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// DataServiceDeploymentServiceServer is the server API for DataServiceDeploymentService service. +// All implementations must embed UnimplementedDataServiceDeploymentServiceServer +// for forward compatibility +type DataServiceDeploymentServiceServer interface { + // CreateDataServiceDeployment API creates the Deployment resource. + CreateDataServiceDeployment(context.Context, *CreateDataServiceDeploymentRequest) (*DataServiceDeployment, error) + // GetDataServiceDeployment API returns the DataService Deployment resource. + GetDataServiceDeployment(context.Context, *GetDataServiceDeploymentRequest) (*DataServiceDeployment, error) + // DeleteDataServiceDeployment API deletes the DataService Deployment resource. + DeleteDataServiceDeployment(context.Context, *DeleteDataServiceDeploymentRequest) (*emptypb.Empty, error) + // (-- api-linter: core::0132::http-body=disabled + // + // api-linter: core::0132::http-method=disabled + // aip.dev/not-precedent: We need to do this because we can't have advance filters as query params. --) + // + // ListDataServiceDeployments API lists the DataService Deployment resources. + ListDataServiceDeployments(context.Context, *ListDataServiceDeploymentsRequest) (*ListDataServiceDeploymentsResponse, error) + // GetDataServiceDeploymentCredentials API returns the Credentials to be used to access the DataService Deployment. + GetDataServiceDeploymentCredentials(context.Context, *GetDataServiceDeploymentCredentialsRequest) (*DataServiceDeploymentCredentials, error) + mustEmbedUnimplementedDataServiceDeploymentServiceServer() +} + +// UnimplementedDataServiceDeploymentServiceServer must be embedded to have forward compatible implementations. +type UnimplementedDataServiceDeploymentServiceServer struct { +} + +func (UnimplementedDataServiceDeploymentServiceServer) CreateDataServiceDeployment(context.Context, *CreateDataServiceDeploymentRequest) (*DataServiceDeployment, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateDataServiceDeployment not implemented") +} +func (UnimplementedDataServiceDeploymentServiceServer) GetDataServiceDeployment(context.Context, *GetDataServiceDeploymentRequest) (*DataServiceDeployment, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDataServiceDeployment not implemented") +} +func (UnimplementedDataServiceDeploymentServiceServer) DeleteDataServiceDeployment(context.Context, *DeleteDataServiceDeploymentRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteDataServiceDeployment not implemented") +} +func (UnimplementedDataServiceDeploymentServiceServer) ListDataServiceDeployments(context.Context, *ListDataServiceDeploymentsRequest) (*ListDataServiceDeploymentsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListDataServiceDeployments not implemented") +} +func (UnimplementedDataServiceDeploymentServiceServer) GetDataServiceDeploymentCredentials(context.Context, *GetDataServiceDeploymentCredentialsRequest) (*DataServiceDeploymentCredentials, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDataServiceDeploymentCredentials not implemented") +} +func (UnimplementedDataServiceDeploymentServiceServer) mustEmbedUnimplementedDataServiceDeploymentServiceServer() { +} + +// UnsafeDataServiceDeploymentServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to DataServiceDeploymentServiceServer will +// result in compilation errors. +type UnsafeDataServiceDeploymentServiceServer interface { + mustEmbedUnimplementedDataServiceDeploymentServiceServer() +} + +func RegisterDataServiceDeploymentServiceServer(s grpc.ServiceRegistrar, srv DataServiceDeploymentServiceServer) { + s.RegisterService(&DataServiceDeploymentService_ServiceDesc, srv) +} + +func _DataServiceDeploymentService_CreateDataServiceDeployment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateDataServiceDeploymentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataServiceDeploymentServiceServer).CreateDataServiceDeployment(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: DataServiceDeploymentService_CreateDataServiceDeployment_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataServiceDeploymentServiceServer).CreateDataServiceDeployment(ctx, req.(*CreateDataServiceDeploymentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DataServiceDeploymentService_GetDataServiceDeployment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDataServiceDeploymentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataServiceDeploymentServiceServer).GetDataServiceDeployment(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: DataServiceDeploymentService_GetDataServiceDeployment_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataServiceDeploymentServiceServer).GetDataServiceDeployment(ctx, req.(*GetDataServiceDeploymentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DataServiceDeploymentService_DeleteDataServiceDeployment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteDataServiceDeploymentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataServiceDeploymentServiceServer).DeleteDataServiceDeployment(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: DataServiceDeploymentService_DeleteDataServiceDeployment_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataServiceDeploymentServiceServer).DeleteDataServiceDeployment(ctx, req.(*DeleteDataServiceDeploymentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DataServiceDeploymentService_ListDataServiceDeployments_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListDataServiceDeploymentsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataServiceDeploymentServiceServer).ListDataServiceDeployments(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: DataServiceDeploymentService_ListDataServiceDeployments_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataServiceDeploymentServiceServer).ListDataServiceDeployments(ctx, req.(*ListDataServiceDeploymentsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DataServiceDeploymentService_GetDataServiceDeploymentCredentials_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDataServiceDeploymentCredentialsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataServiceDeploymentServiceServer).GetDataServiceDeploymentCredentials(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: DataServiceDeploymentService_GetDataServiceDeploymentCredentials_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataServiceDeploymentServiceServer).GetDataServiceDeploymentCredentials(ctx, req.(*GetDataServiceDeploymentCredentialsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// DataServiceDeploymentService_ServiceDesc is the grpc.ServiceDesc for DataServiceDeploymentService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var DataServiceDeploymentService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "public.portworx.pds.dataservicedeployment.v1.DataServiceDeploymentService", + HandlerType: (*DataServiceDeploymentServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateDataServiceDeployment", + Handler: _DataServiceDeploymentService_CreateDataServiceDeployment_Handler, + }, + { + MethodName: "GetDataServiceDeployment", + Handler: _DataServiceDeploymentService_GetDataServiceDeployment_Handler, + }, + { + MethodName: "DeleteDataServiceDeployment", + Handler: _DataServiceDeploymentService_DeleteDataServiceDeployment_Handler, + }, + { + MethodName: "ListDataServiceDeployments", + Handler: _DataServiceDeploymentService_ListDataServiceDeployments_Handler, + }, + { + MethodName: "GetDataServiceDeploymentCredentials", + Handler: _DataServiceDeploymentService_GetDataServiceDeploymentCredentials_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto", +} diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/Makefile b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/Makefile new file mode 100644 index 000000000..fd64d204f --- /dev/null +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/Makefile @@ -0,0 +1,5 @@ +PROTO_FILES = dataservicedeploymentconfigupdate.proto + +all: $(PROTO_FILES) + +include $(TOP)/make/common.mk diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.pb.go b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.pb.go new file mode 100644 index 000000000..e3e3e6c09 --- /dev/null +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.pb.go @@ -0,0 +1,1006 @@ +// Please use the following editor setup for this file: +// Tab size=2; Tabs as spaces; Clean up trailing whitepsace +// +// In vim add: au FileType proto setl sw=2 ts=2 expandtab list +// +// In vscode install vscode-proto3 extension and add this to your settings.json: +// "[proto3]": { +// "editor.tabSize": 2, +// "editor.insertSpaces": true, +// "editor.rulers": [80], +// "editor.detectIndentation": true, +// "files.trimTrailingWhitespace": true +// } +// + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.32.0 +// protoc v4.25.3 +// source: public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto + +package dataservicedeploymentconfigupdate + +import ( + apiv1 "github.com/pure-px/apis/public/portworx/common/apiv1" + apiv11 "github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Enum for Phase of the DataService deployment config update. +type Status_Phase int32 + +const ( + // Phase is unspecified. + Status_PHASE_UNSPECIFIED Status_Phase = 0 + // DataService deployment config update failed. + Status_FAILED Status_Phase = 1 + // DataService deployment config update is queued. + Status_QUEUED Status_Phase = 2 + // DataService deployment config update is in progress. + Status_IN_PROGRESS Status_Phase = 3 + // DataService deployment config update is completed. + Status_COMPLETED Status_Phase = 4 + // DataService config update is requeued. + Status_REQUEUED Status_Phase = 5 +) + +// Enum value maps for Status_Phase. +var ( + Status_Phase_name = map[int32]string{ + 0: "PHASE_UNSPECIFIED", + 1: "FAILED", + 2: "QUEUED", + 3: "IN_PROGRESS", + 4: "COMPLETED", + 5: "REQUEUED", + } + Status_Phase_value = map[string]int32{ + "PHASE_UNSPECIFIED": 0, + "FAILED": 1, + "QUEUED": 2, + "IN_PROGRESS": 3, + "COMPLETED": 4, + "REQUEUED": 5, + } +) + +func (x Status_Phase) Enum() *Status_Phase { + p := new(Status_Phase) + *p = x + return p +} + +func (x Status_Phase) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Status_Phase) Descriptor() protoreflect.EnumDescriptor { + return file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_enumTypes[0].Descriptor() +} + +func (Status_Phase) Type() protoreflect.EnumType { + return &file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_enumTypes[0] +} + +func (x Status_Phase) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Status_Phase.Descriptor instead. +func (Status_Phase) EnumDescriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_rawDescGZIP(), []int{7, 0} +} + +// CreateDataServiceDeploymentConfigUpdateRequest is the request to create a data service deployment config update record containing desired state of dataservice deployment. +type CreateDataServiceDeploymentConfigUpdateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // DataServiceDeploymentConfigUpdate of the DataService config deployment update request. + DataServiceDeploymentConfigUpdate *DataServiceDeploymentConfigUpdate `protobuf:"bytes,1,opt,name=data_service_deployment_config_update,json=dataServiceDeploymentConfigUpdate,proto3" json:"data_service_deployment_config_update,omitempty"` +} + +func (x *CreateDataServiceDeploymentConfigUpdateRequest) Reset() { + *x = CreateDataServiceDeploymentConfigUpdateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateDataServiceDeploymentConfigUpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateDataServiceDeploymentConfigUpdateRequest) ProtoMessage() {} + +func (x *CreateDataServiceDeploymentConfigUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateDataServiceDeploymentConfigUpdateRequest.ProtoReflect.Descriptor instead. +func (*CreateDataServiceDeploymentConfigUpdateRequest) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_rawDescGZIP(), []int{0} +} + +func (x *CreateDataServiceDeploymentConfigUpdateRequest) GetDataServiceDeploymentConfigUpdate() *DataServiceDeploymentConfigUpdate { + if x != nil { + return x.DataServiceDeploymentConfigUpdate + } + return nil +} + +// GetDataServiceDeploymentConfigUpdateRequest is the request for GetDataServiceDeploymentConfigUpdate. +type GetDataServiceDeploymentConfigUpdateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // UID of the DataService deployment config update. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *GetDataServiceDeploymentConfigUpdateRequest) Reset() { + *x = GetDataServiceDeploymentConfigUpdateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetDataServiceDeploymentConfigUpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetDataServiceDeploymentConfigUpdateRequest) ProtoMessage() {} + +func (x *GetDataServiceDeploymentConfigUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetDataServiceDeploymentConfigUpdateRequest.ProtoReflect.Descriptor instead. +func (*GetDataServiceDeploymentConfigUpdateRequest) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_rawDescGZIP(), []int{1} +} + +func (x *GetDataServiceDeploymentConfigUpdateRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +// ListDataServiceDeploymentConfigUpdatesRequest is the request for ListDataServiceDeploymentConfigUpdates. +type ListDataServiceDeploymentConfigUpdatesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // UID of the DataService Deployment. + DataServiceDeploymentId string `protobuf:"bytes,1,opt,name=data_service_deployment_id,json=dataServiceDeploymentId,proto3" json:"data_service_deployment_id,omitempty"` + // Sorting details using which requested list to be sorted. + Sort *apiv1.Sort `protobuf:"bytes,2,opt,name=sort,proto3" json:"sort,omitempty"` + // Pagination parameters for listing data service deployment config updates. + Pagination *apiv1.PageBasedPaginationRequest `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *ListDataServiceDeploymentConfigUpdatesRequest) Reset() { + *x = ListDataServiceDeploymentConfigUpdatesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListDataServiceDeploymentConfigUpdatesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListDataServiceDeploymentConfigUpdatesRequest) ProtoMessage() {} + +func (x *ListDataServiceDeploymentConfigUpdatesRequest) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListDataServiceDeploymentConfigUpdatesRequest.ProtoReflect.Descriptor instead. +func (*ListDataServiceDeploymentConfigUpdatesRequest) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_rawDescGZIP(), []int{2} +} + +func (x *ListDataServiceDeploymentConfigUpdatesRequest) GetDataServiceDeploymentId() string { + if x != nil { + return x.DataServiceDeploymentId + } + return "" +} + +func (x *ListDataServiceDeploymentConfigUpdatesRequest) GetSort() *apiv1.Sort { + if x != nil { + return x.Sort + } + return nil +} + +func (x *ListDataServiceDeploymentConfigUpdatesRequest) GetPagination() *apiv1.PageBasedPaginationRequest { + if x != nil { + return x.Pagination + } + return nil +} + +// ListDataServiceDeploymentConfigUpdatesResponse is the response for ListDataServiceDeploymentConfigUpdates. +type ListDataServiceDeploymentConfigUpdatesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // List of DataService deployment config updates. + DataServiceDeploymentConfigUpdates []*DataServiceDeploymentConfigUpdate `protobuf:"bytes,1,rep,name=data_service_deployment_config_updates,json=dataServiceDeploymentConfigUpdates,proto3" json:"data_service_deployment_config_updates,omitempty"` + // Pagination metadata for this response. + // (-- api-linter: core::0132::response-unknown-fields=disabled + // + // aip.dev/not-precedent: We need this field for pagination. --) + Pagination *apiv1.PageBasedPaginationResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *ListDataServiceDeploymentConfigUpdatesResponse) Reset() { + *x = ListDataServiceDeploymentConfigUpdatesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListDataServiceDeploymentConfigUpdatesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListDataServiceDeploymentConfigUpdatesResponse) ProtoMessage() {} + +func (x *ListDataServiceDeploymentConfigUpdatesResponse) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListDataServiceDeploymentConfigUpdatesResponse.ProtoReflect.Descriptor instead. +func (*ListDataServiceDeploymentConfigUpdatesResponse) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_rawDescGZIP(), []int{3} +} + +func (x *ListDataServiceDeploymentConfigUpdatesResponse) GetDataServiceDeploymentConfigUpdates() []*DataServiceDeploymentConfigUpdate { + if x != nil { + return x.DataServiceDeploymentConfigUpdates + } + return nil +} + +func (x *ListDataServiceDeploymentConfigUpdatesResponse) GetPagination() *apiv1.PageBasedPaginationResponse { + if x != nil { + return x.Pagination + } + return nil +} + +// RetryDataServiceDeploymentConfigUpdateRequest is the request for RetryDataServiceDeploymentConfigUpdate. +type RetryDataServiceDeploymentConfigUpdateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // UID of the DataService deployment config update. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *RetryDataServiceDeploymentConfigUpdateRequest) Reset() { + *x = RetryDataServiceDeploymentConfigUpdateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RetryDataServiceDeploymentConfigUpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RetryDataServiceDeploymentConfigUpdateRequest) ProtoMessage() {} + +func (x *RetryDataServiceDeploymentConfigUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RetryDataServiceDeploymentConfigUpdateRequest.ProtoReflect.Descriptor instead. +func (*RetryDataServiceDeploymentConfigUpdateRequest) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_rawDescGZIP(), []int{4} +} + +func (x *RetryDataServiceDeploymentConfigUpdateRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +// DataServiceDeploymentConfigUpdate represents a DataService deployment config update resource. +type DataServiceDeploymentConfigUpdate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Metadata of the DataService deployment config update request. + Meta *apiv1.Meta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + // Config of the DataService deployment for which config update is requested. + Config *Config `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` + // Status of the DataService deployment config update. + Status *Status `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *DataServiceDeploymentConfigUpdate) Reset() { + *x = DataServiceDeploymentConfigUpdate{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DataServiceDeploymentConfigUpdate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DataServiceDeploymentConfigUpdate) ProtoMessage() {} + +func (x *DataServiceDeploymentConfigUpdate) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DataServiceDeploymentConfigUpdate.ProtoReflect.Descriptor instead. +func (*DataServiceDeploymentConfigUpdate) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_rawDescGZIP(), []int{5} +} + +func (x *DataServiceDeploymentConfigUpdate) GetMeta() *apiv1.Meta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *DataServiceDeploymentConfigUpdate) GetConfig() *Config { + if x != nil { + return x.Config + } + return nil +} + +func (x *DataServiceDeploymentConfigUpdate) GetStatus() *Status { + if x != nil { + return x.Status + } + return nil +} + +// Config of the desired DataService deployment configuration. +type Config struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Metadata of the DataService deployment resource. + DataServiceDeploymentMeta *apiv1.Meta `protobuf:"bytes,1,opt,name=data_service_deployment_meta,json=dataServiceDeploymentMeta,proto3" json:"data_service_deployment_meta,omitempty"` + // DataService config represents desired DataService Deployment Configuration. + DataServiceDeploymentConfig *apiv11.Config `protobuf:"bytes,2,opt,name=data_service_deployment_config,json=dataServiceDeploymentConfig,proto3" json:"data_service_deployment_config,omitempty"` +} + +func (x *Config) Reset() { + *x = Config{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Config) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Config) ProtoMessage() {} + +func (x *Config) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Config.ProtoReflect.Descriptor instead. +func (*Config) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_rawDescGZIP(), []int{6} +} + +func (x *Config) GetDataServiceDeploymentMeta() *apiv1.Meta { + if x != nil { + return x.DataServiceDeploymentMeta + } + return nil +} + +func (x *Config) GetDataServiceDeploymentConfig() *apiv11.Config { + if x != nil { + return x.DataServiceDeploymentConfig + } + return nil +} + +// Status of the DataService deployment config update. +type Status struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Error Code is a short string that represents the error. + ErrorCode string `protobuf:"bytes,1,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"` + // Error Message is a description of the error. + ErrorMessage string `protobuf:"bytes,2,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` + // Number of times the DataService config update has been retried. + RetryCount int32 `protobuf:"varint,3,opt,name=retry_count,json=retryCount,proto3" json:"retry_count,omitempty"` + // Phase of the DataService deployment config update. + Phase Status_Phase `protobuf:"varint,4,opt,name=phase,proto3,enum=public.portworx.pds.dataservicedeploymentconfigupdate.v1.Status_Phase" json:"phase,omitempty"` +} + +func (x *Status) Reset() { + *x = Status{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Status) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Status) ProtoMessage() {} + +func (x *Status) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Status.ProtoReflect.Descriptor instead. +func (*Status) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_rawDescGZIP(), []int{7} +} + +func (x *Status) GetErrorCode() string { + if x != nil { + return x.ErrorCode + } + return "" +} + +func (x *Status) GetErrorMessage() string { + if x != nil { + return x.ErrorMessage + } + return "" +} + +func (x *Status) GetRetryCount() int32 { + if x != nil { + return x.RetryCount + } + return 0 +} + +func (x *Status) GetPhase() Status_Phase { + if x != nil { + return x.Phase + } + return Status_PHASE_UNSPECIFIED +} + +var File_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto protoreflect.FileDescriptor + +var file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_rawDesc = []byte{ + 0x0a, 0x63, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x78, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x64, 0x61, + 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x38, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, + 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x1a, + 0x27, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, + 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x6d, 0x65, + 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, + 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, + 0x69, 0x76, 0x31, 0x2f, 0x73, 0x6f, 0x72, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x4b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, + 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, + 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe0, 0x01, 0x0a, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0xad, 0x01, 0x0a, 0x25, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x5b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x21, 0x64, 0x61, + 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, + 0x3d, 0x0a, 0x2b, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x82, + 0x02, 0x0a, 0x2d, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x40, 0x0a, 0x1a, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x17, 0x64, 0x61, 0x74, 0x61, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x12, 0x33, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x72, + 0x74, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x5a, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, + 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0xba, 0x02, 0x0a, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xaf, 0x01, 0x0a, 0x26, 0x64, 0x61, 0x74, 0x61, 0x5f, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x5b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, + 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x52, 0x22, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, + 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0x3f, 0x0a, 0x2d, 0x52, 0x65, 0x74, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x8c, 0x02, 0x0a, 0x21, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x58, 0x0a, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, + 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x58, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, + 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, + 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x22, 0xe5, 0x01, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x60, 0x0a, 0x1c, 0x64, + 0x61, 0x74, 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, + 0x74, 0x61, 0x52, 0x19, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x79, 0x0a, + 0x1e, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x1b, 0x64, 0x61, 0x74, + 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xb1, 0x02, 0x0a, 0x06, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, + 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x74, 0x72, 0x79, + 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, + 0x74, 0x72, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x5c, 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x46, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, + 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x52, + 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x22, 0x64, 0x0a, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, + 0x15, 0x0a, 0x11, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, + 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x51, 0x55, 0x45, 0x55, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0f, + 0x0a, 0x0b, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x03, 0x12, + 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0c, + 0x0a, 0x08, 0x52, 0x45, 0x51, 0x55, 0x45, 0x55, 0x45, 0x44, 0x10, 0x05, 0x32, 0xed, 0x0a, 0x0a, + 0x28, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xb5, 0x03, 0x0a, 0x27, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x68, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x5b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0xc2, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0xbb, 0x01, 0x3a, 0x25, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x1a, 0x91, 0x01, + 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, + 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x64, 0x61, 0x74, + 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x75, 0x69, 0x64, 0x7d, 0x2f, 0x64, + 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x73, 0x12, 0xa3, 0x02, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x65, 0x2e, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, + 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x5b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, + 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x37, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, + 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xaf, 0x02, 0x0a, 0x26, 0x4c, 0x69, 0x73, 0x74, + 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x73, 0x12, 0x67, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, + 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x68, 0x2e, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, + 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, + 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0xb0, 0x02, 0x0a, 0x26, 0x52, 0x65, + 0x74, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x12, 0x67, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, + 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x74, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x5b, 0x2e, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, + 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x3a, 0x3a, 0x01, 0x2a, 0x22, 0x35, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x64, + 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x72, 0x65, 0x74, 0x72, 0x79, 0x42, 0xdf, 0x01, 0x0a, + 0x3c, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, + 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x26, 0x44, + 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x75, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, + 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, + 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x64, 0x61, 0x74, + 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_rawDescOnce sync.Once + file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_rawDescData = file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_rawDesc +) + +func file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_rawDescGZIP() []byte { + file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_rawDescOnce.Do(func() { + file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_rawDescData = protoimpl.X.CompressGZIP(file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_rawDescData) + }) + return file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_rawDescData +} + +var file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_goTypes = []interface{}{ + (Status_Phase)(0), // 0: public.portworx.pds.dataservicedeploymentconfigupdate.v1.Status.Phase + (*CreateDataServiceDeploymentConfigUpdateRequest)(nil), // 1: public.portworx.pds.dataservicedeploymentconfigupdate.v1.CreateDataServiceDeploymentConfigUpdateRequest + (*GetDataServiceDeploymentConfigUpdateRequest)(nil), // 2: public.portworx.pds.dataservicedeploymentconfigupdate.v1.GetDataServiceDeploymentConfigUpdateRequest + (*ListDataServiceDeploymentConfigUpdatesRequest)(nil), // 3: public.portworx.pds.dataservicedeploymentconfigupdate.v1.ListDataServiceDeploymentConfigUpdatesRequest + (*ListDataServiceDeploymentConfigUpdatesResponse)(nil), // 4: public.portworx.pds.dataservicedeploymentconfigupdate.v1.ListDataServiceDeploymentConfigUpdatesResponse + (*RetryDataServiceDeploymentConfigUpdateRequest)(nil), // 5: public.portworx.pds.dataservicedeploymentconfigupdate.v1.RetryDataServiceDeploymentConfigUpdateRequest + (*DataServiceDeploymentConfigUpdate)(nil), // 6: public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdate + (*Config)(nil), // 7: public.portworx.pds.dataservicedeploymentconfigupdate.v1.Config + (*Status)(nil), // 8: public.portworx.pds.dataservicedeploymentconfigupdate.v1.Status + (*apiv1.Sort)(nil), // 9: public.portworx.common.v1.Sort + (*apiv1.PageBasedPaginationRequest)(nil), // 10: public.portworx.common.v1.PageBasedPaginationRequest + (*apiv1.PageBasedPaginationResponse)(nil), // 11: public.portworx.common.v1.PageBasedPaginationResponse + (*apiv1.Meta)(nil), // 12: public.portworx.common.v1.Meta + (*apiv11.Config)(nil), // 13: public.portworx.pds.dataservicedeployment.v1.Config +} +var file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_depIdxs = []int32{ + 6, // 0: public.portworx.pds.dataservicedeploymentconfigupdate.v1.CreateDataServiceDeploymentConfigUpdateRequest.data_service_deployment_config_update:type_name -> public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdate + 9, // 1: public.portworx.pds.dataservicedeploymentconfigupdate.v1.ListDataServiceDeploymentConfigUpdatesRequest.sort:type_name -> public.portworx.common.v1.Sort + 10, // 2: public.portworx.pds.dataservicedeploymentconfigupdate.v1.ListDataServiceDeploymentConfigUpdatesRequest.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationRequest + 6, // 3: public.portworx.pds.dataservicedeploymentconfigupdate.v1.ListDataServiceDeploymentConfigUpdatesResponse.data_service_deployment_config_updates:type_name -> public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdate + 11, // 4: public.portworx.pds.dataservicedeploymentconfigupdate.v1.ListDataServiceDeploymentConfigUpdatesResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse + 12, // 5: public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdate.meta:type_name -> public.portworx.common.v1.Meta + 7, // 6: public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdate.config:type_name -> public.portworx.pds.dataservicedeploymentconfigupdate.v1.Config + 8, // 7: public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdate.status:type_name -> public.portworx.pds.dataservicedeploymentconfigupdate.v1.Status + 12, // 8: public.portworx.pds.dataservicedeploymentconfigupdate.v1.Config.data_service_deployment_meta:type_name -> public.portworx.common.v1.Meta + 13, // 9: public.portworx.pds.dataservicedeploymentconfigupdate.v1.Config.data_service_deployment_config:type_name -> public.portworx.pds.dataservicedeployment.v1.Config + 0, // 10: public.portworx.pds.dataservicedeploymentconfigupdate.v1.Status.phase:type_name -> public.portworx.pds.dataservicedeploymentconfigupdate.v1.Status.Phase + 1, // 11: public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdateService.CreateDataServiceDeploymentConfigUpdate:input_type -> public.portworx.pds.dataservicedeploymentconfigupdate.v1.CreateDataServiceDeploymentConfigUpdateRequest + 2, // 12: public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdateService.GetDataServiceDeploymentConfigUpdate:input_type -> public.portworx.pds.dataservicedeploymentconfigupdate.v1.GetDataServiceDeploymentConfigUpdateRequest + 3, // 13: public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdateService.ListDataServiceDeploymentConfigUpdates:input_type -> public.portworx.pds.dataservicedeploymentconfigupdate.v1.ListDataServiceDeploymentConfigUpdatesRequest + 5, // 14: public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdateService.RetryDataServiceDeploymentConfigUpdate:input_type -> public.portworx.pds.dataservicedeploymentconfigupdate.v1.RetryDataServiceDeploymentConfigUpdateRequest + 6, // 15: public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdateService.CreateDataServiceDeploymentConfigUpdate:output_type -> public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdate + 6, // 16: public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdateService.GetDataServiceDeploymentConfigUpdate:output_type -> public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdate + 4, // 17: public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdateService.ListDataServiceDeploymentConfigUpdates:output_type -> public.portworx.pds.dataservicedeploymentconfigupdate.v1.ListDataServiceDeploymentConfigUpdatesResponse + 6, // 18: public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdateService.RetryDataServiceDeploymentConfigUpdate:output_type -> public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdate + 15, // [15:19] is the sub-list for method output_type + 11, // [11:15] is the sub-list for method input_type + 11, // [11:11] is the sub-list for extension type_name + 11, // [11:11] is the sub-list for extension extendee + 0, // [0:11] is the sub-list for field type_name +} + +func init() { + file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_init() +} +func file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_init() { + if File_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateDataServiceDeploymentConfigUpdateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetDataServiceDeploymentConfigUpdateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListDataServiceDeploymentConfigUpdatesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListDataServiceDeploymentConfigUpdatesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RetryDataServiceDeploymentConfigUpdateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DataServiceDeploymentConfigUpdate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Config); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Status); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_rawDesc, + NumEnums: 1, + NumMessages: 8, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_goTypes, + DependencyIndexes: file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_depIdxs, + EnumInfos: file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_enumTypes, + MessageInfos: file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_msgTypes, + }.Build() + File_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto = out.File + file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_rawDesc = nil + file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_goTypes = nil + file_public_portworx_pds_dataservicedeploymentconfigupdate_apiv1_dataservicedeploymentconfigupdate_proto_depIdxs = nil +} diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.pb.gw.go b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.pb.gw.go new file mode 100644 index 000000000..f40d8eed3 --- /dev/null +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.pb.gw.go @@ -0,0 +1,498 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto + +/* +Package dataservicedeploymentconfigupdate is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package dataservicedeploymentconfigupdate + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_DataServiceDeploymentConfigUpdateService_CreateDataServiceDeploymentConfigUpdate_0(ctx context.Context, marshaler runtime.Marshaler, client DataServiceDeploymentConfigUpdateServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateDataServiceDeploymentConfigUpdateRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.DataServiceDeploymentConfigUpdate); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["data_service_deployment_config_update.config.data_service_deployment_meta.uid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "data_service_deployment_config_update.config.data_service_deployment_meta.uid") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "data_service_deployment_config_update.config.data_service_deployment_meta.uid", val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "data_service_deployment_config_update.config.data_service_deployment_meta.uid", err) + } + + msg, err := client.CreateDataServiceDeploymentConfigUpdate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_DataServiceDeploymentConfigUpdateService_CreateDataServiceDeploymentConfigUpdate_0(ctx context.Context, marshaler runtime.Marshaler, server DataServiceDeploymentConfigUpdateServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateDataServiceDeploymentConfigUpdateRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.DataServiceDeploymentConfigUpdate); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["data_service_deployment_config_update.config.data_service_deployment_meta.uid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "data_service_deployment_config_update.config.data_service_deployment_meta.uid") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "data_service_deployment_config_update.config.data_service_deployment_meta.uid", val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "data_service_deployment_config_update.config.data_service_deployment_meta.uid", err) + } + + msg, err := server.CreateDataServiceDeploymentConfigUpdate(ctx, &protoReq) + return msg, metadata, err + +} + +func request_DataServiceDeploymentConfigUpdateService_GetDataServiceDeploymentConfigUpdate_0(ctx context.Context, marshaler runtime.Marshaler, client DataServiceDeploymentConfigUpdateServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetDataServiceDeploymentConfigUpdateRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.GetDataServiceDeploymentConfigUpdate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_DataServiceDeploymentConfigUpdateService_GetDataServiceDeploymentConfigUpdate_0(ctx context.Context, marshaler runtime.Marshaler, server DataServiceDeploymentConfigUpdateServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetDataServiceDeploymentConfigUpdateRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.GetDataServiceDeploymentConfigUpdate(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_DataServiceDeploymentConfigUpdateService_ListDataServiceDeploymentConfigUpdates_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_DataServiceDeploymentConfigUpdateService_ListDataServiceDeploymentConfigUpdates_0(ctx context.Context, marshaler runtime.Marshaler, client DataServiceDeploymentConfigUpdateServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListDataServiceDeploymentConfigUpdatesRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_DataServiceDeploymentConfigUpdateService_ListDataServiceDeploymentConfigUpdates_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListDataServiceDeploymentConfigUpdates(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_DataServiceDeploymentConfigUpdateService_ListDataServiceDeploymentConfigUpdates_0(ctx context.Context, marshaler runtime.Marshaler, server DataServiceDeploymentConfigUpdateServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListDataServiceDeploymentConfigUpdatesRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_DataServiceDeploymentConfigUpdateService_ListDataServiceDeploymentConfigUpdates_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListDataServiceDeploymentConfigUpdates(ctx, &protoReq) + return msg, metadata, err + +} + +func request_DataServiceDeploymentConfigUpdateService_RetryDataServiceDeploymentConfigUpdate_0(ctx context.Context, marshaler runtime.Marshaler, client DataServiceDeploymentConfigUpdateServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RetryDataServiceDeploymentConfigUpdateRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.RetryDataServiceDeploymentConfigUpdate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_DataServiceDeploymentConfigUpdateService_RetryDataServiceDeploymentConfigUpdate_0(ctx context.Context, marshaler runtime.Marshaler, server DataServiceDeploymentConfigUpdateServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RetryDataServiceDeploymentConfigUpdateRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.RetryDataServiceDeploymentConfigUpdate(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterDataServiceDeploymentConfigUpdateServiceHandlerServer registers the http handlers for service DataServiceDeploymentConfigUpdateService to "mux". +// UnaryRPC :call DataServiceDeploymentConfigUpdateServiceServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterDataServiceDeploymentConfigUpdateServiceHandlerFromEndpoint instead. +func RegisterDataServiceDeploymentConfigUpdateServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server DataServiceDeploymentConfigUpdateServiceServer) error { + + mux.Handle("PUT", pattern_DataServiceDeploymentConfigUpdateService_CreateDataServiceDeploymentConfigUpdate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdateService/CreateDataServiceDeploymentConfigUpdate", runtime.WithHTTPPathPattern("/pds/v1/dataServiceDeployments/{data_service_deployment_config_update.config.data_service_deployment_meta.uid}/dataServiceDeploymentConfigUpdates")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_DataServiceDeploymentConfigUpdateService_CreateDataServiceDeploymentConfigUpdate_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_DataServiceDeploymentConfigUpdateService_CreateDataServiceDeploymentConfigUpdate_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_DataServiceDeploymentConfigUpdateService_GetDataServiceDeploymentConfigUpdate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdateService/GetDataServiceDeploymentConfigUpdate", runtime.WithHTTPPathPattern("/pds/v1/dataServiceDeploymentConfigUpdates/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_DataServiceDeploymentConfigUpdateService_GetDataServiceDeploymentConfigUpdate_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_DataServiceDeploymentConfigUpdateService_GetDataServiceDeploymentConfigUpdate_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_DataServiceDeploymentConfigUpdateService_ListDataServiceDeploymentConfigUpdates_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdateService/ListDataServiceDeploymentConfigUpdates", runtime.WithHTTPPathPattern("/pds/v1/dataServiceDeploymentConfigUpdates")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_DataServiceDeploymentConfigUpdateService_ListDataServiceDeploymentConfigUpdates_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_DataServiceDeploymentConfigUpdateService_ListDataServiceDeploymentConfigUpdates_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_DataServiceDeploymentConfigUpdateService_RetryDataServiceDeploymentConfigUpdate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdateService/RetryDataServiceDeploymentConfigUpdate", runtime.WithHTTPPathPattern("/pds/v1/dataServiceDeploymentConfigUpdates/{id}:retry")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_DataServiceDeploymentConfigUpdateService_RetryDataServiceDeploymentConfigUpdate_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_DataServiceDeploymentConfigUpdateService_RetryDataServiceDeploymentConfigUpdate_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterDataServiceDeploymentConfigUpdateServiceHandlerFromEndpoint is same as RegisterDataServiceDeploymentConfigUpdateServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterDataServiceDeploymentConfigUpdateServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.DialContext(ctx, endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterDataServiceDeploymentConfigUpdateServiceHandler(ctx, mux, conn) +} + +// RegisterDataServiceDeploymentConfigUpdateServiceHandler registers the http handlers for service DataServiceDeploymentConfigUpdateService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterDataServiceDeploymentConfigUpdateServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterDataServiceDeploymentConfigUpdateServiceHandlerClient(ctx, mux, NewDataServiceDeploymentConfigUpdateServiceClient(conn)) +} + +// RegisterDataServiceDeploymentConfigUpdateServiceHandlerClient registers the http handlers for service DataServiceDeploymentConfigUpdateService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "DataServiceDeploymentConfigUpdateServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "DataServiceDeploymentConfigUpdateServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "DataServiceDeploymentConfigUpdateServiceClient" to call the correct interceptors. +func RegisterDataServiceDeploymentConfigUpdateServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client DataServiceDeploymentConfigUpdateServiceClient) error { + + mux.Handle("PUT", pattern_DataServiceDeploymentConfigUpdateService_CreateDataServiceDeploymentConfigUpdate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdateService/CreateDataServiceDeploymentConfigUpdate", runtime.WithHTTPPathPattern("/pds/v1/dataServiceDeployments/{data_service_deployment_config_update.config.data_service_deployment_meta.uid}/dataServiceDeploymentConfigUpdates")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_DataServiceDeploymentConfigUpdateService_CreateDataServiceDeploymentConfigUpdate_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_DataServiceDeploymentConfigUpdateService_CreateDataServiceDeploymentConfigUpdate_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_DataServiceDeploymentConfigUpdateService_GetDataServiceDeploymentConfigUpdate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdateService/GetDataServiceDeploymentConfigUpdate", runtime.WithHTTPPathPattern("/pds/v1/dataServiceDeploymentConfigUpdates/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_DataServiceDeploymentConfigUpdateService_GetDataServiceDeploymentConfigUpdate_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_DataServiceDeploymentConfigUpdateService_GetDataServiceDeploymentConfigUpdate_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_DataServiceDeploymentConfigUpdateService_ListDataServiceDeploymentConfigUpdates_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdateService/ListDataServiceDeploymentConfigUpdates", runtime.WithHTTPPathPattern("/pds/v1/dataServiceDeploymentConfigUpdates")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_DataServiceDeploymentConfigUpdateService_ListDataServiceDeploymentConfigUpdates_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_DataServiceDeploymentConfigUpdateService_ListDataServiceDeploymentConfigUpdates_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_DataServiceDeploymentConfigUpdateService_RetryDataServiceDeploymentConfigUpdate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdateService/RetryDataServiceDeploymentConfigUpdate", runtime.WithHTTPPathPattern("/pds/v1/dataServiceDeploymentConfigUpdates/{id}:retry")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_DataServiceDeploymentConfigUpdateService_RetryDataServiceDeploymentConfigUpdate_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_DataServiceDeploymentConfigUpdateService_RetryDataServiceDeploymentConfigUpdate_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_DataServiceDeploymentConfigUpdateService_CreateDataServiceDeploymentConfigUpdate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"pds", "v1", "dataServiceDeployments", "data_service_deployment_config_update.config.data_service_deployment_meta.uid", "dataServiceDeploymentConfigUpdates"}, "")) + + pattern_DataServiceDeploymentConfigUpdateService_GetDataServiceDeploymentConfigUpdate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"pds", "v1", "dataServiceDeploymentConfigUpdates", "id"}, "")) + + pattern_DataServiceDeploymentConfigUpdateService_ListDataServiceDeploymentConfigUpdates_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"pds", "v1", "dataServiceDeploymentConfigUpdates"}, "")) + + pattern_DataServiceDeploymentConfigUpdateService_RetryDataServiceDeploymentConfigUpdate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"pds", "v1", "dataServiceDeploymentConfigUpdates", "id"}, "retry")) +) + +var ( + forward_DataServiceDeploymentConfigUpdateService_CreateDataServiceDeploymentConfigUpdate_0 = runtime.ForwardResponseMessage + + forward_DataServiceDeploymentConfigUpdateService_GetDataServiceDeploymentConfigUpdate_0 = runtime.ForwardResponseMessage + + forward_DataServiceDeploymentConfigUpdateService_ListDataServiceDeploymentConfigUpdates_0 = runtime.ForwardResponseMessage + + forward_DataServiceDeploymentConfigUpdateService_RetryDataServiceDeploymentConfigUpdate_0 = runtime.ForwardResponseMessage +) diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.pb.md b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.pb.md new file mode 100644 index 000000000..b4bdb3c86 --- /dev/null +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.pb.md @@ -0,0 +1,202 @@ +[//]: # (Generated by grpc-framework using protoc-gen-doc) +[//]: # (Do not edit) + + +# dataservicedeploymentconfigupdate + +## Contents + +- Services + - [DataServiceDeploymentConfigUpdateService](#servicepublicportworxpdsdataservicedeploymentconfigupdatev1dataservicedeploymentconfigupdateservice) + + + +- Messages + - [Config](#config) + - [CreateDataServiceDeploymentConfigUpdateRequest](#createdataservicedeploymentconfigupdaterequest) + - [DataServiceDeploymentConfigUpdate](#dataservicedeploymentconfigupdate) + - [GetDataServiceDeploymentConfigUpdateRequest](#getdataservicedeploymentconfigupdaterequest) + - [ListDataServiceDeploymentConfigUpdatesRequest](#listdataservicedeploymentconfigupdatesrequest) + - [ListDataServiceDeploymentConfigUpdatesResponse](#listdataservicedeploymentconfigupdatesresponse) + - [RetryDataServiceDeploymentConfigUpdateRequest](#retrydataservicedeploymentconfigupdaterequest) + - [Status](#status) + + + + +- [Scalar Value Types](#scalar-value-types) + + + + +## DataServiceDeploymentConfigUpdateService {#servicepublicportworxpdsdataservicedeploymentconfigupdatev1dataservicedeploymentconfigupdateservice} +DataServiceDeploymentConfigUpdateService provides APIs to interact with the data service deployment config update. + +### CreateDataServiceDeploymentConfigUpdate {#methodpublicportworxpdsdataservicedeploymentconfigupdatev1dataservicedeploymentconfigupdateservicecreatedataservicedeploymentconfigupdate} + +> **rpc** CreateDataServiceDeploymentConfigUpdate([CreateDataServiceDeploymentConfigUpdateRequest](#createdataservicedeploymentconfigupdaterequest)) + [DataServiceDeploymentConfigUpdate](#dataservicedeploymentconfigupdate) + +CreateDataServiceDeploymentConfigUpdate API creates config update for deployment. +(-- api-linter: core::0133::http-method=disabled + aip.dev/not-precedent: We need to do this because here we are actually updating deployment config. --) +### GetDataServiceDeploymentConfigUpdate {#methodpublicportworxpdsdataservicedeploymentconfigupdatev1dataservicedeploymentconfigupdateservicegetdataservicedeploymentconfigupdate} + +> **rpc** GetDataServiceDeploymentConfigUpdate([GetDataServiceDeploymentConfigUpdateRequest](#getdataservicedeploymentconfigupdaterequest)) + [DataServiceDeploymentConfigUpdate](#dataservicedeploymentconfigupdate) + +GetDataServiceDeploymentConfigUpdate API returns a DataService deployment config update by id. +### ListDataServiceDeploymentConfigUpdates {#methodpublicportworxpdsdataservicedeploymentconfigupdatev1dataservicedeploymentconfigupdateservicelistdataservicedeploymentconfigupdates} + +> **rpc** ListDataServiceDeploymentConfigUpdates([ListDataServiceDeploymentConfigUpdatesRequest](#listdataservicedeploymentconfigupdatesrequest)) + [ListDataServiceDeploymentConfigUpdatesResponse](#listdataservicedeploymentconfigupdatesresponse) + +ListDataServiceDeploymentConfigUpdates API returns a list of data service deployment config updates. +### RetryDataServiceDeploymentConfigUpdate {#methodpublicportworxpdsdataservicedeploymentconfigupdatev1dataservicedeploymentconfigupdateserviceretrydataservicedeploymentconfigupdate} + +> **rpc** RetryDataServiceDeploymentConfigUpdate([RetryDataServiceDeploymentConfigUpdateRequest](#retrydataservicedeploymentconfigupdaterequest)) + [DataServiceDeploymentConfigUpdate](#dataservicedeploymentconfigupdate) + +RetryDataServiceDeploymentConfigUpdate API retries a data service deployment config update. + + + +## Messages + + +### Config {#config} +Config of the desired DataService deployment configuration. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| data_service_deployment_meta | [ public.portworx.common.v1.Meta](#publicportworxcommonv1meta) | Metadata of the DataService deployment resource. | +| data_service_deployment_config | [ public.portworx.pds.dataservicedeployment.v1.Config](#publicportworxpdsdataservicedeploymentv1config) | DataService config represents desired DataService Deployment Configuration. | + + + + +### CreateDataServiceDeploymentConfigUpdateRequest {#createdataservicedeploymentconfigupdaterequest} +CreateDataServiceDeploymentConfigUpdateRequest is the request to create a data service deployment config update record containing desired state of dataservice deployment. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| data_service_deployment_config_update | [ DataServiceDeploymentConfigUpdate](#dataservicedeploymentconfigupdate) | DataServiceDeploymentConfigUpdate of the DataService config deployment update request. | + + + + +### DataServiceDeploymentConfigUpdate {#dataservicedeploymentconfigupdate} +DataServiceDeploymentConfigUpdate represents a DataService deployment config update resource. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| meta | [ public.portworx.common.v1.Meta](#publicportworxcommonv1meta) | Metadata of the DataService deployment config update request. | +| config | [ Config](#config) | Config of the DataService deployment for which config update is requested. | +| status | [ Status](#status) | Status of the DataService deployment config update. | + + + + +### GetDataServiceDeploymentConfigUpdateRequest {#getdataservicedeploymentconfigupdaterequest} +GetDataServiceDeploymentConfigUpdateRequest is the request for GetDataServiceDeploymentConfigUpdate. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| id | [ string](#string) | UID of the DataService deployment config update. | + + + + +### ListDataServiceDeploymentConfigUpdatesRequest {#listdataservicedeploymentconfigupdatesrequest} +ListDataServiceDeploymentConfigUpdatesRequest is the request for ListDataServiceDeploymentConfigUpdates. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| data_service_deployment_id | [ string](#string) | UID of the DataService Deployment. | +| sort | [ public.portworx.common.v1.Sort](#publicportworxcommonv1sort) | Sorting details using which requested list to be sorted. | +| pagination | [ public.portworx.common.v1.PageBasedPaginationRequest](#publicportworxcommonv1pagebasedpaginationrequest) | Pagination parameters for listing data service deployment config updates. | + + + + +### ListDataServiceDeploymentConfigUpdatesResponse {#listdataservicedeploymentconfigupdatesresponse} +ListDataServiceDeploymentConfigUpdatesResponse is the response for ListDataServiceDeploymentConfigUpdates. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| data_service_deployment_config_updates | [repeated DataServiceDeploymentConfigUpdate](#dataservicedeploymentconfigupdate) | List of DataService deployment config updates. | +| pagination | [ public.portworx.common.v1.PageBasedPaginationResponse](#publicportworxcommonv1pagebasedpaginationresponse) | Pagination metadata for this response. (-- api-linter: core::0132::response-unknown-fields=disabled aip.dev/not-precedent: We need this field for pagination. --) | + + + + +### RetryDataServiceDeploymentConfigUpdateRequest {#retrydataservicedeploymentconfigupdaterequest} +RetryDataServiceDeploymentConfigUpdateRequest is the request for RetryDataServiceDeploymentConfigUpdate. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| id | [ string](#string) | UID of the DataService deployment config update. | + + + + +### Status {#status} +Status of the DataService deployment config update. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| error_code | [ string](#string) | Error Code is a short string that represents the error. | +| error_message | [ string](#string) | Error Message is a description of the error. | +| retry_count | [ int32](#int32) | Number of times the DataService config update has been retried. | +| phase | [ Status.Phase](#statusphase) | Phase of the DataService deployment config update. | + + + + +## Enums + + +### Status.Phase {#statusphase} +Enum for Phase of the DataService deployment config update. + +| Name | Number | Description | +| ---- | ------ | ----------- | +| PHASE_UNSPECIFIED | 0 | Phase is unspecified. | +| FAILED | 1 | DataService deployment config update failed. | +| QUEUED | 2 | DataService deployment config update is queued. | +| IN_PROGRESS | 3 | DataService deployment config update is in progress. | +| COMPLETED | 4 | DataService deployment config update is completed. | +| REQUEUED | 5 | DataService config update is requeued. | + + + + + +## Scalar Value Types + +| .proto Type | Notes | C++ Type | Java Type | Python Type | +| ----------- | ----- | -------- | --------- | ----------- | +|

double | | double | double | float | +|

float | | float | float | float | +|

int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | +|

int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | +|

uint32 | Uses variable-length encoding. | uint32 | int | int/long | +|

uint64 | Uses variable-length encoding. | uint64 | long | int/long | +|

sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | +|

sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | +|

fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int | +|

fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long | +|

sfixed32 | Always four bytes. | int32 | int | int | +|

sfixed64 | Always eight bytes. | int64 | long | int/long | +|

bool | | bool | boolean | boolean | +|

string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | +|

bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | + diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto new file mode 100644 index 000000000..fa5347efe --- /dev/null +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto @@ -0,0 +1,153 @@ +// Please use the following editor setup for this file: +// Tab size=2; Tabs as spaces; Clean up trailing whitepsace +// +// In vim add: au FileType proto setl sw=2 ts=2 expandtab list +// +// In vscode install vscode-proto3 extension and add this to your settings.json: +// "[proto3]": { +// "editor.tabSize": 2, +// "editor.insertSpaces": true, +// "editor.rulers": [80], +// "editor.detectIndentation": true, +// "files.trimTrailingWhitespace": true +// } +// +syntax = "proto3"; + +package public.portworx.pds.dataservicedeploymentconfigupdate.v1; + +import "public/portworx/common/apiv1/meta.proto"; +import "public/portworx/common/apiv1/pagination.proto"; +import "google/api/annotations.proto"; +import "public/portworx/common/apiv1/sort.proto"; +import "google/api/field_behavior.proto"; +import "public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto"; + +option go_package = "github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1;dataservicedeploymentconfigupdate"; +option java_multiple_files = true; +option java_package = "com.public.portworx.pds.dataservicedeploymentconfigupdate.v1"; +option java_outer_classname = "DataServiceDeploymentConfigUpdateProto"; + +// DataServiceDeploymentConfigUpdateService provides APIs to interact with the data service deployment config update. +service DataServiceDeploymentConfigUpdateService { + // CreateDataServiceDeploymentConfigUpdate API creates config update for deployment. + // (-- api-linter: core::0133::http-method=disabled + // aip.dev/not-precedent: We need to do this because here we are actually updating deployment config. --) + rpc CreateDataServiceDeploymentConfigUpdate(CreateDataServiceDeploymentConfigUpdateRequest) + returns (DataServiceDeploymentConfigUpdate) { + option (google.api.http) = { + put: "/pds/v1/dataServiceDeployments/{data_service_deployment_config_update.config.data_service_deployment_meta.uid}/dataServiceDeploymentConfigUpdates" + body: "data_service_deployment_config_update" + }; + } + + // GetDataServiceDeploymentConfigUpdate API returns a DataService deployment config update by id. + rpc GetDataServiceDeploymentConfigUpdate(GetDataServiceDeploymentConfigUpdateRequest) + returns (DataServiceDeploymentConfigUpdate) { + option (google.api.http) = { + get: "/pds/v1/dataServiceDeploymentConfigUpdates/{id}" + }; + } + + // ListDataServiceDeploymentConfigUpdates API returns a list of data service deployment config updates. + rpc ListDataServiceDeploymentConfigUpdates(ListDataServiceDeploymentConfigUpdatesRequest) + returns (ListDataServiceDeploymentConfigUpdatesResponse) { + option (google.api.http) = { + get: "/pds/v1/dataServiceDeploymentConfigUpdates" + }; + } + + // RetryDataServiceDeploymentConfigUpdate API retries a data service deployment config update. + rpc RetryDataServiceDeploymentConfigUpdate(RetryDataServiceDeploymentConfigUpdateRequest) + returns (DataServiceDeploymentConfigUpdate) { + option (google.api.http) = { + post: "/pds/v1/dataServiceDeploymentConfigUpdates/{id}:retry" + body: "*" + }; + } +} + +// CreateDataServiceDeploymentConfigUpdateRequest is the request to create a data service deployment config update record containing desired state of dataservice deployment. +message CreateDataServiceDeploymentConfigUpdateRequest { + // DataServiceDeploymentConfigUpdate of the DataService config deployment update request. + DataServiceDeploymentConfigUpdate data_service_deployment_config_update = 1; +} + +// GetDataServiceDeploymentConfigUpdateRequest is the request for GetDataServiceDeploymentConfigUpdate. +message GetDataServiceDeploymentConfigUpdateRequest { + // UID of the DataService deployment config update. + string id = 1; +} + +// ListDataServiceDeploymentConfigUpdatesRequest is the request for ListDataServiceDeploymentConfigUpdates. +message ListDataServiceDeploymentConfigUpdatesRequest { + // UID of the DataService Deployment. + string data_service_deployment_id = 1 [(google.api.field_behavior) = OPTIONAL]; + // Sorting details using which requested list to be sorted. + public.portworx.common.v1.Sort sort = 2; + // Pagination parameters for listing data service deployment config updates. + public.portworx.common.v1.PageBasedPaginationRequest pagination = 3 [(google.api.field_behavior) = OPTIONAL]; +} + +// ListDataServiceDeploymentConfigUpdatesResponse is the response for ListDataServiceDeploymentConfigUpdates. +message ListDataServiceDeploymentConfigUpdatesResponse { + // List of DataService deployment config updates. + repeated DataServiceDeploymentConfigUpdate data_service_deployment_config_updates = 1; + // Pagination metadata for this response. + // (-- api-linter: core::0132::response-unknown-fields=disabled + // aip.dev/not-precedent: We need this field for pagination. --) + public.portworx.common.v1.PageBasedPaginationResponse pagination = 2; +} + +// RetryDataServiceDeploymentConfigUpdateRequest is the request for RetryDataServiceDeploymentConfigUpdate. +message RetryDataServiceDeploymentConfigUpdateRequest { + // UID of the DataService deployment config update. + string id = 1; +} + +// DataServiceDeploymentConfigUpdate represents a DataService deployment config update resource. +message DataServiceDeploymentConfigUpdate { + // Metadata of the DataService deployment config update request. + portworx.common.v1.Meta meta = 1; + // Config of the DataService deployment for which config update is requested. + Config config = 2; + // Status of the DataService deployment config update. + Status status = 3; +} + +// Config of the desired DataService deployment configuration. +message Config { + // Metadata of the DataService deployment resource. + portworx.common.v1.Meta data_service_deployment_meta = 1; + // DataService config represents desired DataService Deployment Configuration. + public.portworx.pds.dataservicedeployment.v1.Config data_service_deployment_config = 2; +} + +// Status of the DataService deployment config update. +message Status { + // Error Code is a short string that represents the error. + string error_code = 1; + // Error Message is a description of the error. + string error_message = 2; + // Number of times the DataService config update has been retried. + int32 retry_count = 3; + + // Enum for Phase of the DataService deployment config update. + enum Phase { + // Phase is unspecified. + PHASE_UNSPECIFIED = 0; + // DataService deployment config update failed. + FAILED = 1; + // DataService deployment config update is queued. + QUEUED = 2; + // DataService deployment config update is in progress. + IN_PROGRESS = 3; + // DataService deployment config update is completed. + COMPLETED = 4; + // DataService config update is requeued. + REQUEUED = 5; + } + + // Phase of the DataService deployment config update. + Phase phase = 4; +} diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.swagger.json b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.swagger.json similarity index 80% rename from vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.swagger.json rename to vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.swagger.json index 9627bbc75..c8482e31d 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.swagger.json +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.swagger.json @@ -1,26 +1,26 @@ { "openapi": "3.0.0", "info": { - "title": "public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto", + "title": "public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto", "version": "version not set" }, "tags": [ { - "name": "DeploymentConfigUpdateService" + "name": "DataServiceDeploymentConfigUpdateService" } ], "paths": { - "/pds/v1/deploymentConfigUpdates": { + "/pds/v1/dataServiceDeploymentConfigUpdates": { "get": { - "summary": "ListDeploymentConfigUpdates API returns a list of deployment config updates.", - "operationId": "DeploymentConfigUpdateService_ListDeploymentConfigUpdates", + "summary": "ListDataServiceDeploymentConfigUpdates API returns a list of data service deployment config updates.", + "operationId": "DataServiceDeploymentConfigUpdateService_ListDataServiceDeploymentConfigUpdates", "responses": { "200": { "description": "A successful response.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/v1ListDeploymentConfigUpdatesResponse" + "$ref": "#/components/schemas/v1ListDataServiceDeploymentConfigUpdatesResponse" } } } @@ -38,8 +38,8 @@ }, "parameters": [ { - "name": "deploymentId", - "description": "UID of the deployment.", + "name": "dataServiceDeploymentId", + "description": "UID of the DataService Deployment.", "in": "query", "required": false, "schema": { @@ -100,21 +100,21 @@ } ], "tags": [ - "DeploymentConfigUpdateService" + "DataServiceDeploymentConfigUpdateService" ] } }, - "/pds/v1/deploymentConfigUpdates/{id}": { + "/pds/v1/dataServiceDeploymentConfigUpdates/{id}": { "get": { - "summary": "GetDeploymentConfigUpdate API returns a deployment config update by id.", - "operationId": "DeploymentConfigUpdateService_GetDeploymentConfigUpdate", + "summary": "GetDataServiceDeploymentConfigUpdate API returns a DataService deployment config update by id.", + "operationId": "DataServiceDeploymentConfigUpdateService_GetDataServiceDeploymentConfigUpdate", "responses": { "200": { "description": "A successful response.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/v1DeploymentConfigUpdate" + "$ref": "#/components/schemas/v1DataServiceDeploymentConfigUpdate" } } } @@ -133,7 +133,7 @@ "parameters": [ { "name": "id", - "description": "UID of the deployment config update.", + "description": "UID of the DataService deployment config update.", "in": "path", "required": true, "schema": { @@ -142,21 +142,21 @@ } ], "tags": [ - "DeploymentConfigUpdateService" + "DataServiceDeploymentConfigUpdateService" ] } }, - "/pds/v1/deploymentConfigUpdates/{id}:retry": { + "/pds/v1/dataServiceDeploymentConfigUpdates/{id}:retry": { "post": { - "summary": "RetryDeploymentConfigUpdate API retries a deployment config update.", - "operationId": "DeploymentConfigUpdateService_RetryDeploymentConfigUpdate", + "summary": "RetryDataServiceDeploymentConfigUpdate API retries a data service deployment config update.", + "operationId": "DataServiceDeploymentConfigUpdateService_RetryDataServiceDeploymentConfigUpdate", "responses": { "200": { "description": "A successful response.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/v1DeploymentConfigUpdate" + "$ref": "#/components/schemas/v1DataServiceDeploymentConfigUpdate" } } } @@ -175,7 +175,7 @@ "parameters": [ { "name": "id", - "description": "UID of the deployment config update.", + "description": "UID of the DataService deployment config update.", "in": "path", "required": true, "schema": { @@ -187,28 +187,28 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeploymentConfigUpdateServiceRetryDeploymentConfigUpdateBody" + "$ref": "#/components/schemas/DataServiceDeploymentConfigUpdateServiceRetryDataServiceDeploymentConfigUpdateBody" } } }, "required": true }, "tags": [ - "DeploymentConfigUpdateService" + "DataServiceDeploymentConfigUpdateService" ] } }, - "/pds/v1/deployments/{deploymentConfigUpdate.config.deploymentMeta.uid}/deploymentConfigUpdates": { + "/pds/v1/dataServiceDeployments/{dataServiceDeploymentConfigUpdate.config.dataServiceDeploymentMeta.uid}/dataServiceDeploymentConfigUpdates": { "put": { - "summary": "CreateDeploymentConfigUpdate API creates a deployment config update.", - "operationId": "DeploymentConfigUpdateService_CreateDeploymentConfigUpdate", + "summary": "CreateDataServiceDeploymentConfigUpdate API creates config update for deployment.", + "operationId": "DataServiceDeploymentConfigUpdateService_CreateDataServiceDeploymentConfigUpdate", "responses": { "200": { "description": "A successful response.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/v1DeploymentConfigUpdate" + "$ref": "#/components/schemas/v1DataServiceDeploymentConfigUpdate" } } } @@ -226,7 +226,7 @@ }, "parameters": [ { - "name": "deploymentConfigUpdate.config.deploymentMeta.uid", + "name": "dataServiceDeploymentConfigUpdate.config.dataServiceDeploymentMeta.uid", "description": "UID of the resource of the format -.", "in": "path", "required": true, @@ -247,7 +247,7 @@ "config": { "type": "object", "properties": { - "deploymentMeta": { + "dataServiceDeploymentMeta": { "type": "object", "properties": { "name": { @@ -300,38 +300,38 @@ "readOnly": true } }, - "description": "Metadata of the deployment resource.", - "title": "Metadata of the deployment resource." + "description": "Metadata of the DataService deployment resource.", + "title": "Metadata of the DataService deployment resource." }, - "deploymentConfig": { - "$ref": "#/components/schemas/pdsdeploymentv1Config" + "dataServiceDeploymentConfig": { + "$ref": "#/components/schemas/pdsdataservicedeploymentv1Config" } }, - "description": "Config of the deployment for which config update is requested.", - "title": "Config of the deployment for which config update is requested." + "description": "Config of the DataService deployment for which config update is requested.", + "title": "Config of the DataService deployment for which config update is requested." }, "status": { - "$ref": "#/components/schemas/pdsdeploymentconfigupdatev1Status" + "$ref": "#/components/schemas/pdsdataservicedeploymentconfigupdatev1Status" } }, - "title": "Config of the deployment for which config update is requested." + "title": "DataServiceDeploymentConfigUpdate of the DataService config deployment update request." } } }, - "description": "Config of the deployment for which config update is requested.", + "description": "DataServiceDeploymentConfigUpdate of the DataService config deployment update request.", "required": true }, "tags": [ - "DeploymentConfigUpdateService" + "DataServiceDeploymentConfigUpdateService" ] } } }, "components": { "schemas": { - "DeploymentConfigUpdateServiceRetryDeploymentConfigUpdateBody": { + "DataServiceDeploymentConfigUpdateServiceRetryDataServiceDeploymentConfigUpdateBody": { "type": "object", - "description": "RetryDeploymentConfigUpdateRequest is the request for RetryDeploymentConfigUpdate." + "description": "RetryDataServiceDeploymentConfigUpdateRequest is the request for RetryDataServiceDeploymentConfigUpdate." }, "SortByField": { "type": "string", @@ -363,19 +363,19 @@ } } }, - "pdsdeploymentconfigupdatev1Config": { + "pdsdataservicedeploymentconfigupdatev1Config": { "type": "object", "properties": { - "deploymentMeta": { + "dataServiceDeploymentMeta": { "$ref": "#/components/schemas/v1Meta" }, - "deploymentConfig": { - "$ref": "#/components/schemas/pdsdeploymentv1Config" + "dataServiceDeploymentConfig": { + "$ref": "#/components/schemas/pdsdataservicedeploymentv1Config" } }, - "description": "Config of the desired deployment configuration." + "description": "Config of the desired DataService deployment configuration." }, - "pdsdeploymentconfigupdatev1Status": { + "pdsdataservicedeploymentconfigupdatev1Status": { "type": "object", "properties": { "errorCode": { @@ -389,15 +389,15 @@ "retryCount": { "type": "integer", "format": "int32", - "description": "Number of times the deployment config update has been retried." + "description": "Number of times the DataService config update has been retried." }, "phase": { - "$ref": "#/components/schemas/pdsdeploymentconfigupdatev1StatusPhase" + "$ref": "#/components/schemas/pdsdataservicedeploymentconfigupdatev1StatusPhase" } }, - "description": "Status of the deployment config update." + "description": "Status of the DataService deployment config update." }, - "pdsdeploymentconfigupdatev1StatusPhase": { + "pdsdataservicedeploymentconfigupdatev1StatusPhase": { "type": "string", "enum": [ "PHASE_UNSPECIFIED", @@ -408,9 +408,9 @@ "REQUEUED" ], "default": "PHASE_UNSPECIFIED", - "description": "Enum for Phase of the Deployment config update.\n\n - PHASE_UNSPECIFIED: Phase is unspecified.\n - FAILED: Deployment config update failed.\n - QUEUED: Deployment config update is queued.\n - IN_PROGRESS: Deployment config update is in progress.\n - COMPLETED: Deployment config update is completed.\n - REQUEUED: Deployment config update is requeued." + "description": "Enum for Phase of the DataService deployment config update.\n\n - PHASE_UNSPECIFIED: Phase is unspecified.\n - FAILED: DataService deployment config update failed.\n - QUEUED: DataService deployment config update is queued.\n - IN_PROGRESS: DataService deployment config update is in progress.\n - COMPLETED: DataService deployment config update is completed.\n - REQUEUED: DataService config update is requeued." }, - "pdsdeploymentv1Config": { + "pdsdataservicedeploymentv1Config": { "type": "object", "properties": { "references": { @@ -419,15 +419,15 @@ "tlsConfig": { "$ref": "#/components/schemas/v1TLSConfig" }, - "deploymentTopologies": { + "dataServiceDeploymentTopologies": { "type": "array", "items": { - "$ref": "#/components/schemas/v1DeploymentTopology" + "$ref": "#/components/schemas/v1DataServiceDeploymentTopology" }, - "description": "A deployment topology contains a number of nodes that have various attributes as a collective group." + "description": "A DataService deployment topology contains a number of nodes that have various attributes as a collective group." } }, - "description": "Desired configuration of the Deployment." + "description": "Desired configuration of the DataService Deployment." }, "protobufAny": { "type": "object", @@ -438,36 +438,36 @@ }, "additionalProperties": {} }, - "v1DeploymentConfigUpdate": { + "v1DataServiceDeploymentConfigUpdate": { "type": "object", "properties": { "meta": { "$ref": "#/components/schemas/v1Meta" }, "config": { - "$ref": "#/components/schemas/pdsdeploymentconfigupdatev1Config" + "$ref": "#/components/schemas/pdsdataservicedeploymentconfigupdatev1Config" }, "status": { - "$ref": "#/components/schemas/pdsdeploymentconfigupdatev1Status" + "$ref": "#/components/schemas/pdsdataservicedeploymentconfigupdatev1Status" } }, - "description": "DeploymentConfigUpdate represents a deployment config update resource." + "description": "DataServiceDeploymentConfigUpdate represents a DataService deployment config update resource." }, - "v1DeploymentTopology": { + "v1DataServiceDeploymentTopology": { "type": "object", "properties": { "name": { "type": "string", - "description": "Name of the deployment topology." + "description": "Name of the DataServiceDeployment topology." }, "description": { "type": "string", - "description": "Description of the deployment topology." + "description": "Description of the DataServiceDeployment topology." }, - "replicas": { + "instances": { "type": "string", "format": "int64", - "description": "Number of replicas of data services." + "description": "Number of instances of data services." }, "serviceType": { "type": "string", @@ -494,23 +494,23 @@ "$ref": "#/components/schemas/v1Template" } }, - "description": "A deployment topology contains a number of nodes that have various attributes as a collective group.\nThis is consumed in a deployment and the functionality is being controlled by the CRUD APIs of deployment." + "description": "A DataService topology contains a number of nodes that have various attributes as a collective group.\nThis is consumed in a DataService Deployment and the functionality is being controlled by the CRUD APIs of DataService Deployment." }, - "v1ListDeploymentConfigUpdatesResponse": { + "v1ListDataServiceDeploymentConfigUpdatesResponse": { "type": "object", "properties": { - "deploymentConfigUpdates": { + "dataServiceDeploymentConfigUpdates": { "type": "array", "items": { - "$ref": "#/components/schemas/v1DeploymentConfigUpdate" + "$ref": "#/components/schemas/v1DataServiceDeploymentConfigUpdate" }, - "description": "List of deployment config updates." + "description": "List of DataService deployment config updates." }, "pagination": { "$ref": "#/components/schemas/v1PageBasedPaginationResponse" } }, - "description": "ListDeploymentConfigUpdatesResponse is the response for ListDeploymentConfigUpdates." + "description": "ListDataServiceDeploymentConfigUpdatesResponse is the response for ListDataServiceDeploymentConfigUpdates." }, "v1Meta": { "type": "object", @@ -660,7 +660,12 @@ }, "restoreId": { "type": "string", - "description": "UID of the restore id for the Deployment.", + "description": "UID of the restore id for the data service Deployment.", + "readOnly": true + }, + "dataServiceId": { + "type": "string", + "title": "UID of the data service", "readOnly": true } }, diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate_grpc.pb.go b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate_grpc.pb.go new file mode 100644 index 000000000..513f1363a --- /dev/null +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate_grpc.pb.go @@ -0,0 +1,250 @@ +// Please use the following editor setup for this file: +// Tab size=2; Tabs as spaces; Clean up trailing whitepsace +// +// In vim add: au FileType proto setl sw=2 ts=2 expandtab list +// +// In vscode install vscode-proto3 extension and add this to your settings.json: +// "[proto3]": { +// "editor.tabSize": 2, +// "editor.insertSpaces": true, +// "editor.rulers": [80], +// "editor.detectIndentation": true, +// "files.trimTrailingWhitespace": true +// } +// + +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v4.25.3 +// source: public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto + +package dataservicedeploymentconfigupdate + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + DataServiceDeploymentConfigUpdateService_CreateDataServiceDeploymentConfigUpdate_FullMethodName = "/public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdateService/CreateDataServiceDeploymentConfigUpdate" + DataServiceDeploymentConfigUpdateService_GetDataServiceDeploymentConfigUpdate_FullMethodName = "/public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdateService/GetDataServiceDeploymentConfigUpdate" + DataServiceDeploymentConfigUpdateService_ListDataServiceDeploymentConfigUpdates_FullMethodName = "/public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdateService/ListDataServiceDeploymentConfigUpdates" + DataServiceDeploymentConfigUpdateService_RetryDataServiceDeploymentConfigUpdate_FullMethodName = "/public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdateService/RetryDataServiceDeploymentConfigUpdate" +) + +// DataServiceDeploymentConfigUpdateServiceClient is the client API for DataServiceDeploymentConfigUpdateService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type DataServiceDeploymentConfigUpdateServiceClient interface { + // CreateDataServiceDeploymentConfigUpdate API creates config update for deployment. + // (-- api-linter: core::0133::http-method=disabled + // + // aip.dev/not-precedent: We need to do this because here we are actually updating deployment config. --) + CreateDataServiceDeploymentConfigUpdate(ctx context.Context, in *CreateDataServiceDeploymentConfigUpdateRequest, opts ...grpc.CallOption) (*DataServiceDeploymentConfigUpdate, error) + // GetDataServiceDeploymentConfigUpdate API returns a DataService deployment config update by id. + GetDataServiceDeploymentConfigUpdate(ctx context.Context, in *GetDataServiceDeploymentConfigUpdateRequest, opts ...grpc.CallOption) (*DataServiceDeploymentConfigUpdate, error) + // ListDataServiceDeploymentConfigUpdates API returns a list of data service deployment config updates. + ListDataServiceDeploymentConfigUpdates(ctx context.Context, in *ListDataServiceDeploymentConfigUpdatesRequest, opts ...grpc.CallOption) (*ListDataServiceDeploymentConfigUpdatesResponse, error) + // RetryDataServiceDeploymentConfigUpdate API retries a data service deployment config update. + RetryDataServiceDeploymentConfigUpdate(ctx context.Context, in *RetryDataServiceDeploymentConfigUpdateRequest, opts ...grpc.CallOption) (*DataServiceDeploymentConfigUpdate, error) +} + +type dataServiceDeploymentConfigUpdateServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewDataServiceDeploymentConfigUpdateServiceClient(cc grpc.ClientConnInterface) DataServiceDeploymentConfigUpdateServiceClient { + return &dataServiceDeploymentConfigUpdateServiceClient{cc} +} + +func (c *dataServiceDeploymentConfigUpdateServiceClient) CreateDataServiceDeploymentConfigUpdate(ctx context.Context, in *CreateDataServiceDeploymentConfigUpdateRequest, opts ...grpc.CallOption) (*DataServiceDeploymentConfigUpdate, error) { + out := new(DataServiceDeploymentConfigUpdate) + err := c.cc.Invoke(ctx, DataServiceDeploymentConfigUpdateService_CreateDataServiceDeploymentConfigUpdate_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dataServiceDeploymentConfigUpdateServiceClient) GetDataServiceDeploymentConfigUpdate(ctx context.Context, in *GetDataServiceDeploymentConfigUpdateRequest, opts ...grpc.CallOption) (*DataServiceDeploymentConfigUpdate, error) { + out := new(DataServiceDeploymentConfigUpdate) + err := c.cc.Invoke(ctx, DataServiceDeploymentConfigUpdateService_GetDataServiceDeploymentConfigUpdate_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dataServiceDeploymentConfigUpdateServiceClient) ListDataServiceDeploymentConfigUpdates(ctx context.Context, in *ListDataServiceDeploymentConfigUpdatesRequest, opts ...grpc.CallOption) (*ListDataServiceDeploymentConfigUpdatesResponse, error) { + out := new(ListDataServiceDeploymentConfigUpdatesResponse) + err := c.cc.Invoke(ctx, DataServiceDeploymentConfigUpdateService_ListDataServiceDeploymentConfigUpdates_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dataServiceDeploymentConfigUpdateServiceClient) RetryDataServiceDeploymentConfigUpdate(ctx context.Context, in *RetryDataServiceDeploymentConfigUpdateRequest, opts ...grpc.CallOption) (*DataServiceDeploymentConfigUpdate, error) { + out := new(DataServiceDeploymentConfigUpdate) + err := c.cc.Invoke(ctx, DataServiceDeploymentConfigUpdateService_RetryDataServiceDeploymentConfigUpdate_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// DataServiceDeploymentConfigUpdateServiceServer is the server API for DataServiceDeploymentConfigUpdateService service. +// All implementations must embed UnimplementedDataServiceDeploymentConfigUpdateServiceServer +// for forward compatibility +type DataServiceDeploymentConfigUpdateServiceServer interface { + // CreateDataServiceDeploymentConfigUpdate API creates config update for deployment. + // (-- api-linter: core::0133::http-method=disabled + // + // aip.dev/not-precedent: We need to do this because here we are actually updating deployment config. --) + CreateDataServiceDeploymentConfigUpdate(context.Context, *CreateDataServiceDeploymentConfigUpdateRequest) (*DataServiceDeploymentConfigUpdate, error) + // GetDataServiceDeploymentConfigUpdate API returns a DataService deployment config update by id. + GetDataServiceDeploymentConfigUpdate(context.Context, *GetDataServiceDeploymentConfigUpdateRequest) (*DataServiceDeploymentConfigUpdate, error) + // ListDataServiceDeploymentConfigUpdates API returns a list of data service deployment config updates. + ListDataServiceDeploymentConfigUpdates(context.Context, *ListDataServiceDeploymentConfigUpdatesRequest) (*ListDataServiceDeploymentConfigUpdatesResponse, error) + // RetryDataServiceDeploymentConfigUpdate API retries a data service deployment config update. + RetryDataServiceDeploymentConfigUpdate(context.Context, *RetryDataServiceDeploymentConfigUpdateRequest) (*DataServiceDeploymentConfigUpdate, error) + mustEmbedUnimplementedDataServiceDeploymentConfigUpdateServiceServer() +} + +// UnimplementedDataServiceDeploymentConfigUpdateServiceServer must be embedded to have forward compatible implementations. +type UnimplementedDataServiceDeploymentConfigUpdateServiceServer struct { +} + +func (UnimplementedDataServiceDeploymentConfigUpdateServiceServer) CreateDataServiceDeploymentConfigUpdate(context.Context, *CreateDataServiceDeploymentConfigUpdateRequest) (*DataServiceDeploymentConfigUpdate, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateDataServiceDeploymentConfigUpdate not implemented") +} +func (UnimplementedDataServiceDeploymentConfigUpdateServiceServer) GetDataServiceDeploymentConfigUpdate(context.Context, *GetDataServiceDeploymentConfigUpdateRequest) (*DataServiceDeploymentConfigUpdate, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDataServiceDeploymentConfigUpdate not implemented") +} +func (UnimplementedDataServiceDeploymentConfigUpdateServiceServer) ListDataServiceDeploymentConfigUpdates(context.Context, *ListDataServiceDeploymentConfigUpdatesRequest) (*ListDataServiceDeploymentConfigUpdatesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListDataServiceDeploymentConfigUpdates not implemented") +} +func (UnimplementedDataServiceDeploymentConfigUpdateServiceServer) RetryDataServiceDeploymentConfigUpdate(context.Context, *RetryDataServiceDeploymentConfigUpdateRequest) (*DataServiceDeploymentConfigUpdate, error) { + return nil, status.Errorf(codes.Unimplemented, "method RetryDataServiceDeploymentConfigUpdate not implemented") +} +func (UnimplementedDataServiceDeploymentConfigUpdateServiceServer) mustEmbedUnimplementedDataServiceDeploymentConfigUpdateServiceServer() { +} + +// UnsafeDataServiceDeploymentConfigUpdateServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to DataServiceDeploymentConfigUpdateServiceServer will +// result in compilation errors. +type UnsafeDataServiceDeploymentConfigUpdateServiceServer interface { + mustEmbedUnimplementedDataServiceDeploymentConfigUpdateServiceServer() +} + +func RegisterDataServiceDeploymentConfigUpdateServiceServer(s grpc.ServiceRegistrar, srv DataServiceDeploymentConfigUpdateServiceServer) { + s.RegisterService(&DataServiceDeploymentConfigUpdateService_ServiceDesc, srv) +} + +func _DataServiceDeploymentConfigUpdateService_CreateDataServiceDeploymentConfigUpdate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateDataServiceDeploymentConfigUpdateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataServiceDeploymentConfigUpdateServiceServer).CreateDataServiceDeploymentConfigUpdate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: DataServiceDeploymentConfigUpdateService_CreateDataServiceDeploymentConfigUpdate_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataServiceDeploymentConfigUpdateServiceServer).CreateDataServiceDeploymentConfigUpdate(ctx, req.(*CreateDataServiceDeploymentConfigUpdateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DataServiceDeploymentConfigUpdateService_GetDataServiceDeploymentConfigUpdate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDataServiceDeploymentConfigUpdateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataServiceDeploymentConfigUpdateServiceServer).GetDataServiceDeploymentConfigUpdate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: DataServiceDeploymentConfigUpdateService_GetDataServiceDeploymentConfigUpdate_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataServiceDeploymentConfigUpdateServiceServer).GetDataServiceDeploymentConfigUpdate(ctx, req.(*GetDataServiceDeploymentConfigUpdateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DataServiceDeploymentConfigUpdateService_ListDataServiceDeploymentConfigUpdates_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListDataServiceDeploymentConfigUpdatesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataServiceDeploymentConfigUpdateServiceServer).ListDataServiceDeploymentConfigUpdates(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: DataServiceDeploymentConfigUpdateService_ListDataServiceDeploymentConfigUpdates_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataServiceDeploymentConfigUpdateServiceServer).ListDataServiceDeploymentConfigUpdates(ctx, req.(*ListDataServiceDeploymentConfigUpdatesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DataServiceDeploymentConfigUpdateService_RetryDataServiceDeploymentConfigUpdate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RetryDataServiceDeploymentConfigUpdateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataServiceDeploymentConfigUpdateServiceServer).RetryDataServiceDeploymentConfigUpdate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: DataServiceDeploymentConfigUpdateService_RetryDataServiceDeploymentConfigUpdate_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataServiceDeploymentConfigUpdateServiceServer).RetryDataServiceDeploymentConfigUpdate(ctx, req.(*RetryDataServiceDeploymentConfigUpdateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// DataServiceDeploymentConfigUpdateService_ServiceDesc is the grpc.ServiceDesc for DataServiceDeploymentConfigUpdateService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var DataServiceDeploymentConfigUpdateService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "public.portworx.pds.dataservicedeploymentconfigupdate.v1.DataServiceDeploymentConfigUpdateService", + HandlerType: (*DataServiceDeploymentConfigUpdateServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateDataServiceDeploymentConfigUpdate", + Handler: _DataServiceDeploymentConfigUpdateService_CreateDataServiceDeploymentConfigUpdate_Handler, + }, + { + MethodName: "GetDataServiceDeploymentConfigUpdate", + Handler: _DataServiceDeploymentConfigUpdateService_GetDataServiceDeploymentConfigUpdate_Handler, + }, + { + MethodName: "ListDataServiceDeploymentConfigUpdates", + Handler: _DataServiceDeploymentConfigUpdateService_ListDataServiceDeploymentConfigUpdates_Handler, + }, + { + MethodName: "RetryDataServiceDeploymentConfigUpdate", + Handler: _DataServiceDeploymentConfigUpdateService_RetryDataServiceDeploymentConfigUpdate_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto", +} diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/Makefile b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymenttopology/apiv1/Makefile similarity index 50% rename from vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/Makefile rename to vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymenttopology/apiv1/Makefile index a662ea5a1..5374bc044 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/Makefile +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymenttopology/apiv1/Makefile @@ -1,4 +1,4 @@ -PROTO_FILES = deploymentconfigupdate.proto +PROTO_FILES = dataservicedeploymenttopology.proto all: $(PROTO_FILES) diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymenttopology/apiv1/dataservicedeploymenttopology.pb.go b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymenttopology/apiv1/dataservicedeploymenttopology.pb.go new file mode 100644 index 000000000..ac557acfd --- /dev/null +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymenttopology/apiv1/dataservicedeploymenttopology.pb.go @@ -0,0 +1,954 @@ +// Please use the following editor setup for this file: +// Tab size=2; Tabs as spaces; Clean up trailing whitepsace +// +// In vim add: au FileType proto setl sw=2 ts=2 expandtab list +// +// In vscode install vscode-proto3 extension and add this to your settings.json: +// "[proto3]": { +// "editor.tabSize": 2, +// "editor.insertSpaces": true, +// "editor.rulers": [80], +// "editor.detectIndentation": true, +// "files.trimTrailingWhitespace": true +// } +// + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.32.0 +// protoc v4.25.3 +// source: public/portworx/pds/dataservicedeploymenttopology/apiv1/dataservicedeploymenttopology.proto + +package dataservicedeploymenttopology + +import ( + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + structpb "google.golang.org/protobuf/types/known/structpb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Enum for Health of the data service topology. +type DataServiceDeploymentTopologyStatus_Health int32 + +const ( + // Health is unknown. + DataServiceDeploymentTopologyStatus_UNKNOWN DataServiceDeploymentTopologyStatus_Health = 0 + // DataServiceDeployment Topology is Unavailable. + DataServiceDeploymentTopologyStatus_UNAVAILABLE DataServiceDeploymentTopologyStatus_Health = 1 + // DataServiceDeployment Topology is Partially available. + DataServiceDeploymentTopologyStatus_PARTIALLY_AVAILABLE DataServiceDeploymentTopologyStatus_Health = 2 + // DataServiceDeployment Topology is available. + DataServiceDeploymentTopologyStatus_AVAILABLE DataServiceDeploymentTopologyStatus_Health = 3 +) + +// Enum value maps for DataServiceDeploymentTopologyStatus_Health. +var ( + DataServiceDeploymentTopologyStatus_Health_name = map[int32]string{ + 0: "UNKNOWN", + 1: "UNAVAILABLE", + 2: "PARTIALLY_AVAILABLE", + 3: "AVAILABLE", + } + DataServiceDeploymentTopologyStatus_Health_value = map[string]int32{ + "UNKNOWN": 0, + "UNAVAILABLE": 1, + "PARTIALLY_AVAILABLE": 2, + "AVAILABLE": 3, + } +) + +func (x DataServiceDeploymentTopologyStatus_Health) Enum() *DataServiceDeploymentTopologyStatus_Health { + p := new(DataServiceDeploymentTopologyStatus_Health) + *p = x + return p +} + +func (x DataServiceDeploymentTopologyStatus_Health) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (DataServiceDeploymentTopologyStatus_Health) Descriptor() protoreflect.EnumDescriptor { + return file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_enumTypes[0].Descriptor() +} + +func (DataServiceDeploymentTopologyStatus_Health) Type() protoreflect.EnumType { + return &file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_enumTypes[0] +} + +func (x DataServiceDeploymentTopologyStatus_Health) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use DataServiceDeploymentTopologyStatus_Health.Descriptor instead. +func (DataServiceDeploymentTopologyStatus_Health) EnumDescriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_rawDescGZIP(), []int{2, 0} +} + +// Enum for Phase of the DataServiceDeployment Topology. +type DataServiceDeploymentTopologyStatus_Phase int32 + +const ( + // Unspecified status. + DataServiceDeploymentTopologyStatus_PHASE_UNSPECIFIED DataServiceDeploymentTopologyStatus_Phase = 0 + // In progress Status. + DataServiceDeploymentTopologyStatus_IN_PROGRESS DataServiceDeploymentTopologyStatus_Phase = 1 + // Partial Success Status. + DataServiceDeploymentTopologyStatus_PARTIAL_SUCCESS DataServiceDeploymentTopologyStatus_Phase = 2 + // Successful Status. + DataServiceDeploymentTopologyStatus_SUCCESS DataServiceDeploymentTopologyStatus_Phase = 3 + // Delete is pending Status. + DataServiceDeploymentTopologyStatus_DELETE_PENDING DataServiceDeploymentTopologyStatus_Phase = 4 + // Delete in progress Status. + DataServiceDeploymentTopologyStatus_DELETING DataServiceDeploymentTopologyStatus_Phase = 5 + // Failed Status. + DataServiceDeploymentTopologyStatus_FAILED DataServiceDeploymentTopologyStatus_Phase = 6 + // Timed Out Status. + DataServiceDeploymentTopologyStatus_TIMED_OUT DataServiceDeploymentTopologyStatus_Phase = 7 +) + +// Enum value maps for DataServiceDeploymentTopologyStatus_Phase. +var ( + DataServiceDeploymentTopologyStatus_Phase_name = map[int32]string{ + 0: "PHASE_UNSPECIFIED", + 1: "IN_PROGRESS", + 2: "PARTIAL_SUCCESS", + 3: "SUCCESS", + 4: "DELETE_PENDING", + 5: "DELETING", + 6: "FAILED", + 7: "TIMED_OUT", + } + DataServiceDeploymentTopologyStatus_Phase_value = map[string]int32{ + "PHASE_UNSPECIFIED": 0, + "IN_PROGRESS": 1, + "PARTIAL_SUCCESS": 2, + "SUCCESS": 3, + "DELETE_PENDING": 4, + "DELETING": 5, + "FAILED": 6, + "TIMED_OUT": 7, + } +) + +func (x DataServiceDeploymentTopologyStatus_Phase) Enum() *DataServiceDeploymentTopologyStatus_Phase { + p := new(DataServiceDeploymentTopologyStatus_Phase) + *p = x + return p +} + +func (x DataServiceDeploymentTopologyStatus_Phase) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (DataServiceDeploymentTopologyStatus_Phase) Descriptor() protoreflect.EnumDescriptor { + return file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_enumTypes[1].Descriptor() +} + +func (DataServiceDeploymentTopologyStatus_Phase) Type() protoreflect.EnumType { + return &file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_enumTypes[1] +} + +func (x DataServiceDeploymentTopologyStatus_Phase) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use DataServiceDeploymentTopologyStatus_Phase.Descriptor instead. +func (DataServiceDeploymentTopologyStatus_Phase) EnumDescriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_rawDescGZIP(), []int{2, 1} +} + +// A DataService topology contains a number of nodes that have various attributes as a collective group. +// This is consumed in a DataService Deployment and the functionality is being controlled by the CRUD APIs of DataService Deployment. +type DataServiceDeploymentTopology struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name of the DataServiceDeployment topology. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Description of the DataServiceDeployment topology. + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + // Number of instances of data services. + Instances int64 `protobuf:"varint,3,opt,name=instances,proto3" json:"instances,omitempty"` + // Service type are standard Kubernetes service types such as clusterIP, NodePort, load balancers, etc. + ServiceType string `protobuf:"bytes,4,opt,name=service_type,json=serviceType,proto3" json:"service_type,omitempty"` + // Service name is the name of service as provided by user. + ServiceName string `protobuf:"bytes,5,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` + // Source IP ranges to use for the deployed Load Balancer. + LoadBalancerSourceRanges []string `protobuf:"bytes,6,rep,name=load_balancer_source_ranges,json=loadBalancerSourceRanges,proto3" json:"load_balancer_source_ranges,omitempty"` + // Resource Settings Template. + ResourceSettings *Template `protobuf:"bytes,7,opt,name=resource_settings,json=resourceSettings,proto3" json:"resource_settings,omitempty"` + // Service Configurations Template. + ServiceConfigurations *Template `protobuf:"bytes,8,opt,name=service_configurations,json=serviceConfigurations,proto3" json:"service_configurations,omitempty"` + // Storage Options Template. + StorageOptions *Template `protobuf:"bytes,9,opt,name=storage_options,json=storageOptions,proto3" json:"storage_options,omitempty"` +} + +func (x *DataServiceDeploymentTopology) Reset() { + *x = DataServiceDeploymentTopology{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DataServiceDeploymentTopology) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DataServiceDeploymentTopology) ProtoMessage() {} + +func (x *DataServiceDeploymentTopology) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DataServiceDeploymentTopology.ProtoReflect.Descriptor instead. +func (*DataServiceDeploymentTopology) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_rawDescGZIP(), []int{0} +} + +func (x *DataServiceDeploymentTopology) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *DataServiceDeploymentTopology) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *DataServiceDeploymentTopology) GetInstances() int64 { + if x != nil { + return x.Instances + } + return 0 +} + +func (x *DataServiceDeploymentTopology) GetServiceType() string { + if x != nil { + return x.ServiceType + } + return "" +} + +func (x *DataServiceDeploymentTopology) GetServiceName() string { + if x != nil { + return x.ServiceName + } + return "" +} + +func (x *DataServiceDeploymentTopology) GetLoadBalancerSourceRanges() []string { + if x != nil { + return x.LoadBalancerSourceRanges + } + return nil +} + +func (x *DataServiceDeploymentTopology) GetResourceSettings() *Template { + if x != nil { + return x.ResourceSettings + } + return nil +} + +func (x *DataServiceDeploymentTopology) GetServiceConfigurations() *Template { + if x != nil { + return x.ServiceConfigurations + } + return nil +} + +func (x *DataServiceDeploymentTopology) GetStorageOptions() *Template { + if x != nil { + return x.StorageOptions + } + return nil +} + +// Template. +type Template struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // UID of the Template. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Resource version of the template. + ResourceVersion string `protobuf:"bytes,2,opt,name=resource_version,json=resourceVersion,proto3" json:"resource_version,omitempty"` + // Values required for template. + Values map[string]string `protobuf:"bytes,3,rep,name=values,proto3" json:"values,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *Template) Reset() { + *x = Template{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Template) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Template) ProtoMessage() {} + +func (x *Template) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Template.ProtoReflect.Descriptor instead. +func (*Template) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_rawDescGZIP(), []int{1} +} + +func (x *Template) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Template) GetResourceVersion() string { + if x != nil { + return x.ResourceVersion + } + return "" +} + +func (x *Template) GetValues() map[string]string { + if x != nil { + return x.Values + } + return nil +} + +// Status of the data service topology. It is consumed in DataServiceDeployment. +type DataServiceDeploymentTopologyStatus struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Health of the data service deployment topology. + Health DataServiceDeploymentTopologyStatus_Health `protobuf:"varint,1,opt,name=health,proto3,enum=public.portworx.pds.dataservicedeploymenttopology.v1.DataServiceDeploymentTopologyStatus_Health" json:"health,omitempty"` + // Phase of the DataServiceDeployment Topology. + Phase DataServiceDeploymentTopologyStatus_Phase `protobuf:"varint,2,opt,name=phase,proto3,enum=public.portworx.pds.dataservicedeploymenttopology.v1.DataServiceDeploymentTopologyStatus_Phase" json:"phase,omitempty"` + // Number of ready replicas reported by Target Cluster that are up and running. + ReadyInstances int64 `protobuf:"varint,3,opt,name=ready_instances,json=readyInstances,proto3" json:"ready_instances,omitempty"` + // Connection Information for the DataServiceDeployment Topology. + ConnectionInfo *ConnectionInfo `protobuf:"bytes,4,opt,name=connection_info,json=connectionInfo,proto3" json:"connection_info,omitempty"` +} + +func (x *DataServiceDeploymentTopologyStatus) Reset() { + *x = DataServiceDeploymentTopologyStatus{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DataServiceDeploymentTopologyStatus) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DataServiceDeploymentTopologyStatus) ProtoMessage() {} + +func (x *DataServiceDeploymentTopologyStatus) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DataServiceDeploymentTopologyStatus.ProtoReflect.Descriptor instead. +func (*DataServiceDeploymentTopologyStatus) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_rawDescGZIP(), []int{2} +} + +func (x *DataServiceDeploymentTopologyStatus) GetHealth() DataServiceDeploymentTopologyStatus_Health { + if x != nil { + return x.Health + } + return DataServiceDeploymentTopologyStatus_UNKNOWN +} + +func (x *DataServiceDeploymentTopologyStatus) GetPhase() DataServiceDeploymentTopologyStatus_Phase { + if x != nil { + return x.Phase + } + return DataServiceDeploymentTopologyStatus_PHASE_UNSPECIFIED +} + +func (x *DataServiceDeploymentTopologyStatus) GetReadyInstances() int64 { + if x != nil { + return x.ReadyInstances + } + return 0 +} + +func (x *DataServiceDeploymentTopologyStatus) GetConnectionInfo() *ConnectionInfo { + if x != nil { + return x.ConnectionInfo + } + return nil +} + +// Connection Information for the DataServiceDeployment Topology. +type ConnectionInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Ready instances. + ReadyInstances []*InstanceInfo `protobuf:"bytes,1,rep,name=ready_instances,json=readyInstances,proto3" json:"ready_instances,omitempty"` + // Instances that are not ready. + NotReadyInstances []*InstanceInfo `protobuf:"bytes,2,rep,name=not_ready_instances,json=notReadyInstances,proto3" json:"not_ready_instances,omitempty"` + // ConnectionDetails of data service deployment. + ConnectionDetails *ConnectionDetails `protobuf:"bytes,3,opt,name=connection_details,json=connectionDetails,proto3" json:"connection_details,omitempty"` + // Stores details about the cluster. + ClusterDetails *structpb.Struct `protobuf:"bytes,4,opt,name=cluster_details,json=clusterDetails,proto3" json:"cluster_details,omitempty"` +} + +func (x *ConnectionInfo) Reset() { + *x = ConnectionInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConnectionInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConnectionInfo) ProtoMessage() {} + +func (x *ConnectionInfo) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConnectionInfo.ProtoReflect.Descriptor instead. +func (*ConnectionInfo) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_rawDescGZIP(), []int{3} +} + +func (x *ConnectionInfo) GetReadyInstances() []*InstanceInfo { + if x != nil { + return x.ReadyInstances + } + return nil +} + +func (x *ConnectionInfo) GetNotReadyInstances() []*InstanceInfo { + if x != nil { + return x.NotReadyInstances + } + return nil +} + +func (x *ConnectionInfo) GetConnectionDetails() *ConnectionDetails { + if x != nil { + return x.ConnectionDetails + } + return nil +} + +func (x *ConnectionInfo) GetClusterDetails() *structpb.Struct { + if x != nil { + return x.ClusterDetails + } + return nil +} + +// InstanceInfo contains information about a instance. +type InstanceInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The IP of a instance. + Ip string `protobuf:"bytes,1,opt,name=ip,proto3" json:"ip,omitempty"` + // Name is the Hostname of a instance. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // Node that hosts a particular instance. + WorkerNode string `protobuf:"bytes,3,opt,name=worker_node,json=workerNode,proto3" json:"worker_node,omitempty"` +} + +func (x *InstanceInfo) Reset() { + *x = InstanceInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InstanceInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InstanceInfo) ProtoMessage() {} + +func (x *InstanceInfo) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InstanceInfo.ProtoReflect.Descriptor instead. +func (*InstanceInfo) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_rawDescGZIP(), []int{4} +} + +func (x *InstanceInfo) GetIp() string { + if x != nil { + return x.Ip + } + return "" +} + +func (x *InstanceInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *InstanceInfo) GetWorkerNode() string { + if x != nil { + return x.WorkerNode + } + return "" +} + +// ConnectionDetails of data service. +type ConnectionDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Instances of the data service deployment. + Instances []string `protobuf:"bytes,1,rep,name=instances,proto3" json:"instances,omitempty"` + // Ports provided by the data service deployment (name and number). + Ports map[string]int32 `protobuf:"bytes,2,rep,name=ports,proto3" json:"ports,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *ConnectionDetails) Reset() { + *x = ConnectionDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConnectionDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConnectionDetails) ProtoMessage() {} + +func (x *ConnectionDetails) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConnectionDetails.ProtoReflect.Descriptor instead. +func (*ConnectionDetails) Descriptor() ([]byte, []int) { + return file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_rawDescGZIP(), []int{5} +} + +func (x *ConnectionDetails) GetInstances() []string { + if x != nil { + return x.Instances + } + return nil +} + +func (x *ConnectionDetails) GetPorts() map[string]int32 { + if x != nil { + return x.Ports + } + return nil +} + +var File_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto protoreflect.FileDescriptor + +var file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_rawDesc = []byte{ + 0x0a, 0x5b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x78, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, + 0x6f, 0x67, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, + 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x34, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, + 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, + 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0xcf, 0x04, 0x0a, 0x1d, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x70, 0x6f, + 0x6c, 0x6f, 0x67, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x1b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x61, 0x6e, 0x67, + 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x18, 0x6c, + 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x6b, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, + 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, + 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x52, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x12, 0x75, 0x0a, 0x16, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, + 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x15, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x67, 0x0a, 0x0f, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, + 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe9, 0x01, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x2e, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, + 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x62, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x4a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, + 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0x8f, 0x05, 0x0a, 0x23, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, + 0x67, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x78, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x6c, + 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x60, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, + 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x76, 0x31, 0x2e, + 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x06, 0x68, 0x65, 0x61, 0x6c, + 0x74, 0x68, 0x12, 0x75, 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x5f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, + 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x6f, + 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x50, 0x68, 0x61, + 0x73, 0x65, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x61, + 0x64, 0x79, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0e, 0x72, 0x65, 0x61, 0x64, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x73, 0x12, 0x6d, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, + 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x22, 0x4e, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x0b, 0x0a, 0x07, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x41, 0x56, + 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x41, 0x52, + 0x54, 0x49, 0x41, 0x4c, 0x4c, 0x59, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, + 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, + 0x03, 0x22, 0x8e, 0x01, 0x0a, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x50, + 0x48, 0x41, 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, + 0x53, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x41, 0x4c, 0x5f, 0x53, + 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43, + 0x45, 0x53, 0x53, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, + 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, 0x4c, + 0x45, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, + 0x44, 0x10, 0x06, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x44, 0x5f, 0x4f, 0x55, 0x54, + 0x10, 0x07, 0x22, 0xab, 0x03, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x6b, 0x0a, 0x0f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5f, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, + 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, + 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, + 0x67, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x0e, 0x72, 0x65, 0x61, 0x64, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x73, 0x12, 0x72, 0x0a, 0x13, 0x6e, 0x6f, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5f, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x42, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, + 0x6f, 0x67, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x11, 0x6e, 0x6f, 0x74, 0x52, 0x65, 0x61, 0x64, 0x79, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x76, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, + 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, + 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x11, 0x63, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x40, + 0x0a, 0x0f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x52, 0x0e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x22, 0x53, 0x0a, 0x0c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x6e, + 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x65, + 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0xd5, 0x01, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x68, 0x0a, 0x05, 0x70, 0x6f, 0x72, + 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x52, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, + 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x70, 0x6f, + 0x72, 0x74, 0x73, 0x1a, 0x38, 0x0a, 0x0a, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0xcf, 0x01, + 0x0a, 0x38, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, + 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, + 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x76, 0x31, 0x42, 0x22, 0x44, 0x61, 0x74, 0x61, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x6d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, + 0x65, 0x2d, 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x64, 0x61, + 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x76, + 0x31, 0x3b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_rawDescOnce sync.Once + file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_rawDescData = file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_rawDesc +) + +func file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_rawDescGZIP() []byte { + file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_rawDescOnce.Do(func() { + file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_rawDescData = protoimpl.X.CompressGZIP(file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_rawDescData) + }) + return file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_rawDescData +} + +var file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_goTypes = []interface{}{ + (DataServiceDeploymentTopologyStatus_Health)(0), // 0: public.portworx.pds.dataservicedeploymenttopology.v1.DataServiceDeploymentTopologyStatus.Health + (DataServiceDeploymentTopologyStatus_Phase)(0), // 1: public.portworx.pds.dataservicedeploymenttopology.v1.DataServiceDeploymentTopologyStatus.Phase + (*DataServiceDeploymentTopology)(nil), // 2: public.portworx.pds.dataservicedeploymenttopology.v1.DataServiceDeploymentTopology + (*Template)(nil), // 3: public.portworx.pds.dataservicedeploymenttopology.v1.Template + (*DataServiceDeploymentTopologyStatus)(nil), // 4: public.portworx.pds.dataservicedeploymenttopology.v1.DataServiceDeploymentTopologyStatus + (*ConnectionInfo)(nil), // 5: public.portworx.pds.dataservicedeploymenttopology.v1.ConnectionInfo + (*InstanceInfo)(nil), // 6: public.portworx.pds.dataservicedeploymenttopology.v1.InstanceInfo + (*ConnectionDetails)(nil), // 7: public.portworx.pds.dataservicedeploymenttopology.v1.ConnectionDetails + nil, // 8: public.portworx.pds.dataservicedeploymenttopology.v1.Template.ValuesEntry + nil, // 9: public.portworx.pds.dataservicedeploymenttopology.v1.ConnectionDetails.PortsEntry + (*structpb.Struct)(nil), // 10: google.protobuf.Struct +} +var file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_depIdxs = []int32{ + 3, // 0: public.portworx.pds.dataservicedeploymenttopology.v1.DataServiceDeploymentTopology.resource_settings:type_name -> public.portworx.pds.dataservicedeploymenttopology.v1.Template + 3, // 1: public.portworx.pds.dataservicedeploymenttopology.v1.DataServiceDeploymentTopology.service_configurations:type_name -> public.portworx.pds.dataservicedeploymenttopology.v1.Template + 3, // 2: public.portworx.pds.dataservicedeploymenttopology.v1.DataServiceDeploymentTopology.storage_options:type_name -> public.portworx.pds.dataservicedeploymenttopology.v1.Template + 8, // 3: public.portworx.pds.dataservicedeploymenttopology.v1.Template.values:type_name -> public.portworx.pds.dataservicedeploymenttopology.v1.Template.ValuesEntry + 0, // 4: public.portworx.pds.dataservicedeploymenttopology.v1.DataServiceDeploymentTopologyStatus.health:type_name -> public.portworx.pds.dataservicedeploymenttopology.v1.DataServiceDeploymentTopologyStatus.Health + 1, // 5: public.portworx.pds.dataservicedeploymenttopology.v1.DataServiceDeploymentTopologyStatus.phase:type_name -> public.portworx.pds.dataservicedeploymenttopology.v1.DataServiceDeploymentTopologyStatus.Phase + 5, // 6: public.portworx.pds.dataservicedeploymenttopology.v1.DataServiceDeploymentTopologyStatus.connection_info:type_name -> public.portworx.pds.dataservicedeploymenttopology.v1.ConnectionInfo + 6, // 7: public.portworx.pds.dataservicedeploymenttopology.v1.ConnectionInfo.ready_instances:type_name -> public.portworx.pds.dataservicedeploymenttopology.v1.InstanceInfo + 6, // 8: public.portworx.pds.dataservicedeploymenttopology.v1.ConnectionInfo.not_ready_instances:type_name -> public.portworx.pds.dataservicedeploymenttopology.v1.InstanceInfo + 7, // 9: public.portworx.pds.dataservicedeploymenttopology.v1.ConnectionInfo.connection_details:type_name -> public.portworx.pds.dataservicedeploymenttopology.v1.ConnectionDetails + 10, // 10: public.portworx.pds.dataservicedeploymenttopology.v1.ConnectionInfo.cluster_details:type_name -> google.protobuf.Struct + 9, // 11: public.portworx.pds.dataservicedeploymenttopology.v1.ConnectionDetails.ports:type_name -> public.portworx.pds.dataservicedeploymenttopology.v1.ConnectionDetails.PortsEntry + 12, // [12:12] is the sub-list for method output_type + 12, // [12:12] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name +} + +func init() { + file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_init() +} +func file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_init() { + if File_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DataServiceDeploymentTopology); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Template); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DataServiceDeploymentTopologyStatus); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ConnectionInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InstanceInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ConnectionDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_rawDesc, + NumEnums: 2, + NumMessages: 8, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_goTypes, + DependencyIndexes: file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_depIdxs, + EnumInfos: file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_enumTypes, + MessageInfos: file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_msgTypes, + }.Build() + File_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto = out.File + file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_rawDesc = nil + file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_goTypes = nil + file_public_portworx_pds_dataservicedeploymenttopology_apiv1_dataservicedeploymenttopology_proto_depIdxs = nil +} diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymenttopology/apiv1/deploymenttopology.pb.md b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymenttopology/apiv1/dataservicedeploymenttopology.pb.md similarity index 69% rename from vendor/github.com/pure-px/apis/public/portworx/pds/deploymenttopology/apiv1/deploymenttopology.pb.md rename to vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymenttopology/apiv1/dataservicedeploymenttopology.pb.md index da2530a7d..1a8420067 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymenttopology/apiv1/deploymenttopology.pb.md +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymenttopology/apiv1/dataservicedeploymenttopology.pb.md @@ -2,7 +2,7 @@ [//]: # (Do not edit) -# deploymenttopology +# dataservicedeploymenttopology ## Contents @@ -11,9 +11,9 @@ - [ConnectionDetails](#connectiondetails) - [ConnectionDetails.PortsEntry](#connectiondetailsportsentry) - [ConnectionInfo](#connectioninfo) - - [DeploymentTopology](#deploymenttopology) - - [DeploymentTopologyStatus](#deploymenttopologystatus) - - [PodInfo](#podinfo) + - [DataServiceDeploymentTopology](#dataservicedeploymenttopology) + - [DataServiceDeploymentTopologyStatus](#dataservicedeploymenttopologystatus) + - [InstanceInfo](#instanceinfo) - [Template](#template) - [Template.ValuesEntry](#templatevaluesentry) @@ -35,8 +35,8 @@ ConnectionDetails of data service. | Field | Type | Description | | ----- | ---- | ----------- | -| nodes | [repeated string](#string) | Nodes of the data service. | -| ports | [map ConnectionDetails.PortsEntry](#connectiondetailsportsentry) | Ports provided by the data service (name and number). | +| instances | [repeated string](#string) | Instances of the data service deployment. | +| ports | [map ConnectionDetails.PortsEntry](#connectiondetailsportsentry) | Ports provided by the data service deployment (name and number). | @@ -54,29 +54,29 @@ ConnectionDetails of data service. ### ConnectionInfo {#connectioninfo} -Connection Information for the Deployment Topology. +Connection Information for the DataServiceDeployment Topology. | Field | Type | Description | | ----- | ---- | ----------- | -| pods | [repeated PodInfo](#podinfo) | Ready pods. | -| not_ready_pods | [repeated PodInfo](#podinfo) | Pods that are not ready. | -| connection_details | [ ConnectionDetails](#connectiondetails) | ConnectionDetails of data service. | +| ready_instances | [repeated InstanceInfo](#instanceinfo) | Ready instances. | +| not_ready_instances | [repeated InstanceInfo](#instanceinfo) | Instances that are not ready. | +| connection_details | [ ConnectionDetails](#connectiondetails) | ConnectionDetails of data service deployment. | | cluster_details | [ google.protobuf.Struct](#googleprotobufstruct) | Stores details about the cluster. | -### DeploymentTopology {#deploymenttopology} -A deployment topology contains a number of nodes that have various attributes as a collective group. -This is consumed in a deployment and the functionality is being controlled by the CRUD APIs of deployment. +### DataServiceDeploymentTopology {#dataservicedeploymenttopology} +A DataService topology contains a number of nodes that have various attributes as a collective group. +This is consumed in a DataService Deployment and the functionality is being controlled by the CRUD APIs of DataService Deployment. | Field | Type | Description | | ----- | ---- | ----------- | -| name | [ string](#string) | Name of the deployment topology. | -| description | [ string](#string) | Description of the deployment topology. | -| replicas | [ int64](#int64) | Number of replicas of data services. | +| name | [ string](#string) | Name of the DataServiceDeployment topology. | +| description | [ string](#string) | Description of the DataServiceDeployment topology. | +| instances | [ int64](#int64) | Number of instances of data services. | | service_type | [ string](#string) | Service type are standard Kubernetes service types such as clusterIP, NodePort, load balancers, etc. | | service_name | [ string](#string) | Service name is the name of service as provided by user. | | load_balancer_source_ranges | [repeated string](#string) | Source IP ranges to use for the deployed Load Balancer. | @@ -87,29 +87,29 @@ This is consumed in a deployment and the functionality is being controlled by th -### DeploymentTopologyStatus {#deploymenttopologystatus} -Status of the deployment topology. It is consumed in Deployment. +### DataServiceDeploymentTopologyStatus {#dataservicedeploymenttopologystatus} +Status of the data service topology. It is consumed in DataServiceDeployment. | Field | Type | Description | | ----- | ---- | ----------- | -| health | [ DeploymentTopologyStatus.Health](#deploymenttopologystatushealth) | Health of the deployment topology. | -| phase | [ DeploymentTopologyStatus.Phase](#deploymenttopologystatusphase) | Phase of the Deployment Topology. | -| ready_replicas | [ int64](#int64) | Number of replicas reported by Target Cluster that are up and running. | -| connection_info | [ ConnectionInfo](#connectioninfo) | Connection Information for the Deployment Topology. | +| health | [ DataServiceDeploymentTopologyStatus.Health](#dataservicedeploymenttopologystatushealth) | Health of the data service deployment topology. | +| phase | [ DataServiceDeploymentTopologyStatus.Phase](#dataservicedeploymenttopologystatusphase) | Phase of the DataServiceDeployment Topology. | +| ready_instances | [ int64](#int64) | Number of ready replicas reported by Target Cluster that are up and running. | +| connection_info | [ ConnectionInfo](#connectioninfo) | Connection Information for the DataServiceDeployment Topology. | -### PodInfo {#podinfo} -PodInfo contains information about a pod. +### InstanceInfo {#instanceinfo} +InstanceInfo contains information about a instance. | Field | Type | Description | | ----- | ---- | ----------- | -| ip | [ string](#string) | The IP of a pod. | -| name | [ string](#string) | Name is the Hostname of a pod. | -| worker_node | [ string](#string) | Node that hosts a particular pod. | +| ip | [ string](#string) | The IP of a instance. | +| name | [ string](#string) | Name is the Hostname of a instance. | +| worker_node | [ string](#string) | Node that hosts a particular instance. | @@ -142,21 +142,21 @@ Template. ## Enums -### DeploymentTopologyStatus.Health {#deploymenttopologystatushealth} -Enum for Health of the deployment topology. +### DataServiceDeploymentTopologyStatus.Health {#dataservicedeploymenttopologystatushealth} +Enum for Health of the data service topology. | Name | Number | Description | | ---- | ------ | ----------- | | UNKNOWN | 0 | Health is unknown. | -| UNAVAILABLE | 1 | Deployment Topology is Unavailable. | -| PARTIALLY_AVAILABLE | 2 | Deployment Topology is Partially available. | -| AVAILABLE | 3 | Deployment Topology is available. | +| UNAVAILABLE | 1 | DataServiceDeployment Topology is Unavailable. | +| PARTIALLY_AVAILABLE | 2 | DataServiceDeployment Topology is Partially available. | +| AVAILABLE | 3 | DataServiceDeployment Topology is available. | -### DeploymentTopologyStatus.Phase {#deploymenttopologystatusphase} -Enum for Phase of the Deployment Topology. +### DataServiceDeploymentTopologyStatus.Phase {#dataservicedeploymenttopologystatusphase} +Enum for Phase of the DataServiceDeployment Topology. | Name | Number | Description | | ---- | ------ | ----------- | diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymenttopology/apiv1/deploymenttopology.proto b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymenttopology/apiv1/dataservicedeploymenttopology.proto similarity index 56% rename from vendor/github.com/pure-px/apis/public/portworx/pds/deploymenttopology/apiv1/deploymenttopology.proto rename to vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymenttopology/apiv1/dataservicedeploymenttopology.proto index 5cb05b5af..fe471d8e9 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymenttopology/apiv1/deploymenttopology.proto +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymenttopology/apiv1/dataservicedeploymenttopology.proto @@ -14,27 +14,27 @@ // syntax = "proto3"; -package public.portworx.pds.deploymenttopology.v1; +package public.portworx.pds.dataservicedeploymenttopology.v1; import "google/api/field_behavior.proto"; import "google/protobuf/struct.proto"; -option go_package = "github.com/pure-px/apis/public/portworx/pds/deploymenttopology/apiv1;deploymenttopology"; +option go_package = "github.com/pure-px/apis/public/portworx/pds/dataservicedeploymenttopology/apiv1;dataservicedeploymenttopology"; option java_multiple_files = true; -option java_package = "com.public.portworx.pds.deploymenttopology.v1"; -option java_outer_classname = "DeploymentTopologyProto"; +option java_package = "com.public.portworx.pds.dataservicedeploymenttopology.v1"; +option java_outer_classname = "DataServiceDeploymentTopologyProto"; -// A deployment topology contains a number of nodes that have various attributes as a collective group. -// This is consumed in a deployment and the functionality is being controlled by the CRUD APIs of deployment. -message DeploymentTopology { - // Name of the deployment topology. +// A DataService topology contains a number of nodes that have various attributes as a collective group. +// This is consumed in a DataService Deployment and the functionality is being controlled by the CRUD APIs of DataService Deployment. +message DataServiceDeploymentTopology { + // Name of the DataServiceDeployment topology. string name = 1; - // Description of the deployment topology. + // Description of the DataServiceDeployment topology. string description = 2; - // Number of replicas of data services. - int64 replicas = 3; + // Number of instances of data services. + int64 instances = 3; // Service type are standard Kubernetes service types such as clusterIP, NodePort, load balancers, etc. string service_type = 4; @@ -67,27 +67,27 @@ message Template { map values = 3; } -// Status of the deployment topology. It is consumed in Deployment. -message DeploymentTopologyStatus { - // Enum for Health of the deployment topology. +// Status of the data service topology. It is consumed in DataServiceDeployment. +message DataServiceDeploymentTopologyStatus { + // Enum for Health of the data service topology. enum Health { // Health is unknown. UNKNOWN = 0; - // Deployment Topology is Unavailable. + // DataServiceDeployment Topology is Unavailable. UNAVAILABLE = 1; - // Deployment Topology is Partially available. + // DataServiceDeployment Topology is Partially available. PARTIALLY_AVAILABLE = 2; - // Deployment Topology is available. + // DataServiceDeployment Topology is available. AVAILABLE = 3; } - // Health of the deployment topology. + // Health of the data service deployment topology. Health health = 1; - // Enum for Phase of the Deployment Topology. + // Enum for Phase of the DataServiceDeployment Topology. enum Phase { // Unspecified status. PHASE_UNSPECIFIED = 0; @@ -114,48 +114,48 @@ message DeploymentTopologyStatus { TIMED_OUT = 7; } - // Phase of the Deployment Topology. + // Phase of the DataServiceDeployment Topology. Phase phase = 2; - // Number of replicas reported by Target Cluster that are up and running. - int64 ready_replicas = 3; + // Number of ready replicas reported by Target Cluster that are up and running. + int64 ready_instances = 3; - // Connection Information for the Deployment Topology. + // Connection Information for the DataServiceDeployment Topology. ConnectionInfo connection_info = 4; } -// Connection Information for the Deployment Topology. +// Connection Information for the DataServiceDeployment Topology. message ConnectionInfo { - // Ready pods. - repeated PodInfo pods = 1; + // Ready instances. + repeated InstanceInfo ready_instances = 1; - // Pods that are not ready. - repeated PodInfo not_ready_pods = 2; + // Instances that are not ready. + repeated InstanceInfo not_ready_instances = 2; - // ConnectionDetails of data service. + // ConnectionDetails of data service deployment. ConnectionDetails connection_details = 3; // Stores details about the cluster. google.protobuf.Struct cluster_details = 4; } -// PodInfo contains information about a pod. -message PodInfo { - // The IP of a pod. +// InstanceInfo contains information about a instance. +message InstanceInfo { + // The IP of a instance. string ip = 1; - // Name is the Hostname of a pod. + // Name is the Hostname of a instance. string name = 2; - // Node that hosts a particular pod. + // Node that hosts a particular instance. string worker_node = 3; } // ConnectionDetails of data service. message ConnectionDetails { - // Nodes of the data service. - repeated string nodes = 1; + // Instances of the data service deployment. + repeated string instances = 1; - // Ports provided by the data service (name and number). + // Ports provided by the data service deployment (name and number). map ports = 2; } \ No newline at end of file diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymenttopology/apiv1/dataservicedeploymenttopology.swagger.json b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymenttopology/apiv1/dataservicedeploymenttopology.swagger.json new file mode 100644 index 000000000..1cd88459e --- /dev/null +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/dataservicedeploymenttopology/apiv1/dataservicedeploymenttopology.swagger.json @@ -0,0 +1,39 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "public/portworx/pds/dataservicedeploymenttopology/apiv1/dataservicedeploymenttopology.proto", + "version": "version not set" + }, + "paths": {}, + "components": { + "schemas": { + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string" + } + }, + "additionalProperties": {} + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/protobufAny" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment.pb.go b/vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment.pb.go deleted file mode 100644 index 8326fffa9..000000000 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment.pb.go +++ /dev/null @@ -1,1577 +0,0 @@ -// Please use the following editor setup for this file: -// Tab size=2; Tabs as spaces; Clean up trailing whitepsace -// -// In vim add: au FileType proto setl sw=2 ts=2 expandtab list -// -// In vscode install vscode-proto3 extension and add this to your settings.json: -// "[proto3]": { -// "editor.tabSize": 2, -// "editor.insertSpaces": true, -// "editor.rulers": [80], -// "editor.detectIndentation": true, -// "files.trimTrailingWhitespace": true -// } -// - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 -// source: public/portworx/pds/deployment/apiv1/deployment.proto - -package deployment - -import ( - apiv1 "github.com/pure-px/apis/public/portworx/common/apiv1" - apiv11 "github.com/pure-px/apis/public/portworx/pds/deploymenttopology/apiv1" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - emptypb "google.golang.org/protobuf/types/known/emptypb" - structpb "google.golang.org/protobuf/types/known/structpb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// Enum for Health of the Deployment. -type Status_Health int32 - -const ( - // Health is unspecified. - Status_HEALTH_UNSPECIFIED Status_Health = 0 - // Deployment is Available. - Status_AVAILABLE Status_Health = 1 - // Deployment is PartiallyAvailable. - Status_PARTIALLY_AVAILABLE Status_Health = 2 - // Deployment is Unavailable. - Status_UNAVAILABLE Status_Health = 3 -) - -// Enum value maps for Status_Health. -var ( - Status_Health_name = map[int32]string{ - 0: "HEALTH_UNSPECIFIED", - 1: "AVAILABLE", - 2: "PARTIALLY_AVAILABLE", - 3: "UNAVAILABLE", - } - Status_Health_value = map[string]int32{ - "HEALTH_UNSPECIFIED": 0, - "AVAILABLE": 1, - "PARTIALLY_AVAILABLE": 2, - "UNAVAILABLE": 3, - } -) - -func (x Status_Health) Enum() *Status_Health { - p := new(Status_Health) - *p = x - return p -} - -func (x Status_Health) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Status_Health) Descriptor() protoreflect.EnumDescriptor { - return file_public_portworx_pds_deployment_apiv1_deployment_proto_enumTypes[0].Descriptor() -} - -func (Status_Health) Type() protoreflect.EnumType { - return &file_public_portworx_pds_deployment_apiv1_deployment_proto_enumTypes[0] -} - -func (x Status_Health) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Status_Health.Descriptor instead. -func (Status_Health) EnumDescriptor() ([]byte, []int) { - return file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDescGZIP(), []int{5, 0} -} - -// Enum for Status of the Deployment. -type Status_Phase int32 - -const ( - // Phase is unspecified. - Status_PHASE_UNSPECIFIED Status_Phase = 0 - // Restore of Deployment is in progress. - Status_RESTORING Status_Phase = 1 - // Deployment is Failed. - Status_FAILED Status_Phase = 2 - // Deployment is being deleted. - Status_DELETING Status_Phase = 3 - // Deployment is Preparing. - Status_PREPARING Status_Phase = 4 - // Deployment is Deploying. - Status_DEPLOYING Status_Phase = 5 - // Deployment is Deployed. - Status_DEPLOYED Status_Phase = 6 - // Deployment is Updating. - Status_UPDATING Status_Phase = 7 - // Deployment is Timeout. - Status_TIMED_OUT Status_Phase = 8 -) - -// Enum value maps for Status_Phase. -var ( - Status_Phase_name = map[int32]string{ - 0: "PHASE_UNSPECIFIED", - 1: "RESTORING", - 2: "FAILED", - 3: "DELETING", - 4: "PREPARING", - 5: "DEPLOYING", - 6: "DEPLOYED", - 7: "UPDATING", - 8: "TIMED_OUT", - } - Status_Phase_value = map[string]int32{ - "PHASE_UNSPECIFIED": 0, - "RESTORING": 1, - "FAILED": 2, - "DELETING": 3, - "PREPARING": 4, - "DEPLOYING": 5, - "DEPLOYED": 6, - "UPDATING": 7, - "TIMED_OUT": 8, - } -) - -func (x Status_Phase) Enum() *Status_Phase { - p := new(Status_Phase) - *p = x - return p -} - -func (x Status_Phase) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Status_Phase) Descriptor() protoreflect.EnumDescriptor { - return file_public_portworx_pds_deployment_apiv1_deployment_proto_enumTypes[1].Descriptor() -} - -func (Status_Phase) Type() protoreflect.EnumType { - return &file_public_portworx_pds_deployment_apiv1_deployment_proto_enumTypes[1] -} - -func (x Status_Phase) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Status_Phase.Descriptor instead. -func (Status_Phase) EnumDescriptor() ([]byte, []int) { - return file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDescGZIP(), []int{5, 1} -} - -// Resource representing a Data Service Deployment. -type Deployment struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Metadata of the resource. - Meta *apiv1.Meta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - // Desired configuration of the Deployment. - Config *Config `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` - // Current status of the Deployment. - Status *Status `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` -} - -func (x *Deployment) Reset() { - *x = Deployment{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Deployment) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Deployment) ProtoMessage() {} - -func (x *Deployment) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Deployment.ProtoReflect.Descriptor instead. -func (*Deployment) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDescGZIP(), []int{0} -} - -func (x *Deployment) GetMeta() *apiv1.Meta { - if x != nil { - return x.Meta - } - return nil -} - -func (x *Deployment) GetConfig() *Config { - if x != nil { - return x.Config - } - return nil -} - -func (x *Deployment) GetStatus() *Status { - if x != nil { - return x.Status - } - return nil -} - -// Credentials to access a Data Service Deployment. -type DeploymentCredentials struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // secret to access the resource. - Secret string `protobuf:"bytes,1,opt,name=secret,proto3" json:"secret,omitempty"` -} - -func (x *DeploymentCredentials) Reset() { - *x = DeploymentCredentials{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeploymentCredentials) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeploymentCredentials) ProtoMessage() {} - -func (x *DeploymentCredentials) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeploymentCredentials.ProtoReflect.Descriptor instead. -func (*DeploymentCredentials) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDescGZIP(), []int{1} -} - -func (x *DeploymentCredentials) GetSecret() string { - if x != nil { - return x.Secret - } - return "" -} - -// Desired configuration of the Deployment. -type Config struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // References to other objects. - References *References `protobuf:"bytes,1,opt,name=references,proto3" json:"references,omitempty"` - // TLS configuration for the Data Service. - TlsConfig *TLSConfig `protobuf:"bytes,2,opt,name=tls_config,json=tlsConfig,proto3" json:"tls_config,omitempty"` - // A deployment topology contains a number of nodes that have various attributes as a collective group. - DeploymentTopologies []*apiv11.DeploymentTopology `protobuf:"bytes,3,rep,name=deployment_topologies,json=deploymentTopologies,proto3" json:"deployment_topologies,omitempty"` -} - -func (x *Config) Reset() { - *x = Config{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Config) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Config) ProtoMessage() {} - -func (x *Config) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Config.ProtoReflect.Descriptor instead. -func (*Config) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDescGZIP(), []int{2} -} - -func (x *Config) GetReferences() *References { - if x != nil { - return x.References - } - return nil -} - -func (x *Config) GetTlsConfig() *TLSConfig { - if x != nil { - return x.TlsConfig - } - return nil -} - -func (x *Config) GetDeploymentTopologies() []*apiv11.DeploymentTopology { - if x != nil { - return x.DeploymentTopologies - } - return nil -} - -// TLS configuration for the Data Service. -type TLSConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Flag to enable TLS for the Data Service. - Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` - // Issuer (Certificate Authority) name for the TLS certificates. - IssuerName string `protobuf:"bytes,2,opt,name=issuer_name,json=issuerName,proto3" json:"issuer_name,omitempty"` -} - -func (x *TLSConfig) Reset() { - *x = TLSConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TLSConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TLSConfig) ProtoMessage() {} - -func (x *TLSConfig) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TLSConfig.ProtoReflect.Descriptor instead. -func (*TLSConfig) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDescGZIP(), []int{3} -} - -func (x *TLSConfig) GetEnabled() bool { - if x != nil { - return x.Enabled - } - return false -} - -func (x *TLSConfig) GetIssuerName() string { - if x != nil { - return x.IssuerName - } - return "" -} - -// References to other resources. -type References struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // UID of the target cluster in which Data Service will be deployed. - TargetClusterId string `protobuf:"bytes,1,opt,name=target_cluster_id,json=targetClusterId,proto3" json:"target_cluster_id,omitempty"` - // UID of the image to be used for the Data Service Deployment. - ImageId string `protobuf:"bytes,2,opt,name=image_id,json=imageId,proto3" json:"image_id,omitempty"` - // UID of the project to which DataService Deployment associated. - ProjectId string `protobuf:"bytes,3,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // UID of the restore id for the Deployment. - RestoreId string `protobuf:"bytes,4,opt,name=restore_id,json=restoreId,proto3" json:"restore_id,omitempty"` -} - -func (x *References) Reset() { - *x = References{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *References) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*References) ProtoMessage() {} - -func (x *References) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use References.ProtoReflect.Descriptor instead. -func (*References) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDescGZIP(), []int{4} -} - -func (x *References) GetTargetClusterId() string { - if x != nil { - return x.TargetClusterId - } - return "" -} - -func (x *References) GetImageId() string { - if x != nil { - return x.ImageId - } - return "" -} - -func (x *References) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *References) GetRestoreId() string { - if x != nil { - return x.RestoreId - } - return "" -} - -// Status of the Deployment. -type Status struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Health of the Deployment. - Health Status_Health `protobuf:"varint,1,opt,name=health,proto3,enum=public.portworx.pds.deployment.v1.Status_Health" json:"health,omitempty"` - // Status of the Deployment. - Phase Status_Phase `protobuf:"varint,2,opt,name=phase,proto3,enum=public.portworx.pds.deployment.v1.Status_Phase" json:"phase,omitempty"` - // ConnectionDetails urls, ports, credentials, etc for connecting to the data service. - ConnectionInfo *structpb.Struct `protobuf:"bytes,3,opt,name=connection_info,json=connectionInfo,proto3" json:"connection_info,omitempty"` - // Initialize used to control startup scripts. - Initialized string `protobuf:"bytes,4,opt,name=initialized,proto3" json:"initialized,omitempty"` - // Status of the deployment topology. - DeploymentTopologyStatus []*apiv11.DeploymentTopologyStatus `protobuf:"bytes,5,rep,name=deployment_topology_status,json=deploymentTopologyStatus,proto3" json:"deployment_topology_status,omitempty"` -} - -func (x *Status) Reset() { - *x = Status{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Status) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Status) ProtoMessage() {} - -func (x *Status) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Status.ProtoReflect.Descriptor instead. -func (*Status) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDescGZIP(), []int{5} -} - -func (x *Status) GetHealth() Status_Health { - if x != nil { - return x.Health - } - return Status_HEALTH_UNSPECIFIED -} - -func (x *Status) GetPhase() Status_Phase { - if x != nil { - return x.Phase - } - return Status_PHASE_UNSPECIFIED -} - -func (x *Status) GetConnectionInfo() *structpb.Struct { - if x != nil { - return x.ConnectionInfo - } - return nil -} - -func (x *Status) GetInitialized() string { - if x != nil { - return x.Initialized - } - return "" -} - -func (x *Status) GetDeploymentTopologyStatus() []*apiv11.DeploymentTopologyStatus { - if x != nil { - return x.DeploymentTopologyStatus - } - return nil -} - -// Request to get the Deployment resource. -type GetDeploymentRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // UID of the Deployment. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *GetDeploymentRequest) Reset() { - *x = GetDeploymentRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetDeploymentRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetDeploymentRequest) ProtoMessage() {} - -func (x *GetDeploymentRequest) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetDeploymentRequest.ProtoReflect.Descriptor instead. -func (*GetDeploymentRequest) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDescGZIP(), []int{6} -} - -func (x *GetDeploymentRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -// Request to get the DeploymentCredentials resource. -type GetDeploymentCredentialsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // UID of the Deployment. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *GetDeploymentCredentialsRequest) Reset() { - *x = GetDeploymentCredentialsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetDeploymentCredentialsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetDeploymentCredentialsRequest) ProtoMessage() {} - -func (x *GetDeploymentCredentialsRequest) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetDeploymentCredentialsRequest.ProtoReflect.Descriptor instead. -func (*GetDeploymentCredentialsRequest) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDescGZIP(), []int{7} -} - -func (x *GetDeploymentCredentialsRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -// Request to delete the Deployment resource. -type DeleteDeploymentRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // UID of the Deployment. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *DeleteDeploymentRequest) Reset() { - *x = DeleteDeploymentRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteDeploymentRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteDeploymentRequest) ProtoMessage() {} - -func (x *DeleteDeploymentRequest) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteDeploymentRequest.ProtoReflect.Descriptor instead. -func (*DeleteDeploymentRequest) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDescGZIP(), []int{8} -} - -func (x *DeleteDeploymentRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -// Request to create the Deployment resource. -type CreateDeploymentRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // UID of the namespace resource where this deployment will be created. - // (-- api-linter: core::0133::request-unknown-fields=disabled - // - // aip.dev/not-precedent: We need this field for to support creation of - // the resource in the namespace context. --) - NamespaceId string `protobuf:"bytes,1,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"` - // UID of the project. - // (-- api-linter: core::0133::request-unknown-fields=disabled - // - // aip.dev/not-precedent: We need this field for to know the project with which the deployment is associated with. --) - ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // Deployment resource. - Deployment *Deployment `protobuf:"bytes,3,opt,name=deployment,proto3" json:"deployment,omitempty"` -} - -func (x *CreateDeploymentRequest) Reset() { - *x = CreateDeploymentRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreateDeploymentRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateDeploymentRequest) ProtoMessage() {} - -func (x *CreateDeploymentRequest) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreateDeploymentRequest.ProtoReflect.Descriptor instead. -func (*CreateDeploymentRequest) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDescGZIP(), []int{9} -} - -func (x *CreateDeploymentRequest) GetNamespaceId() string { - if x != nil { - return x.NamespaceId - } - return "" -} - -func (x *CreateDeploymentRequest) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *CreateDeploymentRequest) GetDeployment() *Deployment { - if x != nil { - return x.Deployment - } - return nil -} - -// Request to update the Deployment resource. -type UpdateDeploymentRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Deployment resource. - Deployment *Deployment `protobuf:"bytes,1,opt,name=deployment,proto3" json:"deployment,omitempty"` -} - -func (x *UpdateDeploymentRequest) Reset() { - *x = UpdateDeploymentRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UpdateDeploymentRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateDeploymentRequest) ProtoMessage() {} - -func (x *UpdateDeploymentRequest) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateDeploymentRequest.ProtoReflect.Descriptor instead. -func (*UpdateDeploymentRequest) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDescGZIP(), []int{10} -} - -func (x *UpdateDeploymentRequest) GetDeployment() *Deployment { - if x != nil { - return x.Deployment - } - return nil -} - -// Request to list the Deployment resources. -type ListDeploymentsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Specifies a filter to list the Deployments. - // - // Types that are assignable to ListBy: - // - // *ListDeploymentsRequest_AccountId - // *ListDeploymentsRequest_TenantId - // *ListDeploymentsRequest_ClusterId - // *ListDeploymentsRequest_NamespaceId - // *ListDeploymentsRequest_ProjectId - ListBy isListDeploymentsRequest_ListBy `protobuf_oneof:"list_by"` - // Pagination parameters for listing deployments. - Pagination *apiv1.PageBasedPaginationRequest `protobuf:"bytes,6,opt,name=pagination,proto3" json:"pagination,omitempty"` - // Sorting details using which requested list of deployments to be sorted. - Sort *apiv1.Sort `protobuf:"bytes,7,opt,name=sort,proto3" json:"sort,omitempty"` -} - -func (x *ListDeploymentsRequest) Reset() { - *x = ListDeploymentsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListDeploymentsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListDeploymentsRequest) ProtoMessage() {} - -func (x *ListDeploymentsRequest) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListDeploymentsRequest.ProtoReflect.Descriptor instead. -func (*ListDeploymentsRequest) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDescGZIP(), []int{11} -} - -func (m *ListDeploymentsRequest) GetListBy() isListDeploymentsRequest_ListBy { - if m != nil { - return m.ListBy - } - return nil -} - -func (x *ListDeploymentsRequest) GetAccountId() string { - if x, ok := x.GetListBy().(*ListDeploymentsRequest_AccountId); ok { - return x.AccountId - } - return "" -} - -func (x *ListDeploymentsRequest) GetTenantId() string { - if x, ok := x.GetListBy().(*ListDeploymentsRequest_TenantId); ok { - return x.TenantId - } - return "" -} - -func (x *ListDeploymentsRequest) GetClusterId() string { - if x, ok := x.GetListBy().(*ListDeploymentsRequest_ClusterId); ok { - return x.ClusterId - } - return "" -} - -func (x *ListDeploymentsRequest) GetNamespaceId() string { - if x, ok := x.GetListBy().(*ListDeploymentsRequest_NamespaceId); ok { - return x.NamespaceId - } - return "" -} - -func (x *ListDeploymentsRequest) GetProjectId() string { - if x, ok := x.GetListBy().(*ListDeploymentsRequest_ProjectId); ok { - return x.ProjectId - } - return "" -} - -func (x *ListDeploymentsRequest) GetPagination() *apiv1.PageBasedPaginationRequest { - if x != nil { - return x.Pagination - } - return nil -} - -func (x *ListDeploymentsRequest) GetSort() *apiv1.Sort { - if x != nil { - return x.Sort - } - return nil -} - -type isListDeploymentsRequest_ListBy interface { - isListDeploymentsRequest_ListBy() -} - -type ListDeploymentsRequest_AccountId struct { - // UID of the account. - AccountId string `protobuf:"bytes,1,opt,name=account_id,json=accountId,proto3,oneof"` -} - -type ListDeploymentsRequest_TenantId struct { - // UID of the tenant. - TenantId string `protobuf:"bytes,2,opt,name=tenant_id,json=tenantId,proto3,oneof"` -} - -type ListDeploymentsRequest_ClusterId struct { - // UID of the target cluster. - ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3,oneof"` -} - -type ListDeploymentsRequest_NamespaceId struct { - // UID of the namespace. - NamespaceId string `protobuf:"bytes,4,opt,name=namespace_id,json=namespaceId,proto3,oneof"` -} - -type ListDeploymentsRequest_ProjectId struct { - // UID of the project. - ProjectId string `protobuf:"bytes,5,opt,name=project_id,json=projectId,proto3,oneof"` -} - -func (*ListDeploymentsRequest_AccountId) isListDeploymentsRequest_ListBy() {} - -func (*ListDeploymentsRequest_TenantId) isListDeploymentsRequest_ListBy() {} - -func (*ListDeploymentsRequest_ClusterId) isListDeploymentsRequest_ListBy() {} - -func (*ListDeploymentsRequest_NamespaceId) isListDeploymentsRequest_ListBy() {} - -func (*ListDeploymentsRequest_ProjectId) isListDeploymentsRequest_ListBy() {} - -// Response to list Deployment request. -type ListDeploymentsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // List of deployment resources. - Deployments []*Deployment `protobuf:"bytes,1,rep,name=deployments,proto3" json:"deployments,omitempty"` - // Pagination metadata for this response. - // (-- api-linter: core::0132::response-unknown-fields=disabled - // - // aip.dev/not-precedent: We need this field for pagination. --) - Pagination *apiv1.PageBasedPaginationResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (x *ListDeploymentsResponse) Reset() { - *x = ListDeploymentsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListDeploymentsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListDeploymentsResponse) ProtoMessage() {} - -func (x *ListDeploymentsResponse) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListDeploymentsResponse.ProtoReflect.Descriptor instead. -func (*ListDeploymentsResponse) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDescGZIP(), []int{12} -} - -func (x *ListDeploymentsResponse) GetDeployments() []*Deployment { - if x != nil { - return x.Deployments - } - return nil -} - -func (x *ListDeploymentsResponse) GetPagination() *apiv1.PageBasedPaginationResponse { - if x != nil { - return x.Pagination - } - return nil -} - -var File_public_portworx_pds_deployment_apiv1_deployment_proto protoreflect.FileDescriptor - -var file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDesc = []byte{ - 0x0a, 0x35, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, - 0x78, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x21, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, - 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, - 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, - 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x45, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x70, - 0x64, 0x73, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, - 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, - 0x76, 0x31, 0x2f, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, - 0x31, 0x2f, 0x73, 0x6f, 0x72, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xcc, 0x01, 0x0a, - 0x0a, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x12, 0x41, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x29, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, - 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x46, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x2f, 0x0a, 0x15, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x9d, 0x02, 0x0a, - 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4d, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, - 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x0a, 0x72, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x50, 0x0a, 0x0a, 0x74, 0x6c, 0x73, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, - 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, - 0x4c, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x09, 0x74, - 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x72, 0x0a, 0x15, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x6f, - 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x14, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x22, 0x46, 0x0a, 0x09, - 0x54, 0x4c, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa0, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x11, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, - 0x22, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0a, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x72, 0x65, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x64, 0x22, 0xef, 0x04, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x48, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x48, 0x65, - 0x61, 0x6c, 0x74, 0x68, 0x52, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x45, 0x0a, 0x05, - 0x70, 0x68, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, - 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x52, 0x05, 0x70, 0x68, - 0x61, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, - 0x69, 0x7a, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x81, 0x01, 0x0a, 0x1a, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x5f, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, - 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, - 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x18, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x70, - 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x59, 0x0a, 0x06, 0x48, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x12, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, - 0x09, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, - 0x50, 0x41, 0x52, 0x54, 0x49, 0x41, 0x4c, 0x4c, 0x59, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, - 0x42, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x41, 0x56, 0x41, 0x49, 0x4c, - 0x41, 0x42, 0x4c, 0x45, 0x10, 0x03, 0x22, 0x90, 0x01, 0x0a, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, - 0x12, 0x15, 0x0a, 0x11, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x45, 0x53, 0x54, 0x4f, - 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, - 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, - 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, - 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0c, - 0x0a, 0x08, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x45, 0x44, 0x10, 0x06, 0x12, 0x0c, 0x0a, 0x08, - 0x55, 0x50, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x49, - 0x4d, 0x45, 0x44, 0x5f, 0x4f, 0x55, 0x54, 0x10, 0x08, 0x22, 0x26, 0x0a, 0x14, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x22, 0x31, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x22, 0x29, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, - 0xaa, 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x4d, 0x0a, - 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, - 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x68, 0x0a, 0x17, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, - 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xdb, 0x02, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1f, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, - 0x64, 0x12, 0x1f, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x5a, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, - 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x6f, 0x72, 0x74, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x6c, 0x69, 0x73, - 0x74, 0x5f, 0x62, 0x79, 0x22, 0xc2, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x4f, 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, - 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x12, 0x56, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, - 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, - 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x32, 0xa2, 0x08, 0x0a, 0x11, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0xb5, 0x01, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, - 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x22, - 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x01, 0x2a, 0x22, 0x2b, 0x2f, 0x70, 0x64, 0x73, - 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x99, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x37, 0x2e, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, - 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x70, 0x64, 0x73, 0x2f, - 0x76, 0x31, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, - 0x69, 0x64, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x3a, 0x0a, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x29, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, - 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x75, 0x69, - 0x64, 0x7d, 0x12, 0x88, 0x01, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x20, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1a, 0x2a, 0x18, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xa5, 0x01, - 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x12, 0x39, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, - 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, - 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, - 0x12, 0x13, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0xc6, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x73, 0x12, 0x42, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, - 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, - 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, - 0x31, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, - 0x64, 0x7d, 0x3a, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x42, 0x83, - 0x01, 0x0a, 0x25, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x47, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, 0x2f, - 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDescOnce sync.Once - file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDescData = file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDesc -) - -func file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDescGZIP() []byte { - file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDescOnce.Do(func() { - file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDescData = protoimpl.X.CompressGZIP(file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDescData) - }) - return file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDescData -} - -var file_public_portworx_pds_deployment_apiv1_deployment_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes = make([]protoimpl.MessageInfo, 13) -var file_public_portworx_pds_deployment_apiv1_deployment_proto_goTypes = []interface{}{ - (Status_Health)(0), // 0: public.portworx.pds.deployment.v1.Status.Health - (Status_Phase)(0), // 1: public.portworx.pds.deployment.v1.Status.Phase - (*Deployment)(nil), // 2: public.portworx.pds.deployment.v1.Deployment - (*DeploymentCredentials)(nil), // 3: public.portworx.pds.deployment.v1.DeploymentCredentials - (*Config)(nil), // 4: public.portworx.pds.deployment.v1.Config - (*TLSConfig)(nil), // 5: public.portworx.pds.deployment.v1.TLSConfig - (*References)(nil), // 6: public.portworx.pds.deployment.v1.References - (*Status)(nil), // 7: public.portworx.pds.deployment.v1.Status - (*GetDeploymentRequest)(nil), // 8: public.portworx.pds.deployment.v1.GetDeploymentRequest - (*GetDeploymentCredentialsRequest)(nil), // 9: public.portworx.pds.deployment.v1.GetDeploymentCredentialsRequest - (*DeleteDeploymentRequest)(nil), // 10: public.portworx.pds.deployment.v1.DeleteDeploymentRequest - (*CreateDeploymentRequest)(nil), // 11: public.portworx.pds.deployment.v1.CreateDeploymentRequest - (*UpdateDeploymentRequest)(nil), // 12: public.portworx.pds.deployment.v1.UpdateDeploymentRequest - (*ListDeploymentsRequest)(nil), // 13: public.portworx.pds.deployment.v1.ListDeploymentsRequest - (*ListDeploymentsResponse)(nil), // 14: public.portworx.pds.deployment.v1.ListDeploymentsResponse - (*apiv1.Meta)(nil), // 15: public.portworx.common.v1.Meta - (*apiv11.DeploymentTopology)(nil), // 16: public.portworx.pds.deploymenttopology.v1.DeploymentTopology - (*structpb.Struct)(nil), // 17: google.protobuf.Struct - (*apiv11.DeploymentTopologyStatus)(nil), // 18: public.portworx.pds.deploymenttopology.v1.DeploymentTopologyStatus - (*apiv1.PageBasedPaginationRequest)(nil), // 19: public.portworx.common.v1.PageBasedPaginationRequest - (*apiv1.Sort)(nil), // 20: public.portworx.common.v1.Sort - (*apiv1.PageBasedPaginationResponse)(nil), // 21: public.portworx.common.v1.PageBasedPaginationResponse - (*emptypb.Empty)(nil), // 22: google.protobuf.Empty -} -var file_public_portworx_pds_deployment_apiv1_deployment_proto_depIdxs = []int32{ - 15, // 0: public.portworx.pds.deployment.v1.Deployment.meta:type_name -> public.portworx.common.v1.Meta - 4, // 1: public.portworx.pds.deployment.v1.Deployment.config:type_name -> public.portworx.pds.deployment.v1.Config - 7, // 2: public.portworx.pds.deployment.v1.Deployment.status:type_name -> public.portworx.pds.deployment.v1.Status - 6, // 3: public.portworx.pds.deployment.v1.Config.references:type_name -> public.portworx.pds.deployment.v1.References - 5, // 4: public.portworx.pds.deployment.v1.Config.tls_config:type_name -> public.portworx.pds.deployment.v1.TLSConfig - 16, // 5: public.portworx.pds.deployment.v1.Config.deployment_topologies:type_name -> public.portworx.pds.deploymenttopology.v1.DeploymentTopology - 0, // 6: public.portworx.pds.deployment.v1.Status.health:type_name -> public.portworx.pds.deployment.v1.Status.Health - 1, // 7: public.portworx.pds.deployment.v1.Status.phase:type_name -> public.portworx.pds.deployment.v1.Status.Phase - 17, // 8: public.portworx.pds.deployment.v1.Status.connection_info:type_name -> google.protobuf.Struct - 18, // 9: public.portworx.pds.deployment.v1.Status.deployment_topology_status:type_name -> public.portworx.pds.deploymenttopology.v1.DeploymentTopologyStatus - 2, // 10: public.portworx.pds.deployment.v1.CreateDeploymentRequest.deployment:type_name -> public.portworx.pds.deployment.v1.Deployment - 2, // 11: public.portworx.pds.deployment.v1.UpdateDeploymentRequest.deployment:type_name -> public.portworx.pds.deployment.v1.Deployment - 19, // 12: public.portworx.pds.deployment.v1.ListDeploymentsRequest.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationRequest - 20, // 13: public.portworx.pds.deployment.v1.ListDeploymentsRequest.sort:type_name -> public.portworx.common.v1.Sort - 2, // 14: public.portworx.pds.deployment.v1.ListDeploymentsResponse.deployments:type_name -> public.portworx.pds.deployment.v1.Deployment - 21, // 15: public.portworx.pds.deployment.v1.ListDeploymentsResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse - 11, // 16: public.portworx.pds.deployment.v1.DeploymentService.CreateDeployment:input_type -> public.portworx.pds.deployment.v1.CreateDeploymentRequest - 8, // 17: public.portworx.pds.deployment.v1.DeploymentService.GetDeployment:input_type -> public.portworx.pds.deployment.v1.GetDeploymentRequest - 12, // 18: public.portworx.pds.deployment.v1.DeploymentService.UpdateDeployment:input_type -> public.portworx.pds.deployment.v1.UpdateDeploymentRequest - 10, // 19: public.portworx.pds.deployment.v1.DeploymentService.DeleteDeployment:input_type -> public.portworx.pds.deployment.v1.DeleteDeploymentRequest - 13, // 20: public.portworx.pds.deployment.v1.DeploymentService.ListDeployments:input_type -> public.portworx.pds.deployment.v1.ListDeploymentsRequest - 9, // 21: public.portworx.pds.deployment.v1.DeploymentService.GetDeploymentCredentials:input_type -> public.portworx.pds.deployment.v1.GetDeploymentCredentialsRequest - 2, // 22: public.portworx.pds.deployment.v1.DeploymentService.CreateDeployment:output_type -> public.portworx.pds.deployment.v1.Deployment - 2, // 23: public.portworx.pds.deployment.v1.DeploymentService.GetDeployment:output_type -> public.portworx.pds.deployment.v1.Deployment - 2, // 24: public.portworx.pds.deployment.v1.DeploymentService.UpdateDeployment:output_type -> public.portworx.pds.deployment.v1.Deployment - 22, // 25: public.portworx.pds.deployment.v1.DeploymentService.DeleteDeployment:output_type -> google.protobuf.Empty - 14, // 26: public.portworx.pds.deployment.v1.DeploymentService.ListDeployments:output_type -> public.portworx.pds.deployment.v1.ListDeploymentsResponse - 3, // 27: public.portworx.pds.deployment.v1.DeploymentService.GetDeploymentCredentials:output_type -> public.portworx.pds.deployment.v1.DeploymentCredentials - 22, // [22:28] is the sub-list for method output_type - 16, // [16:22] is the sub-list for method input_type - 16, // [16:16] is the sub-list for extension type_name - 16, // [16:16] is the sub-list for extension extendee - 0, // [0:16] is the sub-list for field type_name -} - -func init() { file_public_portworx_pds_deployment_apiv1_deployment_proto_init() } -func file_public_portworx_pds_deployment_apiv1_deployment_proto_init() { - if File_public_portworx_pds_deployment_apiv1_deployment_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Deployment); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeploymentCredentials); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Config); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TLSConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*References); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Status); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDeploymentRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDeploymentCredentialsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteDeploymentRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateDeploymentRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateDeploymentRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListDeploymentsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListDeploymentsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes[11].OneofWrappers = []interface{}{ - (*ListDeploymentsRequest_AccountId)(nil), - (*ListDeploymentsRequest_TenantId)(nil), - (*ListDeploymentsRequest_ClusterId)(nil), - (*ListDeploymentsRequest_NamespaceId)(nil), - (*ListDeploymentsRequest_ProjectId)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDesc, - NumEnums: 2, - NumMessages: 13, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_public_portworx_pds_deployment_apiv1_deployment_proto_goTypes, - DependencyIndexes: file_public_portworx_pds_deployment_apiv1_deployment_proto_depIdxs, - EnumInfos: file_public_portworx_pds_deployment_apiv1_deployment_proto_enumTypes, - MessageInfos: file_public_portworx_pds_deployment_apiv1_deployment_proto_msgTypes, - }.Build() - File_public_portworx_pds_deployment_apiv1_deployment_proto = out.File - file_public_portworx_pds_deployment_apiv1_deployment_proto_rawDesc = nil - file_public_portworx_pds_deployment_apiv1_deployment_proto_goTypes = nil - file_public_portworx_pds_deployment_apiv1_deployment_proto_depIdxs = nil -} diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment.pb.gw.go b/vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment.pb.gw.go deleted file mode 100644 index 12b8edd3a..000000000 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment.pb.gw.go +++ /dev/null @@ -1,704 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: public/portworx/pds/deployment/apiv1/deployment.proto - -/* -Package deployment is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ -package deployment - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -func request_DeploymentService_CreateDeployment_0(ctx context.Context, marshaler runtime.Marshaler, client DeploymentServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateDeploymentRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["namespace_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace_id") - } - - protoReq.NamespaceId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace_id", err) - } - - msg, err := client.CreateDeployment(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_DeploymentService_CreateDeployment_0(ctx context.Context, marshaler runtime.Marshaler, server DeploymentServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateDeploymentRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["namespace_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace_id") - } - - protoReq.NamespaceId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace_id", err) - } - - msg, err := server.CreateDeployment(ctx, &protoReq) - return msg, metadata, err - -} - -func request_DeploymentService_GetDeployment_0(ctx context.Context, marshaler runtime.Marshaler, client DeploymentServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetDeploymentRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.GetDeployment(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_DeploymentService_GetDeployment_0(ctx context.Context, marshaler runtime.Marshaler, server DeploymentServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetDeploymentRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.GetDeployment(ctx, &protoReq) - return msg, metadata, err - -} - -func request_DeploymentService_UpdateDeployment_0(ctx context.Context, marshaler runtime.Marshaler, client DeploymentServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq UpdateDeploymentRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Deployment); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["deployment.meta.uid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "deployment.meta.uid") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "deployment.meta.uid", val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "deployment.meta.uid", err) - } - - msg, err := client.UpdateDeployment(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_DeploymentService_UpdateDeployment_0(ctx context.Context, marshaler runtime.Marshaler, server DeploymentServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq UpdateDeploymentRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Deployment); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["deployment.meta.uid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "deployment.meta.uid") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "deployment.meta.uid", val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "deployment.meta.uid", err) - } - - msg, err := server.UpdateDeployment(ctx, &protoReq) - return msg, metadata, err - -} - -func request_DeploymentService_DeleteDeployment_0(ctx context.Context, marshaler runtime.Marshaler, client DeploymentServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteDeploymentRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.DeleteDeployment(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_DeploymentService_DeleteDeployment_0(ctx context.Context, marshaler runtime.Marshaler, server DeploymentServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteDeploymentRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.DeleteDeployment(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_DeploymentService_ListDeployments_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_DeploymentService_ListDeployments_0(ctx context.Context, marshaler runtime.Marshaler, client DeploymentServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ListDeploymentsRequest - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_DeploymentService_ListDeployments_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.ListDeployments(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_DeploymentService_ListDeployments_0(ctx context.Context, marshaler runtime.Marshaler, server DeploymentServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ListDeploymentsRequest - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_DeploymentService_ListDeployments_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.ListDeployments(ctx, &protoReq) - return msg, metadata, err - -} - -func request_DeploymentService_GetDeploymentCredentials_0(ctx context.Context, marshaler runtime.Marshaler, client DeploymentServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetDeploymentCredentialsRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.GetDeploymentCredentials(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_DeploymentService_GetDeploymentCredentials_0(ctx context.Context, marshaler runtime.Marshaler, server DeploymentServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetDeploymentCredentialsRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.GetDeploymentCredentials(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterDeploymentServiceHandlerServer registers the http handlers for service DeploymentService to "mux". -// UnaryRPC :call DeploymentServiceServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterDeploymentServiceHandlerFromEndpoint instead. -func RegisterDeploymentServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server DeploymentServiceServer) error { - - mux.Handle("POST", pattern_DeploymentService_CreateDeployment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.pds.deployment.v1.DeploymentService/CreateDeployment", runtime.WithHTTPPathPattern("/pds/v1/namespace/{namespace_id}/deployment")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_DeploymentService_CreateDeployment_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_DeploymentService_CreateDeployment_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_DeploymentService_GetDeployment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.pds.deployment.v1.DeploymentService/GetDeployment", runtime.WithHTTPPathPattern("/pds/v1/deployments/{id}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_DeploymentService_GetDeployment_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_DeploymentService_GetDeployment_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_DeploymentService_UpdateDeployment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.pds.deployment.v1.DeploymentService/UpdateDeployment", runtime.WithHTTPPathPattern("/pds/v1/deployments/{deployment.meta.uid}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_DeploymentService_UpdateDeployment_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_DeploymentService_UpdateDeployment_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_DeploymentService_DeleteDeployment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.pds.deployment.v1.DeploymentService/DeleteDeployment", runtime.WithHTTPPathPattern("/pds/v1/deployments/{id}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_DeploymentService_DeleteDeployment_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_DeploymentService_DeleteDeployment_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_DeploymentService_ListDeployments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.pds.deployment.v1.DeploymentService/ListDeployments", runtime.WithHTTPPathPattern("/pds/v1/deployments")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_DeploymentService_ListDeployments_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_DeploymentService_ListDeployments_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_DeploymentService_GetDeploymentCredentials_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.pds.deployment.v1.DeploymentService/GetDeploymentCredentials", runtime.WithHTTPPathPattern("/pds/v1/deployments/{id}:credentials")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_DeploymentService_GetDeploymentCredentials_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_DeploymentService_GetDeploymentCredentials_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterDeploymentServiceHandlerFromEndpoint is same as RegisterDeploymentServiceHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterDeploymentServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.DialContext(ctx, endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterDeploymentServiceHandler(ctx, mux, conn) -} - -// RegisterDeploymentServiceHandler registers the http handlers for service DeploymentService to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterDeploymentServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterDeploymentServiceHandlerClient(ctx, mux, NewDeploymentServiceClient(conn)) -} - -// RegisterDeploymentServiceHandlerClient registers the http handlers for service DeploymentService -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "DeploymentServiceClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "DeploymentServiceClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "DeploymentServiceClient" to call the correct interceptors. -func RegisterDeploymentServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client DeploymentServiceClient) error { - - mux.Handle("POST", pattern_DeploymentService_CreateDeployment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.pds.deployment.v1.DeploymentService/CreateDeployment", runtime.WithHTTPPathPattern("/pds/v1/namespace/{namespace_id}/deployment")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_DeploymentService_CreateDeployment_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_DeploymentService_CreateDeployment_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_DeploymentService_GetDeployment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.pds.deployment.v1.DeploymentService/GetDeployment", runtime.WithHTTPPathPattern("/pds/v1/deployments/{id}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_DeploymentService_GetDeployment_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_DeploymentService_GetDeployment_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_DeploymentService_UpdateDeployment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.pds.deployment.v1.DeploymentService/UpdateDeployment", runtime.WithHTTPPathPattern("/pds/v1/deployments/{deployment.meta.uid}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_DeploymentService_UpdateDeployment_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_DeploymentService_UpdateDeployment_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_DeploymentService_DeleteDeployment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.pds.deployment.v1.DeploymentService/DeleteDeployment", runtime.WithHTTPPathPattern("/pds/v1/deployments/{id}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_DeploymentService_DeleteDeployment_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_DeploymentService_DeleteDeployment_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_DeploymentService_ListDeployments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.pds.deployment.v1.DeploymentService/ListDeployments", runtime.WithHTTPPathPattern("/pds/v1/deployments")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_DeploymentService_ListDeployments_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_DeploymentService_ListDeployments_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_DeploymentService_GetDeploymentCredentials_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.pds.deployment.v1.DeploymentService/GetDeploymentCredentials", runtime.WithHTTPPathPattern("/pds/v1/deployments/{id}:credentials")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_DeploymentService_GetDeploymentCredentials_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_DeploymentService_GetDeploymentCredentials_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_DeploymentService_CreateDeployment_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"pds", "v1", "namespace", "namespace_id", "deployment"}, "")) - - pattern_DeploymentService_GetDeployment_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"pds", "v1", "deployments", "id"}, "")) - - pattern_DeploymentService_UpdateDeployment_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"pds", "v1", "deployments", "deployment.meta.uid"}, "")) - - pattern_DeploymentService_DeleteDeployment_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"pds", "v1", "deployments", "id"}, "")) - - pattern_DeploymentService_ListDeployments_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"pds", "v1", "deployments"}, "")) - - pattern_DeploymentService_GetDeploymentCredentials_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"pds", "v1", "deployments", "id"}, "credentials")) -) - -var ( - forward_DeploymentService_CreateDeployment_0 = runtime.ForwardResponseMessage - - forward_DeploymentService_GetDeployment_0 = runtime.ForwardResponseMessage - - forward_DeploymentService_UpdateDeployment_0 = runtime.ForwardResponseMessage - - forward_DeploymentService_DeleteDeployment_0 = runtime.ForwardResponseMessage - - forward_DeploymentService_ListDeployments_0 = runtime.ForwardResponseMessage - - forward_DeploymentService_GetDeploymentCredentials_0 = runtime.ForwardResponseMessage -) diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment.pb.md b/vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment.pb.md deleted file mode 100644 index 9ccc628e7..000000000 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment.pb.md +++ /dev/null @@ -1,300 +0,0 @@ -[//]: # (Generated by grpc-framework using protoc-gen-doc) -[//]: # (Do not edit) - - -# deployment - -## Contents - -- Services - - [DeploymentService](#servicepublicportworxpdsdeploymentv1deploymentservice) - - - -- Messages - - [Config](#config) - - [CreateDeploymentRequest](#createdeploymentrequest) - - [DeleteDeploymentRequest](#deletedeploymentrequest) - - [Deployment](#deployment) - - [DeploymentCredentials](#deploymentcredentials) - - [GetDeploymentCredentialsRequest](#getdeploymentcredentialsrequest) - - [GetDeploymentRequest](#getdeploymentrequest) - - [ListDeploymentsRequest](#listdeploymentsrequest) - - [ListDeploymentsResponse](#listdeploymentsresponse) - - [References](#references) - - [Status](#status) - - [TLSConfig](#tlsconfig) - - [UpdateDeploymentRequest](#updatedeploymentrequest) - - - - -- [Scalar Value Types](#scalar-value-types) - - - - -## DeploymentService {#servicepublicportworxpdsdeploymentv1deploymentservice} -DeploymentService serves Deployment resource APIs. - -### CreateDeployment {#methodpublicportworxpdsdeploymentv1deploymentservicecreatedeployment} - -> **rpc** CreateDeployment([CreateDeploymentRequest](#createdeploymentrequest)) - [Deployment](#deployment) - -CreateDeployment API creates the Deployment resource. -### GetDeployment {#methodpublicportworxpdsdeploymentv1deploymentservicegetdeployment} - -> **rpc** GetDeployment([GetDeploymentRequest](#getdeploymentrequest)) - [Deployment](#deployment) - -GetDeployment API returns the Deployment resource. -### UpdateDeployment {#methodpublicportworxpdsdeploymentv1deploymentserviceupdatedeployment} - -> **rpc** UpdateDeployment([UpdateDeploymentRequest](#updatedeploymentrequest)) - [Deployment](#deployment) - -UpdateDeployment API updates the Deployment resource. -### DeleteDeployment {#methodpublicportworxpdsdeploymentv1deploymentservicedeletedeployment} - -> **rpc** DeleteDeployment([DeleteDeploymentRequest](#deletedeploymentrequest)) - [.google.protobuf.Empty](#googleprotobufempty) - -DeleteDeployment API deletes the Deployment resource. -### ListDeployments {#methodpublicportworxpdsdeploymentv1deploymentservicelistdeployments} - -> **rpc** ListDeployments([ListDeploymentsRequest](#listdeploymentsrequest)) - [ListDeploymentsResponse](#listdeploymentsresponse) - -ListDeployments API lists the Deployment resources. -### GetDeploymentCredentials {#methodpublicportworxpdsdeploymentv1deploymentservicegetdeploymentcredentials} - -> **rpc** GetDeploymentCredentials([GetDeploymentCredentialsRequest](#getdeploymentcredentialsrequest)) - [DeploymentCredentials](#deploymentcredentials) - -GetDeploymentCredentials API returns the Credentials to be used to access the Deployment. - - - -## Messages - - -### Config {#config} -Desired configuration of the Deployment. - - -| Field | Type | Description | -| ----- | ---- | ----------- | -| references | [ References](#references) | References to other objects. | -| tls_config | [ TLSConfig](#tlsconfig) | TLS configuration for the Data Service. | -| deployment_topologies | [repeated public.portworx.pds.deploymenttopology.v1.DeploymentTopology](#publicportworxpdsdeploymenttopologyv1deploymenttopology) | A deployment topology contains a number of nodes that have various attributes as a collective group. | - - - - -### CreateDeploymentRequest {#createdeploymentrequest} -Request to create the Deployment resource. - - -| Field | Type | Description | -| ----- | ---- | ----------- | -| namespace_id | [ string](#string) | UID of the namespace resource where this deployment will be created. (-- api-linter: core::0133::request-unknown-fields=disabled aip.dev/not-precedent: We need this field for to support creation of the resource in the namespace context. --) | -| project_id | [ string](#string) | UID of the project. (-- api-linter: core::0133::request-unknown-fields=disabled aip.dev/not-precedent: We need this field for to know the project with which the deployment is associated with. --) | -| deployment | [ Deployment](#deployment) | Deployment resource. | - - - - -### DeleteDeploymentRequest {#deletedeploymentrequest} -Request to delete the Deployment resource. - - -| Field | Type | Description | -| ----- | ---- | ----------- | -| id | [ string](#string) | UID of the Deployment. | - - - - -### Deployment {#deployment} -Resource representing a Data Service Deployment. - - -| Field | Type | Description | -| ----- | ---- | ----------- | -| meta | [ public.portworx.common.v1.Meta](#publicportworxcommonv1meta) | Metadata of the resource. | -| config | [ Config](#config) | Desired configuration of the Deployment. | -| status | [ Status](#status) | Current status of the Deployment. | - - - - -### DeploymentCredentials {#deploymentcredentials} -Credentials to access a Data Service Deployment. - - -| Field | Type | Description | -| ----- | ---- | ----------- | -| secret | [ string](#string) | secret to access the resource. | - - - - -### GetDeploymentCredentialsRequest {#getdeploymentcredentialsrequest} -Request to get the DeploymentCredentials resource. - - -| Field | Type | Description | -| ----- | ---- | ----------- | -| id | [ string](#string) | UID of the Deployment. | - - - - -### GetDeploymentRequest {#getdeploymentrequest} -Request to get the Deployment resource. - - -| Field | Type | Description | -| ----- | ---- | ----------- | -| id | [ string](#string) | UID of the Deployment. | - - - - -### ListDeploymentsRequest {#listdeploymentsrequest} -Request to list the Deployment resources. - - -| Field | Type | Description | -| ----- | ---- | ----------- | -| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.account_id | [ string](#string) | UID of the account. | -| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.tenant_id | [ string](#string) | UID of the tenant. | -| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.cluster_id | [ string](#string) | UID of the target cluster. | -| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.namespace_id | [ string](#string) | UID of the namespace. | -| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.project_id | [ string](#string) | UID of the project. | -| pagination | [ public.portworx.common.v1.PageBasedPaginationRequest](#publicportworxcommonv1pagebasedpaginationrequest) | Pagination parameters for listing deployments. | -| sort | [ public.portworx.common.v1.Sort](#publicportworxcommonv1sort) | Sorting details using which requested list of deployments to be sorted. | - - - - -### ListDeploymentsResponse {#listdeploymentsresponse} -Response to list Deployment request. - - -| Field | Type | Description | -| ----- | ---- | ----------- | -| deployments | [repeated Deployment](#deployment) | List of deployment resources. | -| pagination | [ public.portworx.common.v1.PageBasedPaginationResponse](#publicportworxcommonv1pagebasedpaginationresponse) | Pagination metadata for this response. (-- api-linter: core::0132::response-unknown-fields=disabled aip.dev/not-precedent: We need this field for pagination. --) | - - - - -### References {#references} -References to other resources. - - -| Field | Type | Description | -| ----- | ---- | ----------- | -| target_cluster_id | [ string](#string) | UID of the target cluster in which Data Service will be deployed. | -| image_id | [ string](#string) | UID of the image to be used for the Data Service Deployment. | -| project_id | [ string](#string) | UID of the project to which DataService Deployment associated. | -| restore_id | [ string](#string) | UID of the restore id for the Deployment. | - - - - -### Status {#status} -Status of the Deployment. - - -| Field | Type | Description | -| ----- | ---- | ----------- | -| health | [ Status.Health](#statushealth) | Health of the Deployment. | -| phase | [ Status.Phase](#statusphase) | Status of the Deployment. | -| connection_info | [ google.protobuf.Struct](#googleprotobufstruct) | ConnectionDetails urls, ports, credentials, etc for connecting to the data service. | -| initialized | [ string](#string) | Initialize used to control startup scripts. | -| deployment_topology_status | [repeated public.portworx.pds.deploymenttopology.v1.DeploymentTopologyStatus](#publicportworxpdsdeploymenttopologyv1deploymenttopologystatus) | Status of the deployment topology. | - - - - -### TLSConfig {#tlsconfig} -TLS configuration for the Data Service. - - -| Field | Type | Description | -| ----- | ---- | ----------- | -| enabled | [ bool](#bool) | Flag to enable TLS for the Data Service. | -| issuer_name | [ string](#string) | Issuer (Certificate Authority) name for the TLS certificates. | - - - - -### UpdateDeploymentRequest {#updatedeploymentrequest} -Request to update the Deployment resource. - - -| Field | Type | Description | -| ----- | ---- | ----------- | -| deployment | [ Deployment](#deployment) | Deployment resource. | - - - - -## Enums - - -### Status.Health {#statushealth} -Enum for Health of the Deployment. - -| Name | Number | Description | -| ---- | ------ | ----------- | -| HEALTH_UNSPECIFIED | 0 | Health is unspecified. | -| AVAILABLE | 1 | Deployment is Available. | -| PARTIALLY_AVAILABLE | 2 | Deployment is PartiallyAvailable. | -| UNAVAILABLE | 3 | Deployment is Unavailable. | - - - - -### Status.Phase {#statusphase} -Enum for Status of the Deployment. - -| Name | Number | Description | -| ---- | ------ | ----------- | -| PHASE_UNSPECIFIED | 0 | Phase is unspecified. | -| RESTORING | 1 | Restore of Deployment is in progress. | -| FAILED | 2 | Deployment is Failed. | -| DELETING | 3 | Deployment is being deleted. | -| PREPARING | 4 | Deployment is Preparing. | -| DEPLOYING | 5 | Deployment is Deploying. | -| DEPLOYED | 6 | Deployment is Deployed. | -| UPDATING | 7 | Deployment is Updating. | -| TIMED_OUT | 8 | Deployment is Timeout. | - - - - - -## Scalar Value Types - -| .proto Type | Notes | C++ Type | Java Type | Python Type | -| ----------- | ----- | -------- | --------- | ----------- | -|

double | | double | double | float | -|

float | | float | float | float | -|

int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | -|

int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | -|

uint32 | Uses variable-length encoding. | uint32 | int | int/long | -|

uint64 | Uses variable-length encoding. | uint64 | long | int/long | -|

sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | -|

sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | -|

fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int | -|

fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long | -|

sfixed32 | Always four bytes. | int32 | int | int | -|

sfixed64 | Always eight bytes. | int64 | long | int/long | -|

bool | | bool | boolean | boolean | -|

string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | -|

bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | - diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment.proto b/vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment.proto deleted file mode 100644 index a00f2cf27..000000000 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment.proto +++ /dev/null @@ -1,282 +0,0 @@ - -// Please use the following editor setup for this file: -// Tab size=2; Tabs as spaces; Clean up trailing whitepsace -// -// In vim add: au FileType proto setl sw=2 ts=2 expandtab list -// -// In vscode install vscode-proto3 extension and add this to your settings.json: -// "[proto3]": { -// "editor.tabSize": 2, -// "editor.insertSpaces": true, -// "editor.rulers": [80], -// "editor.detectIndentation": true, -// "files.trimTrailingWhitespace": true -// } -// - -syntax = "proto3"; - -package public.portworx.pds.deployment.v1; - -import "google/api/annotations.proto"; -import "google/api/field_behavior.proto"; -import "google/protobuf/empty.proto"; -import "google/protobuf/struct.proto"; -import "public/portworx/common/apiv1/meta.proto"; -import "public/portworx/pds/deploymenttopology/apiv1/deploymenttopology.proto"; -import "public/portworx/common/apiv1/pagination.proto"; -import "public/portworx/common/apiv1/sort.proto"; - -option go_package = "github.com/pure-px/apis/public/portworx/pds/deployment/apiv1;deployment"; -option java_multiple_files = true; -option java_package = "com.public.portworx.pds.deployment.v1"; -option java_outer_classname = "DeploymentProto"; - -// DeploymentService serves Deployment resource APIs. -service DeploymentService { - // CreateDeployment API creates the Deployment resource. - rpc CreateDeployment(CreateDeploymentRequest) - returns (Deployment) { - option(google.api.http) = { - post: "/pds/v1/namespace/{namespace_id}/deployment" - body: "*" - }; - } - - // GetDeployment API returns the Deployment resource. - rpc GetDeployment(GetDeploymentRequest) - returns (Deployment) { - option(google.api.http) = { - get: "/pds/v1/deployments/{id}" - }; - } - - // UpdateDeployment API updates the Deployment resource. - rpc UpdateDeployment(UpdateDeploymentRequest) - returns (Deployment) { - option(google.api.http) = { - put: "/pds/v1/deployments/{deployment.meta.uid}" - body: "deployment" - }; - } - - // DeleteDeployment API deletes the Deployment resource. - rpc DeleteDeployment(DeleteDeploymentRequest) - returns (google.protobuf.Empty) { - option(google.api.http) = { - delete: "/pds/v1/deployments/{id}" - }; - } - - // ListDeployments API lists the Deployment resources. - rpc ListDeployments(ListDeploymentsRequest) - returns (ListDeploymentsResponse) { - option(google.api.http) = { - get: "/pds/v1/deployments" - }; - } - - // GetDeploymentCredentials API returns the Credentials to be used to access the Deployment. - rpc GetDeploymentCredentials(GetDeploymentCredentialsRequest) - returns (DeploymentCredentials) { - option(google.api.http) = { - get: "/pds/v1/deployments/{id}:credentials" - }; - } -} - -// Resource representing a Data Service Deployment. -message Deployment { - // Metadata of the resource. - public.portworx.common.v1.Meta meta = 1; - - // Desired configuration of the Deployment. - Config config = 2; - - // Current status of the Deployment. - Status status = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; -} - -// Credentials to access a Data Service Deployment. -message DeploymentCredentials { - // secret to access the resource. - string secret = 1; -} - -// Desired configuration of the Deployment. -message Config { - // References to other objects. - References references = 1; - - // TLS configuration for the Data Service. - TLSConfig tls_config = 2 [(google.api.field_behavior) = OPTIONAL]; - - // A deployment topology contains a number of nodes that have various attributes as a collective group. - repeated public.portworx.pds.deploymenttopology.v1.DeploymentTopology deployment_topologies = 3; -} - -// TLS configuration for the Data Service. -message TLSConfig { - // Flag to enable TLS for the Data Service. - bool enabled = 1; - // Issuer (Certificate Authority) name for the TLS certificates. - string issuer_name = 2; -} - -// References to other resources. -message References { - // UID of the target cluster in which Data Service will be deployed. - string target_cluster_id = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // UID of the image to be used for the Data Service Deployment. - string image_id = 2; - - // UID of the project to which DataService Deployment associated. - string project_id = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // UID of the restore id for the Deployment. - string restore_id = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; -} - -// Status of the Deployment. -message Status { - // Enum for Health of the Deployment. - enum Health { - // Health is unspecified. - HEALTH_UNSPECIFIED = 0; - - // Deployment is Available. - AVAILABLE = 1; - - // Deployment is PartiallyAvailable. - PARTIALLY_AVAILABLE = 2; - - // Deployment is Unavailable. - UNAVAILABLE = 3; - } - - // Health of the Deployment. - Health health = 1; - - // Enum for Status of the Deployment. - enum Phase { - // Phase is unspecified. - PHASE_UNSPECIFIED = 0; - - // Restore of Deployment is in progress. - RESTORING = 1; - - // Deployment is Failed. - FAILED = 2; - - // Deployment is being deleted. - DELETING = 3; - - // Deployment is Preparing. - PREPARING = 4; - - // Deployment is Deploying. - DEPLOYING = 5; - - // Deployment is Deployed. - DEPLOYED = 6; - - // Deployment is Updating. - UPDATING = 7; - - // Deployment is Timeout. - TIMED_OUT = 8; - } - - // Status of the Deployment. - Phase phase = 2; - - // ConnectionDetails urls, ports, credentials, etc for connecting to the data service. - google.protobuf.Struct connection_info = 3; - - // Initialize used to control startup scripts. - string initialized = 4; - - // Status of the deployment topology. - repeated public.portworx.pds.deploymenttopology.v1.DeploymentTopologyStatus deployment_topology_status = 5; - -} - -// Request to get the Deployment resource. -message GetDeploymentRequest { - // UID of the Deployment. - string id = 1; -} - -// Request to get the DeploymentCredentials resource. -message GetDeploymentCredentialsRequest { - // UID of the Deployment. - string id = 1; -} - -// Request to delete the Deployment resource. -message DeleteDeploymentRequest { - // UID of the Deployment. - string id = 1; -} - -// Request to create the Deployment resource. -message CreateDeploymentRequest { - // UID of the namespace resource where this deployment will be created. - // (-- api-linter: core::0133::request-unknown-fields=disabled - // aip.dev/not-precedent: We need this field for to support creation of - // the resource in the namespace context. --) - string namespace_id = 1; - - // UID of the project. - // (-- api-linter: core::0133::request-unknown-fields=disabled - // aip.dev/not-precedent: We need this field for to know the project with which the deployment is associated with. --) - string project_id = 2; - - // Deployment resource. - Deployment deployment = 3; -} - -// Request to update the Deployment resource. -message UpdateDeploymentRequest { - // Deployment resource. - Deployment deployment = 1; -} - -// Request to list the Deployment resources. -message ListDeploymentsRequest { - // Specifies a filter to list the Deployments. - oneof list_by { - // UID of the account. - string account_id = 1; - - // UID of the tenant. - string tenant_id = 2; - - // UID of the target cluster. - string cluster_id = 3; - - // UID of the namespace. - string namespace_id = 4; - - // UID of the project. - string project_id = 5; - } - - // Pagination parameters for listing deployments. - public.portworx.common.v1.PageBasedPaginationRequest pagination = 6 [(google.api.field_behavior) = OPTIONAL]; - - // Sorting details using which requested list of deployments to be sorted. - public.portworx.common.v1.Sort sort = 7; -} - -// Response to list Deployment request. -message ListDeploymentsResponse { - // List of deployment resources. - repeated Deployment deployments = 1; - - // Pagination metadata for this response. - // (-- api-linter: core::0132::response-unknown-fields=disabled - // aip.dev/not-precedent: We need this field for pagination. --) - public.portworx.common.v1.PageBasedPaginationResponse pagination = 2; -} diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment_grpc.pb.go b/vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment_grpc.pb.go deleted file mode 100644 index f5214c216..000000000 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/deployment/apiv1/deployment_grpc.pb.go +++ /dev/null @@ -1,322 +0,0 @@ -// Please use the following editor setup for this file: -// Tab size=2; Tabs as spaces; Clean up trailing whitepsace -// -// In vim add: au FileType proto setl sw=2 ts=2 expandtab list -// -// In vscode install vscode-proto3 extension and add this to your settings.json: -// "[proto3]": { -// "editor.tabSize": 2, -// "editor.insertSpaces": true, -// "editor.rulers": [80], -// "editor.detectIndentation": true, -// "files.trimTrailingWhitespace": true -// } -// - -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.3 -// source: public/portworx/pds/deployment/apiv1/deployment.proto - -package deployment - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - emptypb "google.golang.org/protobuf/types/known/emptypb" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - DeploymentService_CreateDeployment_FullMethodName = "/public.portworx.pds.deployment.v1.DeploymentService/CreateDeployment" - DeploymentService_GetDeployment_FullMethodName = "/public.portworx.pds.deployment.v1.DeploymentService/GetDeployment" - DeploymentService_UpdateDeployment_FullMethodName = "/public.portworx.pds.deployment.v1.DeploymentService/UpdateDeployment" - DeploymentService_DeleteDeployment_FullMethodName = "/public.portworx.pds.deployment.v1.DeploymentService/DeleteDeployment" - DeploymentService_ListDeployments_FullMethodName = "/public.portworx.pds.deployment.v1.DeploymentService/ListDeployments" - DeploymentService_GetDeploymentCredentials_FullMethodName = "/public.portworx.pds.deployment.v1.DeploymentService/GetDeploymentCredentials" -) - -// DeploymentServiceClient is the client API for DeploymentService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type DeploymentServiceClient interface { - // CreateDeployment API creates the Deployment resource. - CreateDeployment(ctx context.Context, in *CreateDeploymentRequest, opts ...grpc.CallOption) (*Deployment, error) - // GetDeployment API returns the Deployment resource. - GetDeployment(ctx context.Context, in *GetDeploymentRequest, opts ...grpc.CallOption) (*Deployment, error) - // UpdateDeployment API updates the Deployment resource. - UpdateDeployment(ctx context.Context, in *UpdateDeploymentRequest, opts ...grpc.CallOption) (*Deployment, error) - // DeleteDeployment API deletes the Deployment resource. - DeleteDeployment(ctx context.Context, in *DeleteDeploymentRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) - // ListDeployments API lists the Deployment resources. - ListDeployments(ctx context.Context, in *ListDeploymentsRequest, opts ...grpc.CallOption) (*ListDeploymentsResponse, error) - // GetDeploymentCredentials API returns the Credentials to be used to access the Deployment. - GetDeploymentCredentials(ctx context.Context, in *GetDeploymentCredentialsRequest, opts ...grpc.CallOption) (*DeploymentCredentials, error) -} - -type deploymentServiceClient struct { - cc grpc.ClientConnInterface -} - -func NewDeploymentServiceClient(cc grpc.ClientConnInterface) DeploymentServiceClient { - return &deploymentServiceClient{cc} -} - -func (c *deploymentServiceClient) CreateDeployment(ctx context.Context, in *CreateDeploymentRequest, opts ...grpc.CallOption) (*Deployment, error) { - out := new(Deployment) - err := c.cc.Invoke(ctx, DeploymentService_CreateDeployment_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *deploymentServiceClient) GetDeployment(ctx context.Context, in *GetDeploymentRequest, opts ...grpc.CallOption) (*Deployment, error) { - out := new(Deployment) - err := c.cc.Invoke(ctx, DeploymentService_GetDeployment_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *deploymentServiceClient) UpdateDeployment(ctx context.Context, in *UpdateDeploymentRequest, opts ...grpc.CallOption) (*Deployment, error) { - out := new(Deployment) - err := c.cc.Invoke(ctx, DeploymentService_UpdateDeployment_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *deploymentServiceClient) DeleteDeployment(ctx context.Context, in *DeleteDeploymentRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, DeploymentService_DeleteDeployment_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *deploymentServiceClient) ListDeployments(ctx context.Context, in *ListDeploymentsRequest, opts ...grpc.CallOption) (*ListDeploymentsResponse, error) { - out := new(ListDeploymentsResponse) - err := c.cc.Invoke(ctx, DeploymentService_ListDeployments_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *deploymentServiceClient) GetDeploymentCredentials(ctx context.Context, in *GetDeploymentCredentialsRequest, opts ...grpc.CallOption) (*DeploymentCredentials, error) { - out := new(DeploymentCredentials) - err := c.cc.Invoke(ctx, DeploymentService_GetDeploymentCredentials_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// DeploymentServiceServer is the server API for DeploymentService service. -// All implementations must embed UnimplementedDeploymentServiceServer -// for forward compatibility -type DeploymentServiceServer interface { - // CreateDeployment API creates the Deployment resource. - CreateDeployment(context.Context, *CreateDeploymentRequest) (*Deployment, error) - // GetDeployment API returns the Deployment resource. - GetDeployment(context.Context, *GetDeploymentRequest) (*Deployment, error) - // UpdateDeployment API updates the Deployment resource. - UpdateDeployment(context.Context, *UpdateDeploymentRequest) (*Deployment, error) - // DeleteDeployment API deletes the Deployment resource. - DeleteDeployment(context.Context, *DeleteDeploymentRequest) (*emptypb.Empty, error) - // ListDeployments API lists the Deployment resources. - ListDeployments(context.Context, *ListDeploymentsRequest) (*ListDeploymentsResponse, error) - // GetDeploymentCredentials API returns the Credentials to be used to access the Deployment. - GetDeploymentCredentials(context.Context, *GetDeploymentCredentialsRequest) (*DeploymentCredentials, error) - mustEmbedUnimplementedDeploymentServiceServer() -} - -// UnimplementedDeploymentServiceServer must be embedded to have forward compatible implementations. -type UnimplementedDeploymentServiceServer struct { -} - -func (UnimplementedDeploymentServiceServer) CreateDeployment(context.Context, *CreateDeploymentRequest) (*Deployment, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateDeployment not implemented") -} -func (UnimplementedDeploymentServiceServer) GetDeployment(context.Context, *GetDeploymentRequest) (*Deployment, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetDeployment not implemented") -} -func (UnimplementedDeploymentServiceServer) UpdateDeployment(context.Context, *UpdateDeploymentRequest) (*Deployment, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateDeployment not implemented") -} -func (UnimplementedDeploymentServiceServer) DeleteDeployment(context.Context, *DeleteDeploymentRequest) (*emptypb.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteDeployment not implemented") -} -func (UnimplementedDeploymentServiceServer) ListDeployments(context.Context, *ListDeploymentsRequest) (*ListDeploymentsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListDeployments not implemented") -} -func (UnimplementedDeploymentServiceServer) GetDeploymentCredentials(context.Context, *GetDeploymentCredentialsRequest) (*DeploymentCredentials, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetDeploymentCredentials not implemented") -} -func (UnimplementedDeploymentServiceServer) mustEmbedUnimplementedDeploymentServiceServer() {} - -// UnsafeDeploymentServiceServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to DeploymentServiceServer will -// result in compilation errors. -type UnsafeDeploymentServiceServer interface { - mustEmbedUnimplementedDeploymentServiceServer() -} - -func RegisterDeploymentServiceServer(s grpc.ServiceRegistrar, srv DeploymentServiceServer) { - s.RegisterService(&DeploymentService_ServiceDesc, srv) -} - -func _DeploymentService_CreateDeployment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateDeploymentRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(DeploymentServiceServer).CreateDeployment(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: DeploymentService_CreateDeployment_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(DeploymentServiceServer).CreateDeployment(ctx, req.(*CreateDeploymentRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _DeploymentService_GetDeployment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetDeploymentRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(DeploymentServiceServer).GetDeployment(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: DeploymentService_GetDeployment_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(DeploymentServiceServer).GetDeployment(ctx, req.(*GetDeploymentRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _DeploymentService_UpdateDeployment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateDeploymentRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(DeploymentServiceServer).UpdateDeployment(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: DeploymentService_UpdateDeployment_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(DeploymentServiceServer).UpdateDeployment(ctx, req.(*UpdateDeploymentRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _DeploymentService_DeleteDeployment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteDeploymentRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(DeploymentServiceServer).DeleteDeployment(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: DeploymentService_DeleteDeployment_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(DeploymentServiceServer).DeleteDeployment(ctx, req.(*DeleteDeploymentRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _DeploymentService_ListDeployments_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListDeploymentsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(DeploymentServiceServer).ListDeployments(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: DeploymentService_ListDeployments_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(DeploymentServiceServer).ListDeployments(ctx, req.(*ListDeploymentsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _DeploymentService_GetDeploymentCredentials_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetDeploymentCredentialsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(DeploymentServiceServer).GetDeploymentCredentials(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: DeploymentService_GetDeploymentCredentials_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(DeploymentServiceServer).GetDeploymentCredentials(ctx, req.(*GetDeploymentCredentialsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// DeploymentService_ServiceDesc is the grpc.ServiceDesc for DeploymentService service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var DeploymentService_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "public.portworx.pds.deployment.v1.DeploymentService", - HandlerType: (*DeploymentServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "CreateDeployment", - Handler: _DeploymentService_CreateDeployment_Handler, - }, - { - MethodName: "GetDeployment", - Handler: _DeploymentService_GetDeployment_Handler, - }, - { - MethodName: "UpdateDeployment", - Handler: _DeploymentService_UpdateDeployment_Handler, - }, - { - MethodName: "DeleteDeployment", - Handler: _DeploymentService_DeleteDeployment_Handler, - }, - { - MethodName: "ListDeployments", - Handler: _DeploymentService_ListDeployments_Handler, - }, - { - MethodName: "GetDeploymentCredentials", - Handler: _DeploymentService_GetDeploymentCredentials_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "public/portworx/pds/deployment/apiv1/deployment.proto", -} diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.pb.go b/vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.pb.go deleted file mode 100644 index 52e5d8744..000000000 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.pb.go +++ /dev/null @@ -1,962 +0,0 @@ -// Please use the following editor setup for this file: -// Tab size=2; Tabs as spaces; Clean up trailing whitepsace -// -// In vim add: au FileType proto setl sw=2 ts=2 expandtab list -// -// In vscode install vscode-proto3 extension and add this to your settings.json: -// "[proto3]": { -// "editor.tabSize": 2, -// "editor.insertSpaces": true, -// "editor.rulers": [80], -// "editor.detectIndentation": true, -// "files.trimTrailingWhitespace": true -// } -// - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 -// source: public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto - -package deploymentconfigupdate - -import ( - apiv1 "github.com/pure-px/apis/public/portworx/common/apiv1" - apiv11 "github.com/pure-px/apis/public/portworx/pds/deployment/apiv1" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// Enum for Phase of the Deployment config update. -type Status_Phase int32 - -const ( - // Phase is unspecified. - Status_PHASE_UNSPECIFIED Status_Phase = 0 - // Deployment config update failed. - Status_FAILED Status_Phase = 1 - // Deployment config update is queued. - Status_QUEUED Status_Phase = 2 - // Deployment config update is in progress. - Status_IN_PROGRESS Status_Phase = 3 - // Deployment config update is completed. - Status_COMPLETED Status_Phase = 4 - // Deployment config update is requeued. - Status_REQUEUED Status_Phase = 5 -) - -// Enum value maps for Status_Phase. -var ( - Status_Phase_name = map[int32]string{ - 0: "PHASE_UNSPECIFIED", - 1: "FAILED", - 2: "QUEUED", - 3: "IN_PROGRESS", - 4: "COMPLETED", - 5: "REQUEUED", - } - Status_Phase_value = map[string]int32{ - "PHASE_UNSPECIFIED": 0, - "FAILED": 1, - "QUEUED": 2, - "IN_PROGRESS": 3, - "COMPLETED": 4, - "REQUEUED": 5, - } -) - -func (x Status_Phase) Enum() *Status_Phase { - p := new(Status_Phase) - *p = x - return p -} - -func (x Status_Phase) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Status_Phase) Descriptor() protoreflect.EnumDescriptor { - return file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_enumTypes[0].Descriptor() -} - -func (Status_Phase) Type() protoreflect.EnumType { - return &file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_enumTypes[0] -} - -func (x Status_Phase) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Status_Phase.Descriptor instead. -func (Status_Phase) EnumDescriptor() ([]byte, []int) { - return file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_rawDescGZIP(), []int{7, 0} -} - -// CreateDeploymentConfigUpdateRequest is the request for CreateDeploymentConfigUpdate. -type CreateDeploymentConfigUpdateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Config of the deployment for which config update is requested. - DeploymentConfigUpdate *DeploymentConfigUpdate `protobuf:"bytes,1,opt,name=deployment_config_update,json=deploymentConfigUpdate,proto3" json:"deployment_config_update,omitempty"` -} - -func (x *CreateDeploymentConfigUpdateRequest) Reset() { - *x = CreateDeploymentConfigUpdateRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreateDeploymentConfigUpdateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateDeploymentConfigUpdateRequest) ProtoMessage() {} - -func (x *CreateDeploymentConfigUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreateDeploymentConfigUpdateRequest.ProtoReflect.Descriptor instead. -func (*CreateDeploymentConfigUpdateRequest) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_rawDescGZIP(), []int{0} -} - -func (x *CreateDeploymentConfigUpdateRequest) GetDeploymentConfigUpdate() *DeploymentConfigUpdate { - if x != nil { - return x.DeploymentConfigUpdate - } - return nil -} - -// GetDeploymentConfigUpdateRequest is the request for GetDeploymentConfigUpdate. -type GetDeploymentConfigUpdateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // UID of the deployment config update. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *GetDeploymentConfigUpdateRequest) Reset() { - *x = GetDeploymentConfigUpdateRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetDeploymentConfigUpdateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetDeploymentConfigUpdateRequest) ProtoMessage() {} - -func (x *GetDeploymentConfigUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetDeploymentConfigUpdateRequest.ProtoReflect.Descriptor instead. -func (*GetDeploymentConfigUpdateRequest) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_rawDescGZIP(), []int{1} -} - -func (x *GetDeploymentConfigUpdateRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -// ListDeploymentConfigUpdatesRequest is the request for ListDeploymentConfigUpdates. -type ListDeploymentConfigUpdatesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // UID of the deployment. - DeploymentId string `protobuf:"bytes,1,opt,name=deployment_id,json=deploymentId,proto3" json:"deployment_id,omitempty"` - // Sorting details using which requested list to be sorted. - Sort *apiv1.Sort `protobuf:"bytes,2,opt,name=sort,proto3" json:"sort,omitempty"` - // Pagination parameters for listing deployment config updates. - Pagination *apiv1.PageBasedPaginationRequest `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (x *ListDeploymentConfigUpdatesRequest) Reset() { - *x = ListDeploymentConfigUpdatesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListDeploymentConfigUpdatesRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListDeploymentConfigUpdatesRequest) ProtoMessage() {} - -func (x *ListDeploymentConfigUpdatesRequest) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListDeploymentConfigUpdatesRequest.ProtoReflect.Descriptor instead. -func (*ListDeploymentConfigUpdatesRequest) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_rawDescGZIP(), []int{2} -} - -func (x *ListDeploymentConfigUpdatesRequest) GetDeploymentId() string { - if x != nil { - return x.DeploymentId - } - return "" -} - -func (x *ListDeploymentConfigUpdatesRequest) GetSort() *apiv1.Sort { - if x != nil { - return x.Sort - } - return nil -} - -func (x *ListDeploymentConfigUpdatesRequest) GetPagination() *apiv1.PageBasedPaginationRequest { - if x != nil { - return x.Pagination - } - return nil -} - -// ListDeploymentConfigUpdatesResponse is the response for ListDeploymentConfigUpdates. -type ListDeploymentConfigUpdatesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // List of deployment config updates. - DeploymentConfigUpdates []*DeploymentConfigUpdate `protobuf:"bytes,1,rep,name=deployment_config_updates,json=deploymentConfigUpdates,proto3" json:"deployment_config_updates,omitempty"` - // Pagination metadata for this response. - // (-- api-linter: core::0132::response-unknown-fields=disabled - // - // aip.dev/not-precedent: We need this field for pagination. --) - Pagination *apiv1.PageBasedPaginationResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (x *ListDeploymentConfigUpdatesResponse) Reset() { - *x = ListDeploymentConfigUpdatesResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListDeploymentConfigUpdatesResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListDeploymentConfigUpdatesResponse) ProtoMessage() {} - -func (x *ListDeploymentConfigUpdatesResponse) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListDeploymentConfigUpdatesResponse.ProtoReflect.Descriptor instead. -func (*ListDeploymentConfigUpdatesResponse) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_rawDescGZIP(), []int{3} -} - -func (x *ListDeploymentConfigUpdatesResponse) GetDeploymentConfigUpdates() []*DeploymentConfigUpdate { - if x != nil { - return x.DeploymentConfigUpdates - } - return nil -} - -func (x *ListDeploymentConfigUpdatesResponse) GetPagination() *apiv1.PageBasedPaginationResponse { - if x != nil { - return x.Pagination - } - return nil -} - -// RetryDeploymentConfigUpdateRequest is the request for RetryDeploymentConfigUpdate. -type RetryDeploymentConfigUpdateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // UID of the deployment config update. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *RetryDeploymentConfigUpdateRequest) Reset() { - *x = RetryDeploymentConfigUpdateRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RetryDeploymentConfigUpdateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RetryDeploymentConfigUpdateRequest) ProtoMessage() {} - -func (x *RetryDeploymentConfigUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RetryDeploymentConfigUpdateRequest.ProtoReflect.Descriptor instead. -func (*RetryDeploymentConfigUpdateRequest) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_rawDescGZIP(), []int{4} -} - -func (x *RetryDeploymentConfigUpdateRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -// DeploymentConfigUpdate represents a deployment config update resource. -type DeploymentConfigUpdate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Metadata of the deployment config update request. - Meta *apiv1.Meta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` - // Config of the deployment for which config update is requested. - Config *Config `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` - // Status of the deployment config update. - Status *Status `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` -} - -func (x *DeploymentConfigUpdate) Reset() { - *x = DeploymentConfigUpdate{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeploymentConfigUpdate) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeploymentConfigUpdate) ProtoMessage() {} - -func (x *DeploymentConfigUpdate) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeploymentConfigUpdate.ProtoReflect.Descriptor instead. -func (*DeploymentConfigUpdate) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_rawDescGZIP(), []int{5} -} - -func (x *DeploymentConfigUpdate) GetMeta() *apiv1.Meta { - if x != nil { - return x.Meta - } - return nil -} - -func (x *DeploymentConfigUpdate) GetConfig() *Config { - if x != nil { - return x.Config - } - return nil -} - -func (x *DeploymentConfigUpdate) GetStatus() *Status { - if x != nil { - return x.Status - } - return nil -} - -// Config of the desired deployment configuration. -type Config struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Metadata of the deployment resource. - DeploymentMeta *apiv1.Meta `protobuf:"bytes,1,opt,name=deployment_meta,json=deploymentMeta,proto3" json:"deployment_meta,omitempty"` - // Deployment config represents desired Deployment Configuration. - DeploymentConfig *apiv11.Config `protobuf:"bytes,2,opt,name=deployment_config,json=deploymentConfig,proto3" json:"deployment_config,omitempty"` -} - -func (x *Config) Reset() { - *x = Config{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Config) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Config) ProtoMessage() {} - -func (x *Config) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Config.ProtoReflect.Descriptor instead. -func (*Config) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_rawDescGZIP(), []int{6} -} - -func (x *Config) GetDeploymentMeta() *apiv1.Meta { - if x != nil { - return x.DeploymentMeta - } - return nil -} - -func (x *Config) GetDeploymentConfig() *apiv11.Config { - if x != nil { - return x.DeploymentConfig - } - return nil -} - -// Status of the deployment config update. -type Status struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Error Code is a short string that represents the error. - ErrorCode string `protobuf:"bytes,1,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"` - // Error Message is a description of the error. - ErrorMessage string `protobuf:"bytes,2,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` - // Number of times the deployment config update has been retried. - RetryCount int32 `protobuf:"varint,3,opt,name=retry_count,json=retryCount,proto3" json:"retry_count,omitempty"` - // Phase of the deployment config update. - Phase Status_Phase `protobuf:"varint,4,opt,name=phase,proto3,enum=public.portworx.pds.deploymentconfigupdate.v1.Status_Phase" json:"phase,omitempty"` -} - -func (x *Status) Reset() { - *x = Status{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Status) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Status) ProtoMessage() {} - -func (x *Status) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Status.ProtoReflect.Descriptor instead. -func (*Status) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_rawDescGZIP(), []int{7} -} - -func (x *Status) GetErrorCode() string { - if x != nil { - return x.ErrorCode - } - return "" -} - -func (x *Status) GetErrorMessage() string { - if x != nil { - return x.ErrorMessage - } - return "" -} - -func (x *Status) GetRetryCount() int32 { - if x != nil { - return x.RetryCount - } - return 0 -} - -func (x *Status) GetPhase() Status_Phase { - if x != nil { - return x.Phase - } - return Status_PHASE_UNSPECIFIED -} - -var File_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto protoreflect.FileDescriptor - -var file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_rawDesc = []byte{ - 0x0a, 0x4d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, - 0x78, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, - 0x76, 0x31, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, - 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x27, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, - 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, - 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, - 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, - 0x76, 0x31, 0x2f, 0x73, 0x6f, 0x72, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, - 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x35, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, - 0x70, 0x64, 0x73, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x61, - 0x70, 0x69, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa6, 0x01, 0x0a, 0x23, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x7f, 0x0a, - 0x18, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x45, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, - 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x16, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x32, - 0x0a, 0x20, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x22, 0xdf, 0x01, 0x0a, 0x22, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0d, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, - 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, - 0x72, 0x74, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x5a, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, - 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x81, 0x02, 0x0a, 0x23, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, - 0x19, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x45, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, - 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x17, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, - 0x12, 0x56, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, - 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x34, 0x0a, 0x22, 0x52, 0x65, 0x74, 0x72, - 0x79, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xeb, - 0x01, 0x0a, 0x16, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x4d, - 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, - 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, - 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4d, 0x0a, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, - 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xaa, 0x01, 0x0a, - 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x48, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, - 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x12, 0x56, 0x0a, 0x11, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, - 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xa6, 0x02, 0x0a, 0x06, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x74, 0x72, - 0x79, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, - 0x65, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x51, 0x0a, 0x05, 0x70, 0x68, 0x61, - 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, - 0x50, 0x68, 0x61, 0x73, 0x65, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x22, 0x64, 0x0a, 0x05, - 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, - 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x51, 0x55, 0x45, 0x55, - 0x45, 0x44, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, - 0x45, 0x53, 0x53, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, - 0x45, 0x44, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x51, 0x55, 0x45, 0x55, 0x45, 0x44, - 0x10, 0x05, 0x32, 0xa6, 0x08, 0x0a, 0x1d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0xbf, 0x02, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x52, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, - 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, - 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x22, 0x83, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7d, 0x3a, 0x18, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x1a, 0x61, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x75, 0x69, 0x64, 0x7d, 0x2f, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0xe1, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x12, 0x4f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, - 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x2c, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x1b, 0x4c, - 0x69, 0x73, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x51, 0x2e, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, - 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x52, 0x2e, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, - 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x70, 0x64, 0x73, 0x2f, - 0x76, 0x31, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0xee, 0x01, 0x0a, 0x1b, 0x52, - 0x65, 0x74, 0x72, 0x79, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x51, 0x2e, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, - 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, - 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, - 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, - 0x2a, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x72, 0x65, 0x74, 0x72, 0x79, 0x42, 0xb3, 0x01, 0x0a, 0x31, - 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, - 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x76, - 0x31, 0x42, 0x1b, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x5f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, - 0x65, 0x2d, 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_rawDescOnce sync.Once - file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_rawDescData = file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_rawDesc -) - -func file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_rawDescGZIP() []byte { - file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_rawDescOnce.Do(func() { - file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_rawDescData = protoimpl.X.CompressGZIP(file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_rawDescData) - }) - return file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_rawDescData -} - -var file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes = make([]protoimpl.MessageInfo, 8) -var file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_goTypes = []interface{}{ - (Status_Phase)(0), // 0: public.portworx.pds.deploymentconfigupdate.v1.Status.Phase - (*CreateDeploymentConfigUpdateRequest)(nil), // 1: public.portworx.pds.deploymentconfigupdate.v1.CreateDeploymentConfigUpdateRequest - (*GetDeploymentConfigUpdateRequest)(nil), // 2: public.portworx.pds.deploymentconfigupdate.v1.GetDeploymentConfigUpdateRequest - (*ListDeploymentConfigUpdatesRequest)(nil), // 3: public.portworx.pds.deploymentconfigupdate.v1.ListDeploymentConfigUpdatesRequest - (*ListDeploymentConfigUpdatesResponse)(nil), // 4: public.portworx.pds.deploymentconfigupdate.v1.ListDeploymentConfigUpdatesResponse - (*RetryDeploymentConfigUpdateRequest)(nil), // 5: public.portworx.pds.deploymentconfigupdate.v1.RetryDeploymentConfigUpdateRequest - (*DeploymentConfigUpdate)(nil), // 6: public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdate - (*Config)(nil), // 7: public.portworx.pds.deploymentconfigupdate.v1.Config - (*Status)(nil), // 8: public.portworx.pds.deploymentconfigupdate.v1.Status - (*apiv1.Sort)(nil), // 9: public.portworx.common.v1.Sort - (*apiv1.PageBasedPaginationRequest)(nil), // 10: public.portworx.common.v1.PageBasedPaginationRequest - (*apiv1.PageBasedPaginationResponse)(nil), // 11: public.portworx.common.v1.PageBasedPaginationResponse - (*apiv1.Meta)(nil), // 12: public.portworx.common.v1.Meta - (*apiv11.Config)(nil), // 13: public.portworx.pds.deployment.v1.Config -} -var file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_depIdxs = []int32{ - 6, // 0: public.portworx.pds.deploymentconfigupdate.v1.CreateDeploymentConfigUpdateRequest.deployment_config_update:type_name -> public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdate - 9, // 1: public.portworx.pds.deploymentconfigupdate.v1.ListDeploymentConfigUpdatesRequest.sort:type_name -> public.portworx.common.v1.Sort - 10, // 2: public.portworx.pds.deploymentconfigupdate.v1.ListDeploymentConfigUpdatesRequest.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationRequest - 6, // 3: public.portworx.pds.deploymentconfigupdate.v1.ListDeploymentConfigUpdatesResponse.deployment_config_updates:type_name -> public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdate - 11, // 4: public.portworx.pds.deploymentconfigupdate.v1.ListDeploymentConfigUpdatesResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse - 12, // 5: public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdate.meta:type_name -> public.portworx.common.v1.Meta - 7, // 6: public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdate.config:type_name -> public.portworx.pds.deploymentconfigupdate.v1.Config - 8, // 7: public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdate.status:type_name -> public.portworx.pds.deploymentconfigupdate.v1.Status - 12, // 8: public.portworx.pds.deploymentconfigupdate.v1.Config.deployment_meta:type_name -> public.portworx.common.v1.Meta - 13, // 9: public.portworx.pds.deploymentconfigupdate.v1.Config.deployment_config:type_name -> public.portworx.pds.deployment.v1.Config - 0, // 10: public.portworx.pds.deploymentconfigupdate.v1.Status.phase:type_name -> public.portworx.pds.deploymentconfigupdate.v1.Status.Phase - 1, // 11: public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdateService.CreateDeploymentConfigUpdate:input_type -> public.portworx.pds.deploymentconfigupdate.v1.CreateDeploymentConfigUpdateRequest - 2, // 12: public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdateService.GetDeploymentConfigUpdate:input_type -> public.portworx.pds.deploymentconfigupdate.v1.GetDeploymentConfigUpdateRequest - 3, // 13: public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdateService.ListDeploymentConfigUpdates:input_type -> public.portworx.pds.deploymentconfigupdate.v1.ListDeploymentConfigUpdatesRequest - 5, // 14: public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdateService.RetryDeploymentConfigUpdate:input_type -> public.portworx.pds.deploymentconfigupdate.v1.RetryDeploymentConfigUpdateRequest - 6, // 15: public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdateService.CreateDeploymentConfigUpdate:output_type -> public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdate - 6, // 16: public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdateService.GetDeploymentConfigUpdate:output_type -> public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdate - 4, // 17: public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdateService.ListDeploymentConfigUpdates:output_type -> public.portworx.pds.deploymentconfigupdate.v1.ListDeploymentConfigUpdatesResponse - 6, // 18: public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdateService.RetryDeploymentConfigUpdate:output_type -> public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdate - 15, // [15:19] is the sub-list for method output_type - 11, // [11:15] is the sub-list for method input_type - 11, // [11:11] is the sub-list for extension type_name - 11, // [11:11] is the sub-list for extension extendee - 0, // [0:11] is the sub-list for field type_name -} - -func init() { - file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_init() -} -func file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_init() { - if File_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateDeploymentConfigUpdateRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDeploymentConfigUpdateRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListDeploymentConfigUpdatesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListDeploymentConfigUpdatesResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RetryDeploymentConfigUpdateRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeploymentConfigUpdate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Config); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Status); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_rawDesc, - NumEnums: 1, - NumMessages: 8, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_goTypes, - DependencyIndexes: file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_depIdxs, - EnumInfos: file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_enumTypes, - MessageInfos: file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_msgTypes, - }.Build() - File_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto = out.File - file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_rawDesc = nil - file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_goTypes = nil - file_public_portworx_pds_deploymentconfigupdate_apiv1_deploymentconfigupdate_proto_depIdxs = nil -} diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.pb.gw.go b/vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.pb.gw.go deleted file mode 100644 index 1e76c39b1..000000000 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.pb.gw.go +++ /dev/null @@ -1,498 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto - -/* -Package deploymentconfigupdate is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ -package deploymentconfigupdate - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -func request_DeploymentConfigUpdateService_CreateDeploymentConfigUpdate_0(ctx context.Context, marshaler runtime.Marshaler, client DeploymentConfigUpdateServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateDeploymentConfigUpdateRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.DeploymentConfigUpdate); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["deployment_config_update.config.deployment_meta.uid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "deployment_config_update.config.deployment_meta.uid") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "deployment_config_update.config.deployment_meta.uid", val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "deployment_config_update.config.deployment_meta.uid", err) - } - - msg, err := client.CreateDeploymentConfigUpdate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_DeploymentConfigUpdateService_CreateDeploymentConfigUpdate_0(ctx context.Context, marshaler runtime.Marshaler, server DeploymentConfigUpdateServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateDeploymentConfigUpdateRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.DeploymentConfigUpdate); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["deployment_config_update.config.deployment_meta.uid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "deployment_config_update.config.deployment_meta.uid") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "deployment_config_update.config.deployment_meta.uid", val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "deployment_config_update.config.deployment_meta.uid", err) - } - - msg, err := server.CreateDeploymentConfigUpdate(ctx, &protoReq) - return msg, metadata, err - -} - -func request_DeploymentConfigUpdateService_GetDeploymentConfigUpdate_0(ctx context.Context, marshaler runtime.Marshaler, client DeploymentConfigUpdateServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetDeploymentConfigUpdateRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.GetDeploymentConfigUpdate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_DeploymentConfigUpdateService_GetDeploymentConfigUpdate_0(ctx context.Context, marshaler runtime.Marshaler, server DeploymentConfigUpdateServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetDeploymentConfigUpdateRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.GetDeploymentConfigUpdate(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_DeploymentConfigUpdateService_ListDeploymentConfigUpdates_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_DeploymentConfigUpdateService_ListDeploymentConfigUpdates_0(ctx context.Context, marshaler runtime.Marshaler, client DeploymentConfigUpdateServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ListDeploymentConfigUpdatesRequest - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_DeploymentConfigUpdateService_ListDeploymentConfigUpdates_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.ListDeploymentConfigUpdates(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_DeploymentConfigUpdateService_ListDeploymentConfigUpdates_0(ctx context.Context, marshaler runtime.Marshaler, server DeploymentConfigUpdateServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ListDeploymentConfigUpdatesRequest - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_DeploymentConfigUpdateService_ListDeploymentConfigUpdates_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.ListDeploymentConfigUpdates(ctx, &protoReq) - return msg, metadata, err - -} - -func request_DeploymentConfigUpdateService_RetryDeploymentConfigUpdate_0(ctx context.Context, marshaler runtime.Marshaler, client DeploymentConfigUpdateServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq RetryDeploymentConfigUpdateRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.RetryDeploymentConfigUpdate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_DeploymentConfigUpdateService_RetryDeploymentConfigUpdate_0(ctx context.Context, marshaler runtime.Marshaler, server DeploymentConfigUpdateServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq RetryDeploymentConfigUpdateRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.RetryDeploymentConfigUpdate(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterDeploymentConfigUpdateServiceHandlerServer registers the http handlers for service DeploymentConfigUpdateService to "mux". -// UnaryRPC :call DeploymentConfigUpdateServiceServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterDeploymentConfigUpdateServiceHandlerFromEndpoint instead. -func RegisterDeploymentConfigUpdateServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server DeploymentConfigUpdateServiceServer) error { - - mux.Handle("PUT", pattern_DeploymentConfigUpdateService_CreateDeploymentConfigUpdate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdateService/CreateDeploymentConfigUpdate", runtime.WithHTTPPathPattern("/pds/v1/deployments/{deployment_config_update.config.deployment_meta.uid}/deploymentConfigUpdates")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_DeploymentConfigUpdateService_CreateDeploymentConfigUpdate_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_DeploymentConfigUpdateService_CreateDeploymentConfigUpdate_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_DeploymentConfigUpdateService_GetDeploymentConfigUpdate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdateService/GetDeploymentConfigUpdate", runtime.WithHTTPPathPattern("/pds/v1/deploymentConfigUpdates/{id}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_DeploymentConfigUpdateService_GetDeploymentConfigUpdate_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_DeploymentConfigUpdateService_GetDeploymentConfigUpdate_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_DeploymentConfigUpdateService_ListDeploymentConfigUpdates_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdateService/ListDeploymentConfigUpdates", runtime.WithHTTPPathPattern("/pds/v1/deploymentConfigUpdates")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_DeploymentConfigUpdateService_ListDeploymentConfigUpdates_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_DeploymentConfigUpdateService_ListDeploymentConfigUpdates_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_DeploymentConfigUpdateService_RetryDeploymentConfigUpdate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdateService/RetryDeploymentConfigUpdate", runtime.WithHTTPPathPattern("/pds/v1/deploymentConfigUpdates/{id}:retry")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_DeploymentConfigUpdateService_RetryDeploymentConfigUpdate_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_DeploymentConfigUpdateService_RetryDeploymentConfigUpdate_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterDeploymentConfigUpdateServiceHandlerFromEndpoint is same as RegisterDeploymentConfigUpdateServiceHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterDeploymentConfigUpdateServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.DialContext(ctx, endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterDeploymentConfigUpdateServiceHandler(ctx, mux, conn) -} - -// RegisterDeploymentConfigUpdateServiceHandler registers the http handlers for service DeploymentConfigUpdateService to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterDeploymentConfigUpdateServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterDeploymentConfigUpdateServiceHandlerClient(ctx, mux, NewDeploymentConfigUpdateServiceClient(conn)) -} - -// RegisterDeploymentConfigUpdateServiceHandlerClient registers the http handlers for service DeploymentConfigUpdateService -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "DeploymentConfigUpdateServiceClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "DeploymentConfigUpdateServiceClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "DeploymentConfigUpdateServiceClient" to call the correct interceptors. -func RegisterDeploymentConfigUpdateServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client DeploymentConfigUpdateServiceClient) error { - - mux.Handle("PUT", pattern_DeploymentConfigUpdateService_CreateDeploymentConfigUpdate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdateService/CreateDeploymentConfigUpdate", runtime.WithHTTPPathPattern("/pds/v1/deployments/{deployment_config_update.config.deployment_meta.uid}/deploymentConfigUpdates")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_DeploymentConfigUpdateService_CreateDeploymentConfigUpdate_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_DeploymentConfigUpdateService_CreateDeploymentConfigUpdate_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_DeploymentConfigUpdateService_GetDeploymentConfigUpdate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdateService/GetDeploymentConfigUpdate", runtime.WithHTTPPathPattern("/pds/v1/deploymentConfigUpdates/{id}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_DeploymentConfigUpdateService_GetDeploymentConfigUpdate_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_DeploymentConfigUpdateService_GetDeploymentConfigUpdate_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_DeploymentConfigUpdateService_ListDeploymentConfigUpdates_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdateService/ListDeploymentConfigUpdates", runtime.WithHTTPPathPattern("/pds/v1/deploymentConfigUpdates")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_DeploymentConfigUpdateService_ListDeploymentConfigUpdates_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_DeploymentConfigUpdateService_ListDeploymentConfigUpdates_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_DeploymentConfigUpdateService_RetryDeploymentConfigUpdate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdateService/RetryDeploymentConfigUpdate", runtime.WithHTTPPathPattern("/pds/v1/deploymentConfigUpdates/{id}:retry")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_DeploymentConfigUpdateService_RetryDeploymentConfigUpdate_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_DeploymentConfigUpdateService_RetryDeploymentConfigUpdate_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_DeploymentConfigUpdateService_CreateDeploymentConfigUpdate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"pds", "v1", "deployments", "deployment_config_update.config.deployment_meta.uid", "deploymentConfigUpdates"}, "")) - - pattern_DeploymentConfigUpdateService_GetDeploymentConfigUpdate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"pds", "v1", "deploymentConfigUpdates", "id"}, "")) - - pattern_DeploymentConfigUpdateService_ListDeploymentConfigUpdates_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"pds", "v1", "deploymentConfigUpdates"}, "")) - - pattern_DeploymentConfigUpdateService_RetryDeploymentConfigUpdate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"pds", "v1", "deploymentConfigUpdates", "id"}, "retry")) -) - -var ( - forward_DeploymentConfigUpdateService_CreateDeploymentConfigUpdate_0 = runtime.ForwardResponseMessage - - forward_DeploymentConfigUpdateService_GetDeploymentConfigUpdate_0 = runtime.ForwardResponseMessage - - forward_DeploymentConfigUpdateService_ListDeploymentConfigUpdates_0 = runtime.ForwardResponseMessage - - forward_DeploymentConfigUpdateService_RetryDeploymentConfigUpdate_0 = runtime.ForwardResponseMessage -) diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.pb.md b/vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.pb.md deleted file mode 100644 index 3200092f7..000000000 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.pb.md +++ /dev/null @@ -1,202 +0,0 @@ -[//]: # (Generated by grpc-framework using protoc-gen-doc) -[//]: # (Do not edit) - - -# deploymentconfigupdate - -## Contents - -- Services - - [DeploymentConfigUpdateService](#servicepublicportworxpdsdeploymentconfigupdatev1deploymentconfigupdateservice) - - - -- Messages - - [Config](#config) - - [CreateDeploymentConfigUpdateRequest](#createdeploymentconfigupdaterequest) - - [DeploymentConfigUpdate](#deploymentconfigupdate) - - [GetDeploymentConfigUpdateRequest](#getdeploymentconfigupdaterequest) - - [ListDeploymentConfigUpdatesRequest](#listdeploymentconfigupdatesrequest) - - [ListDeploymentConfigUpdatesResponse](#listdeploymentconfigupdatesresponse) - - [RetryDeploymentConfigUpdateRequest](#retrydeploymentconfigupdaterequest) - - [Status](#status) - - - - -- [Scalar Value Types](#scalar-value-types) - - - - -## DeploymentConfigUpdateService {#servicepublicportworxpdsdeploymentconfigupdatev1deploymentconfigupdateservice} -DeploymentConfigUpdateService provides APIs to interact with the data service deployment config update. - -### CreateDeploymentConfigUpdate {#methodpublicportworxpdsdeploymentconfigupdatev1deploymentconfigupdateservicecreatedeploymentconfigupdate} - -> **rpc** CreateDeploymentConfigUpdate([CreateDeploymentConfigUpdateRequest](#createdeploymentconfigupdaterequest)) - [DeploymentConfigUpdate](#deploymentconfigupdate) - -CreateDeploymentConfigUpdate API creates a deployment config update. -(-- api-linter: core::0133::http-method=disabled - aip.dev/not-precedent: We need to do this because here we are actually updating deployment config. --) -### GetDeploymentConfigUpdate {#methodpublicportworxpdsdeploymentconfigupdatev1deploymentconfigupdateservicegetdeploymentconfigupdate} - -> **rpc** GetDeploymentConfigUpdate([GetDeploymentConfigUpdateRequest](#getdeploymentconfigupdaterequest)) - [DeploymentConfigUpdate](#deploymentconfigupdate) - -GetDeploymentConfigUpdate API returns a deployment config update by id. -### ListDeploymentConfigUpdates {#methodpublicportworxpdsdeploymentconfigupdatev1deploymentconfigupdateservicelistdeploymentconfigupdates} - -> **rpc** ListDeploymentConfigUpdates([ListDeploymentConfigUpdatesRequest](#listdeploymentconfigupdatesrequest)) - [ListDeploymentConfigUpdatesResponse](#listdeploymentconfigupdatesresponse) - -ListDeploymentConfigUpdates API returns a list of deployment config updates. -### RetryDeploymentConfigUpdate {#methodpublicportworxpdsdeploymentconfigupdatev1deploymentconfigupdateserviceretrydeploymentconfigupdate} - -> **rpc** RetryDeploymentConfigUpdate([RetryDeploymentConfigUpdateRequest](#retrydeploymentconfigupdaterequest)) - [DeploymentConfigUpdate](#deploymentconfigupdate) - -RetryDeploymentConfigUpdate API retries a deployment config update. - - - -## Messages - - -### Config {#config} -Config of the desired deployment configuration. - - -| Field | Type | Description | -| ----- | ---- | ----------- | -| deployment_meta | [ public.portworx.common.v1.Meta](#publicportworxcommonv1meta) | Metadata of the deployment resource. | -| deployment_config | [ public.portworx.pds.deployment.v1.Config](#publicportworxpdsdeploymentv1config) | Deployment config represents desired Deployment Configuration. | - - - - -### CreateDeploymentConfigUpdateRequest {#createdeploymentconfigupdaterequest} -CreateDeploymentConfigUpdateRequest is the request for CreateDeploymentConfigUpdate. - - -| Field | Type | Description | -| ----- | ---- | ----------- | -| deployment_config_update | [ DeploymentConfigUpdate](#deploymentconfigupdate) | Config of the deployment for which config update is requested. | - - - - -### DeploymentConfigUpdate {#deploymentconfigupdate} -DeploymentConfigUpdate represents a deployment config update resource. - - -| Field | Type | Description | -| ----- | ---- | ----------- | -| meta | [ public.portworx.common.v1.Meta](#publicportworxcommonv1meta) | Metadata of the deployment config update request. | -| config | [ Config](#config) | Config of the deployment for which config update is requested. | -| status | [ Status](#status) | Status of the deployment config update. | - - - - -### GetDeploymentConfigUpdateRequest {#getdeploymentconfigupdaterequest} -GetDeploymentConfigUpdateRequest is the request for GetDeploymentConfigUpdate. - - -| Field | Type | Description | -| ----- | ---- | ----------- | -| id | [ string](#string) | UID of the deployment config update. | - - - - -### ListDeploymentConfigUpdatesRequest {#listdeploymentconfigupdatesrequest} -ListDeploymentConfigUpdatesRequest is the request for ListDeploymentConfigUpdates. - - -| Field | Type | Description | -| ----- | ---- | ----------- | -| deployment_id | [ string](#string) | UID of the deployment. | -| sort | [ public.portworx.common.v1.Sort](#publicportworxcommonv1sort) | Sorting details using which requested list to be sorted. | -| pagination | [ public.portworx.common.v1.PageBasedPaginationRequest](#publicportworxcommonv1pagebasedpaginationrequest) | Pagination parameters for listing deployment config updates. | - - - - -### ListDeploymentConfigUpdatesResponse {#listdeploymentconfigupdatesresponse} -ListDeploymentConfigUpdatesResponse is the response for ListDeploymentConfigUpdates. - - -| Field | Type | Description | -| ----- | ---- | ----------- | -| deployment_config_updates | [repeated DeploymentConfigUpdate](#deploymentconfigupdate) | List of deployment config updates. | -| pagination | [ public.portworx.common.v1.PageBasedPaginationResponse](#publicportworxcommonv1pagebasedpaginationresponse) | Pagination metadata for this response. (-- api-linter: core::0132::response-unknown-fields=disabled aip.dev/not-precedent: We need this field for pagination. --) | - - - - -### RetryDeploymentConfigUpdateRequest {#retrydeploymentconfigupdaterequest} -RetryDeploymentConfigUpdateRequest is the request for RetryDeploymentConfigUpdate. - - -| Field | Type | Description | -| ----- | ---- | ----------- | -| id | [ string](#string) | UID of the deployment config update. | - - - - -### Status {#status} -Status of the deployment config update. - - -| Field | Type | Description | -| ----- | ---- | ----------- | -| error_code | [ string](#string) | Error Code is a short string that represents the error. | -| error_message | [ string](#string) | Error Message is a description of the error. | -| retry_count | [ int32](#int32) | Number of times the deployment config update has been retried. | -| phase | [ Status.Phase](#statusphase) | Phase of the deployment config update. | - - - - -## Enums - - -### Status.Phase {#statusphase} -Enum for Phase of the Deployment config update. - -| Name | Number | Description | -| ---- | ------ | ----------- | -| PHASE_UNSPECIFIED | 0 | Phase is unspecified. | -| FAILED | 1 | Deployment config update failed. | -| QUEUED | 2 | Deployment config update is queued. | -| IN_PROGRESS | 3 | Deployment config update is in progress. | -| COMPLETED | 4 | Deployment config update is completed. | -| REQUEUED | 5 | Deployment config update is requeued. | - - - - - -## Scalar Value Types - -| .proto Type | Notes | C++ Type | Java Type | Python Type | -| ----------- | ----- | -------- | --------- | ----------- | -|

double | | double | double | float | -|

float | | float | float | float | -|

int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | -|

int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | -|

uint32 | Uses variable-length encoding. | uint32 | int | int/long | -|

uint64 | Uses variable-length encoding. | uint64 | long | int/long | -|

sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | -|

sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | -|

fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int | -|

fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long | -|

sfixed32 | Always four bytes. | int32 | int | int | -|

sfixed64 | Always eight bytes. | int64 | long | int/long | -|

bool | | bool | boolean | boolean | -|

string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | -|

bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | - diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto b/vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto deleted file mode 100644 index f78912ed7..000000000 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto +++ /dev/null @@ -1,154 +0,0 @@ -// Please use the following editor setup for this file: -// Tab size=2; Tabs as spaces; Clean up trailing whitepsace -// -// In vim add: au FileType proto setl sw=2 ts=2 expandtab list -// -// In vscode install vscode-proto3 extension and add this to your settings.json: -// "[proto3]": { -// "editor.tabSize": 2, -// "editor.insertSpaces": true, -// "editor.rulers": [80], -// "editor.detectIndentation": true, -// "files.trimTrailingWhitespace": true -// } -// -syntax = "proto3"; - -package public.portworx.pds.deploymentconfigupdate.v1; - -import "public/portworx/common/apiv1/meta.proto"; -import "public/portworx/common/apiv1/pagination.proto"; -import "google/api/annotations.proto"; -import "public/portworx/common/apiv1/sort.proto"; -import "google/api/field_behavior.proto"; -import "public/portworx/pds/deployment/apiv1/deployment.proto"; - -option go_package = "github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1;deploymentconfigupdate"; -option java_multiple_files = true; -option java_package = "com.public.portworx.pds.deploymentconfigupdate.v1"; -option java_outer_classname = "DeploymentConfigUpdateProto"; - -// DeploymentConfigUpdateService provides APIs to interact with the data service deployment config update. -service DeploymentConfigUpdateService { - // CreateDeploymentConfigUpdate API creates a deployment config update. - // (-- api-linter: core::0133::http-method=disabled - // aip.dev/not-precedent: We need to do this because here we are actually updating deployment config. --) - rpc CreateDeploymentConfigUpdate(CreateDeploymentConfigUpdateRequest) - returns (DeploymentConfigUpdate) { - option (google.api.http) = { - put: "/pds/v1/deployments/{deployment_config_update.config.deployment_meta.uid}/deploymentConfigUpdates" - body: "deployment_config_update" - }; - } - - // GetDeploymentConfigUpdate API returns a deployment config update by id. - rpc GetDeploymentConfigUpdate(GetDeploymentConfigUpdateRequest) - returns (DeploymentConfigUpdate) { - option (google.api.http) = { - get: "/pds/v1/deploymentConfigUpdates/{id}" - }; - } - - // ListDeploymentConfigUpdates API returns a list of deployment config updates. - rpc ListDeploymentConfigUpdates(ListDeploymentConfigUpdatesRequest) - returns (ListDeploymentConfigUpdatesResponse) { - option (google.api.http) = { - get: "/pds/v1/deploymentConfigUpdates" - }; - } - - // RetryDeploymentConfigUpdate API retries a deployment config update. - rpc RetryDeploymentConfigUpdate(RetryDeploymentConfigUpdateRequest) - returns (DeploymentConfigUpdate) { - option (google.api.http) = { - post: "/pds/v1/deploymentConfigUpdates/{id}:retry" - body: "*" - }; - } -} - -// CreateDeploymentConfigUpdateRequest is the request for CreateDeploymentConfigUpdate. -message CreateDeploymentConfigUpdateRequest { - // Config of the deployment for which config update is requested. - DeploymentConfigUpdate deployment_config_update = 1; -} - -// GetDeploymentConfigUpdateRequest is the request for GetDeploymentConfigUpdate. -message GetDeploymentConfigUpdateRequest { - // UID of the deployment config update. - string id = 1; -} - -// ListDeploymentConfigUpdatesRequest is the request for ListDeploymentConfigUpdates. -message ListDeploymentConfigUpdatesRequest { - // UID of the deployment. - string deployment_id = 1 [(google.api.field_behavior) = OPTIONAL]; - // Sorting details using which requested list to be sorted. - public.portworx.common.v1.Sort sort = 2; - // Pagination parameters for listing deployment config updates. - public.portworx.common.v1.PageBasedPaginationRequest pagination = 3 [(google.api.field_behavior) = OPTIONAL]; -} - -// ListDeploymentConfigUpdatesResponse is the response for ListDeploymentConfigUpdates. -message ListDeploymentConfigUpdatesResponse { - // List of deployment config updates. - repeated DeploymentConfigUpdate deployment_config_updates = 1; - // Pagination metadata for this response. - // (-- api-linter: core::0132::response-unknown-fields=disabled - // aip.dev/not-precedent: We need this field for pagination. --) - public.portworx.common.v1.PageBasedPaginationResponse pagination = 2; -} - -// RetryDeploymentConfigUpdateRequest is the request for RetryDeploymentConfigUpdate. -message RetryDeploymentConfigUpdateRequest { - // UID of the deployment config update. - string id = 1; -} - -// DeploymentConfigUpdate represents a deployment config update resource. -message DeploymentConfigUpdate { - // Metadata of the deployment config update request. - portworx.common.v1.Meta meta = 1; - // Config of the deployment for which config update is requested. - Config config = 2; - // Status of the deployment config update. - Status status = 3; -} - -// Config of the desired deployment configuration. -message Config { - // Metadata of the deployment resource. - portworx.common.v1.Meta deployment_meta = 1; - // Deployment config represents desired Deployment Configuration. - public.portworx.pds.deployment.v1.Config deployment_config = 2; -} - -// Status of the deployment config update. -message Status { - // Error Code is a short string that represents the error. - string error_code = 1; - // Error Message is a description of the error. - string error_message = 2; - // Number of times the deployment config update has been retried. - int32 retry_count = 3; - - // Enum for Phase of the Deployment config update. - enum Phase { - // Phase is unspecified. - PHASE_UNSPECIFIED = 0; - // Deployment config update failed. - FAILED = 1; - // Deployment config update is queued. - QUEUED = 2; - // Deployment config update is in progress. - IN_PROGRESS = 3; - // Deployment config update is completed. - COMPLETED = 4; - // Deployment config update is requeued. - REQUEUED = 5; - } - - // Phase of the deployment config update. - Phase phase = 4; -} - diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate_grpc.pb.go b/vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate_grpc.pb.go deleted file mode 100644 index 2da4a385e..000000000 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate_grpc.pb.go +++ /dev/null @@ -1,250 +0,0 @@ -// Please use the following editor setup for this file: -// Tab size=2; Tabs as spaces; Clean up trailing whitepsace -// -// In vim add: au FileType proto setl sw=2 ts=2 expandtab list -// -// In vscode install vscode-proto3 extension and add this to your settings.json: -// "[proto3]": { -// "editor.tabSize": 2, -// "editor.insertSpaces": true, -// "editor.rulers": [80], -// "editor.detectIndentation": true, -// "files.trimTrailingWhitespace": true -// } -// - -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.3 -// source: public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto - -package deploymentconfigupdate - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - DeploymentConfigUpdateService_CreateDeploymentConfigUpdate_FullMethodName = "/public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdateService/CreateDeploymentConfigUpdate" - DeploymentConfigUpdateService_GetDeploymentConfigUpdate_FullMethodName = "/public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdateService/GetDeploymentConfigUpdate" - DeploymentConfigUpdateService_ListDeploymentConfigUpdates_FullMethodName = "/public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdateService/ListDeploymentConfigUpdates" - DeploymentConfigUpdateService_RetryDeploymentConfigUpdate_FullMethodName = "/public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdateService/RetryDeploymentConfigUpdate" -) - -// DeploymentConfigUpdateServiceClient is the client API for DeploymentConfigUpdateService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type DeploymentConfigUpdateServiceClient interface { - // CreateDeploymentConfigUpdate API creates a deployment config update. - // (-- api-linter: core::0133::http-method=disabled - // - // aip.dev/not-precedent: We need to do this because here we are actually updating deployment config. --) - CreateDeploymentConfigUpdate(ctx context.Context, in *CreateDeploymentConfigUpdateRequest, opts ...grpc.CallOption) (*DeploymentConfigUpdate, error) - // GetDeploymentConfigUpdate API returns a deployment config update by id. - GetDeploymentConfigUpdate(ctx context.Context, in *GetDeploymentConfigUpdateRequest, opts ...grpc.CallOption) (*DeploymentConfigUpdate, error) - // ListDeploymentConfigUpdates API returns a list of deployment config updates. - ListDeploymentConfigUpdates(ctx context.Context, in *ListDeploymentConfigUpdatesRequest, opts ...grpc.CallOption) (*ListDeploymentConfigUpdatesResponse, error) - // RetryDeploymentConfigUpdate API retries a deployment config update. - RetryDeploymentConfigUpdate(ctx context.Context, in *RetryDeploymentConfigUpdateRequest, opts ...grpc.CallOption) (*DeploymentConfigUpdate, error) -} - -type deploymentConfigUpdateServiceClient struct { - cc grpc.ClientConnInterface -} - -func NewDeploymentConfigUpdateServiceClient(cc grpc.ClientConnInterface) DeploymentConfigUpdateServiceClient { - return &deploymentConfigUpdateServiceClient{cc} -} - -func (c *deploymentConfigUpdateServiceClient) CreateDeploymentConfigUpdate(ctx context.Context, in *CreateDeploymentConfigUpdateRequest, opts ...grpc.CallOption) (*DeploymentConfigUpdate, error) { - out := new(DeploymentConfigUpdate) - err := c.cc.Invoke(ctx, DeploymentConfigUpdateService_CreateDeploymentConfigUpdate_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *deploymentConfigUpdateServiceClient) GetDeploymentConfigUpdate(ctx context.Context, in *GetDeploymentConfigUpdateRequest, opts ...grpc.CallOption) (*DeploymentConfigUpdate, error) { - out := new(DeploymentConfigUpdate) - err := c.cc.Invoke(ctx, DeploymentConfigUpdateService_GetDeploymentConfigUpdate_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *deploymentConfigUpdateServiceClient) ListDeploymentConfigUpdates(ctx context.Context, in *ListDeploymentConfigUpdatesRequest, opts ...grpc.CallOption) (*ListDeploymentConfigUpdatesResponse, error) { - out := new(ListDeploymentConfigUpdatesResponse) - err := c.cc.Invoke(ctx, DeploymentConfigUpdateService_ListDeploymentConfigUpdates_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *deploymentConfigUpdateServiceClient) RetryDeploymentConfigUpdate(ctx context.Context, in *RetryDeploymentConfigUpdateRequest, opts ...grpc.CallOption) (*DeploymentConfigUpdate, error) { - out := new(DeploymentConfigUpdate) - err := c.cc.Invoke(ctx, DeploymentConfigUpdateService_RetryDeploymentConfigUpdate_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// DeploymentConfigUpdateServiceServer is the server API for DeploymentConfigUpdateService service. -// All implementations must embed UnimplementedDeploymentConfigUpdateServiceServer -// for forward compatibility -type DeploymentConfigUpdateServiceServer interface { - // CreateDeploymentConfigUpdate API creates a deployment config update. - // (-- api-linter: core::0133::http-method=disabled - // - // aip.dev/not-precedent: We need to do this because here we are actually updating deployment config. --) - CreateDeploymentConfigUpdate(context.Context, *CreateDeploymentConfigUpdateRequest) (*DeploymentConfigUpdate, error) - // GetDeploymentConfigUpdate API returns a deployment config update by id. - GetDeploymentConfigUpdate(context.Context, *GetDeploymentConfigUpdateRequest) (*DeploymentConfigUpdate, error) - // ListDeploymentConfigUpdates API returns a list of deployment config updates. - ListDeploymentConfigUpdates(context.Context, *ListDeploymentConfigUpdatesRequest) (*ListDeploymentConfigUpdatesResponse, error) - // RetryDeploymentConfigUpdate API retries a deployment config update. - RetryDeploymentConfigUpdate(context.Context, *RetryDeploymentConfigUpdateRequest) (*DeploymentConfigUpdate, error) - mustEmbedUnimplementedDeploymentConfigUpdateServiceServer() -} - -// UnimplementedDeploymentConfigUpdateServiceServer must be embedded to have forward compatible implementations. -type UnimplementedDeploymentConfigUpdateServiceServer struct { -} - -func (UnimplementedDeploymentConfigUpdateServiceServer) CreateDeploymentConfigUpdate(context.Context, *CreateDeploymentConfigUpdateRequest) (*DeploymentConfigUpdate, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateDeploymentConfigUpdate not implemented") -} -func (UnimplementedDeploymentConfigUpdateServiceServer) GetDeploymentConfigUpdate(context.Context, *GetDeploymentConfigUpdateRequest) (*DeploymentConfigUpdate, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetDeploymentConfigUpdate not implemented") -} -func (UnimplementedDeploymentConfigUpdateServiceServer) ListDeploymentConfigUpdates(context.Context, *ListDeploymentConfigUpdatesRequest) (*ListDeploymentConfigUpdatesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListDeploymentConfigUpdates not implemented") -} -func (UnimplementedDeploymentConfigUpdateServiceServer) RetryDeploymentConfigUpdate(context.Context, *RetryDeploymentConfigUpdateRequest) (*DeploymentConfigUpdate, error) { - return nil, status.Errorf(codes.Unimplemented, "method RetryDeploymentConfigUpdate not implemented") -} -func (UnimplementedDeploymentConfigUpdateServiceServer) mustEmbedUnimplementedDeploymentConfigUpdateServiceServer() { -} - -// UnsafeDeploymentConfigUpdateServiceServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to DeploymentConfigUpdateServiceServer will -// result in compilation errors. -type UnsafeDeploymentConfigUpdateServiceServer interface { - mustEmbedUnimplementedDeploymentConfigUpdateServiceServer() -} - -func RegisterDeploymentConfigUpdateServiceServer(s grpc.ServiceRegistrar, srv DeploymentConfigUpdateServiceServer) { - s.RegisterService(&DeploymentConfigUpdateService_ServiceDesc, srv) -} - -func _DeploymentConfigUpdateService_CreateDeploymentConfigUpdate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateDeploymentConfigUpdateRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(DeploymentConfigUpdateServiceServer).CreateDeploymentConfigUpdate(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: DeploymentConfigUpdateService_CreateDeploymentConfigUpdate_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(DeploymentConfigUpdateServiceServer).CreateDeploymentConfigUpdate(ctx, req.(*CreateDeploymentConfigUpdateRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _DeploymentConfigUpdateService_GetDeploymentConfigUpdate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetDeploymentConfigUpdateRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(DeploymentConfigUpdateServiceServer).GetDeploymentConfigUpdate(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: DeploymentConfigUpdateService_GetDeploymentConfigUpdate_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(DeploymentConfigUpdateServiceServer).GetDeploymentConfigUpdate(ctx, req.(*GetDeploymentConfigUpdateRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _DeploymentConfigUpdateService_ListDeploymentConfigUpdates_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListDeploymentConfigUpdatesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(DeploymentConfigUpdateServiceServer).ListDeploymentConfigUpdates(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: DeploymentConfigUpdateService_ListDeploymentConfigUpdates_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(DeploymentConfigUpdateServiceServer).ListDeploymentConfigUpdates(ctx, req.(*ListDeploymentConfigUpdatesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _DeploymentConfigUpdateService_RetryDeploymentConfigUpdate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RetryDeploymentConfigUpdateRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(DeploymentConfigUpdateServiceServer).RetryDeploymentConfigUpdate(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: DeploymentConfigUpdateService_RetryDeploymentConfigUpdate_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(DeploymentConfigUpdateServiceServer).RetryDeploymentConfigUpdate(ctx, req.(*RetryDeploymentConfigUpdateRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// DeploymentConfigUpdateService_ServiceDesc is the grpc.ServiceDesc for DeploymentConfigUpdateService service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var DeploymentConfigUpdateService_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "public.portworx.pds.deploymentconfigupdate.v1.DeploymentConfigUpdateService", - HandlerType: (*DeploymentConfigUpdateServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "CreateDeploymentConfigUpdate", - Handler: _DeploymentConfigUpdateService_CreateDeploymentConfigUpdate_Handler, - }, - { - MethodName: "GetDeploymentConfigUpdate", - Handler: _DeploymentConfigUpdateService_GetDeploymentConfigUpdate_Handler, - }, - { - MethodName: "ListDeploymentConfigUpdates", - Handler: _DeploymentConfigUpdateService_ListDeploymentConfigUpdates_Handler, - }, - { - MethodName: "RetryDeploymentConfigUpdate", - Handler: _DeploymentConfigUpdateService_RetryDeploymentConfigUpdate_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto", -} diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymenttopology/apiv1/Makefile b/vendor/github.com/pure-px/apis/public/portworx/pds/deploymenttopology/apiv1/Makefile deleted file mode 100644 index 61e6c2f95..000000000 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymenttopology/apiv1/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -PROTO_FILES = deploymenttopology.proto - -all: $(PROTO_FILES) - -include $(TOP)/make/common.mk diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymenttopology/apiv1/deploymenttopology.pb.go b/vendor/github.com/pure-px/apis/public/portworx/pds/deploymenttopology/apiv1/deploymenttopology.pb.go deleted file mode 100644 index 058b8f83d..000000000 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/deploymenttopology/apiv1/deploymenttopology.pb.go +++ /dev/null @@ -1,933 +0,0 @@ -// Please use the following editor setup for this file: -// Tab size=2; Tabs as spaces; Clean up trailing whitepsace -// -// In vim add: au FileType proto setl sw=2 ts=2 expandtab list -// -// In vscode install vscode-proto3 extension and add this to your settings.json: -// "[proto3]": { -// "editor.tabSize": 2, -// "editor.insertSpaces": true, -// "editor.rulers": [80], -// "editor.detectIndentation": true, -// "files.trimTrailingWhitespace": true -// } -// - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 -// source: public/portworx/pds/deploymenttopology/apiv1/deploymenttopology.proto - -package deploymenttopology - -import ( - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - structpb "google.golang.org/protobuf/types/known/structpb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// Enum for Health of the deployment topology. -type DeploymentTopologyStatus_Health int32 - -const ( - // Health is unknown. - DeploymentTopologyStatus_UNKNOWN DeploymentTopologyStatus_Health = 0 - // Deployment Topology is Unavailable. - DeploymentTopologyStatus_UNAVAILABLE DeploymentTopologyStatus_Health = 1 - // Deployment Topology is Partially available. - DeploymentTopologyStatus_PARTIALLY_AVAILABLE DeploymentTopologyStatus_Health = 2 - // Deployment Topology is available. - DeploymentTopologyStatus_AVAILABLE DeploymentTopologyStatus_Health = 3 -) - -// Enum value maps for DeploymentTopologyStatus_Health. -var ( - DeploymentTopologyStatus_Health_name = map[int32]string{ - 0: "UNKNOWN", - 1: "UNAVAILABLE", - 2: "PARTIALLY_AVAILABLE", - 3: "AVAILABLE", - } - DeploymentTopologyStatus_Health_value = map[string]int32{ - "UNKNOWN": 0, - "UNAVAILABLE": 1, - "PARTIALLY_AVAILABLE": 2, - "AVAILABLE": 3, - } -) - -func (x DeploymentTopologyStatus_Health) Enum() *DeploymentTopologyStatus_Health { - p := new(DeploymentTopologyStatus_Health) - *p = x - return p -} - -func (x DeploymentTopologyStatus_Health) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (DeploymentTopologyStatus_Health) Descriptor() protoreflect.EnumDescriptor { - return file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_enumTypes[0].Descriptor() -} - -func (DeploymentTopologyStatus_Health) Type() protoreflect.EnumType { - return &file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_enumTypes[0] -} - -func (x DeploymentTopologyStatus_Health) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use DeploymentTopologyStatus_Health.Descriptor instead. -func (DeploymentTopologyStatus_Health) EnumDescriptor() ([]byte, []int) { - return file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_rawDescGZIP(), []int{2, 0} -} - -// Enum for Phase of the Deployment Topology. -type DeploymentTopologyStatus_Phase int32 - -const ( - // Unspecified status. - DeploymentTopologyStatus_PHASE_UNSPECIFIED DeploymentTopologyStatus_Phase = 0 - // In progress Status. - DeploymentTopologyStatus_IN_PROGRESS DeploymentTopologyStatus_Phase = 1 - // Partial Success Status. - DeploymentTopologyStatus_PARTIAL_SUCCESS DeploymentTopologyStatus_Phase = 2 - // Successful Status. - DeploymentTopologyStatus_SUCCESS DeploymentTopologyStatus_Phase = 3 - // Delete is pending Status. - DeploymentTopologyStatus_DELETE_PENDING DeploymentTopologyStatus_Phase = 4 - // Delete in progress Status. - DeploymentTopologyStatus_DELETING DeploymentTopologyStatus_Phase = 5 - // Failed Status. - DeploymentTopologyStatus_FAILED DeploymentTopologyStatus_Phase = 6 - // Timed Out Status. - DeploymentTopologyStatus_TIMED_OUT DeploymentTopologyStatus_Phase = 7 -) - -// Enum value maps for DeploymentTopologyStatus_Phase. -var ( - DeploymentTopologyStatus_Phase_name = map[int32]string{ - 0: "PHASE_UNSPECIFIED", - 1: "IN_PROGRESS", - 2: "PARTIAL_SUCCESS", - 3: "SUCCESS", - 4: "DELETE_PENDING", - 5: "DELETING", - 6: "FAILED", - 7: "TIMED_OUT", - } - DeploymentTopologyStatus_Phase_value = map[string]int32{ - "PHASE_UNSPECIFIED": 0, - "IN_PROGRESS": 1, - "PARTIAL_SUCCESS": 2, - "SUCCESS": 3, - "DELETE_PENDING": 4, - "DELETING": 5, - "FAILED": 6, - "TIMED_OUT": 7, - } -) - -func (x DeploymentTopologyStatus_Phase) Enum() *DeploymentTopologyStatus_Phase { - p := new(DeploymentTopologyStatus_Phase) - *p = x - return p -} - -func (x DeploymentTopologyStatus_Phase) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (DeploymentTopologyStatus_Phase) Descriptor() protoreflect.EnumDescriptor { - return file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_enumTypes[1].Descriptor() -} - -func (DeploymentTopologyStatus_Phase) Type() protoreflect.EnumType { - return &file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_enumTypes[1] -} - -func (x DeploymentTopologyStatus_Phase) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use DeploymentTopologyStatus_Phase.Descriptor instead. -func (DeploymentTopologyStatus_Phase) EnumDescriptor() ([]byte, []int) { - return file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_rawDescGZIP(), []int{2, 1} -} - -// A deployment topology contains a number of nodes that have various attributes as a collective group. -// This is consumed in a deployment and the functionality is being controlled by the CRUD APIs of deployment. -type DeploymentTopology struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Name of the deployment topology. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Description of the deployment topology. - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - // Number of replicas of data services. - Replicas int64 `protobuf:"varint,3,opt,name=replicas,proto3" json:"replicas,omitempty"` - // Service type are standard Kubernetes service types such as clusterIP, NodePort, load balancers, etc. - ServiceType string `protobuf:"bytes,4,opt,name=service_type,json=serviceType,proto3" json:"service_type,omitempty"` - // Service name is the name of service as provided by user. - ServiceName string `protobuf:"bytes,5,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` - // Source IP ranges to use for the deployed Load Balancer. - LoadBalancerSourceRanges []string `protobuf:"bytes,6,rep,name=load_balancer_source_ranges,json=loadBalancerSourceRanges,proto3" json:"load_balancer_source_ranges,omitempty"` - // Resource Settings Template. - ResourceSettings *Template `protobuf:"bytes,7,opt,name=resource_settings,json=resourceSettings,proto3" json:"resource_settings,omitempty"` - // Service Configurations Template. - ServiceConfigurations *Template `protobuf:"bytes,8,opt,name=service_configurations,json=serviceConfigurations,proto3" json:"service_configurations,omitempty"` - // Storage Options Template. - StorageOptions *Template `protobuf:"bytes,9,opt,name=storage_options,json=storageOptions,proto3" json:"storage_options,omitempty"` -} - -func (x *DeploymentTopology) Reset() { - *x = DeploymentTopology{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeploymentTopology) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeploymentTopology) ProtoMessage() {} - -func (x *DeploymentTopology) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeploymentTopology.ProtoReflect.Descriptor instead. -func (*DeploymentTopology) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_rawDescGZIP(), []int{0} -} - -func (x *DeploymentTopology) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *DeploymentTopology) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *DeploymentTopology) GetReplicas() int64 { - if x != nil { - return x.Replicas - } - return 0 -} - -func (x *DeploymentTopology) GetServiceType() string { - if x != nil { - return x.ServiceType - } - return "" -} - -func (x *DeploymentTopology) GetServiceName() string { - if x != nil { - return x.ServiceName - } - return "" -} - -func (x *DeploymentTopology) GetLoadBalancerSourceRanges() []string { - if x != nil { - return x.LoadBalancerSourceRanges - } - return nil -} - -func (x *DeploymentTopology) GetResourceSettings() *Template { - if x != nil { - return x.ResourceSettings - } - return nil -} - -func (x *DeploymentTopology) GetServiceConfigurations() *Template { - if x != nil { - return x.ServiceConfigurations - } - return nil -} - -func (x *DeploymentTopology) GetStorageOptions() *Template { - if x != nil { - return x.StorageOptions - } - return nil -} - -// Template. -type Template struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // UID of the Template. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // Resource version of the template. - ResourceVersion string `protobuf:"bytes,2,opt,name=resource_version,json=resourceVersion,proto3" json:"resource_version,omitempty"` - // Values required for template. - Values map[string]string `protobuf:"bytes,3,rep,name=values,proto3" json:"values,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *Template) Reset() { - *x = Template{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Template) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Template) ProtoMessage() {} - -func (x *Template) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Template.ProtoReflect.Descriptor instead. -func (*Template) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_rawDescGZIP(), []int{1} -} - -func (x *Template) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Template) GetResourceVersion() string { - if x != nil { - return x.ResourceVersion - } - return "" -} - -func (x *Template) GetValues() map[string]string { - if x != nil { - return x.Values - } - return nil -} - -// Status of the deployment topology. It is consumed in Deployment. -type DeploymentTopologyStatus struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Health of the deployment topology. - Health DeploymentTopologyStatus_Health `protobuf:"varint,1,opt,name=health,proto3,enum=public.portworx.pds.deploymenttopology.v1.DeploymentTopologyStatus_Health" json:"health,omitempty"` - // Phase of the Deployment Topology. - Phase DeploymentTopologyStatus_Phase `protobuf:"varint,2,opt,name=phase,proto3,enum=public.portworx.pds.deploymenttopology.v1.DeploymentTopologyStatus_Phase" json:"phase,omitempty"` - // Number of replicas reported by Target Cluster that are up and running. - ReadyReplicas int64 `protobuf:"varint,3,opt,name=ready_replicas,json=readyReplicas,proto3" json:"ready_replicas,omitempty"` - // Connection Information for the Deployment Topology. - ConnectionInfo *ConnectionInfo `protobuf:"bytes,4,opt,name=connection_info,json=connectionInfo,proto3" json:"connection_info,omitempty"` -} - -func (x *DeploymentTopologyStatus) Reset() { - *x = DeploymentTopologyStatus{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeploymentTopologyStatus) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeploymentTopologyStatus) ProtoMessage() {} - -func (x *DeploymentTopologyStatus) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeploymentTopologyStatus.ProtoReflect.Descriptor instead. -func (*DeploymentTopologyStatus) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_rawDescGZIP(), []int{2} -} - -func (x *DeploymentTopologyStatus) GetHealth() DeploymentTopologyStatus_Health { - if x != nil { - return x.Health - } - return DeploymentTopologyStatus_UNKNOWN -} - -func (x *DeploymentTopologyStatus) GetPhase() DeploymentTopologyStatus_Phase { - if x != nil { - return x.Phase - } - return DeploymentTopologyStatus_PHASE_UNSPECIFIED -} - -func (x *DeploymentTopologyStatus) GetReadyReplicas() int64 { - if x != nil { - return x.ReadyReplicas - } - return 0 -} - -func (x *DeploymentTopologyStatus) GetConnectionInfo() *ConnectionInfo { - if x != nil { - return x.ConnectionInfo - } - return nil -} - -// Connection Information for the Deployment Topology. -type ConnectionInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Ready pods. - Pods []*PodInfo `protobuf:"bytes,1,rep,name=pods,proto3" json:"pods,omitempty"` - // Pods that are not ready. - NotReadyPods []*PodInfo `protobuf:"bytes,2,rep,name=not_ready_pods,json=notReadyPods,proto3" json:"not_ready_pods,omitempty"` - // ConnectionDetails of data service. - ConnectionDetails *ConnectionDetails `protobuf:"bytes,3,opt,name=connection_details,json=connectionDetails,proto3" json:"connection_details,omitempty"` - // Stores details about the cluster. - ClusterDetails *structpb.Struct `protobuf:"bytes,4,opt,name=cluster_details,json=clusterDetails,proto3" json:"cluster_details,omitempty"` -} - -func (x *ConnectionInfo) Reset() { - *x = ConnectionInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ConnectionInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ConnectionInfo) ProtoMessage() {} - -func (x *ConnectionInfo) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ConnectionInfo.ProtoReflect.Descriptor instead. -func (*ConnectionInfo) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_rawDescGZIP(), []int{3} -} - -func (x *ConnectionInfo) GetPods() []*PodInfo { - if x != nil { - return x.Pods - } - return nil -} - -func (x *ConnectionInfo) GetNotReadyPods() []*PodInfo { - if x != nil { - return x.NotReadyPods - } - return nil -} - -func (x *ConnectionInfo) GetConnectionDetails() *ConnectionDetails { - if x != nil { - return x.ConnectionDetails - } - return nil -} - -func (x *ConnectionInfo) GetClusterDetails() *structpb.Struct { - if x != nil { - return x.ClusterDetails - } - return nil -} - -// PodInfo contains information about a pod. -type PodInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The IP of a pod. - Ip string `protobuf:"bytes,1,opt,name=ip,proto3" json:"ip,omitempty"` - // Name is the Hostname of a pod. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // Node that hosts a particular pod. - WorkerNode string `protobuf:"bytes,3,opt,name=worker_node,json=workerNode,proto3" json:"worker_node,omitempty"` -} - -func (x *PodInfo) Reset() { - *x = PodInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PodInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PodInfo) ProtoMessage() {} - -func (x *PodInfo) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PodInfo.ProtoReflect.Descriptor instead. -func (*PodInfo) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_rawDescGZIP(), []int{4} -} - -func (x *PodInfo) GetIp() string { - if x != nil { - return x.Ip - } - return "" -} - -func (x *PodInfo) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *PodInfo) GetWorkerNode() string { - if x != nil { - return x.WorkerNode - } - return "" -} - -// ConnectionDetails of data service. -type ConnectionDetails struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Nodes of the data service. - Nodes []string `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"` - // Ports provided by the data service (name and number). - Ports map[string]int32 `protobuf:"bytes,2,rep,name=ports,proto3" json:"ports,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` -} - -func (x *ConnectionDetails) Reset() { - *x = ConnectionDetails{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ConnectionDetails) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ConnectionDetails) ProtoMessage() {} - -func (x *ConnectionDetails) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ConnectionDetails.ProtoReflect.Descriptor instead. -func (*ConnectionDetails) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_rawDescGZIP(), []int{5} -} - -func (x *ConnectionDetails) GetNodes() []string { - if x != nil { - return x.Nodes - } - return nil -} - -func (x *ConnectionDetails) GetPorts() map[string]int32 { - if x != nil { - return x.Ports - } - return nil -} - -var File_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto protoreflect.FileDescriptor - -var file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_rawDesc = []byte{ - 0x0a, 0x45, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, - 0x78, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, - 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x29, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, - 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, - 0x76, 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0xa1, 0x04, 0x0a, 0x12, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, - 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, - 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x1b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, - 0x18, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x60, 0x0a, 0x11, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x6a, 0x0a, 0x16, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, - 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, - 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x52, 0x15, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5c, 0x0a, 0x0f, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x33, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, - 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xde, 0x01, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x2e, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, - 0x03, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x57, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xcb, 0x04, 0x0a, 0x18, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x62, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x4a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, - 0x67, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, - 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x5f, 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x49, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, - 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x70, - 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x50, 0x68, 0x61, 0x73, - 0x65, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x64, - 0x79, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0d, 0x72, 0x65, 0x61, 0x64, 0x79, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, - 0x62, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, - 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, - 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x22, 0x4e, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x0b, 0x0a, - 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, - 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x50, - 0x41, 0x52, 0x54, 0x49, 0x41, 0x4c, 0x4c, 0x59, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, - 0x4c, 0x45, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, - 0x45, 0x10, 0x03, 0x22, 0x8e, 0x01, 0x0a, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x15, 0x0a, - 0x11, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, - 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x41, 0x4c, - 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, - 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x45, 0x4c, 0x45, 0x54, - 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x44, - 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, - 0x4c, 0x45, 0x44, 0x10, 0x06, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x44, 0x5f, 0x4f, - 0x55, 0x54, 0x10, 0x07, 0x22, 0xe1, 0x02, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x46, 0x0a, 0x04, 0x70, 0x6f, 0x64, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, - 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x6f, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x70, 0x6f, 0x64, 0x73, 0x12, - 0x58, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5f, 0x70, 0x6f, 0x64, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x6e, 0x6f, 0x74, - 0x52, 0x65, 0x61, 0x64, 0x79, 0x50, 0x6f, 0x64, 0x73, 0x12, 0x6b, 0x0a, 0x12, 0x63, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, - 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x40, 0x0a, 0x0f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x4e, 0x0a, 0x07, 0x50, 0x6f, 0x64, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x65, - 0x72, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, - 0x72, 0x6b, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0xc2, 0x01, 0x0a, 0x11, 0x43, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x14, - 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6e, - 0x6f, 0x64, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x70, 0x6f, - 0x72, 0x74, 0x73, 0x1a, 0x38, 0x0a, 0x0a, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0xa3, 0x01, - 0x0a, 0x2d, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x76, 0x31, 0x42, - 0x17, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, - 0x6f, 0x67, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, 0x2f, 0x61, - 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, - 0x6f, 0x72, 0x78, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, - 0x3b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x6f, 0x70, 0x6f, 0x6c, - 0x6f, 0x67, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_rawDescOnce sync.Once - file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_rawDescData = file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_rawDesc -) - -func file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_rawDescGZIP() []byte { - file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_rawDescOnce.Do(func() { - file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_rawDescData = protoimpl.X.CompressGZIP(file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_rawDescData) - }) - return file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_rawDescData -} - -var file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_msgTypes = make([]protoimpl.MessageInfo, 8) -var file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_goTypes = []interface{}{ - (DeploymentTopologyStatus_Health)(0), // 0: public.portworx.pds.deploymenttopology.v1.DeploymentTopologyStatus.Health - (DeploymentTopologyStatus_Phase)(0), // 1: public.portworx.pds.deploymenttopology.v1.DeploymentTopologyStatus.Phase - (*DeploymentTopology)(nil), // 2: public.portworx.pds.deploymenttopology.v1.DeploymentTopology - (*Template)(nil), // 3: public.portworx.pds.deploymenttopology.v1.Template - (*DeploymentTopologyStatus)(nil), // 4: public.portworx.pds.deploymenttopology.v1.DeploymentTopologyStatus - (*ConnectionInfo)(nil), // 5: public.portworx.pds.deploymenttopology.v1.ConnectionInfo - (*PodInfo)(nil), // 6: public.portworx.pds.deploymenttopology.v1.PodInfo - (*ConnectionDetails)(nil), // 7: public.portworx.pds.deploymenttopology.v1.ConnectionDetails - nil, // 8: public.portworx.pds.deploymenttopology.v1.Template.ValuesEntry - nil, // 9: public.portworx.pds.deploymenttopology.v1.ConnectionDetails.PortsEntry - (*structpb.Struct)(nil), // 10: google.protobuf.Struct -} -var file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_depIdxs = []int32{ - 3, // 0: public.portworx.pds.deploymenttopology.v1.DeploymentTopology.resource_settings:type_name -> public.portworx.pds.deploymenttopology.v1.Template - 3, // 1: public.portworx.pds.deploymenttopology.v1.DeploymentTopology.service_configurations:type_name -> public.portworx.pds.deploymenttopology.v1.Template - 3, // 2: public.portworx.pds.deploymenttopology.v1.DeploymentTopology.storage_options:type_name -> public.portworx.pds.deploymenttopology.v1.Template - 8, // 3: public.portworx.pds.deploymenttopology.v1.Template.values:type_name -> public.portworx.pds.deploymenttopology.v1.Template.ValuesEntry - 0, // 4: public.portworx.pds.deploymenttopology.v1.DeploymentTopologyStatus.health:type_name -> public.portworx.pds.deploymenttopology.v1.DeploymentTopologyStatus.Health - 1, // 5: public.portworx.pds.deploymenttopology.v1.DeploymentTopologyStatus.phase:type_name -> public.portworx.pds.deploymenttopology.v1.DeploymentTopologyStatus.Phase - 5, // 6: public.portworx.pds.deploymenttopology.v1.DeploymentTopologyStatus.connection_info:type_name -> public.portworx.pds.deploymenttopology.v1.ConnectionInfo - 6, // 7: public.portworx.pds.deploymenttopology.v1.ConnectionInfo.pods:type_name -> public.portworx.pds.deploymenttopology.v1.PodInfo - 6, // 8: public.portworx.pds.deploymenttopology.v1.ConnectionInfo.not_ready_pods:type_name -> public.portworx.pds.deploymenttopology.v1.PodInfo - 7, // 9: public.portworx.pds.deploymenttopology.v1.ConnectionInfo.connection_details:type_name -> public.portworx.pds.deploymenttopology.v1.ConnectionDetails - 10, // 10: public.portworx.pds.deploymenttopology.v1.ConnectionInfo.cluster_details:type_name -> google.protobuf.Struct - 9, // 11: public.portworx.pds.deploymenttopology.v1.ConnectionDetails.ports:type_name -> public.portworx.pds.deploymenttopology.v1.ConnectionDetails.PortsEntry - 12, // [12:12] is the sub-list for method output_type - 12, // [12:12] is the sub-list for method input_type - 12, // [12:12] is the sub-list for extension type_name - 12, // [12:12] is the sub-list for extension extendee - 0, // [0:12] is the sub-list for field type_name -} - -func init() { file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_init() } -func file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_init() { - if File_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeploymentTopology); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Template); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeploymentTopologyStatus); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConnectionInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PodInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConnectionDetails); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_rawDesc, - NumEnums: 2, - NumMessages: 8, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_goTypes, - DependencyIndexes: file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_depIdxs, - EnumInfos: file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_enumTypes, - MessageInfos: file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_msgTypes, - }.Build() - File_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto = out.File - file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_rawDesc = nil - file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_goTypes = nil - file_public_portworx_pds_deploymenttopology_apiv1_deploymenttopology_proto_depIdxs = nil -} diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore.pb.go b/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore.pb.go index f419bf30e..7c9d1aedb 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore.pb.go +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore.pb.go @@ -51,12 +51,12 @@ const ( Phase_PENDING Phase = 2 // Waiting for the cloud snap restore to complete. Phase_RESTORING_CLOUDSNAP Phase = 3 - // PV and PVC resources are ready and we're waiting to get the data service manifest from the backup. - Phase_RESTORING_DATA_SERVICE_CR Phase = 4 - // New data service has been created and we're waiting for the restore process to complete. - Phase_RESTORING_DEPLOYMENT Phase = 5 - // Restore process in data service has succeeded and we're waiting until it becomes healthy in normal mode. - Phase_DEPLOYMENT_ENTERING_NORMAL_MODE Phase = 6 + // PV and PVC resources are ready and we're waiting to get the data service deployment manifest from the backup. + Phase_RESTORING_DATA_SERVICE_DEPLOYMENT_CR Phase = 4 + // New data service deployment has been created and we're waiting for the restore process to complete. + Phase_RESTORING_DATA_SERVICE_DEPLOYMENT Phase = 5 + // Restore process in data service deployment has succeeded and we're waiting until it becomes healthy in normal mode. + Phase_DATA_SERVICE_DEPLOYMENT_ENTERING_NORMAL_MODE Phase = 6 // Restore successful. Phase_SUCCESSFUL Phase = 7 // Restore failed. @@ -70,22 +70,22 @@ var ( 1: "INITIALIZING", 2: "PENDING", 3: "RESTORING_CLOUDSNAP", - 4: "RESTORING_DATA_SERVICE_CR", - 5: "RESTORING_DEPLOYMENT", - 6: "DEPLOYMENT_ENTERING_NORMAL_MODE", + 4: "RESTORING_DATA_SERVICE_DEPLOYMENT_CR", + 5: "RESTORING_DATA_SERVICE_DEPLOYMENT", + 6: "DATA_SERVICE_DEPLOYMENT_ENTERING_NORMAL_MODE", 7: "SUCCESSFUL", 8: "FAILED", } Phase_value = map[string]int32{ - "PHASE_UNSPECIFIED": 0, - "INITIALIZING": 1, - "PENDING": 2, - "RESTORING_CLOUDSNAP": 3, - "RESTORING_DATA_SERVICE_CR": 4, - "RESTORING_DEPLOYMENT": 5, - "DEPLOYMENT_ENTERING_NORMAL_MODE": 6, - "SUCCESSFUL": 7, - "FAILED": 8, + "PHASE_UNSPECIFIED": 0, + "INITIALIZING": 1, + "PENDING": 2, + "RESTORING_CLOUDSNAP": 3, + "RESTORING_DATA_SERVICE_DEPLOYMENT_CR": 4, + "RESTORING_DATA_SERVICE_DEPLOYMENT": 5, + "DATA_SERVICE_DEPLOYMENT_ENTERING_NORMAL_MODE": 6, + "SUCCESSFUL": 7, + "FAILED": 8, } ) @@ -122,55 +122,27 @@ type ErrorCode int32 const ( // Error code not specified. ErrorCode_ERROR_CODE_UNSPECIFIED ErrorCode = 0 - // Cloud credentials specified in Restore spec were not found by Portworx. - ErrorCode_PX_CLOUD_CREDENTIALS_NOT_FOUND ErrorCode = 1 - // Problem triggering the cloudsnap restore in PX. - ErrorCode_PX_CLOUD_SNAP_RESTORE_TRIGGER_FAILED ErrorCode = 2 - // Problem with finishing the cloudsnap restore in PX. - ErrorCode_PX_CLOUD_SNAP_RESTORE_FAILED ErrorCode = 3 - // Problem with getting the cloudsnap restore status from PX. - ErrorCode_PX_GET_CLOUD_SNAP_STATUS_FAILED ErrorCode = 4 - // Problem with getting the volume from PX. - ErrorCode_PX_GET_VOLUME_FAILED ErrorCode = 5 - // Problem with reading the data service manifest from the busybox pod. - ErrorCode_READ_DATA_SERVICE_MANIFEST_FAILED ErrorCode = 6 - // Problem with unmarshalling the JSON with data service manifest. - ErrorCode_UNMARSHAL_DATA_SERVICE_JSON ErrorCode = 7 // Deployment name already used in the namespace. - ErrorCode_DEPLOYMENT_NAME_ALREADY_EXIST ErrorCode = 8 - // Timeout while waiting for the BusyBox pod to enter the running state. - ErrorCode_TIMEOUT_BUSYBOX_POD_RUNNING ErrorCode = 9 - // Busybox pod has failed. - ErrorCode_BUSYBOX_POD_FAILED ErrorCode = 10 + ErrorCode_DATA_SERVICE_DEPLOYMENT_NAME_ALREADY_EXIST ErrorCode = 1 + // Failed to sync backup credentials on the target cluster. + ErrorCode_FAILED_BACKUP_CREDENTIAL_SYNC ErrorCode = 2 + // Restore Internal error. + ErrorCode_RESTORE_INTERNAL_ERROR ErrorCode = 3 ) // Enum value maps for ErrorCode. var ( ErrorCode_name = map[int32]string{ - 0: "ERROR_CODE_UNSPECIFIED", - 1: "PX_CLOUD_CREDENTIALS_NOT_FOUND", - 2: "PX_CLOUD_SNAP_RESTORE_TRIGGER_FAILED", - 3: "PX_CLOUD_SNAP_RESTORE_FAILED", - 4: "PX_GET_CLOUD_SNAP_STATUS_FAILED", - 5: "PX_GET_VOLUME_FAILED", - 6: "READ_DATA_SERVICE_MANIFEST_FAILED", - 7: "UNMARSHAL_DATA_SERVICE_JSON", - 8: "DEPLOYMENT_NAME_ALREADY_EXIST", - 9: "TIMEOUT_BUSYBOX_POD_RUNNING", - 10: "BUSYBOX_POD_FAILED", + 0: "ERROR_CODE_UNSPECIFIED", + 1: "DATA_SERVICE_DEPLOYMENT_NAME_ALREADY_EXIST", + 2: "FAILED_BACKUP_CREDENTIAL_SYNC", + 3: "RESTORE_INTERNAL_ERROR", } ErrorCode_value = map[string]int32{ - "ERROR_CODE_UNSPECIFIED": 0, - "PX_CLOUD_CREDENTIALS_NOT_FOUND": 1, - "PX_CLOUD_SNAP_RESTORE_TRIGGER_FAILED": 2, - "PX_CLOUD_SNAP_RESTORE_FAILED": 3, - "PX_GET_CLOUD_SNAP_STATUS_FAILED": 4, - "PX_GET_VOLUME_FAILED": 5, - "READ_DATA_SERVICE_MANIFEST_FAILED": 6, - "UNMARSHAL_DATA_SERVICE_JSON": 7, - "DEPLOYMENT_NAME_ALREADY_EXIST": 8, - "TIMEOUT_BUSYBOX_POD_RUNNING": 9, - "BUSYBOX_POD_FAILED": 10, + "ERROR_CODE_UNSPECIFIED": 0, + "DATA_SERVICE_DEPLOYMENT_NAME_ALREADY_EXIST": 1, + "FAILED_BACKUP_CREDENTIAL_SYNC": 2, + "RESTORE_INTERNAL_ERROR": 3, } ) @@ -343,16 +315,15 @@ type ListRestoresRequest struct { // // Types that are assignable to ListBy: // - // *ListRestoresRequest_AccountId // *ListRestoresRequest_TenantId // *ListRestoresRequest_ProjectId - // *ListRestoresRequest_DeploymentId + // *ListRestoresRequest_DataServiceDeploymentId // *ListRestoresRequest_BackupId ListBy isListRestoresRequest_ListBy `protobuf_oneof:"list_by"` // Sorting details using which requested list to be sorted. - Sort *apiv1.Sort `protobuf:"bytes,6,opt,name=sort,proto3" json:"sort,omitempty"` + Sort *apiv1.Sort `protobuf:"bytes,5,opt,name=sort,proto3" json:"sort,omitempty"` // Pagination metadata for this response. - Pagination *apiv1.PageBasedPaginationRequest `protobuf:"bytes,7,opt,name=pagination,proto3" json:"pagination,omitempty"` + Pagination *apiv1.PageBasedPaginationRequest `protobuf:"bytes,6,opt,name=pagination,proto3" json:"pagination,omitempty"` } func (x *ListRestoresRequest) Reset() { @@ -394,13 +365,6 @@ func (m *ListRestoresRequest) GetListBy() isListRestoresRequest_ListBy { return nil } -func (x *ListRestoresRequest) GetAccountId() string { - if x, ok := x.GetListBy().(*ListRestoresRequest_AccountId); ok { - return x.AccountId - } - return "" -} - func (x *ListRestoresRequest) GetTenantId() string { if x, ok := x.GetListBy().(*ListRestoresRequest_TenantId); ok { return x.TenantId @@ -415,9 +379,9 @@ func (x *ListRestoresRequest) GetProjectId() string { return "" } -func (x *ListRestoresRequest) GetDeploymentId() string { - if x, ok := x.GetListBy().(*ListRestoresRequest_DeploymentId); ok { - return x.DeploymentId +func (x *ListRestoresRequest) GetDataServiceDeploymentId() string { + if x, ok := x.GetListBy().(*ListRestoresRequest_DataServiceDeploymentId); ok { + return x.DataServiceDeploymentId } return "" } @@ -447,38 +411,31 @@ type isListRestoresRequest_ListBy interface { isListRestoresRequest_ListBy() } -type ListRestoresRequest_AccountId struct { - // Account ID for which the restore will be listed. - AccountId string `protobuf:"bytes,1,opt,name=account_id,json=accountId,proto3,oneof"` -} - type ListRestoresRequest_TenantId struct { // Tenant ID for which the restore will be listed. - TenantId string `protobuf:"bytes,2,opt,name=tenant_id,json=tenantId,proto3,oneof"` + TenantId string `protobuf:"bytes,1,opt,name=tenant_id,json=tenantId,proto3,oneof"` } type ListRestoresRequest_ProjectId struct { // Project ID for which the restore will be listed. - ProjectId string `protobuf:"bytes,3,opt,name=project_id,json=projectId,proto3,oneof"` + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3,oneof"` } -type ListRestoresRequest_DeploymentId struct { +type ListRestoresRequest_DataServiceDeploymentId struct { // Deployment ID for which the restore will be listed. - DeploymentId string `protobuf:"bytes,4,opt,name=deployment_id,json=deploymentId,proto3,oneof"` + DataServiceDeploymentId string `protobuf:"bytes,3,opt,name=data_service_deployment_id,json=dataServiceDeploymentId,proto3,oneof"` } type ListRestoresRequest_BackupId struct { // Backup ID for which the restore will be listed. - BackupId string `protobuf:"bytes,5,opt,name=backup_id,json=backupId,proto3,oneof"` + BackupId string `protobuf:"bytes,4,opt,name=backup_id,json=backupId,proto3,oneof"` } -func (*ListRestoresRequest_AccountId) isListRestoresRequest_ListBy() {} - func (*ListRestoresRequest_TenantId) isListRestoresRequest_ListBy() {} func (*ListRestoresRequest_ProjectId) isListRestoresRequest_ListBy() {} -func (*ListRestoresRequest_DeploymentId) isListRestoresRequest_ListBy() {} +func (*ListRestoresRequest_DataServiceDeploymentId) isListRestoresRequest_ListBy() {} func (*ListRestoresRequest_BackupId) isListRestoresRequest_ListBy() {} @@ -543,55 +500,6 @@ func (x *ListRestoresResponse) GetPagination() *apiv1.PageBasedPaginationRespons return nil } -// Request to delete a restore. -type DeleteRestoreRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // UID of the Restore. - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *DeleteRestoreRequest) Reset() { - *x = DeleteRestoreRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteRestoreRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteRestoreRequest) ProtoMessage() {} - -func (x *DeleteRestoreRequest) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteRestoreRequest.ProtoReflect.Descriptor instead. -func (*DeleteRestoreRequest) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_restore_apiv1_restore_proto_rawDescGZIP(), []int{4} -} - -func (x *DeleteRestoreRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - // Request to recreate a restore. type RecreateRestoreRequest struct { state protoimpl.MessageState @@ -611,7 +519,7 @@ type RecreateRestoreRequest struct { func (x *RecreateRestoreRequest) Reset() { *x = RecreateRestoreRequest{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[5] + mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -624,7 +532,7 @@ func (x *RecreateRestoreRequest) String() string { func (*RecreateRestoreRequest) ProtoMessage() {} func (x *RecreateRestoreRequest) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[5] + mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -637,7 +545,7 @@ func (x *RecreateRestoreRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RecreateRestoreRequest.ProtoReflect.Descriptor instead. func (*RecreateRestoreRequest) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_restore_apiv1_restore_proto_rawDescGZIP(), []int{5} + return file_public_portworx_pds_restore_apiv1_restore_proto_rawDescGZIP(), []int{4} } func (x *RecreateRestoreRequest) GetId() string { @@ -685,7 +593,7 @@ type Restore struct { func (x *Restore) Reset() { *x = Restore{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[6] + mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -698,7 +606,7 @@ func (x *Restore) String() string { func (*Restore) ProtoMessage() {} func (x *Restore) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[6] + mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -711,7 +619,7 @@ func (x *Restore) ProtoReflect() protoreflect.Message { // Deprecated: Use Restore.ProtoReflect.Descriptor instead. func (*Restore) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_restore_apiv1_restore_proto_rawDescGZIP(), []int{6} + return file_public_portworx_pds_restore_apiv1_restore_proto_rawDescGZIP(), []int{5} } func (x *Restore) GetMeta() *apiv1.Meta { @@ -752,7 +660,7 @@ type Config struct { func (x *Config) Reset() { *x = Config{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[7] + mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -765,7 +673,7 @@ func (x *Config) String() string { func (*Config) ProtoMessage() {} func (x *Config) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[7] + mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -778,7 +686,7 @@ func (x *Config) ProtoReflect() protoreflect.Message { // Deprecated: Use Config.ProtoReflect.Descriptor instead. func (*Config) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_restore_apiv1_restore_proto_rawDescGZIP(), []int{7} + return file_public_portworx_pds_restore_apiv1_restore_proto_rawDescGZIP(), []int{6} } func (x *Config) GetSourceReferences() *SourceReferences { @@ -809,7 +717,7 @@ type SourceReferences struct { unknownFields protoimpl.UnknownFields // UID of the deployment which was backed up. - DeploymentId string `protobuf:"bytes,1,opt,name=deployment_id,json=deploymentId,proto3" json:"deployment_id,omitempty"` + DataServiceDeploymentId string `protobuf:"bytes,1,opt,name=data_service_deployment_id,json=dataServiceDeploymentId,proto3" json:"data_service_deployment_id,omitempty"` // UID of the backup. BackupId string `protobuf:"bytes,2,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"` // UID of the backup location. @@ -821,7 +729,7 @@ type SourceReferences struct { func (x *SourceReferences) Reset() { *x = SourceReferences{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[8] + mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -834,7 +742,7 @@ func (x *SourceReferences) String() string { func (*SourceReferences) ProtoMessage() {} func (x *SourceReferences) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[8] + mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -847,12 +755,12 @@ func (x *SourceReferences) ProtoReflect() protoreflect.Message { // Deprecated: Use SourceReferences.ProtoReflect.Descriptor instead. func (*SourceReferences) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_restore_apiv1_restore_proto_rawDescGZIP(), []int{8} + return file_public_portworx_pds_restore_apiv1_restore_proto_rawDescGZIP(), []int{7} } -func (x *SourceReferences) GetDeploymentId() string { +func (x *SourceReferences) GetDataServiceDeploymentId() string { if x != nil { - return x.DeploymentId + return x.DataServiceDeploymentId } return "" } @@ -887,7 +795,7 @@ type DestinationReferences struct { // UID of the target cluster where restore will be created. TargetClusterId string `protobuf:"bytes,1,opt,name=target_cluster_id,json=targetClusterId,proto3" json:"target_cluster_id,omitempty"` // UID of the deployment created by the restore. - DeploymentId string `protobuf:"bytes,2,opt,name=deployment_id,json=deploymentId,proto3" json:"deployment_id,omitempty"` + DataServiceDeploymentId string `protobuf:"bytes,2,opt,name=data_service_deployment_id,json=dataServiceDeploymentId,proto3" json:"data_service_deployment_id,omitempty"` // UID of the project. ProjectId string `protobuf:"bytes,3,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` } @@ -895,7 +803,7 @@ type DestinationReferences struct { func (x *DestinationReferences) Reset() { *x = DestinationReferences{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[9] + mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -908,7 +816,7 @@ func (x *DestinationReferences) String() string { func (*DestinationReferences) ProtoMessage() {} func (x *DestinationReferences) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[9] + mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -921,7 +829,7 @@ func (x *DestinationReferences) ProtoReflect() protoreflect.Message { // Deprecated: Use DestinationReferences.ProtoReflect.Descriptor instead. func (*DestinationReferences) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_restore_apiv1_restore_proto_rawDescGZIP(), []int{9} + return file_public_portworx_pds_restore_apiv1_restore_proto_rawDescGZIP(), []int{8} } func (x *DestinationReferences) GetTargetClusterId() string { @@ -931,9 +839,9 @@ func (x *DestinationReferences) GetTargetClusterId() string { return "" } -func (x *DestinationReferences) GetDeploymentId() string { +func (x *DestinationReferences) GetDataServiceDeploymentId() string { if x != nil { - return x.DeploymentId + return x.DataServiceDeploymentId } return "" } @@ -969,12 +877,14 @@ type Status struct { ErrorMessage string `protobuf:"bytes,4,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` // Phase of the restore. Phase Phase `protobuf:"varint,5,opt,name=phase,proto3,enum=public.portworx.pds.restore.v1.Phase" json:"phase,omitempty"` + // Custom Resource Name is the kubernetes resource name for the restore that is built from ID. + CustomResourceName string `protobuf:"bytes,6,opt,name=custom_resource_name,json=customResourceName,proto3" json:"custom_resource_name,omitempty"` } func (x *Status) Reset() { *x = Status{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[10] + mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -987,7 +897,7 @@ func (x *Status) String() string { func (*Status) ProtoMessage() {} func (x *Status) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[10] + mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1000,7 +910,7 @@ func (x *Status) ProtoReflect() protoreflect.Message { // Deprecated: Use Status.ProtoReflect.Descriptor instead. func (*Status) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_restore_apiv1_restore_proto_rawDescGZIP(), []int{10} + return file_public_portworx_pds_restore_apiv1_restore_proto_rawDescGZIP(), []int{9} } func (x *Status) GetStartedAt() *timestamppb.Timestamp { @@ -1038,6 +948,13 @@ func (x *Status) GetPhase() Phase { return Phase_PHASE_UNSPECIFIED } +func (x *Status) GetCustomResourceName() string { + if x != nil { + return x.CustomResourceName + } + return "" +} + // RestorabilityMatrix represents the compatibility matrix for restore. type RestorabilityMatrix struct { state protoimpl.MessageState @@ -1051,7 +968,7 @@ type RestorabilityMatrix struct { func (x *RestorabilityMatrix) Reset() { *x = RestorabilityMatrix{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[11] + mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1064,7 +981,7 @@ func (x *RestorabilityMatrix) String() string { func (*RestorabilityMatrix) ProtoMessage() {} func (x *RestorabilityMatrix) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[11] + mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1077,7 +994,7 @@ func (x *RestorabilityMatrix) ProtoReflect() protoreflect.Message { // Deprecated: Use RestorabilityMatrix.ProtoReflect.Descriptor instead. func (*RestorabilityMatrix) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_restore_apiv1_restore_proto_rawDescGZIP(), []int{11} + return file_public_portworx_pds_restore_apiv1_restore_proto_rawDescGZIP(), []int{10} } func (x *RestorabilityMatrix) GetConditions() map[string]*RestoreCompatibilityConditionList { @@ -1100,7 +1017,7 @@ type RestoreCompatibilityConditionList struct { func (x *RestoreCompatibilityConditionList) Reset() { *x = RestoreCompatibilityConditionList{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[12] + mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1113,7 +1030,7 @@ func (x *RestoreCompatibilityConditionList) String() string { func (*RestoreCompatibilityConditionList) ProtoMessage() {} func (x *RestoreCompatibilityConditionList) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[12] + mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1126,7 +1043,7 @@ func (x *RestoreCompatibilityConditionList) ProtoReflect() protoreflect.Message // Deprecated: Use RestoreCompatibilityConditionList.ProtoReflect.Descriptor instead. func (*RestoreCompatibilityConditionList) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_restore_apiv1_restore_proto_rawDescGZIP(), []int{12} + return file_public_portworx_pds_restore_apiv1_restore_proto_rawDescGZIP(), []int{11} } func (x *RestoreCompatibilityConditionList) GetConditions() []*RestoreCompatibilityCondition { @@ -1155,7 +1072,7 @@ type RestoreCompatibilityCondition struct { func (x *RestoreCompatibilityCondition) Reset() { *x = RestoreCompatibilityCondition{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[13] + mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1168,7 +1085,7 @@ func (x *RestoreCompatibilityCondition) String() string { func (*RestoreCompatibilityCondition) ProtoMessage() {} func (x *RestoreCompatibilityCondition) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[13] + mi := &file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1181,7 +1098,7 @@ func (x *RestoreCompatibilityCondition) ProtoReflect() protoreflect.Message { // Deprecated: Use RestoreCompatibilityCondition.ProtoReflect.Descriptor instead. func (*RestoreCompatibilityCondition) Descriptor() ([]byte, []int) { - return file_public_portworx_pds_restore_apiv1_restore_proto_rawDescGZIP(), []int{13} + return file_public_portworx_pds_restore_apiv1_restore_proto_rawDescGZIP(), []int{12} } func (x *RestoreCompatibilityCondition) GetBackup() map[string]string { @@ -1235,268 +1152,252 @@ var file_public_portworx_pds_restore_apiv1_restore_proto_rawDesc = []byte{ 0xe0, 0x41, 0x02, 0x52, 0x07, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x23, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x22, 0xd3, 0x02, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0a, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, - 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x09, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, - 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0a, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, - 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0d, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, - 0x64, 0x12, 0x1d, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, - 0x12, 0x33, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x52, - 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x55, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, - 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0x0a, 0x07, - 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x62, 0x79, 0x22, 0xb3, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x43, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, - 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x26, 0x0a, - 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x92, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x13, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, - 0x02, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x22, - 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x22, 0xbe, 0x01, 0x0a, 0x07, 0x52, - 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x33, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x3e, 0x0a, 0x06, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, - 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3e, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, - 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x8c, 0x02, 0x0a, 0x06, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5d, 0x0a, 0x11, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, - 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x52, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x6c, 0x0a, 0x16, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, - 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x15, 0x64, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x14, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb9, 0x01, 0x0a, 0x10, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, - 0x28, 0x0a, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0c, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x09, 0x62, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, - 0x02, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x12, 0x62, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x10, 0x62, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x26, - 0x0a, 0x0c, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x73, 0x6e, 0x61, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0b, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x73, 0x6e, 0x61, 0x70, 0x49, 0x64, 0x22, 0x96, 0x01, 0x0a, 0x15, 0x44, 0x65, 0x73, 0x74, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, - 0x12, 0x2f, 0x0a, 0x11, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, - 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x28, 0x0a, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0c, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0a, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, - 0xae, 0x02, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x12, 0x48, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, - 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, - 0x6f, 0x64, 0x65, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, - 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, - 0x22, 0xfd, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x12, 0x63, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, - 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x72, 0x69, - 0x78, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, 0x01, - 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x57, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, - 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0x82, 0x01, 0x0a, 0x21, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x70, - 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x5d, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, - 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, - 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xd7, 0x02, 0x0a, 0x1d, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x61, 0x0a, 0x06, 0x62, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x06, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x5e, 0x0a, 0x05, 0x69, 0x6d, - 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x70, 0x75, 0x62, 0x6c, + 0x64, 0x22, 0xca, 0x02, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x09, 0x74, 0x65, 0x6e, + 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, + 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x1a, 0x64, 0x61, 0x74, + 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x17, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x62, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x55, 0x0a, 0x0a, + 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x35, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, + 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x62, 0x79, 0x22, 0xb3, + 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x74, 0x6f, + 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, - 0xd0, 0x01, 0x0a, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x48, 0x41, - 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, 0x4e, 0x47, - 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, - 0x17, 0x0a, 0x13, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x4c, 0x4f, - 0x55, 0x44, 0x53, 0x4e, 0x41, 0x50, 0x10, 0x03, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x53, 0x54, - 0x4f, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, - 0x43, 0x45, 0x5f, 0x43, 0x52, 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x52, 0x45, 0x53, 0x54, 0x4f, - 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x10, - 0x05, 0x12, 0x23, 0x0a, 0x1f, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, - 0x45, 0x4e, 0x54, 0x45, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x5f, - 0x4d, 0x4f, 0x44, 0x45, 0x10, 0x06, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, - 0x53, 0x46, 0x55, 0x4c, 0x10, 0x07, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, - 0x10, 0x08, 0x2a, 0xfa, 0x02, 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x1a, 0x0a, 0x16, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x22, 0x0a, 0x1e, - 0x50, 0x58, 0x5f, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x5f, 0x43, 0x52, 0x45, 0x44, 0x45, 0x4e, 0x54, - 0x49, 0x41, 0x4c, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, - 0x12, 0x28, 0x0a, 0x24, 0x50, 0x58, 0x5f, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x5f, 0x53, 0x4e, 0x41, - 0x50, 0x5f, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, - 0x52, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x20, 0x0a, 0x1c, 0x50, 0x58, - 0x5f, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x5f, 0x53, 0x4e, 0x41, 0x50, 0x5f, 0x52, 0x45, 0x53, 0x54, - 0x4f, 0x52, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x23, 0x0a, 0x1f, - 0x50, 0x58, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x5f, 0x53, 0x4e, 0x41, - 0x50, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, - 0x04, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x58, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x56, 0x4f, 0x4c, 0x55, - 0x4d, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x05, 0x12, 0x25, 0x0a, 0x21, 0x52, - 0x45, 0x41, 0x44, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, - 0x5f, 0x4d, 0x41, 0x4e, 0x49, 0x46, 0x45, 0x53, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, - 0x10, 0x06, 0x12, 0x1f, 0x0a, 0x1b, 0x55, 0x4e, 0x4d, 0x41, 0x52, 0x53, 0x48, 0x41, 0x4c, 0x5f, - 0x44, 0x41, 0x54, 0x41, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x4a, 0x53, 0x4f, - 0x4e, 0x10, 0x07, 0x12, 0x21, 0x0a, 0x1d, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, - 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x41, 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x45, - 0x58, 0x49, 0x53, 0x54, 0x10, 0x08, 0x12, 0x1f, 0x0a, 0x1b, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, - 0x54, 0x5f, 0x42, 0x55, 0x53, 0x59, 0x42, 0x4f, 0x58, 0x5f, 0x50, 0x4f, 0x44, 0x5f, 0x52, 0x55, - 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, 0x16, 0x0a, 0x12, 0x42, 0x55, 0x53, 0x59, 0x42, - 0x4f, 0x58, 0x5f, 0x50, 0x4f, 0x44, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x0a, 0x32, - 0x8c, 0x07, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0xa5, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x12, 0x34, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, + 0x72, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x0a, + 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, + 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x92, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x13, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, + 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x64, 0x12, 0x26, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x22, 0xbe, 0x01, 0x0a, 0x07, 0x52, 0x65, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x33, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, + 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x3e, 0x0a, 0x06, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, + 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3e, 0x0a, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, + 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x8c, 0x02, 0x0a, 0x06, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5d, 0x0a, 0x11, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x30, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x73, 0x52, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x73, 0x12, 0x6c, 0x0a, 0x16, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x70, 0x75, 0x62, + 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x15, 0x64, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x73, 0x12, 0x35, 0x0a, 0x14, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xd1, 0x01, 0x0a, 0x10, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x40, + 0x0a, 0x1a, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x17, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x12, 0x20, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x49, 0x64, 0x12, 0x31, 0x0a, 0x12, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, + 0xe0, 0x41, 0x03, 0x52, 0x10, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0c, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x73, 0x6e, + 0x61, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, + 0x52, 0x0b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x73, 0x6e, 0x61, 0x70, 0x49, 0x64, 0x22, 0xae, 0x01, + 0x0a, 0x15, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x11, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x1a, 0x64, 0x61, 0x74, 0x61, + 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, + 0x03, 0x52, 0x17, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, + 0xe0, 0x41, 0x03, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0xe0, + 0x02, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x65, 0x64, 0x41, 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, + 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, + 0x64, 0x41, 0x74, 0x12, 0x48, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, + 0x64, 0x65, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, + 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x25, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x12, + 0x30, 0x0a, 0x14, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0xfd, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x12, 0x63, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, + 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x72, + 0x69, 0x78, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, + 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x57, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, + 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x70, + 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x82, 0x01, 0x0a, 0x21, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, + 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x5d, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, + 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xd7, 0x02, 0x0a, 0x1d, 0x52, 0x65, 0x73, 0x74, 0x6f, + 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x61, 0x0a, 0x06, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, + 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x06, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x5e, 0x0a, 0x05, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, - 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x0a, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x31, 0x2e, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, - 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, + 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x2a, 0xf5, 0x01, 0x0a, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x48, + 0x41, 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, 0x4e, + 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, + 0x12, 0x17, 0x0a, 0x13, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x4c, + 0x4f, 0x55, 0x44, 0x53, 0x4e, 0x41, 0x50, 0x10, 0x03, 0x12, 0x28, 0x0a, 0x24, 0x52, 0x45, 0x53, + 0x54, 0x4f, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x53, 0x45, 0x52, 0x56, + 0x49, 0x43, 0x45, 0x5f, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, + 0x52, 0x10, 0x04, 0x12, 0x25, 0x0a, 0x21, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x49, 0x4e, 0x47, + 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x44, 0x45, + 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x41, + 0x54, 0x41, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x44, 0x45, 0x50, 0x4c, 0x4f, + 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x4e, + 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x10, 0x06, 0x12, 0x0e, 0x0a, 0x0a, + 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x46, 0x55, 0x4c, 0x10, 0x07, 0x12, 0x0a, 0x0a, 0x06, + 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x08, 0x2a, 0x96, 0x01, 0x0a, 0x09, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, + 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x2e, 0x0a, 0x2a, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, + 0x43, 0x45, 0x5f, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x4e, 0x41, + 0x4d, 0x45, 0x5f, 0x41, 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, + 0x10, 0x01, 0x12, 0x21, 0x0a, 0x1d, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x42, 0x41, 0x43, + 0x4b, 0x55, 0x50, 0x5f, 0x43, 0x52, 0x45, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x41, 0x4c, 0x5f, 0x53, + 0x59, 0x4e, 0x43, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x45, + 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, + 0x03, 0x32, 0x8e, 0x06, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0xa5, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x34, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, + 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, - 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x93, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x33, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, - 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, - 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, - 0x31, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x7c, 0x0a, 0x0d, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x34, 0x2e, 0x70, 0x75, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, + 0x22, 0x2a, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x87, 0x01, 0x0a, + 0x0a, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x31, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, - 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x17, 0x2a, 0x15, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9d, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x36, 0x2e, 0x70, + 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, + 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, + 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, + 0x15, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x93, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x33, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, - 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x29, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x01, 0x2a, 0x22, 0x1e, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, - 0x31, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, - 0x72, 0x65, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x93, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x74, - 0x72, 0x69, 0x78, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x33, 0x2e, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, - 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, - 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x76, - 0x31, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x3a, 0x72, 0x65, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x42, 0x77, - 0x0a, 0x22, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x41, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x70, 0x64, - 0x73, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, - 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x70, 0x64, 0x73, + 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x9d, 0x01, 0x0a, + 0x0f, 0x52, 0x65, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x12, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, + 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x01, 0x2a, 0x22, 0x1e, 0x2f, 0x70, + 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x3a, 0x72, 0x65, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x93, 0x01, 0x0a, + 0x16, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x33, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x70, + 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x3a, 0x72, + 0x65, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x72, + 0x69, 0x78, 0x42, 0x77, 0x0a, 0x22, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x64, 0x73, 0x2e, 0x72, 0x65, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x41, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, + 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x78, 0x2f, 0x70, 0x64, 0x73, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x70, + 0x69, 0x76, 0x31, 0x3b, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -1512,7 +1413,7 @@ func file_public_portworx_pds_restore_apiv1_restore_proto_rawDescGZIP() []byte { } var file_public_portworx_pds_restore_apiv1_restore_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes = make([]protoimpl.MessageInfo, 17) +var file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes = make([]protoimpl.MessageInfo, 16) var file_public_portworx_pds_restore_apiv1_restore_proto_goTypes = []interface{}{ (Phase)(0), // 0: public.portworx.pds.restore.v1.Phase (ErrorCode)(0), // 1: public.portworx.pds.restore.v1.ErrorCode @@ -1520,60 +1421,57 @@ var file_public_portworx_pds_restore_apiv1_restore_proto_goTypes = []interface{} (*GetRestoreRequest)(nil), // 3: public.portworx.pds.restore.v1.GetRestoreRequest (*ListRestoresRequest)(nil), // 4: public.portworx.pds.restore.v1.ListRestoresRequest (*ListRestoresResponse)(nil), // 5: public.portworx.pds.restore.v1.ListRestoresResponse - (*DeleteRestoreRequest)(nil), // 6: public.portworx.pds.restore.v1.DeleteRestoreRequest - (*RecreateRestoreRequest)(nil), // 7: public.portworx.pds.restore.v1.RecreateRestoreRequest - (*Restore)(nil), // 8: public.portworx.pds.restore.v1.Restore - (*Config)(nil), // 9: public.portworx.pds.restore.v1.Config - (*SourceReferences)(nil), // 10: public.portworx.pds.restore.v1.SourceReferences - (*DestinationReferences)(nil), // 11: public.portworx.pds.restore.v1.DestinationReferences - (*Status)(nil), // 12: public.portworx.pds.restore.v1.Status - (*RestorabilityMatrix)(nil), // 13: public.portworx.pds.restore.v1.RestorabilityMatrix - (*RestoreCompatibilityConditionList)(nil), // 14: public.portworx.pds.restore.v1.RestoreCompatibilityConditionList - (*RestoreCompatibilityCondition)(nil), // 15: public.portworx.pds.restore.v1.RestoreCompatibilityCondition - nil, // 16: public.portworx.pds.restore.v1.RestorabilityMatrix.ConditionsEntry - nil, // 17: public.portworx.pds.restore.v1.RestoreCompatibilityCondition.BackupEntry - nil, // 18: public.portworx.pds.restore.v1.RestoreCompatibilityCondition.ImageEntry - (*apiv1.Sort)(nil), // 19: public.portworx.common.v1.Sort - (*apiv1.PageBasedPaginationRequest)(nil), // 20: public.portworx.common.v1.PageBasedPaginationRequest - (*apiv1.PageBasedPaginationResponse)(nil), // 21: public.portworx.common.v1.PageBasedPaginationResponse - (*apiv1.Meta)(nil), // 22: public.portworx.common.v1.Meta - (*timestamppb.Timestamp)(nil), // 23: google.protobuf.Timestamp - (*emptypb.Empty)(nil), // 24: google.protobuf.Empty + (*RecreateRestoreRequest)(nil), // 6: public.portworx.pds.restore.v1.RecreateRestoreRequest + (*Restore)(nil), // 7: public.portworx.pds.restore.v1.Restore + (*Config)(nil), // 8: public.portworx.pds.restore.v1.Config + (*SourceReferences)(nil), // 9: public.portworx.pds.restore.v1.SourceReferences + (*DestinationReferences)(nil), // 10: public.portworx.pds.restore.v1.DestinationReferences + (*Status)(nil), // 11: public.portworx.pds.restore.v1.Status + (*RestorabilityMatrix)(nil), // 12: public.portworx.pds.restore.v1.RestorabilityMatrix + (*RestoreCompatibilityConditionList)(nil), // 13: public.portworx.pds.restore.v1.RestoreCompatibilityConditionList + (*RestoreCompatibilityCondition)(nil), // 14: public.portworx.pds.restore.v1.RestoreCompatibilityCondition + nil, // 15: public.portworx.pds.restore.v1.RestorabilityMatrix.ConditionsEntry + nil, // 16: public.portworx.pds.restore.v1.RestoreCompatibilityCondition.BackupEntry + nil, // 17: public.portworx.pds.restore.v1.RestoreCompatibilityCondition.ImageEntry + (*apiv1.Sort)(nil), // 18: public.portworx.common.v1.Sort + (*apiv1.PageBasedPaginationRequest)(nil), // 19: public.portworx.common.v1.PageBasedPaginationRequest + (*apiv1.PageBasedPaginationResponse)(nil), // 20: public.portworx.common.v1.PageBasedPaginationResponse + (*apiv1.Meta)(nil), // 21: public.portworx.common.v1.Meta + (*timestamppb.Timestamp)(nil), // 22: google.protobuf.Timestamp + (*emptypb.Empty)(nil), // 23: google.protobuf.Empty } var file_public_portworx_pds_restore_apiv1_restore_proto_depIdxs = []int32{ - 8, // 0: public.portworx.pds.restore.v1.CreateRestoreRequest.restore:type_name -> public.portworx.pds.restore.v1.Restore - 19, // 1: public.portworx.pds.restore.v1.ListRestoresRequest.sort:type_name -> public.portworx.common.v1.Sort - 20, // 2: public.portworx.pds.restore.v1.ListRestoresRequest.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationRequest - 8, // 3: public.portworx.pds.restore.v1.ListRestoresResponse.restores:type_name -> public.portworx.pds.restore.v1.Restore - 21, // 4: public.portworx.pds.restore.v1.ListRestoresResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse - 22, // 5: public.portworx.pds.restore.v1.Restore.meta:type_name -> public.portworx.common.v1.Meta - 9, // 6: public.portworx.pds.restore.v1.Restore.config:type_name -> public.portworx.pds.restore.v1.Config - 12, // 7: public.portworx.pds.restore.v1.Restore.status:type_name -> public.portworx.pds.restore.v1.Status - 10, // 8: public.portworx.pds.restore.v1.Config.source_references:type_name -> public.portworx.pds.restore.v1.SourceReferences - 11, // 9: public.portworx.pds.restore.v1.Config.destination_references:type_name -> public.portworx.pds.restore.v1.DestinationReferences - 23, // 10: public.portworx.pds.restore.v1.Status.started_at:type_name -> google.protobuf.Timestamp - 23, // 11: public.portworx.pds.restore.v1.Status.completed_at:type_name -> google.protobuf.Timestamp + 7, // 0: public.portworx.pds.restore.v1.CreateRestoreRequest.restore:type_name -> public.portworx.pds.restore.v1.Restore + 18, // 1: public.portworx.pds.restore.v1.ListRestoresRequest.sort:type_name -> public.portworx.common.v1.Sort + 19, // 2: public.portworx.pds.restore.v1.ListRestoresRequest.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationRequest + 7, // 3: public.portworx.pds.restore.v1.ListRestoresResponse.restores:type_name -> public.portworx.pds.restore.v1.Restore + 20, // 4: public.portworx.pds.restore.v1.ListRestoresResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse + 21, // 5: public.portworx.pds.restore.v1.Restore.meta:type_name -> public.portworx.common.v1.Meta + 8, // 6: public.portworx.pds.restore.v1.Restore.config:type_name -> public.portworx.pds.restore.v1.Config + 11, // 7: public.portworx.pds.restore.v1.Restore.status:type_name -> public.portworx.pds.restore.v1.Status + 9, // 8: public.portworx.pds.restore.v1.Config.source_references:type_name -> public.portworx.pds.restore.v1.SourceReferences + 10, // 9: public.portworx.pds.restore.v1.Config.destination_references:type_name -> public.portworx.pds.restore.v1.DestinationReferences + 22, // 10: public.portworx.pds.restore.v1.Status.started_at:type_name -> google.protobuf.Timestamp + 22, // 11: public.portworx.pds.restore.v1.Status.completed_at:type_name -> google.protobuf.Timestamp 1, // 12: public.portworx.pds.restore.v1.Status.error_code:type_name -> public.portworx.pds.restore.v1.ErrorCode 0, // 13: public.portworx.pds.restore.v1.Status.phase:type_name -> public.portworx.pds.restore.v1.Phase - 16, // 14: public.portworx.pds.restore.v1.RestorabilityMatrix.conditions:type_name -> public.portworx.pds.restore.v1.RestorabilityMatrix.ConditionsEntry - 15, // 15: public.portworx.pds.restore.v1.RestoreCompatibilityConditionList.conditions:type_name -> public.portworx.pds.restore.v1.RestoreCompatibilityCondition - 17, // 16: public.portworx.pds.restore.v1.RestoreCompatibilityCondition.backup:type_name -> public.portworx.pds.restore.v1.RestoreCompatibilityCondition.BackupEntry - 18, // 17: public.portworx.pds.restore.v1.RestoreCompatibilityCondition.image:type_name -> public.portworx.pds.restore.v1.RestoreCompatibilityCondition.ImageEntry - 14, // 18: public.portworx.pds.restore.v1.RestorabilityMatrix.ConditionsEntry.value:type_name -> public.portworx.pds.restore.v1.RestoreCompatibilityConditionList + 15, // 14: public.portworx.pds.restore.v1.RestorabilityMatrix.conditions:type_name -> public.portworx.pds.restore.v1.RestorabilityMatrix.ConditionsEntry + 14, // 15: public.portworx.pds.restore.v1.RestoreCompatibilityConditionList.conditions:type_name -> public.portworx.pds.restore.v1.RestoreCompatibilityCondition + 16, // 16: public.portworx.pds.restore.v1.RestoreCompatibilityCondition.backup:type_name -> public.portworx.pds.restore.v1.RestoreCompatibilityCondition.BackupEntry + 17, // 17: public.portworx.pds.restore.v1.RestoreCompatibilityCondition.image:type_name -> public.portworx.pds.restore.v1.RestoreCompatibilityCondition.ImageEntry + 13, // 18: public.portworx.pds.restore.v1.RestorabilityMatrix.ConditionsEntry.value:type_name -> public.portworx.pds.restore.v1.RestoreCompatibilityConditionList 2, // 19: public.portworx.pds.restore.v1.RestoreService.CreateRestore:input_type -> public.portworx.pds.restore.v1.CreateRestoreRequest 3, // 20: public.portworx.pds.restore.v1.RestoreService.GetRestore:input_type -> public.portworx.pds.restore.v1.GetRestoreRequest 4, // 21: public.portworx.pds.restore.v1.RestoreService.ListRestores:input_type -> public.portworx.pds.restore.v1.ListRestoresRequest - 6, // 22: public.portworx.pds.restore.v1.RestoreService.DeleteRestore:input_type -> public.portworx.pds.restore.v1.DeleteRestoreRequest - 7, // 23: public.portworx.pds.restore.v1.RestoreService.RecreateRestore:input_type -> public.portworx.pds.restore.v1.RecreateRestoreRequest - 24, // 24: public.portworx.pds.restore.v1.RestoreService.GetRestorabilityMatrix:input_type -> google.protobuf.Empty - 8, // 25: public.portworx.pds.restore.v1.RestoreService.CreateRestore:output_type -> public.portworx.pds.restore.v1.Restore - 8, // 26: public.portworx.pds.restore.v1.RestoreService.GetRestore:output_type -> public.portworx.pds.restore.v1.Restore - 5, // 27: public.portworx.pds.restore.v1.RestoreService.ListRestores:output_type -> public.portworx.pds.restore.v1.ListRestoresResponse - 24, // 28: public.portworx.pds.restore.v1.RestoreService.DeleteRestore:output_type -> google.protobuf.Empty - 8, // 29: public.portworx.pds.restore.v1.RestoreService.RecreateRestore:output_type -> public.portworx.pds.restore.v1.Restore - 13, // 30: public.portworx.pds.restore.v1.RestoreService.GetRestorabilityMatrix:output_type -> public.portworx.pds.restore.v1.RestorabilityMatrix - 25, // [25:31] is the sub-list for method output_type - 19, // [19:25] is the sub-list for method input_type + 6, // 22: public.portworx.pds.restore.v1.RestoreService.RecreateRestore:input_type -> public.portworx.pds.restore.v1.RecreateRestoreRequest + 23, // 23: public.portworx.pds.restore.v1.RestoreService.GetRestorabilityMatrix:input_type -> google.protobuf.Empty + 7, // 24: public.portworx.pds.restore.v1.RestoreService.CreateRestore:output_type -> public.portworx.pds.restore.v1.Restore + 7, // 25: public.portworx.pds.restore.v1.RestoreService.GetRestore:output_type -> public.portworx.pds.restore.v1.Restore + 5, // 26: public.portworx.pds.restore.v1.RestoreService.ListRestores:output_type -> public.portworx.pds.restore.v1.ListRestoresResponse + 7, // 27: public.portworx.pds.restore.v1.RestoreService.RecreateRestore:output_type -> public.portworx.pds.restore.v1.Restore + 12, // 28: public.portworx.pds.restore.v1.RestoreService.GetRestorabilityMatrix:output_type -> public.portworx.pds.restore.v1.RestorabilityMatrix + 24, // [24:29] is the sub-list for method output_type + 19, // [19:24] is the sub-list for method input_type 19, // [19:19] is the sub-list for extension type_name 19, // [19:19] is the sub-list for extension extendee 0, // [0:19] is the sub-list for field type_name @@ -1634,18 +1532,6 @@ func file_public_portworx_pds_restore_apiv1_restore_proto_init() { } } file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteRestoreRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RecreateRestoreRequest); i { case 0: return &v.state @@ -1657,7 +1543,7 @@ func file_public_portworx_pds_restore_apiv1_restore_proto_init() { return nil } } - file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Restore); i { case 0: return &v.state @@ -1669,7 +1555,7 @@ func file_public_portworx_pds_restore_apiv1_restore_proto_init() { return nil } } - file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Config); i { case 0: return &v.state @@ -1681,7 +1567,7 @@ func file_public_portworx_pds_restore_apiv1_restore_proto_init() { return nil } } - file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SourceReferences); i { case 0: return &v.state @@ -1693,7 +1579,7 @@ func file_public_portworx_pds_restore_apiv1_restore_proto_init() { return nil } } - file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DestinationReferences); i { case 0: return &v.state @@ -1705,7 +1591,7 @@ func file_public_portworx_pds_restore_apiv1_restore_proto_init() { return nil } } - file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Status); i { case 0: return &v.state @@ -1717,7 +1603,7 @@ func file_public_portworx_pds_restore_apiv1_restore_proto_init() { return nil } } - file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RestorabilityMatrix); i { case 0: return &v.state @@ -1729,7 +1615,7 @@ func file_public_portworx_pds_restore_apiv1_restore_proto_init() { return nil } } - file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RestoreCompatibilityConditionList); i { case 0: return &v.state @@ -1741,7 +1627,7 @@ func file_public_portworx_pds_restore_apiv1_restore_proto_init() { return nil } } - file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RestoreCompatibilityCondition); i { case 0: return &v.state @@ -1755,10 +1641,9 @@ func file_public_portworx_pds_restore_apiv1_restore_proto_init() { } } file_public_portworx_pds_restore_apiv1_restore_proto_msgTypes[2].OneofWrappers = []interface{}{ - (*ListRestoresRequest_AccountId)(nil), (*ListRestoresRequest_TenantId)(nil), (*ListRestoresRequest_ProjectId)(nil), - (*ListRestoresRequest_DeploymentId)(nil), + (*ListRestoresRequest_DataServiceDeploymentId)(nil), (*ListRestoresRequest_BackupId)(nil), } type x struct{} @@ -1767,7 +1652,7 @@ func file_public_portworx_pds_restore_apiv1_restore_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_public_portworx_pds_restore_apiv1_restore_proto_rawDesc, NumEnums: 2, - NumMessages: 17, + NumMessages: 16, NumExtensions: 0, NumServices: 1, }, diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore.pb.gw.go b/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore.pb.gw.go index 8d117a315..569346eaf 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore.pb.gw.go +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore.pb.gw.go @@ -180,58 +180,6 @@ func local_request_RestoreService_ListRestores_0(ctx context.Context, marshaler } -func request_RestoreService_DeleteRestore_0(ctx context.Context, marshaler runtime.Marshaler, client RestoreServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteRestoreRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.DeleteRestore(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_RestoreService_DeleteRestore_0(ctx context.Context, marshaler runtime.Marshaler, server RestoreServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteRestoreRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.DeleteRestore(ctx, &protoReq) - return msg, metadata, err - -} - func request_RestoreService_RecreateRestore_0(ctx context.Context, marshaler runtime.Marshaler, client RestoreServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq RecreateRestoreRequest var metadata runtime.ServerMetadata @@ -391,31 +339,6 @@ func RegisterRestoreServiceHandlerServer(ctx context.Context, mux *runtime.Serve }) - mux.Handle("DELETE", pattern_RestoreService_DeleteRestore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.pds.restore.v1.RestoreService/DeleteRestore", runtime.WithHTTPPathPattern("/pds/v1/restores/{id}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_RestoreService_DeleteRestore_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_RestoreService_DeleteRestore_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("POST", pattern_RestoreService_RecreateRestore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -573,28 +496,6 @@ func RegisterRestoreServiceHandlerClient(ctx context.Context, mux *runtime.Serve }) - mux.Handle("DELETE", pattern_RestoreService_DeleteRestore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.pds.restore.v1.RestoreService/DeleteRestore", runtime.WithHTTPPathPattern("/pds/v1/restores/{id}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_RestoreService_DeleteRestore_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_RestoreService_DeleteRestore_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("POST", pattern_RestoreService_RecreateRestore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -649,8 +550,6 @@ var ( pattern_RestoreService_ListRestores_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"pds", "v1", "restores"}, "")) - pattern_RestoreService_DeleteRestore_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"pds", "v1", "restores", "id"}, "")) - pattern_RestoreService_RecreateRestore_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"pds", "v1", "restores", "id"}, "recreate")) pattern_RestoreService_GetRestorabilityMatrix_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"pds", "v1", "restores"}, "restorabilityMatrix")) @@ -663,8 +562,6 @@ var ( forward_RestoreService_ListRestores_0 = runtime.ForwardResponseMessage - forward_RestoreService_DeleteRestore_0 = runtime.ForwardResponseMessage - forward_RestoreService_RecreateRestore_0 = runtime.ForwardResponseMessage forward_RestoreService_GetRestorabilityMatrix_0 = runtime.ForwardResponseMessage diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore.pb.md b/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore.pb.md index 427bcbd5f..8258cb8b0 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore.pb.md +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore.pb.md @@ -14,7 +14,6 @@ - Messages - [Config](#config) - [CreateRestoreRequest](#createrestorerequest) - - [DeleteRestoreRequest](#deleterestorerequest) - [DestinationReferences](#destinationreferences) - [GetRestoreRequest](#getrestorerequest) - [ListRestoresRequest](#listrestoresrequest) @@ -64,12 +63,6 @@ GetRestore API returns the Restore resource. [ListRestoresResponse](#listrestoresresponse) ListRestore API lists the Restore resources. -### DeleteRestore {#methodpublicportworxpdsrestorev1restoreservicedeleterestore} - -> **rpc** DeleteRestore([DeleteRestoreRequest](#deleterestorerequest)) - [.google.protobuf.Empty](#googleprotobufempty) - -DeleteRestore API deletes the restore. ### RecreateRestore {#methodpublicportworxpdsrestorev1restoreservicerecreaterestore} > **rpc** RecreateRestore([RecreateRestoreRequest](#recreaterestorerequest)) @@ -116,17 +109,6 @@ Request to create a restore. -### DeleteRestoreRequest {#deleterestorerequest} -Request to delete a restore. - - -| Field | Type | Description | -| ----- | ---- | ----------- | -| id | [ string](#string) | UID of the Restore. | - - - - ### DestinationReferences {#destinationreferences} Destination references for the restore. @@ -134,7 +116,7 @@ Destination references for the restore. | Field | Type | Description | | ----- | ---- | ----------- | | target_cluster_id | [ string](#string) | UID of the target cluster where restore will be created. | -| deployment_id | [ string](#string) | UID of the deployment created by the restore. | +| data_service_deployment_id | [ string](#string) | UID of the deployment created by the restore. | | project_id | [ string](#string) | UID of the project. | @@ -157,10 +139,9 @@ Request to list the restores. | Field | Type | Description | | ----- | ---- | ----------- | -| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.account_id | [ string](#string) | Account ID for which the restore will be listed. | | [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.tenant_id | [ string](#string) | Tenant ID for which the restore will be listed. | | [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.project_id | [ string](#string) | Project ID for which the restore will be listed. | -| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.deployment_id | [ string](#string) | Deployment ID for which the restore will be listed. | +| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.data_service_deployment_id | [ string](#string) | Deployment ID for which the restore will be listed. | | [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) list_by.backup_id | [ string](#string) | Backup ID for which the restore will be listed. | | sort | [ public.portworx.common.v1.Sort](#publicportworxcommonv1sort) | Sorting details using which requested list to be sorted. | | pagination | [ public.portworx.common.v1.PageBasedPaginationRequest](#publicportworxcommonv1pagebasedpaginationrequest) | Pagination metadata for this response. | @@ -283,7 +264,7 @@ SourceReferences for the restore. | Field | Type | Description | | ----- | ---- | ----------- | -| deployment_id | [ string](#string) | UID of the deployment which was backed up. | +| data_service_deployment_id | [ string](#string) | UID of the deployment which was backed up. | | backup_id | [ string](#string) | UID of the backup. | | backup_location_id | [ string](#string) | UID of the backup location. | | cloudsnap_id | [ string](#string) | UID of the cloud snapshot of the backup volume used for restore. | @@ -302,6 +283,7 @@ Status of the restore. | error_code | [ ErrorCode](#errorcode) | Error code of the restore from Target Cluster. | | error_message | [ string](#string) | Error message is description of the error in restore. | | phase | [ Phase](#phase) | Phase of the restore. | +| custom_resource_name | [ string](#string) | Custom Resource Name is the kubernetes resource name for the restore that is built from ID. | @@ -315,16 +297,9 @@ Enums for error codes for restore on the target cluster. | Name | Number | Description | | ---- | ------ | ----------- | | ERROR_CODE_UNSPECIFIED | 0 | Error code not specified. | -| PX_CLOUD_CREDENTIALS_NOT_FOUND | 1 | Cloud credentials specified in Restore spec were not found by Portworx. | -| PX_CLOUD_SNAP_RESTORE_TRIGGER_FAILED | 2 | Problem triggering the cloudsnap restore in PX. | -| PX_CLOUD_SNAP_RESTORE_FAILED | 3 | Problem with finishing the cloudsnap restore in PX. | -| PX_GET_CLOUD_SNAP_STATUS_FAILED | 4 | Problem with getting the cloudsnap restore status from PX. | -| PX_GET_VOLUME_FAILED | 5 | Problem with getting the volume from PX. | -| READ_DATA_SERVICE_MANIFEST_FAILED | 6 | Problem with reading the data service manifest from the busybox pod. | -| UNMARSHAL_DATA_SERVICE_JSON | 7 | Problem with unmarshalling the JSON with data service manifest. | -| DEPLOYMENT_NAME_ALREADY_EXIST | 8 | Deployment name already used in the namespace. | -| TIMEOUT_BUSYBOX_POD_RUNNING | 9 | Timeout while waiting for the BusyBox pod to enter the running state. | -| BUSYBOX_POD_FAILED | 10 | Busybox pod has failed. | +| DATA_SERVICE_DEPLOYMENT_NAME_ALREADY_EXIST | 1 | Deployment name already used in the namespace. | +| FAILED_BACKUP_CREDENTIAL_SYNC | 2 | Failed to sync backup credentials on the target cluster. | +| RESTORE_INTERNAL_ERROR | 3 | Restore Internal error. | @@ -338,9 +313,9 @@ Enum for phase of the restore. | INITIALIZING | 1 | Restore is initializing. | | PENDING | 2 | Restore has not yet started. | | RESTORING_CLOUDSNAP | 3 | Waiting for the cloud snap restore to complete. | -| RESTORING_DATA_SERVICE_CR | 4 | PV and PVC resources are ready and we're waiting to get the data service manifest from the backup. | -| RESTORING_DEPLOYMENT | 5 | New data service has been created and we're waiting for the restore process to complete. | -| DEPLOYMENT_ENTERING_NORMAL_MODE | 6 | Restore process in data service has succeeded and we're waiting until it becomes healthy in normal mode. | +| RESTORING_DATA_SERVICE_DEPLOYMENT_CR | 4 | PV and PVC resources are ready and we're waiting to get the data service deployment manifest from the backup. | +| RESTORING_DATA_SERVICE_DEPLOYMENT | 5 | New data service deployment has been created and we're waiting for the restore process to complete. | +| DATA_SERVICE_DEPLOYMENT_ENTERING_NORMAL_MODE | 6 | Restore process in data service deployment has succeeded and we're waiting until it becomes healthy in normal mode. | | SUCCESSFUL | 7 | Restore successful. | | FAILED | 8 | Restore failed. | diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore.proto b/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore.proto index 685058961..0fb6687d8 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore.proto +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore.proto @@ -56,14 +56,6 @@ service RestoreService { }; } - // DeleteRestore API deletes the restore. - rpc DeleteRestore(DeleteRestoreRequest) - returns(google.protobuf.Empty) { - option(google.api.http) = { - delete: "/pds/v1/restores/{id}" - }; - } - // RecreateRestore API recreates a already failed restore. rpc RecreateRestore(RecreateRestoreRequest) returns(Restore) { @@ -107,7 +99,7 @@ message CreateRestoreRequest { } // Request to get a restore. -message GetRestoreRequest { +message GetRestoreRequest { // UID of the restore. string id = 1; } @@ -116,21 +108,19 @@ message GetRestoreRequest { message ListRestoresRequest { // Specifies a filter to list restores. oneof list_by { - // Account ID for which the restore will be listed. - string account_id = 1; // Tenant ID for which the restore will be listed. - string tenant_id = 2; + string tenant_id = 1; // Project ID for which the restore will be listed. - string project_id = 3; + string project_id = 2; // Deployment ID for which the restore will be listed. - string deployment_id = 4; + string data_service_deployment_id = 3; // Backup ID for which the restore will be listed. - string backup_id = 5; + string backup_id = 4; } // Sorting details using which requested list to be sorted. - public.portworx.common.v1.Sort sort = 6; + public.portworx.common.v1.Sort sort = 5; // Pagination metadata for this response. - public.portworx.common.v1.PageBasedPaginationRequest pagination = 7; + public.portworx.common.v1.PageBasedPaginationRequest pagination = 6; } // ListRestoresResponse represents list restores response. @@ -143,12 +133,6 @@ message ListRestoresResponse { public.portworx.common.v1.PageBasedPaginationResponse pagination = 2; } -// Request to delete a restore. -message DeleteRestoreRequest { - // UID of the Restore. - string id = 2; -} - // Request to recreate a restore. message RecreateRestoreRequest { // UID of the existing restore. @@ -184,7 +168,7 @@ message Config { // SourceReferences for the restore. message SourceReferences { // UID of the deployment which was backed up. - string deployment_id = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + string data_service_deployment_id = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; // UID of the backup. string backup_id = 2 [(google.api.field_behavior) = REQUIRED]; // UID of the backup location. @@ -198,7 +182,7 @@ message DestinationReferences { // UID of the target cluster where restore will be created. string target_cluster_id = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; // UID of the deployment created by the restore. - string deployment_id = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; + string data_service_deployment_id = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; // UID of the project. string project_id = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; } @@ -219,6 +203,8 @@ message Status { string error_message = 4; // Phase of the restore. Phase phase = 5; + // Custom Resource Name is the kubernetes resource name for the restore that is built from ID. + string custom_resource_name = 6; } // RestorabilityMatrix represents the compatibility matrix for restore. @@ -255,15 +241,15 @@ enum Phase { PENDING = 2; // Waiting for the cloud snap restore to complete. RESTORING_CLOUDSNAP = 3; - // PV and PVC resources are ready and we're waiting to get the data service manifest from the backup. - RESTORING_DATA_SERVICE_CR = 4; - // New data service has been created and we're waiting for the restore process to complete. - RESTORING_DEPLOYMENT = 5; - // Restore process in data service has succeeded and we're waiting until it becomes healthy in normal mode. - DEPLOYMENT_ENTERING_NORMAL_MODE = 6; + // PV and PVC resources are ready and we're waiting to get the data service deployment manifest from the backup. + RESTORING_DATA_SERVICE_DEPLOYMENT_CR = 4; + // New data service deployment has been created and we're waiting for the restore process to complete. + RESTORING_DATA_SERVICE_DEPLOYMENT = 5; + // Restore process in data service deployment has succeeded and we're waiting until it becomes healthy in normal mode. + DATA_SERVICE_DEPLOYMENT_ENTERING_NORMAL_MODE = 6; // Restore successful. SUCCESSFUL = 7; - // Restore failed. + // Restore failed. FAILED = 8; } @@ -271,25 +257,10 @@ enum Phase { enum ErrorCode { // Error code not specified. ERROR_CODE_UNSPECIFIED = 0; - // Cloud credentials specified in Restore spec were not found by Portworx. - PX_CLOUD_CREDENTIALS_NOT_FOUND = 1; - // Problem triggering the cloudsnap restore in PX. - PX_CLOUD_SNAP_RESTORE_TRIGGER_FAILED = 2; - // Problem with finishing the cloudsnap restore in PX. - PX_CLOUD_SNAP_RESTORE_FAILED = 3; - // Problem with getting the cloudsnap restore status from PX. - PX_GET_CLOUD_SNAP_STATUS_FAILED = 4; - // Problem with getting the volume from PX. - PX_GET_VOLUME_FAILED = 5; - // Problem with reading the data service manifest from the busybox pod. - READ_DATA_SERVICE_MANIFEST_FAILED = 6; - // Problem with unmarshalling the JSON with data service manifest. - UNMARSHAL_DATA_SERVICE_JSON = 7; // Deployment name already used in the namespace. - DEPLOYMENT_NAME_ALREADY_EXIST = 8; - // Timeout while waiting for the BusyBox pod to enter the running state. - TIMEOUT_BUSYBOX_POD_RUNNING = 9; - // Busybox pod has failed. - BUSYBOX_POD_FAILED = 10; + DATA_SERVICE_DEPLOYMENT_NAME_ALREADY_EXIST = 1; + // Failed to sync backup credentials on the target cluster. + FAILED_BACKUP_CREDENTIAL_SYNC = 2; + // Restore Internal error. + RESTORE_INTERNAL_ERROR = 3; } - diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore.swagger.json b/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore.swagger.json index b2cb1e637..f354fdaac 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore.swagger.json +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore.swagger.json @@ -89,15 +89,6 @@ } }, "parameters": [ - { - "name": "accountId", - "description": "Account ID for which the restore will be listed.", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - }, { "name": "tenantId", "description": "Tenant ID for which the restore will be listed.", @@ -117,7 +108,7 @@ } }, { - "name": "deploymentId", + "name": "dataServiceDeploymentId", "description": "Deployment ID for which the restore will be listed.", "in": "query", "required": false, @@ -232,47 +223,6 @@ "tags": [ "RestoreService" ] - }, - "delete": { - "summary": "DeleteRestore API deletes the restore.", - "operationId": "RestoreService_DeleteRestore", - "responses": { - "200": { - "description": "A successful response.", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": {} - } - } - } - }, - "default": { - "description": "An unexpected error response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/googlerpcStatus" - } - } - } - } - }, - "parameters": [ - { - "name": "id", - "description": "UID of the Restore.", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "tags": [ - "RestoreService" - ] } }, "/pds/v1/restores/{id}:recreate": { @@ -472,6 +422,10 @@ }, "phase": { "$ref": "#/components/schemas/v1Phase" + }, + "customResourceName": { + "type": "string", + "description": "Custom Resource Name is the kubernetes resource name for the restore that is built from ID." } }, "description": "Status of the restore." @@ -501,7 +455,7 @@ "description": "UID of the target cluster where restore will be created.", "readOnly": true }, - "deploymentId": { + "dataServiceDeploymentId": { "type": "string", "description": "UID of the deployment created by the restore.", "readOnly": true @@ -518,19 +472,12 @@ "type": "string", "enum": [ "ERROR_CODE_UNSPECIFIED", - "PX_CLOUD_CREDENTIALS_NOT_FOUND", - "PX_CLOUD_SNAP_RESTORE_TRIGGER_FAILED", - "PX_CLOUD_SNAP_RESTORE_FAILED", - "PX_GET_CLOUD_SNAP_STATUS_FAILED", - "PX_GET_VOLUME_FAILED", - "READ_DATA_SERVICE_MANIFEST_FAILED", - "UNMARSHAL_DATA_SERVICE_JSON", - "DEPLOYMENT_NAME_ALREADY_EXIST", - "TIMEOUT_BUSYBOX_POD_RUNNING", - "BUSYBOX_POD_FAILED" + "DATA_SERVICE_DEPLOYMENT_NAME_ALREADY_EXIST", + "FAILED_BACKUP_CREDENTIAL_SYNC", + "RESTORE_INTERNAL_ERROR" ], "default": "ERROR_CODE_UNSPECIFIED", - "description": "Enums for error codes for restore on the target cluster.\n\n - ERROR_CODE_UNSPECIFIED: Error code not specified.\n - PX_CLOUD_CREDENTIALS_NOT_FOUND: Cloud credentials specified in Restore spec were not found by Portworx.\n - PX_CLOUD_SNAP_RESTORE_TRIGGER_FAILED: Problem triggering the cloudsnap restore in PX.\n - PX_CLOUD_SNAP_RESTORE_FAILED: Problem with finishing the cloudsnap restore in PX.\n - PX_GET_CLOUD_SNAP_STATUS_FAILED: Problem with getting the cloudsnap restore status from PX.\n - PX_GET_VOLUME_FAILED: Problem with getting the volume from PX.\n - READ_DATA_SERVICE_MANIFEST_FAILED: Problem with reading the data service manifest from the busybox pod.\n - UNMARSHAL_DATA_SERVICE_JSON: Problem with unmarshalling the JSON with data service manifest.\n - DEPLOYMENT_NAME_ALREADY_EXIST: Deployment name already used in the namespace.\n - TIMEOUT_BUSYBOX_POD_RUNNING: Timeout while waiting for the BusyBox pod to enter the running state.\n - BUSYBOX_POD_FAILED: Busybox pod has failed." + "description": "Enums for error codes for restore on the target cluster.\n\n - ERROR_CODE_UNSPECIFIED: Error code not specified.\n - DATA_SERVICE_DEPLOYMENT_NAME_ALREADY_EXIST: Deployment name already used in the namespace.\n - FAILED_BACKUP_CREDENTIAL_SYNC: Failed to sync backup credentials on the target cluster.\n - RESTORE_INTERNAL_ERROR: Restore Internal error." }, "v1ListRestoresResponse": { "type": "object", @@ -666,14 +613,14 @@ "INITIALIZING", "PENDING", "RESTORING_CLOUDSNAP", - "RESTORING_DATA_SERVICE_CR", - "RESTORING_DEPLOYMENT", - "DEPLOYMENT_ENTERING_NORMAL_MODE", + "RESTORING_DATA_SERVICE_DEPLOYMENT_CR", + "RESTORING_DATA_SERVICE_DEPLOYMENT", + "DATA_SERVICE_DEPLOYMENT_ENTERING_NORMAL_MODE", "SUCCESSFUL", "FAILED" ], "default": "PHASE_UNSPECIFIED", - "description": "Enum for phase of the restore.\n\n - PHASE_UNSPECIFIED: Phase is unspecified.\n - INITIALIZING: Restore is initializing.\n - PENDING: Restore has not yet started.\n - RESTORING_CLOUDSNAP: Waiting for the cloud snap restore to complete.\n - RESTORING_DATA_SERVICE_CR: PV and PVC resources are ready and we're waiting to get the data service manifest from the backup.\n - RESTORING_DEPLOYMENT: New data service has been created and we're waiting for the restore process to complete.\n - DEPLOYMENT_ENTERING_NORMAL_MODE: Restore process in data service has succeeded and we're waiting until it becomes healthy in normal mode.\n - SUCCESSFUL: Restore successful.\n - FAILED: Restore failed." + "description": "Enum for phase of the restore.\n\n - PHASE_UNSPECIFIED: Phase is unspecified.\n - INITIALIZING: Restore is initializing.\n - PENDING: Restore has not yet started.\n - RESTORING_CLOUDSNAP: Waiting for the cloud snap restore to complete.\n - RESTORING_DATA_SERVICE_DEPLOYMENT_CR: PV and PVC resources are ready and we're waiting to get the data service deployment manifest from the backup.\n - RESTORING_DATA_SERVICE_DEPLOYMENT: New data service deployment has been created and we're waiting for the restore process to complete.\n - DATA_SERVICE_DEPLOYMENT_ENTERING_NORMAL_MODE: Restore process in data service deployment has succeeded and we're waiting until it becomes healthy in normal mode.\n - SUCCESSFUL: Restore successful.\n - FAILED: Restore failed." }, "v1Reference": { "type": "object", @@ -769,7 +716,7 @@ "v1SourceReferences": { "type": "object", "properties": { - "deploymentId": { + "dataServiceDeploymentId": { "type": "string", "description": "UID of the deployment which was backed up.", "readOnly": true diff --git a/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore_grpc.pb.go b/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore_grpc.pb.go index b97711cd9..f9614c378 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore_grpc.pb.go +++ b/vendor/github.com/pure-px/apis/public/portworx/pds/restore/apiv1/restore_grpc.pb.go @@ -38,7 +38,6 @@ const ( RestoreService_CreateRestore_FullMethodName = "/public.portworx.pds.restore.v1.RestoreService/CreateRestore" RestoreService_GetRestore_FullMethodName = "/public.portworx.pds.restore.v1.RestoreService/GetRestore" RestoreService_ListRestores_FullMethodName = "/public.portworx.pds.restore.v1.RestoreService/ListRestores" - RestoreService_DeleteRestore_FullMethodName = "/public.portworx.pds.restore.v1.RestoreService/DeleteRestore" RestoreService_RecreateRestore_FullMethodName = "/public.portworx.pds.restore.v1.RestoreService/RecreateRestore" RestoreService_GetRestorabilityMatrix_FullMethodName = "/public.portworx.pds.restore.v1.RestoreService/GetRestorabilityMatrix" ) @@ -53,8 +52,6 @@ type RestoreServiceClient interface { GetRestore(ctx context.Context, in *GetRestoreRequest, opts ...grpc.CallOption) (*Restore, error) // ListRestore API lists the Restore resources. ListRestores(ctx context.Context, in *ListRestoresRequest, opts ...grpc.CallOption) (*ListRestoresResponse, error) - // DeleteRestore API deletes the restore. - DeleteRestore(ctx context.Context, in *DeleteRestoreRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // RecreateRestore API recreates a already failed restore. RecreateRestore(ctx context.Context, in *RecreateRestoreRequest, opts ...grpc.CallOption) (*Restore, error) // GetRestorabilityMatrix API returns the compatibility matrix for restore. @@ -99,15 +96,6 @@ func (c *restoreServiceClient) ListRestores(ctx context.Context, in *ListRestore return out, nil } -func (c *restoreServiceClient) DeleteRestore(ctx context.Context, in *DeleteRestoreRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, RestoreService_DeleteRestore_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *restoreServiceClient) RecreateRestore(ctx context.Context, in *RecreateRestoreRequest, opts ...grpc.CallOption) (*Restore, error) { out := new(Restore) err := c.cc.Invoke(ctx, RestoreService_RecreateRestore_FullMethodName, in, out, opts...) @@ -136,8 +124,6 @@ type RestoreServiceServer interface { GetRestore(context.Context, *GetRestoreRequest) (*Restore, error) // ListRestore API lists the Restore resources. ListRestores(context.Context, *ListRestoresRequest) (*ListRestoresResponse, error) - // DeleteRestore API deletes the restore. - DeleteRestore(context.Context, *DeleteRestoreRequest) (*emptypb.Empty, error) // RecreateRestore API recreates a already failed restore. RecreateRestore(context.Context, *RecreateRestoreRequest) (*Restore, error) // GetRestorabilityMatrix API returns the compatibility matrix for restore. @@ -161,9 +147,6 @@ func (UnimplementedRestoreServiceServer) GetRestore(context.Context, *GetRestore func (UnimplementedRestoreServiceServer) ListRestores(context.Context, *ListRestoresRequest) (*ListRestoresResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListRestores not implemented") } -func (UnimplementedRestoreServiceServer) DeleteRestore(context.Context, *DeleteRestoreRequest) (*emptypb.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteRestore not implemented") -} func (UnimplementedRestoreServiceServer) RecreateRestore(context.Context, *RecreateRestoreRequest) (*Restore, error) { return nil, status.Errorf(codes.Unimplemented, "method RecreateRestore not implemented") } @@ -237,24 +220,6 @@ func _RestoreService_ListRestores_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } -func _RestoreService_DeleteRestore_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteRestoreRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RestoreServiceServer).DeleteRestore(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: RestoreService_DeleteRestore_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RestoreServiceServer).DeleteRestore(ctx, req.(*DeleteRestoreRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _RestoreService_RecreateRestore_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(RecreateRestoreRequest) if err := dec(in); err != nil { @@ -310,10 +275,6 @@ var RestoreService_ServiceDesc = grpc.ServiceDesc{ MethodName: "ListRestores", Handler: _RestoreService_ListRestores_Handler, }, - { - MethodName: "DeleteRestore", - Handler: _RestoreService_DeleteRestore_Handler, - }, { MethodName: "RecreateRestore", Handler: _RestoreService_RecreateRestore_Handler, diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/account/apiv1/account.pb.go b/vendor/github.com/pure-px/apis/public/portworx/platform/account/apiv1/account.pb.go index bad239d9a..1e23880ec 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/account/apiv1/account.pb.go +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/account/apiv1/account.pb.go @@ -852,168 +852,165 @@ var file_public_portworx_platform_account_apiv1_account_proto_rawDesc = []byte{ 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, - 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x70, - 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0x32, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x49, 0x64, 0x22, 0x35, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xcd, 0x01, 0x0a, 0x07, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x43, 0x0a, 0x06, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x48, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, - 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03, 0xe0, - 0x41, 0x03, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xc6, 0x06, 0x0a, 0x06, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x22, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x65, 0x6d, - 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, - 0x75, 0x73, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1e, 0x0a, 0x08, 0x64, 0x6e, 0x73, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, - 0x52, 0x07, 0x64, 0x6e, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x53, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x22, 0x32, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x49, 0x64, 0x22, 0x35, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xcd, 0x01, 0x0a, 0x07, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x43, 0x0a, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x48, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03, + 0xe0, 0x41, 0x03, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xc6, 0x06, 0x0a, 0x06, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x22, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x65, + 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, + 0x09, 0x75, 0x73, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1e, 0x0a, 0x08, 0x64, 0x6e, + 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, + 0x01, 0x52, 0x07, 0x64, 0x6e, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x64, 0x69, + 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x53, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x72, 0x0a, 0x16, 0x70, 0x64, 0x73, 0x5f, 0x7a, + 0x75, 0x6f, 0x72, 0x61, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x72, 0x0a, 0x16, 0x70, 0x64, 0x73, 0x5f, 0x7a, 0x75, - 0x6f, 0x72, 0x61, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x65, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, - 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x5a, 0x75, 0x6f, - 0x72, 0x61, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, - 0x66, 0x6f, 0x48, 0x00, 0x52, 0x14, 0x70, 0x64, 0x73, 0x5a, 0x75, 0x6f, 0x72, 0x61, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6d, 0x0a, 0x14, 0x70, 0x78, - 0x65, 0x5f, 0x61, 0x77, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x77, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x48, 0x01, 0x52, 0x12, 0x70, 0x78, 0x65, 0x41, 0x77, 0x73, 0x53, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x73, 0x0a, 0x16, 0x70, 0x78, 0x65, - 0x5f, 0x7a, 0x75, 0x6f, 0x72, 0x61, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0xc9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x75, 0x62, + 0x72, 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x5a, 0x75, + 0x6f, 0x72, 0x61, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x14, 0x70, 0x64, 0x73, 0x5a, 0x75, 0x6f, 0x72, 0x61, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6d, 0x0a, 0x14, 0x70, + 0x78, 0x65, 0x5f, 0x61, 0x77, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x5a, 0x75, 0x6f, 0x72, 0x61, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x01, 0x52, 0x14, 0x70, 0x78, 0x65, 0x5a, 0x75, 0x6f, - 0x72, 0x61, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6f, - 0x0a, 0x15, 0x62, 0x61, 0x61, 0x73, 0x5f, 0x61, 0x77, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xac, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, + 0x2e, 0x41, 0x77, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x01, 0x52, 0x12, 0x70, 0x78, 0x65, 0x41, 0x77, 0x73, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x73, 0x0a, 0x16, 0x70, 0x78, + 0x65, 0x5f, 0x7a, 0x75, 0x6f, 0x72, 0x61, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xc9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x5a, 0x75, 0x6f, 0x72, 0x61, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x01, 0x52, 0x14, 0x70, 0x78, 0x65, 0x5a, 0x75, + 0x6f, 0x72, 0x61, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x6f, 0x0a, 0x15, 0x62, 0x61, 0x61, 0x73, 0x5f, 0x61, 0x77, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xac, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x38, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x77, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x02, 0x52, 0x13, 0x62, 0x61, 0x61, + 0x73, 0x41, 0x77, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x75, 0x0a, 0x17, 0x62, 0x61, 0x61, 0x73, 0x5f, 0x7a, 0x75, 0x6f, 0x72, 0x61, 0x5f, 0x73, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xad, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, + 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x5a, 0x75, 0x6f, 0x72, 0x61, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x02, + 0x52, 0x15, 0x62, 0x61, 0x61, 0x73, 0x5a, 0x75, 0x6f, 0x72, 0x61, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x12, 0x0a, 0x10, 0x70, 0x64, 0x73, 0x5f, 0x73, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x12, 0x0a, 0x10, 0x70, + 0x78, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, + 0x13, 0x0a, 0x11, 0x62, 0x61, 0x61, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x70, 0x0a, 0x13, 0x41, 0x77, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x5f, 0x0a, 0x15, 0x5a, 0x75, 0x6f, 0x72, 0x61, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x27, 0x0a, 0x0f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x70, 0x0a, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, + 0x22, 0x67, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, + 0x0a, 0x06, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x45, + 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x16, + 0x0a, 0x12, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, + 0x52, 0x45, 0x53, 0x53, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, + 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x22, 0xb2, 0x02, 0x0a, 0x06, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x41, 0x0a, 0x03, 0x70, 0x78, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x2f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x03, 0x70, 0x78, 0x65, 0x12, 0x41, 0x0a, 0x03, 0x70, 0x64, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, + 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x03, 0x70, 0x64, 0x73, 0x12, 0x43, 0x0a, 0x04, 0x62, 0x61, + 0x61, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x62, 0x61, 0x61, 0x73, 0x12, + 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, + 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x68, 0x61, + 0x73, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x2a, 0xd8, + 0x01, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, + 0x17, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x52, + 0x45, 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, + 0x12, 0x19, 0x0a, 0x15, 0x41, 0x57, 0x53, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, + 0x45, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x41, + 0x57, 0x53, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x5f, 0x46, 0x41, 0x49, + 0x4c, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x41, 0x57, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, + 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x04, + 0x12, 0x1b, 0x0a, 0x17, 0x41, 0x57, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, + 0x49, 0x42, 0x45, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x05, 0x12, 0x13, 0x0a, + 0x0f, 0x5a, 0x55, 0x4f, 0x52, 0x41, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, + 0x10, 0x06, 0x12, 0x15, 0x0a, 0x11, 0x5a, 0x55, 0x4f, 0x52, 0x41, 0x5f, 0x55, 0x4e, 0x53, 0x55, + 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x07, 0x2a, 0x49, 0x0a, 0x0b, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x43, 0x43, 0x4f, + 0x55, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x46, 0x52, 0x45, 0x45, 0x4d, 0x49, + 0x55, 0x4d, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x50, 0x52, 0x49, + 0x53, 0x45, 0x10, 0x02, 0x32, 0xba, 0x02, 0x0a, 0x0e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x9a, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, + 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x77, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x02, 0x52, 0x13, 0x62, 0x61, 0x61, 0x73, - 0x41, 0x77, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x75, 0x0a, 0x17, 0x62, 0x61, 0x61, 0x73, 0x5f, 0x7a, 0x75, 0x6f, 0x72, 0x61, 0x5f, 0x73, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xad, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, - 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x5a, 0x75, 0x6f, 0x72, 0x61, 0x53, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x02, 0x52, - 0x15, 0x62, 0x61, 0x61, 0x73, 0x5a, 0x75, 0x6f, 0x72, 0x61, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x12, 0x0a, 0x10, 0x70, 0x64, 0x73, 0x5f, 0x73, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x12, 0x0a, 0x10, 0x70, 0x78, - 0x65, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x13, - 0x0a, 0x11, 0x62, 0x61, 0x61, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x70, 0x0a, 0x13, 0x41, 0x77, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x5f, 0x0a, 0x15, 0x5a, 0x75, 0x6f, 0x72, 0x61, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x27, - 0x0a, 0x0f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x70, 0x0a, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, 0x22, - 0x67, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, - 0x06, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x45, 0x4c, - 0x45, 0x54, 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x16, 0x0a, - 0x12, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, - 0x45, 0x53, 0x53, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, - 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x22, 0xb2, 0x02, 0x0a, 0x06, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x41, 0x0a, 0x03, 0x70, 0x78, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x2f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, - 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x03, 0x70, 0x78, 0x65, 0x12, 0x41, 0x0a, 0x03, 0x70, 0x64, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x03, 0x70, 0x64, 0x73, 0x12, 0x43, 0x0a, 0x04, 0x62, 0x61, 0x61, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x62, 0x61, 0x61, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, - 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x68, 0x61, 0x73, - 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x2a, 0xd8, 0x01, - 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x17, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x52, 0x45, - 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, - 0x19, 0x0a, 0x15, 0x41, 0x57, 0x53, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, - 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x57, - 0x53, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, - 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x41, 0x57, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, - 0x43, 0x52, 0x49, 0x42, 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, - 0x1b, 0x0a, 0x17, 0x41, 0x57, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, - 0x42, 0x45, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x05, 0x12, 0x13, 0x0a, 0x0f, - 0x5a, 0x55, 0x4f, 0x52, 0x41, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, - 0x06, 0x12, 0x15, 0x0a, 0x11, 0x5a, 0x55, 0x4f, 0x52, 0x41, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, - 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x07, 0x2a, 0x49, 0x0a, 0x0b, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x43, 0x43, 0x4f, 0x55, - 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x46, 0x52, 0x45, 0x45, 0x4d, 0x49, 0x55, - 0x4d, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x50, 0x52, 0x49, 0x53, - 0x45, 0x10, 0x02, 0x32, 0xba, 0x02, 0x0a, 0x0e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x9a, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, - 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x26, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x7d, 0x12, 0x8a, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x39, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, - 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, - 0x2a, 0x1e, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, - 0x42, 0x81, 0x01, 0x0a, 0x27, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x26, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x8a, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x39, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x46, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, - 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x20, 0x2a, 0x1e, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x7d, 0x42, 0x81, 0x01, 0x0a, 0x27, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x46, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, + 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, + 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/account/apiv1/account.proto b/vendor/github.com/pure-px/apis/public/portworx/platform/account/apiv1/account.proto index e2a3ff027..6d6a2f420 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/account/apiv1/account.proto +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/account/apiv1/account.proto @@ -21,7 +21,6 @@ import "google/api/annotations.proto"; import "google/protobuf/empty.proto"; import "google/api/field_behavior.proto"; import "public/portworx/common/apiv1/meta.proto"; -import "public/portworx/common/apiv1/pagination.proto"; option go_package = "github.com/pure-px/apis/public/portworx/platform/account/apiv1;account"; option java_multiple_files = true; diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/backuplocation/apiv1/backuplocation.swagger.json b/vendor/github.com/pure-px/apis/public/portworx/platform/backuplocation/apiv1/backuplocation.swagger.json index b7ca24811..ad6d7caba 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/backuplocation/apiv1/backuplocation.swagger.json +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/backuplocation/apiv1/backuplocation.swagger.json @@ -405,10 +405,11 @@ "enum": [ "OPERATOR_UNSPECIFIED", "IN", - "NOT_IN" + "NOT_IN", + "LIKE" ], "default": "OPERATOR_UNSPECIFIED", - "description": "Operator specifies the relationship between the provided (key,value) pairs in the response.\n\n - OPERATOR_UNSPECIFIED: Unspecified, do not use.\n - IN: IN specifies that the key should be associated with atleast 1 of the element in value list.\n - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list." + "description": "Operator specifies the relationship between the provided (key,value) pairs in the response.\n\n - OPERATOR_UNSPECIFIED: Unspecified, do not use.\n - IN: IN specifies that the key should be associated with atleast 1 of the element in value list.\n - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list.\n - LIKE: LIKE specified that the key should be of a specified pattern" }, "SortByField": { "type": "string", diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/backuppolicy/apiv1/backuppolicy.pb.go b/vendor/github.com/pure-px/apis/public/portworx/platform/backuppolicy/apiv1/backuppolicy.pb.go index c7eb939f7..5dabc6021 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/backuppolicy/apiv1/backuppolicy.pb.go +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/backuppolicy/apiv1/backuppolicy.pb.go @@ -39,6 +39,80 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// Day of the week when the policy should be triggered. +// For example, sunday or sun. +type WeeklyPolicy_Weekday int32 + +const ( + // (-- api-linter: core::0126::unspecified=disabled + // + // aip.dev/not-precedent: We need to do this because reasons. --) + // + // Sunday + WeeklyPolicy_SUNDAY WeeklyPolicy_Weekday = 0 + // Monday + WeeklyPolicy_MONDAY WeeklyPolicy_Weekday = 1 + // Tuesday + WeeklyPolicy_TUESDAY WeeklyPolicy_Weekday = 2 + // Wednesday + WeeklyPolicy_WEDNESDAY WeeklyPolicy_Weekday = 3 + // Thursday + WeeklyPolicy_THURSDAY WeeklyPolicy_Weekday = 4 + // Friday + WeeklyPolicy_FRIDAY WeeklyPolicy_Weekday = 5 + // Saturday + WeeklyPolicy_SATURDAY WeeklyPolicy_Weekday = 6 +) + +// Enum value maps for WeeklyPolicy_Weekday. +var ( + WeeklyPolicy_Weekday_name = map[int32]string{ + 0: "SUNDAY", + 1: "MONDAY", + 2: "TUESDAY", + 3: "WEDNESDAY", + 4: "THURSDAY", + 5: "FRIDAY", + 6: "SATURDAY", + } + WeeklyPolicy_Weekday_value = map[string]int32{ + "SUNDAY": 0, + "MONDAY": 1, + "TUESDAY": 2, + "WEDNESDAY": 3, + "THURSDAY": 4, + "FRIDAY": 5, + "SATURDAY": 6, + } +) + +func (x WeeklyPolicy_Weekday) Enum() *WeeklyPolicy_Weekday { + p := new(WeeklyPolicy_Weekday) + *p = x + return p +} + +func (x WeeklyPolicy_Weekday) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (WeeklyPolicy_Weekday) Descriptor() protoreflect.EnumDescriptor { + return file_public_portworx_platform_backuppolicy_apiv1_backuppolicy_proto_enumTypes[0].Descriptor() +} + +func (WeeklyPolicy_Weekday) Type() protoreflect.EnumType { + return &file_public_portworx_platform_backuppolicy_apiv1_backuppolicy_proto_enumTypes[0] +} + +func (x WeeklyPolicy_Weekday) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use WeeklyPolicy_Weekday.Descriptor instead. +func (WeeklyPolicy_Weekday) EnumDescriptor() ([]byte, []int) { + return file_public_portworx_platform_backuppolicy_apiv1_backuppolicy_proto_rawDescGZIP(), []int{11, 0} +} + // Request to get a backup policy. type GetBackupPolicyRequest struct { state protoimpl.MessageState @@ -226,6 +300,8 @@ type ListBackupPoliciesRequest struct { InfraResourceSelector *apiv1.ResourceSelector `protobuf:"bytes,5,opt,name=infra_resource_selector,json=infraResourceSelector,proto3" json:"infra_resource_selector,omitempty"` // Sorting details using which requested list of backup policies to be sorted. Sort *apiv1.Sort `protobuf:"bytes,6,opt,name=sort,proto3" json:"sort,omitempty"` + // Response data flags for listing backup policies. + RespData apiv1.RespData `protobuf:"varint,7,opt,name=resp_data,json=respData,proto3,enum=public.portworx.common.v1.RespData" json:"resp_data,omitempty"` } func (x *ListBackupPoliciesRequest) Reset() { @@ -302,6 +378,13 @@ func (x *ListBackupPoliciesRequest) GetSort() *apiv1.Sort { return nil } +func (x *ListBackupPoliciesRequest) GetRespData() apiv1.RespData { + if x != nil { + return x.RespData + } + return apiv1.RespData(0) +} + // Response of list backup policies. type ListBackupPoliciesResponse struct { state protoimpl.MessageState @@ -775,9 +858,8 @@ type WeeklyPolicy struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Day of the week when the policy should be triggered. - // For example, sunday or sun. - Day string `protobuf:"bytes,1,opt,name=day,proto3" json:"day,omitempty"` + // day of Weekday + Day WeeklyPolicy_Weekday `protobuf:"varint,1,opt,name=day,proto3,enum=public.portworx.platform.backuppolicy.v1.WeeklyPolicy_Weekday" json:"day,omitempty"` // Time, when the policy should be triggered. Expected format is time. Eg 12:04PM or 12:04pm. // (-- api-linter: core::0142::time-field-type=disabled // @@ -817,11 +899,11 @@ func (*WeeklyPolicy) Descriptor() ([]byte, []int) { return file_public_portworx_platform_backuppolicy_apiv1_backuppolicy_proto_rawDescGZIP(), []int{11} } -func (x *WeeklyPolicy) GetDay() string { +func (x *WeeklyPolicy) GetDay() WeeklyPolicy_Weekday { if x != nil { return x.Day } - return "" + return WeeklyPolicy_SUNDAY } func (x *WeeklyPolicy) GetTime() string { @@ -943,7 +1025,7 @@ var file_public_portworx_platform_backuppolicy_apiv1_backuppolicy_proto_rawDesc 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x42, 0x03, 0xe0, 0x41, 0x02, - 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0xc6, 0x03, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x42, + 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x88, 0x04, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, @@ -971,160 +1053,175 @@ var file_public_portworx_platform_backuppolicy_apiv1_backuppolicy_proto_rawDesc 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x33, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x22, - 0xd5, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, - 0x0a, 0x0f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, - 0x0e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, - 0x56, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2b, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x22, 0x8d, 0x01, 0x0a, 0x0c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x33, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x48, 0x0a, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x22, 0x58, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4e, - 0x0a, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x32, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, - 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x63, 0x68, 0x65, - 0x64, 0x75, 0x6c, 0x65, 0x52, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x22, 0x88, - 0x04, 0x0a, 0x08, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x63, 0x0a, 0x0f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x48, 0x00, - 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x12, 0x5a, 0x0a, 0x0c, 0x64, 0x61, 0x69, 0x6c, 0x79, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, + 0x40, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, + 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x73, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x44, 0x61, 0x74, + 0x61, 0x22, 0xd5, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x5f, 0x0a, 0x0f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x52, 0x0e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, + 0x73, 0x12, 0x56, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, + 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2b, 0x0a, 0x19, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x8d, 0x01, 0x0a, 0x0c, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x33, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x48, 0x0a, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x58, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x4e, 0x0a, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, + 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x22, 0x88, 0x04, 0x0a, 0x08, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x63, 0x0a, + 0x0f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x48, 0x00, 0x52, - 0x0b, 0x64, 0x61, 0x69, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x5d, 0x0a, 0x0d, - 0x77, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, - 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x48, 0x00, 0x52, 0x0c, 0x77, - 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x60, 0x0a, 0x0e, 0x6d, - 0x6f, 0x6e, 0x74, 0x68, 0x6c, 0x79, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4d, - 0x6f, 0x6e, 0x74, 0x68, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x48, 0x00, 0x52, 0x0d, - 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x29, 0x0a, - 0x0f, 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x63, 0x72, 0x6f, 0x6e, 0x45, 0x78, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x72, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x10, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6e, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6e, 0x42, 0x0a, 0x0a, - 0x08, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2a, 0x0a, 0x0e, 0x49, 0x6e, 0x74, - 0x65, 0x72, 0x76, 0x61, 0x6c, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, - 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x69, - 0x6e, 0x75, 0x74, 0x65, 0x73, 0x22, 0x21, 0x0a, 0x0b, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x34, 0x0a, 0x0c, 0x57, 0x65, 0x65, 0x6b, - 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x61, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x64, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x37, - 0x0a, 0x0d, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, - 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x64, - 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x32, 0xb4, 0x08, 0x0a, 0x13, 0x42, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0xb1, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x12, 0x40, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x48, 0x00, 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x12, 0x5a, 0x0a, 0x0c, 0x64, 0x61, 0x69, 0x6c, 0x79, 0x5f, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x48, + 0x00, 0x52, 0x0b, 0x64, 0x61, 0x69, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x5d, + 0x0a, 0x0d, 0x77, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x24, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, - 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x7b, - 0x69, 0x64, 0x7d, 0x12, 0xd5, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x43, 0x2e, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, + 0x2e, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x48, 0x00, 0x52, + 0x0c, 0x77, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x60, 0x0a, + 0x0e, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x6c, 0x79, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, 0x31, + 0x2e, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x48, 0x00, + 0x52, 0x0d, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, + 0x29, 0x0a, 0x0f, 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x63, 0x72, 0x6f, 0x6e, + 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x6e, + 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x74, 0x61, 0x69, + 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6e, 0x42, + 0x0a, 0x0a, 0x08, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2a, 0x0a, 0x0e, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x18, 0x0a, + 0x07, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 0x22, 0x21, 0x0a, 0x0b, 0x44, 0x61, 0x69, 0x6c, 0x79, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xdb, 0x01, 0x0a, 0x0c, 0x57, + 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x50, 0x0a, 0x03, 0x64, + 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x2e, 0x57, 0x65, 0x65, 0x6b, 0x64, 0x61, 0x79, 0x52, 0x03, 0x64, 0x61, 0x79, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x69, 0x6d, + 0x65, 0x22, 0x65, 0x0a, 0x07, 0x57, 0x65, 0x65, 0x6b, 0x64, 0x61, 0x79, 0x12, 0x0a, 0x0a, 0x06, + 0x53, 0x55, 0x4e, 0x44, 0x41, 0x59, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x4f, 0x4e, 0x44, + 0x41, 0x59, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x55, 0x45, 0x53, 0x44, 0x41, 0x59, 0x10, + 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x57, 0x45, 0x44, 0x4e, 0x45, 0x53, 0x44, 0x41, 0x59, 0x10, 0x03, + 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x48, 0x55, 0x52, 0x53, 0x44, 0x41, 0x59, 0x10, 0x04, 0x12, 0x0a, + 0x0a, 0x06, 0x46, 0x52, 0x49, 0x44, 0x41, 0x59, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x41, + 0x54, 0x55, 0x52, 0x44, 0x41, 0x59, 0x10, 0x06, 0x22, 0x37, 0x0a, 0x0d, 0x4d, 0x6f, 0x6e, 0x74, + 0x68, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x64, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x69, 0x6d, + 0x65, 0x32, 0xb4, 0x08, 0x0a, 0x13, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xb1, 0x01, 0x0a, 0x0f, 0x47, 0x65, + 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x40, 0x2e, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x3a, - 0x0d, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x2b, - 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, - 0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0xd6, 0x01, 0x0a, 0x16, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x47, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, - 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, - 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x3a, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x1a, 0x2d, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, - 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x7b, - 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x12, 0x9d, 0x02, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x43, 0x2e, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x44, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, - 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7c, 0x92, 0x41, 0x35, 0x12, 0x33, 0x4c, 0x69, 0x73, - 0x74, 0x20, 0x41, 0x50, 0x49, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x20, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x69, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x5a, 0x23, 0x3a, 0x01, 0x2a, 0x22, 0x1e, 0x2f, 0x63, 0x6f, - 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x69, 0x65, 0x73, 0x3a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x17, 0x2f, 0x63, 0x6f, - 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x69, 0x65, 0x73, 0x12, 0x97, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x43, 0x2e, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, - 0x2a, 0x1c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x42, 0x95, - 0x01, 0x0a, 0x2c, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, + 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, + 0x1c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xd5, 0x01, + 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x12, 0x43, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, 0x31, 0x42, - 0x11, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x50, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x3a, 0x0d, 0x62, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x2b, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, + 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x61, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0xd6, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4d, 0x65, 0x74, 0x61, + 0x12, 0x47, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4d, 0x65, + 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x3a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x1a, + 0x2d, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x75, + 0x69, 0x64, 0x7d, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x9d, + 0x02, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x43, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x44, 0x2e, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x7c, 0x92, 0x41, 0x35, 0x12, 0x33, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x41, 0x50, 0x49, 0x20, + 0x6c, 0x69, 0x73, 0x74, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x20, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, + 0x5a, 0x23, 0x3a, 0x01, 0x2a, 0x22, 0x1e, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, + 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x3a, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x17, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, + 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x97, + 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x43, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x2a, 0x1c, 0x2f, 0x63, 0x6f, 0x72, + 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x42, 0x95, 0x01, 0x0a, 0x2c, 0x63, 0x6f, 0x6d, + 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, 0x31, 0x42, 0x11, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x50, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, + 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, + 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2f, 0x61, 0x70, + 0x69, 0x76, 0x31, 0x3b, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1139,61 +1236,66 @@ func file_public_portworx_platform_backuppolicy_apiv1_backuppolicy_proto_rawDesc return file_public_portworx_platform_backuppolicy_apiv1_backuppolicy_proto_rawDescData } +var file_public_portworx_platform_backuppolicy_apiv1_backuppolicy_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_public_portworx_platform_backuppolicy_apiv1_backuppolicy_proto_msgTypes = make([]protoimpl.MessageInfo, 13) var file_public_portworx_platform_backuppolicy_apiv1_backuppolicy_proto_goTypes = []interface{}{ - (*GetBackupPolicyRequest)(nil), // 0: public.portworx.platform.backuppolicy.v1.GetBackupPolicyRequest - (*CreateBackupPolicyRequest)(nil), // 1: public.portworx.platform.backuppolicy.v1.CreateBackupPolicyRequest - (*UpdateBackupPolicyMetaRequest)(nil), // 2: public.portworx.platform.backuppolicy.v1.UpdateBackupPolicyMetaRequest - (*ListBackupPoliciesRequest)(nil), // 3: public.portworx.platform.backuppolicy.v1.ListBackupPoliciesRequest - (*ListBackupPoliciesResponse)(nil), // 4: public.portworx.platform.backuppolicy.v1.ListBackupPoliciesResponse - (*DeleteBackupPolicyRequest)(nil), // 5: public.portworx.platform.backuppolicy.v1.DeleteBackupPolicyRequest - (*BackupPolicy)(nil), // 6: public.portworx.platform.backuppolicy.v1.BackupPolicy - (*Config)(nil), // 7: public.portworx.platform.backuppolicy.v1.Config - (*Schedule)(nil), // 8: public.portworx.platform.backuppolicy.v1.Schedule - (*IntervalPolicy)(nil), // 9: public.portworx.platform.backuppolicy.v1.IntervalPolicy - (*DailyPolicy)(nil), // 10: public.portworx.platform.backuppolicy.v1.DailyPolicy - (*WeeklyPolicy)(nil), // 11: public.portworx.platform.backuppolicy.v1.WeeklyPolicy - (*MonthlyPolicy)(nil), // 12: public.portworx.platform.backuppolicy.v1.MonthlyPolicy - (*apiv1.Meta)(nil), // 13: public.portworx.common.v1.Meta - (*apiv1.PageBasedPaginationRequest)(nil), // 14: public.portworx.common.v1.PageBasedPaginationRequest - (*apiv1.Selector)(nil), // 15: public.portworx.common.v1.Selector - (*apiv1.ResourceSelector)(nil), // 16: public.portworx.common.v1.ResourceSelector - (*apiv1.Sort)(nil), // 17: public.portworx.common.v1.Sort - (*apiv1.PageBasedPaginationResponse)(nil), // 18: public.portworx.common.v1.PageBasedPaginationResponse - (*emptypb.Empty)(nil), // 19: google.protobuf.Empty + (WeeklyPolicy_Weekday)(0), // 0: public.portworx.platform.backuppolicy.v1.WeeklyPolicy.Weekday + (*GetBackupPolicyRequest)(nil), // 1: public.portworx.platform.backuppolicy.v1.GetBackupPolicyRequest + (*CreateBackupPolicyRequest)(nil), // 2: public.portworx.platform.backuppolicy.v1.CreateBackupPolicyRequest + (*UpdateBackupPolicyMetaRequest)(nil), // 3: public.portworx.platform.backuppolicy.v1.UpdateBackupPolicyMetaRequest + (*ListBackupPoliciesRequest)(nil), // 4: public.portworx.platform.backuppolicy.v1.ListBackupPoliciesRequest + (*ListBackupPoliciesResponse)(nil), // 5: public.portworx.platform.backuppolicy.v1.ListBackupPoliciesResponse + (*DeleteBackupPolicyRequest)(nil), // 6: public.portworx.platform.backuppolicy.v1.DeleteBackupPolicyRequest + (*BackupPolicy)(nil), // 7: public.portworx.platform.backuppolicy.v1.BackupPolicy + (*Config)(nil), // 8: public.portworx.platform.backuppolicy.v1.Config + (*Schedule)(nil), // 9: public.portworx.platform.backuppolicy.v1.Schedule + (*IntervalPolicy)(nil), // 10: public.portworx.platform.backuppolicy.v1.IntervalPolicy + (*DailyPolicy)(nil), // 11: public.portworx.platform.backuppolicy.v1.DailyPolicy + (*WeeklyPolicy)(nil), // 12: public.portworx.platform.backuppolicy.v1.WeeklyPolicy + (*MonthlyPolicy)(nil), // 13: public.portworx.platform.backuppolicy.v1.MonthlyPolicy + (*apiv1.Meta)(nil), // 14: public.portworx.common.v1.Meta + (*apiv1.PageBasedPaginationRequest)(nil), // 15: public.portworx.common.v1.PageBasedPaginationRequest + (*apiv1.Selector)(nil), // 16: public.portworx.common.v1.Selector + (*apiv1.ResourceSelector)(nil), // 17: public.portworx.common.v1.ResourceSelector + (*apiv1.Sort)(nil), // 18: public.portworx.common.v1.Sort + (apiv1.RespData)(0), // 19: public.portworx.common.v1.RespData + (*apiv1.PageBasedPaginationResponse)(nil), // 20: public.portworx.common.v1.PageBasedPaginationResponse + (*emptypb.Empty)(nil), // 21: google.protobuf.Empty } var file_public_portworx_platform_backuppolicy_apiv1_backuppolicy_proto_depIdxs = []int32{ - 6, // 0: public.portworx.platform.backuppolicy.v1.CreateBackupPolicyRequest.backup_policy:type_name -> public.portworx.platform.backuppolicy.v1.BackupPolicy - 13, // 1: public.portworx.platform.backuppolicy.v1.UpdateBackupPolicyMetaRequest.meta:type_name -> public.portworx.common.v1.Meta - 14, // 2: public.portworx.platform.backuppolicy.v1.ListBackupPoliciesRequest.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationRequest - 15, // 3: public.portworx.platform.backuppolicy.v1.ListBackupPoliciesRequest.label_selector:type_name -> public.portworx.common.v1.Selector - 15, // 4: public.portworx.platform.backuppolicy.v1.ListBackupPoliciesRequest.field_selector:type_name -> public.portworx.common.v1.Selector - 16, // 5: public.portworx.platform.backuppolicy.v1.ListBackupPoliciesRequest.infra_resource_selector:type_name -> public.portworx.common.v1.ResourceSelector - 17, // 6: public.portworx.platform.backuppolicy.v1.ListBackupPoliciesRequest.sort:type_name -> public.portworx.common.v1.Sort - 6, // 7: public.portworx.platform.backuppolicy.v1.ListBackupPoliciesResponse.backup_policies:type_name -> public.portworx.platform.backuppolicy.v1.BackupPolicy - 18, // 8: public.portworx.platform.backuppolicy.v1.ListBackupPoliciesResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse - 13, // 9: public.portworx.platform.backuppolicy.v1.BackupPolicy.meta:type_name -> public.portworx.common.v1.Meta - 7, // 10: public.portworx.platform.backuppolicy.v1.BackupPolicy.config:type_name -> public.portworx.platform.backuppolicy.v1.Config - 8, // 11: public.portworx.platform.backuppolicy.v1.Config.schedule:type_name -> public.portworx.platform.backuppolicy.v1.Schedule - 9, // 12: public.portworx.platform.backuppolicy.v1.Schedule.interval_policy:type_name -> public.portworx.platform.backuppolicy.v1.IntervalPolicy - 10, // 13: public.portworx.platform.backuppolicy.v1.Schedule.daily_policy:type_name -> public.portworx.platform.backuppolicy.v1.DailyPolicy - 11, // 14: public.portworx.platform.backuppolicy.v1.Schedule.weekly_policy:type_name -> public.portworx.platform.backuppolicy.v1.WeeklyPolicy - 12, // 15: public.portworx.platform.backuppolicy.v1.Schedule.monthly_policy:type_name -> public.portworx.platform.backuppolicy.v1.MonthlyPolicy - 0, // 16: public.portworx.platform.backuppolicy.v1.BackupPolicyService.GetBackupPolicy:input_type -> public.portworx.platform.backuppolicy.v1.GetBackupPolicyRequest - 1, // 17: public.portworx.platform.backuppolicy.v1.BackupPolicyService.CreateBackupPolicy:input_type -> public.portworx.platform.backuppolicy.v1.CreateBackupPolicyRequest - 2, // 18: public.portworx.platform.backuppolicy.v1.BackupPolicyService.UpdateBackupPolicyMeta:input_type -> public.portworx.platform.backuppolicy.v1.UpdateBackupPolicyMetaRequest - 3, // 19: public.portworx.platform.backuppolicy.v1.BackupPolicyService.ListBackupPolicies:input_type -> public.portworx.platform.backuppolicy.v1.ListBackupPoliciesRequest - 5, // 20: public.portworx.platform.backuppolicy.v1.BackupPolicyService.DeleteBackupPolicy:input_type -> public.portworx.platform.backuppolicy.v1.DeleteBackupPolicyRequest - 6, // 21: public.portworx.platform.backuppolicy.v1.BackupPolicyService.GetBackupPolicy:output_type -> public.portworx.platform.backuppolicy.v1.BackupPolicy - 6, // 22: public.portworx.platform.backuppolicy.v1.BackupPolicyService.CreateBackupPolicy:output_type -> public.portworx.platform.backuppolicy.v1.BackupPolicy - 6, // 23: public.portworx.platform.backuppolicy.v1.BackupPolicyService.UpdateBackupPolicyMeta:output_type -> public.portworx.platform.backuppolicy.v1.BackupPolicy - 4, // 24: public.portworx.platform.backuppolicy.v1.BackupPolicyService.ListBackupPolicies:output_type -> public.portworx.platform.backuppolicy.v1.ListBackupPoliciesResponse - 19, // 25: public.portworx.platform.backuppolicy.v1.BackupPolicyService.DeleteBackupPolicy:output_type -> google.protobuf.Empty - 21, // [21:26] is the sub-list for method output_type - 16, // [16:21] is the sub-list for method input_type - 16, // [16:16] is the sub-list for extension type_name - 16, // [16:16] is the sub-list for extension extendee - 0, // [0:16] is the sub-list for field type_name + 7, // 0: public.portworx.platform.backuppolicy.v1.CreateBackupPolicyRequest.backup_policy:type_name -> public.portworx.platform.backuppolicy.v1.BackupPolicy + 14, // 1: public.portworx.platform.backuppolicy.v1.UpdateBackupPolicyMetaRequest.meta:type_name -> public.portworx.common.v1.Meta + 15, // 2: public.portworx.platform.backuppolicy.v1.ListBackupPoliciesRequest.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationRequest + 16, // 3: public.portworx.platform.backuppolicy.v1.ListBackupPoliciesRequest.label_selector:type_name -> public.portworx.common.v1.Selector + 16, // 4: public.portworx.platform.backuppolicy.v1.ListBackupPoliciesRequest.field_selector:type_name -> public.portworx.common.v1.Selector + 17, // 5: public.portworx.platform.backuppolicy.v1.ListBackupPoliciesRequest.infra_resource_selector:type_name -> public.portworx.common.v1.ResourceSelector + 18, // 6: public.portworx.platform.backuppolicy.v1.ListBackupPoliciesRequest.sort:type_name -> public.portworx.common.v1.Sort + 19, // 7: public.portworx.platform.backuppolicy.v1.ListBackupPoliciesRequest.resp_data:type_name -> public.portworx.common.v1.RespData + 7, // 8: public.portworx.platform.backuppolicy.v1.ListBackupPoliciesResponse.backup_policies:type_name -> public.portworx.platform.backuppolicy.v1.BackupPolicy + 20, // 9: public.portworx.platform.backuppolicy.v1.ListBackupPoliciesResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse + 14, // 10: public.portworx.platform.backuppolicy.v1.BackupPolicy.meta:type_name -> public.portworx.common.v1.Meta + 8, // 11: public.portworx.platform.backuppolicy.v1.BackupPolicy.config:type_name -> public.portworx.platform.backuppolicy.v1.Config + 9, // 12: public.portworx.platform.backuppolicy.v1.Config.schedule:type_name -> public.portworx.platform.backuppolicy.v1.Schedule + 10, // 13: public.portworx.platform.backuppolicy.v1.Schedule.interval_policy:type_name -> public.portworx.platform.backuppolicy.v1.IntervalPolicy + 11, // 14: public.portworx.platform.backuppolicy.v1.Schedule.daily_policy:type_name -> public.portworx.platform.backuppolicy.v1.DailyPolicy + 12, // 15: public.portworx.platform.backuppolicy.v1.Schedule.weekly_policy:type_name -> public.portworx.platform.backuppolicy.v1.WeeklyPolicy + 13, // 16: public.portworx.platform.backuppolicy.v1.Schedule.monthly_policy:type_name -> public.portworx.platform.backuppolicy.v1.MonthlyPolicy + 0, // 17: public.portworx.platform.backuppolicy.v1.WeeklyPolicy.day:type_name -> public.portworx.platform.backuppolicy.v1.WeeklyPolicy.Weekday + 1, // 18: public.portworx.platform.backuppolicy.v1.BackupPolicyService.GetBackupPolicy:input_type -> public.portworx.platform.backuppolicy.v1.GetBackupPolicyRequest + 2, // 19: public.portworx.platform.backuppolicy.v1.BackupPolicyService.CreateBackupPolicy:input_type -> public.portworx.platform.backuppolicy.v1.CreateBackupPolicyRequest + 3, // 20: public.portworx.platform.backuppolicy.v1.BackupPolicyService.UpdateBackupPolicyMeta:input_type -> public.portworx.platform.backuppolicy.v1.UpdateBackupPolicyMetaRequest + 4, // 21: public.portworx.platform.backuppolicy.v1.BackupPolicyService.ListBackupPolicies:input_type -> public.portworx.platform.backuppolicy.v1.ListBackupPoliciesRequest + 6, // 22: public.portworx.platform.backuppolicy.v1.BackupPolicyService.DeleteBackupPolicy:input_type -> public.portworx.platform.backuppolicy.v1.DeleteBackupPolicyRequest + 7, // 23: public.portworx.platform.backuppolicy.v1.BackupPolicyService.GetBackupPolicy:output_type -> public.portworx.platform.backuppolicy.v1.BackupPolicy + 7, // 24: public.portworx.platform.backuppolicy.v1.BackupPolicyService.CreateBackupPolicy:output_type -> public.portworx.platform.backuppolicy.v1.BackupPolicy + 7, // 25: public.portworx.platform.backuppolicy.v1.BackupPolicyService.UpdateBackupPolicyMeta:output_type -> public.portworx.platform.backuppolicy.v1.BackupPolicy + 5, // 26: public.portworx.platform.backuppolicy.v1.BackupPolicyService.ListBackupPolicies:output_type -> public.portworx.platform.backuppolicy.v1.ListBackupPoliciesResponse + 21, // 27: public.portworx.platform.backuppolicy.v1.BackupPolicyService.DeleteBackupPolicy:output_type -> google.protobuf.Empty + 23, // [23:28] is the sub-list for method output_type + 18, // [18:23] is the sub-list for method input_type + 18, // [18:18] is the sub-list for extension type_name + 18, // [18:18] is the sub-list for extension extendee + 0, // [0:18] is the sub-list for field type_name } func init() { file_public_portworx_platform_backuppolicy_apiv1_backuppolicy_proto_init() } @@ -1371,13 +1473,14 @@ func file_public_portworx_platform_backuppolicy_apiv1_backuppolicy_proto_init() File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_public_portworx_platform_backuppolicy_apiv1_backuppolicy_proto_rawDesc, - NumEnums: 0, + NumEnums: 1, NumMessages: 13, NumExtensions: 0, NumServices: 1, }, GoTypes: file_public_portworx_platform_backuppolicy_apiv1_backuppolicy_proto_goTypes, DependencyIndexes: file_public_portworx_platform_backuppolicy_apiv1_backuppolicy_proto_depIdxs, + EnumInfos: file_public_portworx_platform_backuppolicy_apiv1_backuppolicy_proto_enumTypes, MessageInfos: file_public_portworx_platform_backuppolicy_apiv1_backuppolicy_proto_msgTypes, }.Build() File_public_portworx_platform_backuppolicy_apiv1_backuppolicy_proto = out.File diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/backuppolicy/apiv1/backuppolicy.pb.md b/vendor/github.com/pure-px/apis/public/portworx/platform/backuppolicy/apiv1/backuppolicy.pb.md index f1a4ed67d..a59094535 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/backuppolicy/apiv1/backuppolicy.pb.md +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/backuppolicy/apiv1/backuppolicy.pb.md @@ -173,6 +173,7 @@ Request to list the backup policies for a tenant. | field_selector | [ public.portworx.common.v1.Selector](#publicportworxcommonv1selector) | Field selector is used to filter backup policies based on the fields in the backup policy's proto message. | | infra_resource_selector | [ public.portworx.common.v1.ResourceSelector](#publicportworxcommonv1resourceselector) | Infra_resource_selector is used to filter backup policies based on the infra resources associated with the backup policy. Supported infra resource filters: PROJECT. | | sort | [ public.portworx.common.v1.Sort](#publicportworxcommonv1sort) | Sorting details using which requested list of backup policies to be sorted. | +| resp_data | [ public.portworx.common.v1.RespData](#publicportworxcommonv1respdata) | Response data flags for listing backup policies. | @@ -237,13 +238,30 @@ Weekly Policy. | Field | Type | Description | | ----- | ---- | ----------- | -| day | [ string](#string) | Day of the week when the policy should be triggered. For example, sunday or sun. | +| day | [ WeeklyPolicy.Weekday](#weeklypolicyweekday) | day of Weekday | | time | [ string](#string) | Time, when the policy should be triggered. Expected format is time. Eg 12:04PM or 12:04pm. (-- api-linter: core::0142::time-field-type=disabled aip.dev/not-precedent: We need to do this to take input in string format. --) | ## Enums + + +### WeeklyPolicy.Weekday {#weeklypolicyweekday} +Day of the week when the policy should be triggered. +For example, sunday or sun. + +| Name | Number | Description | +| ---- | ------ | ----------- | +| SUNDAY | 0 | (-- api-linter: core::0126::unspecified=disabled aip.dev/not-precedent: We need to do this because reasons. --) Sunday | +| MONDAY | 1 | Monday | +| TUESDAY | 2 | Tuesday | +| WEDNESDAY | 3 | Wednesday | +| THURSDAY | 4 | Thursday | +| FRIDAY | 5 | Friday | +| SATURDAY | 6 | Saturday | + + diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/backuppolicy/apiv1/backuppolicy.proto b/vendor/github.com/pure-px/apis/public/portworx/platform/backuppolicy/apiv1/backuppolicy.proto index c17f06920..51b91cd62 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/backuppolicy/apiv1/backuppolicy.proto +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/backuppolicy/apiv1/backuppolicy.proto @@ -139,6 +139,9 @@ message ListBackupPoliciesRequest { // Sorting details using which requested list of backup policies to be sorted. public.portworx.common.v1.Sort sort = 6; + + // Response data flags for listing backup policies. + public.portworx.common.v1.RespData resp_data = 7; } // Response of list backup policies. @@ -218,7 +221,33 @@ message DailyPolicy { message WeeklyPolicy { // Day of the week when the policy should be triggered. // For example, sunday or sun. - string day = 1; + enum Weekday { + // (-- api-linter: core::0126::unspecified=disabled + // aip.dev/not-precedent: We need to do this because reasons. --) + // Sunday + SUNDAY = 0; + + // Monday + MONDAY = 1; + + // Tuesday + TUESDAY = 2; + + // Wednesday + WEDNESDAY = 3; + + // Thursday + THURSDAY = 4; + + // Friday + FRIDAY = 5; + + // Saturday + SATURDAY = 6; + } + + // day of Weekday + Weekday day = 1; // Time, when the policy should be triggered. Expected format is time. Eg 12:04PM or 12:04pm. // (-- api-linter: core::0142::time-field-type=disabled diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/backuppolicy/apiv1/backuppolicy.swagger.json b/vendor/github.com/pure-px/apis/public/portworx/platform/backuppolicy/apiv1/backuppolicy.swagger.json index 841a3d57e..3371cb851 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/backuppolicy/apiv1/backuppolicy.swagger.json +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/backuppolicy/apiv1/backuppolicy.swagger.json @@ -97,6 +97,22 @@ ], "default": "VALUE_UNSPECIFIED" } + }, + { + "name": "respData", + "description": "Response data flags for listing backup policies.\n\n - RESP_DATA_UNSPECIFIED: RespData Unspecified. complete resource will be populated.\n - INDEX: only uid, name, labels should be populated.\n - LITE: only meta data should be populated.\n - FULL: complete resource should be populated.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "RESP_DATA_UNSPECIFIED", + "INDEX", + "LITE", + "FULL" + ], + "default": "RESP_DATA_UNSPECIFIED" + } } ], "tags": [ @@ -434,10 +450,11 @@ "enum": [ "OPERATOR_UNSPECIFIED", "IN", - "NOT_IN" + "NOT_IN", + "LIKE" ], "default": "OPERATOR_UNSPECIFIED", - "description": "Operator specifies the relationship between the provided (key,value) pairs in the response.\n\n - OPERATOR_UNSPECIFIED: Unspecified, do not use.\n - IN: IN specifies that the key should be associated with atleast 1 of the element in value list.\n - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list." + "description": "Operator specifies the relationship between the provided (key,value) pairs in the response.\n\n - OPERATOR_UNSPECIFIED: Unspecified, do not use.\n - IN: IN specifies that the key should be associated with atleast 1 of the element in value list.\n - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list.\n - LIKE: LIKE specified that the key should be of a specified pattern" }, "SortByField": { "type": "string", @@ -451,6 +468,20 @@ "default": "FIELD_UNSPECIFIED", "description": "Field names for sorting the list of resources.\n\n - FIELD_UNSPECIFIED: Unspecified, do not use.\n - NAME: Sorting based on the name of the resource.\n - CREATED_AT: Sorting on create time of the resource.\n - UPDATED_AT: Sorting on update time of the resource.\n - PHASE: Sorting on phase of the resource." }, + "WeeklyPolicyWeekday": { + "type": "string", + "enum": [ + "SUNDAY", + "MONDAY", + "TUESDAY", + "WEDNESDAY", + "THURSDAY", + "FRIDAY", + "SATURDAY" + ], + "default": "SUNDAY", + "description": "Day of the week when the policy should be triggered.\nFor example, sunday or sun.\n\n - SUNDAY: \nSunday\n - MONDAY: Monday\n - TUESDAY: Tuesday\n - WEDNESDAY: Wednesday\n - THURSDAY: Thursday\n - FRIDAY: Friday\n - SATURDAY: Saturday" + }, "protobufAny": { "type": "object", "properties": { @@ -562,6 +593,9 @@ }, "sort": { "$ref": "#/components/schemas/v1Sort" + }, + "respData": { + "$ref": "#/components/schemas/v1RespData" } }, "description": "Request to list the backup policies for a tenant." @@ -739,6 +773,17 @@ }, "description": "ResourceSelector is used to query resources using the associated infra resources." }, + "v1RespData": { + "type": "string", + "enum": [ + "RESP_DATA_UNSPECIFIED", + "INDEX", + "LITE", + "FULL" + ], + "default": "RESP_DATA_UNSPECIFIED", + "description": "RespData provides flags which provides info about the fields that should be populated in the response.\n\n - RESP_DATA_UNSPECIFIED: RespData Unspecified. complete resource will be populated.\n - INDEX: only uid, name, labels should be populated.\n - LITE: only meta data should be populated.\n - FULL: complete resource should be populated." + }, "v1Schedule": { "type": "object", "properties": { @@ -810,8 +855,7 @@ "type": "object", "properties": { "day": { - "type": "string", - "description": "Day of the week when the policy should be triggered.\nFor example, sunday or sun." + "$ref": "#/components/schemas/WeeklyPolicyWeekday" }, "time": { "type": "string", diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/cloudcredential/apiv1/cloudcredential.swagger.json b/vendor/github.com/pure-px/apis/public/portworx/platform/cloudcredential/apiv1/cloudcredential.swagger.json index bef9ae338..1a247f6eb 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/cloudcredential/apiv1/cloudcredential.swagger.json +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/cloudcredential/apiv1/cloudcredential.swagger.json @@ -414,10 +414,11 @@ "enum": [ "OPERATOR_UNSPECIFIED", "IN", - "NOT_IN" + "NOT_IN", + "LIKE" ], "default": "OPERATOR_UNSPECIFIED", - "description": "Operator specifies the relationship between the provided (key,value) pairs in the response.\n\n - OPERATOR_UNSPECIFIED: Unspecified, do not use.\n - IN: IN specifies that the key should be associated with atleast 1 of the element in value list.\n - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list." + "description": "Operator specifies the relationship between the provided (key,value) pairs in the response.\n\n - OPERATOR_UNSPECIFIED: Unspecified, do not use.\n - IN: IN specifies that the key should be associated with atleast 1 of the element in value list.\n - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list.\n - LIKE: LIKE specified that the key should be of a specified pattern" }, "SortByField": { "type": "string", diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/namespace/apiv1/namespace.swagger.json b/vendor/github.com/pure-px/apis/public/portworx/platform/namespace/apiv1/namespace.swagger.json index 35595a9f7..4eb5b4fed 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/namespace/apiv1/namespace.swagger.json +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/namespace/apiv1/namespace.swagger.json @@ -268,10 +268,11 @@ "enum": [ "OPERATOR_UNSPECIFIED", "IN", - "NOT_IN" + "NOT_IN", + "LIKE" ], "default": "OPERATOR_UNSPECIFIED", - "description": "Operator specifies the relationship between the provided (key,value) pairs in the response.\n\n - OPERATOR_UNSPECIFIED: Unspecified, do not use.\n - IN: IN specifies that the key should be associated with atleast 1 of the element in value list.\n - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list." + "description": "Operator specifies the relationship between the provided (key,value) pairs in the response.\n\n - OPERATOR_UNSPECIFIED: Unspecified, do not use.\n - IN: IN specifies that the key should be associated with atleast 1 of the element in value list.\n - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list.\n - LIKE: LIKE specified that the key should be of a specified pattern" }, "SortByField": { "type": "string", diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/project/apiv1/project.pb.go b/vendor/github.com/pure-px/apis/public/portworx/platform/project/apiv1/project.pb.go index 6cf865082..8e1c5e199 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/project/apiv1/project.pb.go +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/project/apiv1/project.pb.go @@ -1,5 +1,5 @@ // Please use the following editor setup for this file: -// Tab size=2; Tabs as spaces; Clean up trailing whitepsace +// Tab size=2; Tabs as spaces; Clean up trailing whitespace // // In vim add: au FileType proto setl sw=2 ts=2 expandtab list // @@ -483,7 +483,7 @@ type PDSResources struct { unknownFields protoimpl.UnknownFields // Resource ids of deployments. - Deployments []string `protobuf:"bytes,1,rep,name=deployments,proto3" json:"deployments,omitempty"` + DataServiceDeployments []string `protobuf:"bytes,1,rep,name=data_service_deployments,json=dataServiceDeployments,proto3" json:"data_service_deployments,omitempty"` // Resource ids of backup configs. BackupConfigs []string `protobuf:"bytes,2,rep,name=backup_configs,json=backupConfigs,proto3" json:"backup_configs,omitempty"` // Resource ids of restores. @@ -522,9 +522,9 @@ func (*PDSResources) Descriptor() ([]byte, []int) { return file_public_portworx_platform_project_apiv1_project_proto_rawDescGZIP(), []int{6} } -func (x *PDSResources) GetDeployments() []string { +func (x *PDSResources) GetDataServiceDeployments() []string { if x != nil { - return x.Deployments + return x.DataServiceDeployments } return nil } @@ -610,7 +610,7 @@ func (x *CreateProjectRequest) GetProject() *Project { // // aip.dev/not-precedent: We need to do this because reasons. // -// we are onlu updating project meta--) +// we are only updating project meta--) type UpdateProjectRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -719,7 +719,7 @@ type ListProjectsRequest struct { // Tenant id for which projects to be listed. TenantId string `protobuf:"bytes,1,opt,name=tenant_id,json=tenantId,proto3" json:"tenant_id,omitempty"` // Filtering list of projects based on the provided resource details.. - ResourceSelector *apiv1.ResourceSelector `protobuf:"bytes,2,opt,name=resource_selector,json=resourceSelector,proto3" json:"resource_selector,omitempty"` + InfraResourceSelector *apiv1.ResourceSelector `protobuf:"bytes,2,opt,name=infra_resource_selector,json=infraResourceSelector,proto3" json:"infra_resource_selector,omitempty"` // Provides the key in labels and associated values for which projects need to be listed. LabelSelector *apiv1.Selector `protobuf:"bytes,3,opt,name=label_selector,json=labelSelector,proto3" json:"label_selector,omitempty"` // Field selector is used to filter projects based on the fields in the project's proto message. @@ -771,9 +771,9 @@ func (x *ListProjectsRequest) GetTenantId() string { return "" } -func (x *ListProjectsRequest) GetResourceSelector() *apiv1.ResourceSelector { +func (x *ListProjectsRequest) GetInfraResourceSelector() *apiv1.ResourceSelector { if x != nil { - return x.ResourceSelector + return x.InfraResourceSelector } return nil } @@ -1238,199 +1238,201 @@ var file_public_portworx_platform_project_apiv1_project_proto_rawDesc = []byte{ 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x44, 0x53, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x0c, 0x70, 0x64, 0x73, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0x73, 0x0a, 0x0c, 0x50, 0x44, 0x53, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x62, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0d, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x22, 0x7b, 0x0a, - 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, - 0x49, 0x64, 0x12, 0x46, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x4b, 0x0a, 0x14, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x33, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, - 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x32, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0xf7, 0x03, 0x0a, 0x13, - 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, - 0x12, 0x58, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x4a, 0x0a, 0x0e, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x0c, 0x50, 0x44, 0x53, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x64, 0x61, 0x74, + 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x64, 0x61, 0x74, + 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x62, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x22, 0x7b, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, + 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x46, 0x0a, 0x07, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x22, 0x4b, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x04, 0x6d, + 0x65, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, + 0x22, 0x32, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x64, 0x22, 0x82, 0x04, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, + 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x63, 0x0a, 0x17, 0x69, 0x6e, 0x66, + 0x72, 0x61, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x15, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x4a, + 0x0a, 0x0e, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, + 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x0d, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x4a, 0x0a, 0x0e, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x0d, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x4a, 0x0a, 0x0e, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, - 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x52, 0x0d, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x12, 0x40, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, - 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x5a, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, - 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, - 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x33, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x52, - 0x04, 0x73, 0x6f, 0x72, 0x74, 0x22, 0xb8, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, - 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2c, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, - 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x56, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x0d, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x40, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x5f, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, + 0x72, 0x65, 0x73, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x5a, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, - 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x35, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0x91, 0x01, 0x0a, 0x19, 0x41, 0x73, 0x73, 0x6f, - 0x63, 0x69, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x49, 0x64, 0x12, 0x55, 0x0a, 0x0e, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x5f, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x0d, 0x69, 0x6e, - 0x66, 0x72, 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x94, 0x01, 0x0a, 0x1c, - 0x44, 0x69, 0x73, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, + 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, + 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x6f, 0x72, 0x74, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x22, 0xb8, 0x01, 0x0a, 0x14, 0x4c, 0x69, + 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x48, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, + 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x56, 0x0a, 0x0a, + 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, + 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x35, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x55, 0x0a, 0x0e, 0x69, + 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0x91, 0x01, 0x0a, 0x19, + 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x55, 0x0a, 0x0e, 0x69, 0x6e, 0x66, 0x72, + 0x61, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2e, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x52, 0x0d, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, + 0x94, 0x01, 0x0a, 0x1c, 0x44, 0x69, 0x73, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, + 0x55, 0x0a, 0x0e, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x0d, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xec, 0x01, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x12, 0x58, 0x0a, 0x0c, 0x61, 0x70, 0x70, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x0b, + 0x61, 0x70, 0x70, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x56, 0x0a, 0x0e, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x52, 0x0d, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x22, 0xec, 0x01, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x58, 0x0a, - 0x0c, 0x61, 0x70, 0x70, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, + 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x56, 0x0a, 0x0e, 0x69, 0x6e, 0x66, 0x72, 0x61, - 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, - 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x72, - 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, - 0x52, 0x0d, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, - 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, - 0x42, 0x0f, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x32, 0xf9, 0x09, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x39, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, - 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, - 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, - 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x3a, 0x01, 0x2a, 0x22, 0x25, 0x2f, 0x63, 0x6f, 0x72, - 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x12, 0xa1, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x12, 0x39, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, - 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x27, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x1a, 0x1c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, - 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, - 0x2e, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x9a, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x12, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, - 0x64, 0x7d, 0x12, 0xee, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x12, 0x38, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x69, 0x92, 0x41, 0x2e, 0x12, 0x2c, 0x4c, - 0x69, 0x73, 0x74, 0x20, 0x41, 0x50, 0x49, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x20, 0x61, 0x6c, - 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x32, 0x5a, 0x1d, 0x3a, 0x01, 0x2a, 0x22, 0x18, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, - 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x3a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x12, 0x11, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x12, 0x8a, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x39, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x49, 0x6e, 0x66, 0x72, 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x54, 0x79, + 0x70, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x49, 0x64, 0x42, 0x0f, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x32, 0xf9, 0x09, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x39, 0x2e, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, - 0x2a, 0x1e, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, - 0x12, 0xb7, 0x01, 0x0a, 0x12, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x3e, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x3a, 0x01, 0x2a, 0x22, 0x25, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, + 0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0xa1, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x39, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, - 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, + 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x1a, 0x1c, 0x2f, 0x63, 0x6f, + 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, + 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x9a, 0x01, 0x0a, 0x0a, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2c, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x26, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, + 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xee, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x38, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x3a, 0x01, 0x2a, - 0x1a, 0x28, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, - 0x3a, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x12, 0xc0, 0x01, 0x0a, 0x15, 0x44, + 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x39, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x69, 0x92, 0x41, + 0x2e, 0x12, 0x2c, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x41, 0x50, 0x49, 0x20, 0x6c, 0x69, 0x73, 0x74, + 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x5a, 0x1d, 0x3a, 0x01, 0x2a, 0x22, 0x18, 0x2f, 0x63, 0x6f, 0x72, + 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x3a, 0x73, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x12, 0x11, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x8a, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x39, 0x2e, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x26, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x20, 0x2a, 0x1e, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xb7, 0x01, 0x0a, 0x12, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x3e, 0x2e, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x2d, 0x3a, 0x01, 0x2a, 0x1a, 0x28, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x12, 0xc0, + 0x01, 0x0a, 0x15, 0x44, 0x69, 0x73, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x41, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x12, 0x41, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x73, - 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x30, 0x3a, 0x01, 0x2a, 0x1a, 0x2b, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x64, 0x69, 0x73, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, + 0x65, 0x42, 0x81, 0x01, 0x0a, 0x27, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x01, 0x2a, - 0x1a, 0x2b, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, - 0x3a, 0x64, 0x69, 0x73, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x42, 0x81, 0x01, - 0x0a, 0x27, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, 0x2f, 0x61, 0x70, - 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, - 0x72, 0x78, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x46, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, + 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, + 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1488,7 +1490,7 @@ var file_public_portworx_platform_project_apiv1_project_proto_depIdxs = []int32{ 7, // 7: public.portworx.platform.project.v1.ApplicationResources.pds_resources:type_name -> public.portworx.platform.project.v1.PDSResources 1, // 8: public.portworx.platform.project.v1.CreateProjectRequest.project:type_name -> public.portworx.platform.project.v1.Project 18, // 9: public.portworx.platform.project.v1.UpdateProjectRequest.meta:type_name -> public.portworx.common.v1.Meta - 19, // 10: public.portworx.platform.project.v1.ListProjectsRequest.resource_selector:type_name -> public.portworx.common.v1.ResourceSelector + 19, // 10: public.portworx.platform.project.v1.ListProjectsRequest.infra_resource_selector:type_name -> public.portworx.common.v1.ResourceSelector 20, // 11: public.portworx.platform.project.v1.ListProjectsRequest.label_selector:type_name -> public.portworx.common.v1.Selector 20, // 12: public.portworx.platform.project.v1.ListProjectsRequest.field_selector:type_name -> public.portworx.common.v1.Selector 21, // 13: public.portworx.platform.project.v1.ListProjectsRequest.resp_data:type_name -> public.portworx.common.v1.RespData diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/project/apiv1/project.pb.md b/vendor/github.com/pure-px/apis/public/portworx/platform/project/apiv1/project.pb.md index ea36949af..c6d1d53d0 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/project/apiv1/project.pb.md +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/project/apiv1/project.pb.md @@ -199,7 +199,7 @@ will be returned. | Field | Type | Description | | ----- | ---- | ----------- | | tenant_id | [ string](#string) | Tenant id for which projects to be listed. | -| resource_selector | [ public.portworx.common.v1.ResourceSelector](#publicportworxcommonv1resourceselector) | Filtering list of projects based on the provided resource details.. | +| infra_resource_selector | [ public.portworx.common.v1.ResourceSelector](#publicportworxcommonv1resourceselector) | Filtering list of projects based on the provided resource details.. | | label_selector | [ public.portworx.common.v1.Selector](#publicportworxcommonv1selector) | Provides the key in labels and associated values for which projects need to be listed. | | field_selector | [ public.portworx.common.v1.Selector](#publicportworxcommonv1selector) | Field selector is used to filter projects based on the fields in the project's proto message. | | resp_data | [ public.portworx.common.v1.RespData](#publicportworxcommonv1respdata) | Response data flags for listing projects. | @@ -228,7 +228,7 @@ PDSResource clubs resources generated by pds application. | Field | Type | Description | | ----- | ---- | ----------- | -| deployments | [repeated string](#string) | Resource ids of deployments. | +| data_service_deployments | [repeated string](#string) | Resource ids of deployments. | | backup_configs | [repeated string](#string) | Resource ids of backup configs. | | restores | [repeated string](#string) | Resource ids of restores. | @@ -299,7 +299,7 @@ Status represents the current state of the project. Request to update a project meta. (-- api-linter: core::0134::request-resource-required=disabled aip.dev/not-precedent: We need to do this because reasons. -we are onlu updating project meta--) +we are only updating project meta--) | Field | Type | Description | diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/project/apiv1/project.proto b/vendor/github.com/pure-px/apis/public/portworx/platform/project/apiv1/project.proto index 39efb78a2..a646de287 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/project/apiv1/project.proto +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/project/apiv1/project.proto @@ -1,5 +1,5 @@ // Please use the following editor setup for this file: -// Tab size=2; Tabs as spaces; Clean up trailing whitepsace +// Tab size=2; Tabs as spaces; Clean up trailing whitespace // // In vim add: au FileType proto setl sw=2 ts=2 expandtab list // @@ -184,7 +184,7 @@ message ApplicationResources { // PDSResource clubs resources generated by pds application. message PDSResources { // Resource ids of deployments. - repeated string deployments = 1; + repeated string data_service_deployments = 1; // Resource ids of backup configs. repeated string backup_configs = 2; // Resource ids of restores. @@ -205,7 +205,7 @@ message CreateProjectRequest { // Request to update a project meta. // (-- api-linter: core::0134::request-resource-required=disabled // aip.dev/not-precedent: We need to do this because reasons. -// we are onlu updating project meta--) +// we are only updating project meta--) message UpdateProjectRequest { // Metadata of the project. public.portworx.common.v1.Meta meta = 2; @@ -224,7 +224,7 @@ message ListProjectsRequest { // Tenant id for which projects to be listed. string tenant_id = 1; // Filtering list of projects based on the provided resource details.. - public.portworx.common.v1.ResourceSelector resource_selector = 2; + public.portworx.common.v1.ResourceSelector infra_resource_selector = 2; // Provides the key in labels and associated values for which projects need to be listed. public.portworx.common.v1.Selector label_selector = 3; // Field selector is used to filter projects based on the fields in the project's proto message. diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/project/apiv1/project.swagger.json b/vendor/github.com/pure-px/apis/public/portworx/platform/project/apiv1/project.swagger.json index 6f220ee6c..0a710b1ee 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/project/apiv1/project.swagger.json +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/project/apiv1/project.swagger.json @@ -569,10 +569,11 @@ "enum": [ "OPERATOR_UNSPECIFIED", "IN", - "NOT_IN" + "NOT_IN", + "LIKE" ], "default": "OPERATOR_UNSPECIFIED", - "description": "Operator specifies the relationship between the provided (key,value) pairs in the response.\n\n - OPERATOR_UNSPECIFIED: Unspecified, do not use.\n - IN: IN specifies that the key should be associated with atleast 1 of the element in value list.\n - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list." + "description": "Operator specifies the relationship between the provided (key,value) pairs in the response.\n\n - OPERATOR_UNSPECIFIED: Unspecified, do not use.\n - IN: IN specifies that the key should be associated with atleast 1 of the element in value list.\n - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list.\n - LIKE: LIKE specified that the key should be of a specified pattern" }, "SortByField": { "type": "string", @@ -679,7 +680,7 @@ "type": "string", "description": "Tenant id for which projects to be listed." }, - "resourceSelector": { + "infraResourceSelector": { "$ref": "#/components/schemas/v1ResourceSelector" }, "labelSelector": { @@ -778,7 +779,7 @@ "v1PDSResources": { "type": "object", "properties": { - "deployments": { + "dataServiceDeployments": { "type": "array", "items": { "type": "string" diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/project/apiv1/project_grpc.pb.go b/vendor/github.com/pure-px/apis/public/portworx/platform/project/apiv1/project_grpc.pb.go index a5d2f490e..d7c652a5b 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/project/apiv1/project_grpc.pb.go +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/project/apiv1/project_grpc.pb.go @@ -1,5 +1,5 @@ // Please use the following editor setup for this file: -// Tab size=2; Tabs as spaces; Clean up trailing whitepsace +// Tab size=2; Tabs as spaces; Clean up trailing whitespace // // In vim add: au FileType proto setl sw=2 ts=2 expandtab list // diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/apiv1/targetcluster.pb.go b/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/apiv1/targetcluster.pb.go index a31ea12c8..5aabc1cab 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/apiv1/targetcluster.pb.go +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/apiv1/targetcluster.pb.go @@ -100,7 +100,7 @@ func (x TargetClusterPhase_Phase) Number() protoreflect.EnumNumber { // Deprecated: Use TargetClusterPhase_Phase.Descriptor instead. func (TargetClusterPhase_Phase) EnumDescriptor() ([]byte, []int) { - return file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_rawDescGZIP(), []int{8, 0} + return file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_rawDescGZIP(), []int{9, 0} } // kubeplatform values. @@ -169,7 +169,7 @@ func (x KubePlatform_Type) Number() protoreflect.EnumNumber { // Deprecated: Use KubePlatform_Type.Descriptor instead. func (KubePlatform_Type) EnumDescriptor() ([]byte, []int) { - return file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_rawDescGZIP(), []int{10, 0} + return file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_rawDescGZIP(), []int{11, 0} } // ListTargetClusterRequest is a request message to the List TargetCluster API. @@ -616,9 +616,9 @@ type Status struct { // Timestamp of cluster's last status update to control plane. LastStatusUpdateTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=last_status_update_time,json=lastStatusUpdateTime,proto3" json:"last_status_update_time,omitempty"` // Status of the platform agent running in the target cluster. - PlatformAgent apiv11.ApplicationPhase_Phase `protobuf:"varint,4,opt,name=platform_agent,json=platformAgent,proto3,enum=public.portworx.platform.targetcluster.application.v1.ApplicationPhase_Phase" json:"platform_agent,omitempty"` + PlatformAgent *TargetClusterApplicationStatus `protobuf:"bytes,4,opt,name=platform_agent,json=platformAgent,proto3" json:"platform_agent,omitempty"` // Status of applications running in the target cluster eg: BAAS, PDS, MPXE. - Applications map[string]apiv11.ApplicationPhase_Phase `protobuf:"bytes,5,rep,name=applications,proto3" json:"applications,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3,enum=public.portworx.platform.targetcluster.application.v1.ApplicationPhase_Phase"` + Applications map[string]*TargetClusterApplicationStatus `protobuf:"bytes,5,rep,name=applications,proto3" json:"applications,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *Status) Reset() { @@ -674,20 +674,87 @@ func (x *Status) GetLastStatusUpdateTime() *timestamppb.Timestamp { return nil } -func (x *Status) GetPlatformAgent() apiv11.ApplicationPhase_Phase { +func (x *Status) GetPlatformAgent() *TargetClusterApplicationStatus { if x != nil { return x.PlatformAgent } - return apiv11.ApplicationPhase_Phase(0) + return nil } -func (x *Status) GetApplications() map[string]apiv11.ApplicationPhase_Phase { +func (x *Status) GetApplications() map[string]*TargetClusterApplicationStatus { if x != nil { return x.Applications } return nil } +// Status of the Application. +type TargetClusterApplicationStatus struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // current installed version. + Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` + // current phase of the application. + Phase apiv11.ApplicationPhase_Phase `protobuf:"varint,2,opt,name=phase,proto3,enum=public.portworx.platform.targetcluster.application.v1.ApplicationPhase_Phase" json:"phase,omitempty"` + // current health of the application. + Health apiv11.ApplicationHealth_Health `protobuf:"varint,3,opt,name=health,proto3,enum=public.portworx.platform.targetcluster.application.v1.ApplicationHealth_Health" json:"health,omitempty"` +} + +func (x *TargetClusterApplicationStatus) Reset() { + *x = TargetClusterApplicationStatus{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TargetClusterApplicationStatus) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TargetClusterApplicationStatus) ProtoMessage() {} + +func (x *TargetClusterApplicationStatus) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TargetClusterApplicationStatus.ProtoReflect.Descriptor instead. +func (*TargetClusterApplicationStatus) Descriptor() ([]byte, []int) { + return file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_rawDescGZIP(), []int{8} +} + +func (x *TargetClusterApplicationStatus) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *TargetClusterApplicationStatus) GetPhase() apiv11.ApplicationPhase_Phase { + if x != nil { + return x.Phase + } + return apiv11.ApplicationPhase_Phase(0) +} + +func (x *TargetClusterApplicationStatus) GetHealth() apiv11.ApplicationHealth_Health { + if x != nil { + return x.Health + } + return apiv11.ApplicationHealth_Health(0) +} + // TargetClusterPhase represents the phase of target cluster. type TargetClusterPhase struct { state protoimpl.MessageState @@ -698,7 +765,7 @@ type TargetClusterPhase struct { func (x *TargetClusterPhase) Reset() { *x = TargetClusterPhase{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[8] + mi := &file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -711,7 +778,7 @@ func (x *TargetClusterPhase) String() string { func (*TargetClusterPhase) ProtoMessage() {} func (x *TargetClusterPhase) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[8] + mi := &file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -724,7 +791,7 @@ func (x *TargetClusterPhase) ProtoReflect() protoreflect.Message { // Deprecated: Use TargetClusterPhase.ProtoReflect.Descriptor instead. func (*TargetClusterPhase) Descriptor() ([]byte, []int) { - return file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_rawDescGZIP(), []int{8} + return file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_rawDescGZIP(), []int{9} } // TargetClusterMetadata represents the metadata of a cluster. @@ -744,7 +811,7 @@ type Metadata struct { func (x *Metadata) Reset() { *x = Metadata{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[9] + mi := &file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -757,7 +824,7 @@ func (x *Metadata) String() string { func (*Metadata) ProtoMessage() {} func (x *Metadata) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[9] + mi := &file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -770,7 +837,7 @@ func (x *Metadata) ProtoReflect() protoreflect.Message { // Deprecated: Use Metadata.ProtoReflect.Descriptor instead. func (*Metadata) Descriptor() ([]byte, []int) { - return file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_rawDescGZIP(), []int{9} + return file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_rawDescGZIP(), []int{10} } func (x *Metadata) GetKubeServerVersion() string { @@ -804,7 +871,7 @@ type KubePlatform struct { func (x *KubePlatform) Reset() { *x = KubePlatform{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[10] + mi := &file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -817,7 +884,7 @@ func (x *KubePlatform) String() string { func (*KubePlatform) ProtoMessage() {} func (x *KubePlatform) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[10] + mi := &file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -830,7 +897,7 @@ func (x *KubePlatform) ProtoReflect() protoreflect.Message { // Deprecated: Use KubePlatform.ProtoReflect.Descriptor instead. func (*KubePlatform) Descriptor() ([]byte, []int) { - return file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_rawDescGZIP(), []int{10} + return file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_rawDescGZIP(), []int{11} } // PX Enterprise metadata on the target cluster. @@ -847,12 +914,14 @@ type PXEMetadata struct { ServiceNamespace string `protobuf:"bytes,3,opt,name=service_namespace,json=serviceNamespace,proto3" json:"service_namespace,omitempty"` // Version of PXE installed on the target cluster. Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` + // SecurityEnabled flag depicts if px security is enabled on the target cluster. + SecurityEnabled bool `protobuf:"varint,5,opt,name=security_enabled,json=securityEnabled,proto3" json:"security_enabled,omitempty"` } func (x *PXEMetadata) Reset() { *x = PXEMetadata{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[11] + mi := &file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -865,7 +934,7 @@ func (x *PXEMetadata) String() string { func (*PXEMetadata) ProtoMessage() {} func (x *PXEMetadata) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[11] + mi := &file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -878,7 +947,7 @@ func (x *PXEMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use PXEMetadata.ProtoReflect.Descriptor instead. func (*PXEMetadata) Descriptor() ([]byte, []int) { - return file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_rawDescGZIP(), []int{11} + return file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_rawDescGZIP(), []int{12} } func (x *PXEMetadata) GetCsiEnabled() bool { @@ -909,6 +978,13 @@ func (x *PXEMetadata) GetVersion() string { return "" } +func (x *PXEMetadata) GetSecurityEnabled() bool { + if x != nil { + return x.SecurityEnabled + } + return false +} + var File_public_portworx_platform_targetcluster_apiv1_targetcluster_proto protoreflect.FileDescriptor var file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_rawDesc = []byte{ @@ -1021,7 +1097,7 @@ var file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_rawDes 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x22, 0x08, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xf7, 0x04, 0x0a, 0x06, 0x53, + 0x22, 0x08, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xef, 0x04, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4f, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, @@ -1038,133 +1114,152 @@ var file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_rawDes 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x74, 0x0a, 0x0e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x4d, 0x2e, 0x70, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x70, 0x0a, 0x0e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x68, 0x61, 0x73, 0x65, 0x2e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x52, 0x0d, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x67, 0x0a, 0x0c, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x43, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, - 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x1a, 0x8e, 0x01, 0x0a, 0x11, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x63, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x4d, 0x2e, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x68, - 0x61, 0x73, 0x65, 0x2e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6f, 0x0a, 0x12, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x68, 0x61, 0x73, 0x65, 0x22, 0x59, 0x0a, 0x05, 0x50, 0x68, - 0x61, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, - 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x49, 0x53, - 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x46, - 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, 0x4c, 0x45, 0x54, - 0x49, 0x4e, 0x47, 0x10, 0x04, 0x22, 0xf8, 0x01, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x12, 0x2e, 0x0a, 0x13, 0x6b, 0x75, 0x62, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x11, 0x6b, 0x75, 0x62, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x61, 0x0a, 0x0d, 0x6b, 0x75, 0x62, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x6b, 0x75, 0x62, 0x65, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x59, 0x0a, 0x0c, 0x70, 0x78, 0x65, 0x5f, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x67, 0x0a, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, + 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, + 0x8a, 0x01, 0x0a, 0x11, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, + 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x88, 0x02, 0x0a, + 0x1e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x63, 0x0a, 0x05, 0x70, 0x68, 0x61, + 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x4d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x68, 0x61, 0x73, + 0x65, 0x2e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x12, 0x67, + 0x0a, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x4f, + 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, + 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x22, 0x6f, 0x0a, 0x12, 0x54, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x68, 0x61, 0x73, 0x65, 0x22, 0x59, 0x0a, + 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, + 0x09, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, + 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0a, + 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, + 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x22, 0xf8, 0x01, 0x0a, 0x08, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2e, 0x0a, 0x13, 0x6b, 0x75, 0x62, 0x65, 0x5f, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x11, 0x6b, 0x75, 0x62, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x61, 0x0a, 0x0d, 0x6b, 0x75, 0x62, 0x65, 0x5f, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x6b, 0x75, 0x62, 0x65, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x59, 0x0a, 0x0c, 0x70, 0x78, 0x65, 0x5f, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, + 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x58, 0x45, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x70, 0x78, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x22, 0x6c, 0x0a, 0x0c, 0x4b, 0x75, 0x62, 0x65, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x22, 0x5c, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x57, 0x53, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x5a, + 0x55, 0x52, 0x45, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x43, 0x50, 0x10, 0x03, 0x12, 0x07, + 0x0a, 0x03, 0x47, 0x43, 0x50, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x53, 0x50, 0x48, 0x45, + 0x52, 0x45, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, + 0x06, 0x22, 0xc3, 0x01, 0x0a, 0x0b, 0x50, 0x58, 0x45, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x73, 0x69, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x63, 0x73, 0x69, 0x45, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x10, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, + 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x32, 0xd4, 0x06, 0x0a, 0x14, 0x54, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x93, 0x02, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x44, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x70, 0x92, 0x41, 0x35, 0x12, 0x33, 0x4c, 0x69, 0x73, 0x74, 0x20, + 0x41, 0x50, 0x49, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x32, 0x5a, 0x1d, 0x3a, 0x01, 0x2a, 0x22, 0x18, 0x2f, 0x63, 0x6f, 0x72, 0x65, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x73, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x12, 0x11, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0xb0, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x54, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x42, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x58, 0x45, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x0b, 0x70, 0x78, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x22, 0x6c, 0x0a, 0x0c, 0x4b, 0x75, 0x62, 0x65, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x22, 0x5c, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x07, - 0x0a, 0x03, 0x41, 0x57, 0x53, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x5a, 0x55, 0x52, 0x45, - 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x43, 0x50, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x47, - 0x43, 0x50, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x53, 0x50, 0x48, 0x45, 0x52, 0x45, 0x10, - 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x06, 0x22, 0x98, - 0x01, 0x0a, 0x0b, 0x50, 0x58, 0x45, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1f, - 0x0a, 0x0b, 0x63, 0x73, 0x69, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0a, 0x63, 0x73, 0x69, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, - 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x32, 0xd4, 0x06, 0x0a, 0x14, 0x54, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x93, 0x02, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x44, 0x2e, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x45, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x38, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x70, 0x92, 0x41, 0x35, 0x12, 0x33, 0x4c, 0x69, 0x73, - 0x74, 0x20, 0x41, 0x50, 0x49, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x5a, 0x1d, 0x3a, 0x01, 0x2a, 0x22, 0x18, 0x2f, 0x63, 0x6f, - 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x11, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0xb0, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, - 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x42, 0x2e, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x38, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, - 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x1e, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x94, 0x01, 0x0a, 0x13, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x12, 0x45, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x2a, 0x16, 0x2f, 0x63, 0x6f, 0x72, - 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, - 0x64, 0x7d, 0x12, 0xdb, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x45, 0x2e, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x38, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, + 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x18, 0x12, 0x16, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x94, 0x01, 0x0a, 0x13, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x12, 0x45, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x43, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x3d, 0x3a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x1a, 0x2b, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x75, 0x69, 0x64, 0x7d, - 0x42, 0x99, 0x01, 0x0a, 0x2d, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, - 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x42, 0x12, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x52, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, - 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, - 0x78, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x2a, 0x16, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, + 0x12, 0xdb, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x45, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x38, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x3d, 0x3a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x1a, 0x2b, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x75, 0x69, 0x64, 0x7d, 0x42, 0x99, + 0x01, 0x0a, 0x2d, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, + 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, + 0x42, 0x12, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x52, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -1180,7 +1275,7 @@ func file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_rawDe } var file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes = make([]protoimpl.MessageInfo, 13) +var file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes = make([]protoimpl.MessageInfo, 14) var file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_goTypes = []interface{}{ (TargetClusterPhase_Phase)(0), // 0: public.portworx.platform.TargetCluster.v1.TargetClusterPhase.Phase (KubePlatform_Type)(0), // 1: public.portworx.platform.TargetCluster.v1.KubePlatform.Type @@ -1192,56 +1287,60 @@ var file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_goType (*TargetCluster)(nil), // 7: public.portworx.platform.TargetCluster.v1.TargetCluster (*Config)(nil), // 8: public.portworx.platform.TargetCluster.v1.Config (*Status)(nil), // 9: public.portworx.platform.TargetCluster.v1.Status - (*TargetClusterPhase)(nil), // 10: public.portworx.platform.TargetCluster.v1.TargetClusterPhase - (*Metadata)(nil), // 11: public.portworx.platform.TargetCluster.v1.Metadata - (*KubePlatform)(nil), // 12: public.portworx.platform.TargetCluster.v1.KubePlatform - (*PXEMetadata)(nil), // 13: public.portworx.platform.TargetCluster.v1.PXEMetadata - nil, // 14: public.portworx.platform.TargetCluster.v1.Status.ApplicationsEntry - (*apiv1.PageBasedPaginationRequest)(nil), // 15: public.portworx.common.v1.PageBasedPaginationRequest - (*apiv1.Selector)(nil), // 16: public.portworx.common.v1.Selector - (*apiv1.ResourceSelector)(nil), // 17: public.portworx.common.v1.ResourceSelector - (*apiv1.Sort)(nil), // 18: public.portworx.common.v1.Sort - (apiv1.RespData)(0), // 19: public.portworx.common.v1.RespData - (*apiv1.PageBasedPaginationResponse)(nil), // 20: public.portworx.common.v1.PageBasedPaginationResponse - (*apiv1.Meta)(nil), // 21: public.portworx.common.v1.Meta - (*timestamppb.Timestamp)(nil), // 22: google.protobuf.Timestamp - (apiv11.ApplicationPhase_Phase)(0), // 23: public.portworx.platform.targetcluster.application.v1.ApplicationPhase.Phase - (*emptypb.Empty)(nil), // 24: google.protobuf.Empty + (*TargetClusterApplicationStatus)(nil), // 10: public.portworx.platform.TargetCluster.v1.TargetClusterApplicationStatus + (*TargetClusterPhase)(nil), // 11: public.portworx.platform.TargetCluster.v1.TargetClusterPhase + (*Metadata)(nil), // 12: public.portworx.platform.TargetCluster.v1.Metadata + (*KubePlatform)(nil), // 13: public.portworx.platform.TargetCluster.v1.KubePlatform + (*PXEMetadata)(nil), // 14: public.portworx.platform.TargetCluster.v1.PXEMetadata + nil, // 15: public.portworx.platform.TargetCluster.v1.Status.ApplicationsEntry + (*apiv1.PageBasedPaginationRequest)(nil), // 16: public.portworx.common.v1.PageBasedPaginationRequest + (*apiv1.Selector)(nil), // 17: public.portworx.common.v1.Selector + (*apiv1.ResourceSelector)(nil), // 18: public.portworx.common.v1.ResourceSelector + (*apiv1.Sort)(nil), // 19: public.portworx.common.v1.Sort + (apiv1.RespData)(0), // 20: public.portworx.common.v1.RespData + (*apiv1.PageBasedPaginationResponse)(nil), // 21: public.portworx.common.v1.PageBasedPaginationResponse + (*apiv1.Meta)(nil), // 22: public.portworx.common.v1.Meta + (*timestamppb.Timestamp)(nil), // 23: google.protobuf.Timestamp + (apiv11.ApplicationPhase_Phase)(0), // 24: public.portworx.platform.targetcluster.application.v1.ApplicationPhase.Phase + (apiv11.ApplicationHealth_Health)(0), // 25: public.portworx.platform.targetcluster.application.v1.ApplicationHealth.Health + (*emptypb.Empty)(nil), // 26: google.protobuf.Empty } var file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_depIdxs = []int32{ - 15, // 0: public.portworx.platform.TargetCluster.v1.ListTargetClustersRequest.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationRequest - 16, // 1: public.portworx.platform.TargetCluster.v1.ListTargetClustersRequest.label_selector:type_name -> public.portworx.common.v1.Selector - 16, // 2: public.portworx.platform.TargetCluster.v1.ListTargetClustersRequest.field_selector:type_name -> public.portworx.common.v1.Selector - 17, // 3: public.portworx.platform.TargetCluster.v1.ListTargetClustersRequest.infra_resource_selector:type_name -> public.portworx.common.v1.ResourceSelector - 18, // 4: public.portworx.platform.TargetCluster.v1.ListTargetClustersRequest.sort:type_name -> public.portworx.common.v1.Sort - 19, // 5: public.portworx.platform.TargetCluster.v1.ListTargetClustersRequest.resp_data:type_name -> public.portworx.common.v1.RespData + 16, // 0: public.portworx.platform.TargetCluster.v1.ListTargetClustersRequest.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationRequest + 17, // 1: public.portworx.platform.TargetCluster.v1.ListTargetClustersRequest.label_selector:type_name -> public.portworx.common.v1.Selector + 17, // 2: public.portworx.platform.TargetCluster.v1.ListTargetClustersRequest.field_selector:type_name -> public.portworx.common.v1.Selector + 18, // 3: public.portworx.platform.TargetCluster.v1.ListTargetClustersRequest.infra_resource_selector:type_name -> public.portworx.common.v1.ResourceSelector + 19, // 4: public.portworx.platform.TargetCluster.v1.ListTargetClustersRequest.sort:type_name -> public.portworx.common.v1.Sort + 20, // 5: public.portworx.platform.TargetCluster.v1.ListTargetClustersRequest.resp_data:type_name -> public.portworx.common.v1.RespData 7, // 6: public.portworx.platform.TargetCluster.v1.ListTargetClustersResponse.clusters:type_name -> public.portworx.platform.TargetCluster.v1.TargetCluster - 20, // 7: public.portworx.platform.TargetCluster.v1.ListTargetClustersResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse + 21, // 7: public.portworx.platform.TargetCluster.v1.ListTargetClustersResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse 7, // 8: public.portworx.platform.TargetCluster.v1.UpdateTargetClusterRequest.target_cluster:type_name -> public.portworx.platform.TargetCluster.v1.TargetCluster - 21, // 9: public.portworx.platform.TargetCluster.v1.TargetCluster.meta:type_name -> public.portworx.common.v1.Meta + 22, // 9: public.portworx.platform.TargetCluster.v1.TargetCluster.meta:type_name -> public.portworx.common.v1.Meta 8, // 10: public.portworx.platform.TargetCluster.v1.TargetCluster.config:type_name -> public.portworx.platform.TargetCluster.v1.Config 9, // 11: public.portworx.platform.TargetCluster.v1.TargetCluster.status:type_name -> public.portworx.platform.TargetCluster.v1.Status - 11, // 12: public.portworx.platform.TargetCluster.v1.Status.metadata:type_name -> public.portworx.platform.TargetCluster.v1.Metadata + 12, // 12: public.portworx.platform.TargetCluster.v1.Status.metadata:type_name -> public.portworx.platform.TargetCluster.v1.Metadata 0, // 13: public.portworx.platform.TargetCluster.v1.Status.phase:type_name -> public.portworx.platform.TargetCluster.v1.TargetClusterPhase.Phase - 22, // 14: public.portworx.platform.TargetCluster.v1.Status.last_status_update_time:type_name -> google.protobuf.Timestamp - 23, // 15: public.portworx.platform.TargetCluster.v1.Status.platform_agent:type_name -> public.portworx.platform.targetcluster.application.v1.ApplicationPhase.Phase - 14, // 16: public.portworx.platform.TargetCluster.v1.Status.applications:type_name -> public.portworx.platform.TargetCluster.v1.Status.ApplicationsEntry - 1, // 17: public.portworx.platform.TargetCluster.v1.Metadata.kube_platform:type_name -> public.portworx.platform.TargetCluster.v1.KubePlatform.Type - 13, // 18: public.portworx.platform.TargetCluster.v1.Metadata.pxe_metadata:type_name -> public.portworx.platform.TargetCluster.v1.PXEMetadata - 23, // 19: public.portworx.platform.TargetCluster.v1.Status.ApplicationsEntry.value:type_name -> public.portworx.platform.targetcluster.application.v1.ApplicationPhase.Phase - 2, // 20: public.portworx.platform.TargetCluster.v1.TargetClusterService.ListTargetClusters:input_type -> public.portworx.platform.TargetCluster.v1.ListTargetClustersRequest - 4, // 21: public.portworx.platform.TargetCluster.v1.TargetClusterService.GetTargetCluster:input_type -> public.portworx.platform.TargetCluster.v1.GetTargetClusterRequest - 5, // 22: public.portworx.platform.TargetCluster.v1.TargetClusterService.DeleteTargetCluster:input_type -> public.portworx.platform.TargetCluster.v1.DeleteTargetClusterRequest - 6, // 23: public.portworx.platform.TargetCluster.v1.TargetClusterService.UpdateTargetCluster:input_type -> public.portworx.platform.TargetCluster.v1.UpdateTargetClusterRequest - 3, // 24: public.portworx.platform.TargetCluster.v1.TargetClusterService.ListTargetClusters:output_type -> public.portworx.platform.TargetCluster.v1.ListTargetClustersResponse - 7, // 25: public.portworx.platform.TargetCluster.v1.TargetClusterService.GetTargetCluster:output_type -> public.portworx.platform.TargetCluster.v1.TargetCluster - 24, // 26: public.portworx.platform.TargetCluster.v1.TargetClusterService.DeleteTargetCluster:output_type -> google.protobuf.Empty - 7, // 27: public.portworx.platform.TargetCluster.v1.TargetClusterService.UpdateTargetCluster:output_type -> public.portworx.platform.TargetCluster.v1.TargetCluster - 24, // [24:28] is the sub-list for method output_type - 20, // [20:24] is the sub-list for method input_type - 20, // [20:20] is the sub-list for extension type_name - 20, // [20:20] is the sub-list for extension extendee - 0, // [0:20] is the sub-list for field type_name + 23, // 14: public.portworx.platform.TargetCluster.v1.Status.last_status_update_time:type_name -> google.protobuf.Timestamp + 10, // 15: public.portworx.platform.TargetCluster.v1.Status.platform_agent:type_name -> public.portworx.platform.TargetCluster.v1.TargetClusterApplicationStatus + 15, // 16: public.portworx.platform.TargetCluster.v1.Status.applications:type_name -> public.portworx.platform.TargetCluster.v1.Status.ApplicationsEntry + 24, // 17: public.portworx.platform.TargetCluster.v1.TargetClusterApplicationStatus.phase:type_name -> public.portworx.platform.targetcluster.application.v1.ApplicationPhase.Phase + 25, // 18: public.portworx.platform.TargetCluster.v1.TargetClusterApplicationStatus.health:type_name -> public.portworx.platform.targetcluster.application.v1.ApplicationHealth.Health + 1, // 19: public.portworx.platform.TargetCluster.v1.Metadata.kube_platform:type_name -> public.portworx.platform.TargetCluster.v1.KubePlatform.Type + 14, // 20: public.portworx.platform.TargetCluster.v1.Metadata.pxe_metadata:type_name -> public.portworx.platform.TargetCluster.v1.PXEMetadata + 10, // 21: public.portworx.platform.TargetCluster.v1.Status.ApplicationsEntry.value:type_name -> public.portworx.platform.TargetCluster.v1.TargetClusterApplicationStatus + 2, // 22: public.portworx.platform.TargetCluster.v1.TargetClusterService.ListTargetClusters:input_type -> public.portworx.platform.TargetCluster.v1.ListTargetClustersRequest + 4, // 23: public.portworx.platform.TargetCluster.v1.TargetClusterService.GetTargetCluster:input_type -> public.portworx.platform.TargetCluster.v1.GetTargetClusterRequest + 5, // 24: public.portworx.platform.TargetCluster.v1.TargetClusterService.DeleteTargetCluster:input_type -> public.portworx.platform.TargetCluster.v1.DeleteTargetClusterRequest + 6, // 25: public.portworx.platform.TargetCluster.v1.TargetClusterService.UpdateTargetCluster:input_type -> public.portworx.platform.TargetCluster.v1.UpdateTargetClusterRequest + 3, // 26: public.portworx.platform.TargetCluster.v1.TargetClusterService.ListTargetClusters:output_type -> public.portworx.platform.TargetCluster.v1.ListTargetClustersResponse + 7, // 27: public.portworx.platform.TargetCluster.v1.TargetClusterService.GetTargetCluster:output_type -> public.portworx.platform.TargetCluster.v1.TargetCluster + 26, // 28: public.portworx.platform.TargetCluster.v1.TargetClusterService.DeleteTargetCluster:output_type -> google.protobuf.Empty + 7, // 29: public.portworx.platform.TargetCluster.v1.TargetClusterService.UpdateTargetCluster:output_type -> public.portworx.platform.TargetCluster.v1.TargetCluster + 26, // [26:30] is the sub-list for method output_type + 22, // [22:26] is the sub-list for method input_type + 22, // [22:22] is the sub-list for extension type_name + 22, // [22:22] is the sub-list for extension extendee + 0, // [0:22] is the sub-list for field type_name } func init() { file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_init() } @@ -1347,7 +1446,7 @@ func file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_init( } } file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TargetClusterPhase); i { + switch v := v.(*TargetClusterApplicationStatus); i { case 0: return &v.state case 1: @@ -1359,7 +1458,7 @@ func file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_init( } } file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Metadata); i { + switch v := v.(*TargetClusterPhase); i { case 0: return &v.state case 1: @@ -1371,7 +1470,7 @@ func file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_init( } } file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KubePlatform); i { + switch v := v.(*Metadata); i { case 0: return &v.state case 1: @@ -1383,6 +1482,18 @@ func file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_init( } } file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KubePlatform); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PXEMetadata); i { case 0: return &v.state @@ -1401,7 +1512,7 @@ func file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_init( GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_public_portworx_platform_targetcluster_apiv1_targetcluster_proto_rawDesc, NumEnums: 2, - NumMessages: 13, + NumMessages: 14, NumExtensions: 0, NumServices: 1, }, diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/apiv1/targetcluster.pb.md b/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/apiv1/targetcluster.pb.md index 55369ed2f..6525d8fd5 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/apiv1/targetcluster.pb.md +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/apiv1/targetcluster.pb.md @@ -23,6 +23,7 @@ - [Status](#status) - [Status.ApplicationsEntry](#statusapplicationsentry) - [TargetCluster](#targetcluster) + - [TargetClusterApplicationStatus](#targetclusterapplicationstatus) - [TargetClusterPhase](#targetclusterphase) - [UpdateTargetClusterRequest](#updatetargetclusterrequest) @@ -159,6 +160,7 @@ PX Enterprise metadata on the target cluster. | service_name | [ string](#string) | Name of portworx api service on the target cluster. | | service_namespace | [ string](#string) | Namespace of portworx api service on the target cluster. | | version | [ string](#string) | Version of PXE installed on the target cluster. | +| security_enabled | [ bool](#bool) | SecurityEnabled flag depicts if px security is enabled on the target cluster. | @@ -172,7 +174,7 @@ Status of the Target Cluster. | metadata | [ Metadata](#metadata) | Target Cluster Metadata. | | phase | [ TargetClusterPhase.Phase](#targetclusterphasephase) | Phase of target cluster. | | last_status_update_time | [ google.protobuf.Timestamp](#googleprotobuftimestamp) | Timestamp of cluster's last status update to control plane. | -| platform_agent | [ public.portworx.platform.targetcluster.application.v1.ApplicationPhase.Phase](#publicportworxplatformtargetclusterapplicationv1applicationphasephase) | Status of the platform agent running in the target cluster. | +| platform_agent | [ TargetClusterApplicationStatus](#targetclusterapplicationstatus) | Status of the platform agent running in the target cluster. | | applications | [map Status.ApplicationsEntry](#statusapplicationsentry) | Status of applications running in the target cluster eg: BAAS, PDS, MPXE. | @@ -185,7 +187,7 @@ Status of the Target Cluster. | Field | Type | Description | | ----- | ---- | ----------- | | key | [ string](#string) | none | -| value | [ public.portworx.platform.targetcluster.application.v1.ApplicationPhase.Phase](#publicportworxplatformtargetclusterapplicationv1applicationphasephase) | none | +| value | [ TargetClusterApplicationStatus](#targetclusterapplicationstatus) | none | @@ -203,6 +205,19 @@ TargetCluster is a high level entity that represents one large company(e.g. a Pu +### TargetClusterApplicationStatus {#targetclusterapplicationstatus} +Status of the Application. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| version | [ string](#string) | current installed version. | +| phase | [ public.portworx.platform.targetcluster.application.v1.ApplicationPhase.Phase](#publicportworxplatformtargetclusterapplicationv1applicationphasephase) | current phase of the application. | +| health | [ public.portworx.platform.targetcluster.application.v1.ApplicationHealth.Health](#publicportworxplatformtargetclusterapplicationv1applicationhealthhealth) | current health of the application. | + + + + ### TargetClusterPhase {#targetclusterphase} TargetClusterPhase represents the phase of target cluster. diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/apiv1/targetcluster.proto b/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/apiv1/targetcluster.proto index b345f743a..842baf6c4 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/apiv1/targetcluster.proto +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/apiv1/targetcluster.proto @@ -160,9 +160,19 @@ message Status { // Timestamp of cluster's last status update to control plane. google.protobuf.Timestamp last_status_update_time = 3; // Status of the platform agent running in the target cluster. - public.portworx.platform.targetcluster.application.v1.ApplicationPhase.Phase platform_agent = 4; + TargetClusterApplicationStatus platform_agent = 4; // Status of applications running in the target cluster eg: BAAS, PDS, MPXE. - map applications = 5; + map applications = 5; +} + +// Status of the Application. +message TargetClusterApplicationStatus { + // current installed version. + string version = 1; + // current phase of the application. + public.portworx.platform.targetcluster.application.v1.ApplicationPhase.Phase phase = 2; + // current health of the application. + public.portworx.platform.targetcluster.application.v1.ApplicationHealth.Health health = 3; } // TargetClusterPhase represents the phase of target cluster. @@ -225,4 +235,6 @@ message PXEMetadata { string service_namespace = 3; // Version of PXE installed on the target cluster. string version = 4; + // SecurityEnabled flag depicts if px security is enabled on the target cluster. + bool security_enabled = 5; } \ No newline at end of file diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/apiv1/targetcluster.swagger.json b/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/apiv1/targetcluster.swagger.json index e540b9fff..0cbff59c7 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/apiv1/targetcluster.swagger.json +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/apiv1/targetcluster.swagger.json @@ -375,6 +375,17 @@ }, "components": { "schemas": { + "ApplicationHealthHealth": { + "type": "string", + "enum": [ + "HEALTH_UNSPECIFIED", + "UNKNOWN", + "HEALTHY", + "UNHEALTHY" + ], + "default": "HEALTH_UNSPECIFIED", + "description": "Health determines health of an application.\n\n - HEALTH_UNSPECIFIED: Must be set in the proto file; ignore.\n - UNKNOWN: Application health is unknown.\n - HEALTHY: Application is healthy.\n - UNHEALTHY: Application is unhealthy." + }, "ResourceSelectorResourceFilter": { "type": "object", "properties": { @@ -419,10 +430,11 @@ "enum": [ "OPERATOR_UNSPECIFIED", "IN", - "NOT_IN" + "NOT_IN", + "LIKE" ], "default": "OPERATOR_UNSPECIFIED", - "description": "Operator specifies the relationship between the provided (key,value) pairs in the response.\n\n - OPERATOR_UNSPECIFIED: Unspecified, do not use.\n - IN: IN specifies that the key should be associated with atleast 1 of the element in value list.\n - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list." + "description": "Operator specifies the relationship between the provided (key,value) pairs in the response.\n\n - OPERATOR_UNSPECIFIED: Unspecified, do not use.\n - IN: IN specifies that the key should be associated with atleast 1 of the element in value list.\n - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list.\n - LIKE: LIKE specified that the key should be of a specified pattern" }, "SortByField": { "type": "string", @@ -473,12 +485,12 @@ "description": "Timestamp of cluster's last status update to control plane." }, "platformAgent": { - "$ref": "#/components/schemas/v1ApplicationPhasePhase" + "$ref": "#/components/schemas/v1TargetClusterApplicationStatus" }, "applications": { "type": "object", "additionalProperties": { - "$ref": "#/components/schemas/v1ApplicationPhasePhase" + "$ref": "#/components/schemas/v1TargetClusterApplicationStatus" }, "description": "Status of applications running in the target cluster eg: BAAS, PDS, MPXE." } @@ -678,6 +690,10 @@ "version": { "type": "string", "description": "Version of PXE installed on the target cluster." + }, + "securityEnabled": { + "type": "boolean", + "description": "SecurityEnabled flag depicts if px security is enabled on the target cluster." } }, "description": "PX Enterprise metadata on the target cluster." @@ -826,6 +842,22 @@ }, "description": "TargetCluster is a high level entity that represents one large company(e.g. a Pure)." }, + "v1TargetClusterApplicationStatus": { + "type": "object", + "properties": { + "version": { + "type": "string", + "description": "current installed version." + }, + "phase": { + "$ref": "#/components/schemas/v1ApplicationPhasePhase" + }, + "health": { + "$ref": "#/components/schemas/ApplicationHealthHealth" + } + }, + "description": "Status of the Application." + }, "v1TargetClusterPhasePhase": { "type": "string", "enum": [ diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application.pb.go b/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application.pb.go index f9b6b7db2..40bbfd18a 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application.pb.go +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application.pb.go @@ -100,7 +100,64 @@ func (x ApplicationPhase_Phase) Number() protoreflect.EnumNumber { // Deprecated: Use ApplicationPhase_Phase.Descriptor instead. func (ApplicationPhase_Phase) EnumDescriptor() ([]byte, []int) { - return file_public_portworx_platform_targetcluster_application_apiv1_application_proto_rawDescGZIP(), []int{8, 0} + return file_public_portworx_platform_targetcluster_application_apiv1_application_proto_rawDescGZIP(), []int{10, 0} +} + +// Health determines health of an application. +type ApplicationHealth_Health int32 + +const ( + // Must be set in the proto file; ignore. + ApplicationHealth_HEALTH_UNSPECIFIED ApplicationHealth_Health = 0 + // Application health is unknown. + ApplicationHealth_UNKNOWN ApplicationHealth_Health = 1 + // Application is healthy. + ApplicationHealth_HEALTHY ApplicationHealth_Health = 2 + // Application is unhealthy. + ApplicationHealth_UNHEALTHY ApplicationHealth_Health = 3 +) + +// Enum value maps for ApplicationHealth_Health. +var ( + ApplicationHealth_Health_name = map[int32]string{ + 0: "HEALTH_UNSPECIFIED", + 1: "UNKNOWN", + 2: "HEALTHY", + 3: "UNHEALTHY", + } + ApplicationHealth_Health_value = map[string]int32{ + "HEALTH_UNSPECIFIED": 0, + "UNKNOWN": 1, + "HEALTHY": 2, + "UNHEALTHY": 3, + } +) + +func (x ApplicationHealth_Health) Enum() *ApplicationHealth_Health { + p := new(ApplicationHealth_Health) + *p = x + return p +} + +func (x ApplicationHealth_Health) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ApplicationHealth_Health) Descriptor() protoreflect.EnumDescriptor { + return file_public_portworx_platform_targetcluster_application_apiv1_application_proto_enumTypes[1].Descriptor() +} + +func (ApplicationHealth_Health) Type() protoreflect.EnumType { + return &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_enumTypes[1] +} + +func (x ApplicationHealth_Health) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ApplicationHealth_Health.Descriptor instead. +func (ApplicationHealth_Health) EnumDescriptor() ([]byte, []int) { + return file_public_portworx_platform_targetcluster_application_apiv1_application_proto_rawDescGZIP(), []int{11, 0} } // ListApplicationsRequest is the request to the ListApplications API. @@ -111,8 +168,10 @@ type ListApplicationsRequest struct { // Unique identifier of the cluster whose details needs to be fetched. ClusterId string `protobuf:"bytes,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` - // Pagination parameters for listing target clusters. + // Pagination parameters for listing applications. Pagination *apiv1.PageBasedPaginationRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` + // Field selector is used to filter applications based on the fields in application proto message. + FieldSelector *apiv1.Selector `protobuf:"bytes,3,opt,name=field_selector,json=fieldSelector,proto3" json:"field_selector,omitempty"` } func (x *ListApplicationsRequest) Reset() { @@ -161,6 +220,13 @@ func (x *ListApplicationsRequest) GetPagination() *apiv1.PageBasedPaginationRequ return nil } +func (x *ListApplicationsRequest) GetFieldSelector() *apiv1.Selector { + if x != nil { + return x.FieldSelector + } + return nil +} + // ListApplicationsResponse is the response to the ListApplications API. type ListApplicationsResponse struct { state protoimpl.MessageState @@ -342,6 +408,55 @@ func (x *InstallApplicationRequest) GetApplication() *Application { return nil } +// UpdateApplicationRequest is the request to the update application. +type UpdateApplicationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // application to be updated. + Application *Application `protobuf:"bytes,1,opt,name=application,proto3" json:"application,omitempty"` +} + +func (x *UpdateApplicationRequest) Reset() { + *x = UpdateApplicationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateApplicationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateApplicationRequest) ProtoMessage() {} + +func (x *UpdateApplicationRequest) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateApplicationRequest.ProtoReflect.Descriptor instead. +func (*UpdateApplicationRequest) Descriptor() ([]byte, []int) { + return file_public_portworx_platform_targetcluster_application_apiv1_application_proto_rawDescGZIP(), []int{4} +} + +func (x *UpdateApplicationRequest) GetApplication() *Application { + if x != nil { + return x.Application + } + return nil +} + // UninstallApplicationRequest is the request to the UninstallApplication API. type UninstallApplicationRequest struct { state protoimpl.MessageState @@ -357,7 +472,7 @@ type UninstallApplicationRequest struct { func (x *UninstallApplicationRequest) Reset() { *x = UninstallApplicationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[4] + mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -370,7 +485,7 @@ func (x *UninstallApplicationRequest) String() string { func (*UninstallApplicationRequest) ProtoMessage() {} func (x *UninstallApplicationRequest) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[4] + mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -383,7 +498,7 @@ func (x *UninstallApplicationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UninstallApplicationRequest.ProtoReflect.Descriptor instead. func (*UninstallApplicationRequest) Descriptor() ([]byte, []int) { - return file_public_portworx_platform_targetcluster_application_apiv1_application_proto_rawDescGZIP(), []int{4} + return file_public_portworx_platform_targetcluster_application_apiv1_application_proto_rawDescGZIP(), []int{5} } func (x *UninstallApplicationRequest) GetClusterId() string { @@ -418,7 +533,7 @@ type Application struct { func (x *Application) Reset() { *x = Application{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[5] + mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -431,7 +546,7 @@ func (x *Application) String() string { func (*Application) ProtoMessage() {} func (x *Application) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[5] + mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -444,7 +559,7 @@ func (x *Application) ProtoReflect() protoreflect.Message { // Deprecated: Use Application.ProtoReflect.Descriptor instead. func (*Application) Descriptor() ([]byte, []int) { - return file_public_portworx_platform_targetcluster_application_apiv1_application_proto_rawDescGZIP(), []int{5} + return file_public_portworx_platform_targetcluster_application_apiv1_application_proto_rawDescGZIP(), []int{6} } func (x *Application) GetMeta() *apiv1.Meta { @@ -478,12 +593,18 @@ type Config struct { Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"` // desired application chart version. Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + // properties of the application. + // + // Types that are assignable to Properties: + // + // *Config_Pds + Properties isConfig_Properties `protobuf_oneof:"properties"` } func (x *Config) Reset() { *x = Config{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[6] + mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -496,7 +617,7 @@ func (x *Config) String() string { func (*Config) ProtoMessage() {} func (x *Config) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[6] + mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -509,7 +630,7 @@ func (x *Config) ProtoReflect() protoreflect.Message { // Deprecated: Use Config.ProtoReflect.Descriptor instead. func (*Config) Descriptor() ([]byte, []int) { - return file_public_portworx_platform_targetcluster_application_apiv1_application_proto_rawDescGZIP(), []int{6} + return file_public_portworx_platform_targetcluster_application_apiv1_application_proto_rawDescGZIP(), []int{7} } func (x *Config) GetNamespace() string { @@ -526,6 +647,83 @@ func (x *Config) GetVersion() string { return "" } +func (m *Config) GetProperties() isConfig_Properties { + if m != nil { + return m.Properties + } + return nil +} + +func (x *Config) GetPds() *PDSProperties { + if x, ok := x.GetProperties().(*Config_Pds); ok { + return x.Pds + } + return nil +} + +type isConfig_Properties interface { + isConfig_Properties() +} + +type Config_Pds struct { + // pds app properties. + Pds *PDSProperties `protobuf:"bytes,3,opt,name=pds,proto3,oneof"` +} + +func (*Config_Pds) isConfig_Properties() {} + +// PDSProperties are the properties available for PDS. +type PDSProperties struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // global properties for PDS. + // + // (-- api-linter: core::0140::reserved-words=disabled + // aip.dev/not-precedent: We need to do this to be similar to helm config values. --). + Global *PDSProperties_Global `protobuf:"bytes,1,opt,name=global,proto3" json:"global,omitempty"` +} + +func (x *PDSProperties) Reset() { + *x = PDSProperties{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PDSProperties) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PDSProperties) ProtoMessage() {} + +func (x *PDSProperties) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PDSProperties.ProtoReflect.Descriptor instead. +func (*PDSProperties) Descriptor() ([]byte, []int) { + return file_public_portworx_platform_targetcluster_application_apiv1_application_proto_rawDescGZIP(), []int{8} +} + +func (x *PDSProperties) GetGlobal() *PDSProperties_Global { + if x != nil { + return x.Global + } + return nil +} + // Status of the Application. type Status struct { state protoimpl.MessageState @@ -536,12 +734,16 @@ type Status struct { Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` // current phase of the application. Phase ApplicationPhase_Phase `protobuf:"varint,2,opt,name=phase,proto3,enum=public.portworx.platform.targetcluster.application.v1.ApplicationPhase_Phase" json:"phase,omitempty"` + // current health of the application. + Health ApplicationHealth_Health `protobuf:"varint,3,opt,name=health,proto3,enum=public.portworx.platform.targetcluster.application.v1.ApplicationHealth_Health" json:"health,omitempty"` + // conditions of the application. + Conditions map[string]string `protobuf:"bytes,4,rep,name=conditions,proto3" json:"conditions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *Status) Reset() { *x = Status{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[7] + mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -554,7 +756,7 @@ func (x *Status) String() string { func (*Status) ProtoMessage() {} func (x *Status) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[7] + mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -567,7 +769,7 @@ func (x *Status) ProtoReflect() protoreflect.Message { // Deprecated: Use Status.ProtoReflect.Descriptor instead. func (*Status) Descriptor() ([]byte, []int) { - return file_public_portworx_platform_targetcluster_application_apiv1_application_proto_rawDescGZIP(), []int{7} + return file_public_portworx_platform_targetcluster_application_apiv1_application_proto_rawDescGZIP(), []int{9} } func (x *Status) GetVersion() string { @@ -584,6 +786,20 @@ func (x *Status) GetPhase() ApplicationPhase_Phase { return ApplicationPhase_PHASE_UNSPECIFIED } +func (x *Status) GetHealth() ApplicationHealth_Health { + if x != nil { + return x.Health + } + return ApplicationHealth_HEALTH_UNSPECIFIED +} + +func (x *Status) GetConditions() map[string]string { + if x != nil { + return x.Conditions + } + return nil +} + // ApplicationPhase represents the phase of an application in target cluster. type ApplicationPhase struct { state protoimpl.MessageState @@ -594,7 +810,7 @@ type ApplicationPhase struct { func (x *ApplicationPhase) Reset() { *x = ApplicationPhase{} if protoimpl.UnsafeEnabled { - mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[8] + mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -607,7 +823,7 @@ func (x *ApplicationPhase) String() string { func (*ApplicationPhase) ProtoMessage() {} func (x *ApplicationPhase) ProtoReflect() protoreflect.Message { - mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[8] + mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -620,7 +836,96 @@ func (x *ApplicationPhase) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplicationPhase.ProtoReflect.Descriptor instead. func (*ApplicationPhase) Descriptor() ([]byte, []int) { - return file_public_portworx_platform_targetcluster_application_apiv1_application_proto_rawDescGZIP(), []int{8} + return file_public_portworx_platform_targetcluster_application_apiv1_application_proto_rawDescGZIP(), []int{10} +} + +// ApplicationHealth represents the health of an application in target cluster. +type ApplicationHealth struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ApplicationHealth) Reset() { + *x = ApplicationHealth{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ApplicationHealth) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ApplicationHealth) ProtoMessage() {} + +func (x *ApplicationHealth) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ApplicationHealth.ProtoReflect.Descriptor instead. +func (*ApplicationHealth) Descriptor() ([]byte, []int) { + return file_public_portworx_platform_targetcluster_application_apiv1_application_proto_rawDescGZIP(), []int{11} +} + +// Global is the global property block for PDS. +type PDSProperties_Global struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // data_service_tls_enabled enables TLS for dataservices. + // This requires cert-manager to be pre-installed. + DataServiceTlsEnabled bool `protobuf:"varint,1,opt,name=data_service_tls_enabled,json=dataServiceTlsEnabled,proto3" json:"data_service_tls_enabled,omitempty"` +} + +func (x *PDSProperties_Global) Reset() { + *x = PDSProperties_Global{} + if protoimpl.UnsafeEnabled { + mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PDSProperties_Global) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PDSProperties_Global) ProtoMessage() {} + +func (x *PDSProperties_Global) ProtoReflect() protoreflect.Message { + mi := &file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PDSProperties_Global.ProtoReflect.Descriptor instead. +func (*PDSProperties_Global) Descriptor() ([]byte, []int) { + return file_public_portworx_platform_targetcluster_application_apiv1_application_proto_rawDescGZIP(), []int{8, 0} +} + +func (x *PDSProperties_Global) GetDataServiceTlsEnabled() bool { + if x != nil { + return x.DataServiceTlsEnabled + } + return false } var File_public_portworx_platform_targetcluster_application_apiv1_application_proto protoreflect.FileDescriptor @@ -645,158 +950,230 @@ var file_public_portworx_platform_targetcluster_application_apiv1_application_pr 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8f, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, - 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x55, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, - 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, - 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xda, 0x01, 0x0a, 0x18, 0x4c, 0x69, - 0x73, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, + 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, + 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe0, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x55, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, + 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4f, 0x0a, 0x0e, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, + 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0d, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0xda, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, + 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, + 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x56, 0x0a, 0x0a, + 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, + 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x46, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, + 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xa0, 0x01, 0x0a, + 0x19, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x64, 0x0a, 0x0b, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, + 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0x80, 0x01, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x64, 0x0a, 0x0b, + 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x4c, 0x0a, 0x1b, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x41, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x22, 0xf0, 0x01, 0x0a, 0x0b, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x33, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x52, + 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x55, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x55, 0x0a, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x56, - 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x46, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xa0, - 0x01, 0x0a, 0x19, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x64, 0x0a, 0x0b, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x42, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, - 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x4c, 0x0a, 0x1b, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x41, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, - 0xf0, 0x01, 0x0a, 0x0b, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x33, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x12, 0x55, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x55, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x22, 0x4a, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x21, 0x0a, 0x09, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x1d, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x87, - 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x63, 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x4d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x2e, 0x50, 0x68, 0x61, 0x73, - 0x65, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x22, 0x77, 0x0a, 0x10, 0x41, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x22, 0x63, 0x0a, 0x05, - 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, - 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, - 0x4c, 0x4f, 0x59, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x55, 0x43, 0x43, - 0x45, 0x45, 0x44, 0x45, 0x44, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, - 0x44, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, 0x10, - 0x05, 0x32, 0xc8, 0x07, 0x0a, 0x12, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xe8, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4e, 0x2e, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x22, 0xb2, 0x01, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x21, + 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x58, 0x0a, 0x03, 0x70, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4f, 0x2e, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0xfa, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x44, 0x53, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x48, 0x00, 0x52, 0x03, 0x70, 0x64, 0x73, 0x42, 0x0c, 0x0a, 0x0a, 0x70, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0xb7, 0x01, 0x0a, 0x0d, 0x50, 0x44, 0x53, + 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x63, 0x0a, 0x06, 0x67, 0x6c, + 0x6f, 0x62, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x44, 0x53, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x52, 0x06, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x1a, + 0x41, 0x0a, 0x06, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x12, 0x37, 0x0a, 0x18, 0x64, 0x61, 0x74, + 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x6c, 0x73, 0x5f, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x64, 0x61, 0x74, + 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x6c, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x22, 0x9e, 0x03, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x63, 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x4d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x56, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x50, - 0x5a, 0x32, 0x12, 0x30, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x1a, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, - 0x12, 0xec, 0x01, 0x0a, 0x12, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x41, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x70, 0x75, 0x62, 0x6c, + 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x2e, + 0x50, 0x68, 0x61, 0x73, 0x65, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x06, + 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x4f, 0x2e, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x06, 0x68, + 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x6d, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x40, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x3a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x2b, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0xda, 0x01, 0x0a, 0x14, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x41, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x52, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x77, 0x0a, 0x10, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x22, 0x63, 0x0a, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, + 0x12, 0x15, 0x0a, 0x11, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, + 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x49, 0x4e, + 0x47, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x55, 0x43, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, + 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0c, + 0x0a, 0x08, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x22, 0x5e, 0x0a, 0x11, + 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, + 0x68, 0x22, 0x49, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x12, 0x48, + 0x45, 0x41, 0x4c, 0x54, 0x48, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x01, + 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x59, 0x10, 0x02, 0x12, 0x0d, 0x0a, + 0x09, 0x55, 0x4e, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x59, 0x10, 0x03, 0x32, 0xb6, 0x09, 0x0a, + 0x12, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0xe8, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4e, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x56, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x50, 0x5a, 0x32, 0x2a, 0x30, - 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, - 0x2a, 0x1a, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x42, 0xad, 0x01, 0x0a, - 0x39, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x2d, 0x12, 0x2b, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xfa, + 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x4c, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x42, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0x56, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x50, 0x5a, 0x32, 0x12, 0x30, 0x2f, + 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, + 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, + 0x1a, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xec, 0x01, 0x0a, 0x12, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x50, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x10, 0x41, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x5c, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, - 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, - 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, - 0x3b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6c, 0x6c, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, + 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, + 0x3a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2b, 0x2f, + 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, + 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xeb, 0x01, 0x0a, 0x11, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x4f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x42, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x3a, 0x0b, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x2c, 0x2f, 0x63, 0x6f, 0x72, + 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6d, + 0x65, 0x74, 0x61, 0x2e, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xda, 0x01, 0x0a, 0x14, 0x55, 0x6e, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x52, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x56, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x50, 0x5a, 0x32, 0x2a, 0x30, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2a, 0x1a, 0x2f, 0x63, 0x6f, 0x72, 0x65, + 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x42, 0xad, 0x01, 0x0a, 0x39, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x42, 0x10, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x5c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, + 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, + 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -811,46 +1188,61 @@ func file_public_portworx_platform_targetcluster_application_apiv1_application_p return file_public_portworx_platform_targetcluster_application_apiv1_application_proto_rawDescData } -var file_public_portworx_platform_targetcluster_application_apiv1_application_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes = make([]protoimpl.MessageInfo, 9) +var file_public_portworx_platform_targetcluster_application_apiv1_application_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes = make([]protoimpl.MessageInfo, 14) var file_public_portworx_platform_targetcluster_application_apiv1_application_proto_goTypes = []interface{}{ (ApplicationPhase_Phase)(0), // 0: public.portworx.platform.targetcluster.application.v1.ApplicationPhase.Phase - (*ListApplicationsRequest)(nil), // 1: public.portworx.platform.targetcluster.application.v1.ListApplicationsRequest - (*ListApplicationsResponse)(nil), // 2: public.portworx.platform.targetcluster.application.v1.ListApplicationsResponse - (*GetApplicationRequest)(nil), // 3: public.portworx.platform.targetcluster.application.v1.GetApplicationRequest - (*InstallApplicationRequest)(nil), // 4: public.portworx.platform.targetcluster.application.v1.InstallApplicationRequest - (*UninstallApplicationRequest)(nil), // 5: public.portworx.platform.targetcluster.application.v1.UninstallApplicationRequest - (*Application)(nil), // 6: public.portworx.platform.targetcluster.application.v1.Application - (*Config)(nil), // 7: public.portworx.platform.targetcluster.application.v1.Config - (*Status)(nil), // 8: public.portworx.platform.targetcluster.application.v1.Status - (*ApplicationPhase)(nil), // 9: public.portworx.platform.targetcluster.application.v1.ApplicationPhase - (*apiv1.PageBasedPaginationRequest)(nil), // 10: public.portworx.common.v1.PageBasedPaginationRequest - (*apiv1.PageBasedPaginationResponse)(nil), // 11: public.portworx.common.v1.PageBasedPaginationResponse - (*apiv1.Meta)(nil), // 12: public.portworx.common.v1.Meta - (*emptypb.Empty)(nil), // 13: google.protobuf.Empty + (ApplicationHealth_Health)(0), // 1: public.portworx.platform.targetcluster.application.v1.ApplicationHealth.Health + (*ListApplicationsRequest)(nil), // 2: public.portworx.platform.targetcluster.application.v1.ListApplicationsRequest + (*ListApplicationsResponse)(nil), // 3: public.portworx.platform.targetcluster.application.v1.ListApplicationsResponse + (*GetApplicationRequest)(nil), // 4: public.portworx.platform.targetcluster.application.v1.GetApplicationRequest + (*InstallApplicationRequest)(nil), // 5: public.portworx.platform.targetcluster.application.v1.InstallApplicationRequest + (*UpdateApplicationRequest)(nil), // 6: public.portworx.platform.targetcluster.application.v1.UpdateApplicationRequest + (*UninstallApplicationRequest)(nil), // 7: public.portworx.platform.targetcluster.application.v1.UninstallApplicationRequest + (*Application)(nil), // 8: public.portworx.platform.targetcluster.application.v1.Application + (*Config)(nil), // 9: public.portworx.platform.targetcluster.application.v1.Config + (*PDSProperties)(nil), // 10: public.portworx.platform.targetcluster.application.v1.PDSProperties + (*Status)(nil), // 11: public.portworx.platform.targetcluster.application.v1.Status + (*ApplicationPhase)(nil), // 12: public.portworx.platform.targetcluster.application.v1.ApplicationPhase + (*ApplicationHealth)(nil), // 13: public.portworx.platform.targetcluster.application.v1.ApplicationHealth + (*PDSProperties_Global)(nil), // 14: public.portworx.platform.targetcluster.application.v1.PDSProperties.Global + nil, // 15: public.portworx.platform.targetcluster.application.v1.Status.ConditionsEntry + (*apiv1.PageBasedPaginationRequest)(nil), // 16: public.portworx.common.v1.PageBasedPaginationRequest + (*apiv1.Selector)(nil), // 17: public.portworx.common.v1.Selector + (*apiv1.PageBasedPaginationResponse)(nil), // 18: public.portworx.common.v1.PageBasedPaginationResponse + (*apiv1.Meta)(nil), // 19: public.portworx.common.v1.Meta + (*emptypb.Empty)(nil), // 20: google.protobuf.Empty } var file_public_portworx_platform_targetcluster_application_apiv1_application_proto_depIdxs = []int32{ - 10, // 0: public.portworx.platform.targetcluster.application.v1.ListApplicationsRequest.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationRequest - 6, // 1: public.portworx.platform.targetcluster.application.v1.ListApplicationsResponse.applications:type_name -> public.portworx.platform.targetcluster.application.v1.Application - 11, // 2: public.portworx.platform.targetcluster.application.v1.ListApplicationsResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse - 6, // 3: public.portworx.platform.targetcluster.application.v1.InstallApplicationRequest.application:type_name -> public.portworx.platform.targetcluster.application.v1.Application - 12, // 4: public.portworx.platform.targetcluster.application.v1.Application.meta:type_name -> public.portworx.common.v1.Meta - 7, // 5: public.portworx.platform.targetcluster.application.v1.Application.config:type_name -> public.portworx.platform.targetcluster.application.v1.Config - 8, // 6: public.portworx.platform.targetcluster.application.v1.Application.status:type_name -> public.portworx.platform.targetcluster.application.v1.Status - 0, // 7: public.portworx.platform.targetcluster.application.v1.Status.phase:type_name -> public.portworx.platform.targetcluster.application.v1.ApplicationPhase.Phase - 1, // 8: public.portworx.platform.targetcluster.application.v1.ApplicationService.ListApplications:input_type -> public.portworx.platform.targetcluster.application.v1.ListApplicationsRequest - 3, // 9: public.portworx.platform.targetcluster.application.v1.ApplicationService.GetApplication:input_type -> public.portworx.platform.targetcluster.application.v1.GetApplicationRequest - 4, // 10: public.portworx.platform.targetcluster.application.v1.ApplicationService.InstallApplication:input_type -> public.portworx.platform.targetcluster.application.v1.InstallApplicationRequest - 5, // 11: public.portworx.platform.targetcluster.application.v1.ApplicationService.UninstallApplication:input_type -> public.portworx.platform.targetcluster.application.v1.UninstallApplicationRequest - 2, // 12: public.portworx.platform.targetcluster.application.v1.ApplicationService.ListApplications:output_type -> public.portworx.platform.targetcluster.application.v1.ListApplicationsResponse - 6, // 13: public.portworx.platform.targetcluster.application.v1.ApplicationService.GetApplication:output_type -> public.portworx.platform.targetcluster.application.v1.Application - 6, // 14: public.portworx.platform.targetcluster.application.v1.ApplicationService.InstallApplication:output_type -> public.portworx.platform.targetcluster.application.v1.Application - 13, // 15: public.portworx.platform.targetcluster.application.v1.ApplicationService.UninstallApplication:output_type -> google.protobuf.Empty - 12, // [12:16] is the sub-list for method output_type - 8, // [8:12] is the sub-list for method input_type - 8, // [8:8] is the sub-list for extension type_name - 8, // [8:8] is the sub-list for extension extendee - 0, // [0:8] is the sub-list for field type_name + 16, // 0: public.portworx.platform.targetcluster.application.v1.ListApplicationsRequest.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationRequest + 17, // 1: public.portworx.platform.targetcluster.application.v1.ListApplicationsRequest.field_selector:type_name -> public.portworx.common.v1.Selector + 8, // 2: public.portworx.platform.targetcluster.application.v1.ListApplicationsResponse.applications:type_name -> public.portworx.platform.targetcluster.application.v1.Application + 18, // 3: public.portworx.platform.targetcluster.application.v1.ListApplicationsResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse + 8, // 4: public.portworx.platform.targetcluster.application.v1.InstallApplicationRequest.application:type_name -> public.portworx.platform.targetcluster.application.v1.Application + 8, // 5: public.portworx.platform.targetcluster.application.v1.UpdateApplicationRequest.application:type_name -> public.portworx.platform.targetcluster.application.v1.Application + 19, // 6: public.portworx.platform.targetcluster.application.v1.Application.meta:type_name -> public.portworx.common.v1.Meta + 9, // 7: public.portworx.platform.targetcluster.application.v1.Application.config:type_name -> public.portworx.platform.targetcluster.application.v1.Config + 11, // 8: public.portworx.platform.targetcluster.application.v1.Application.status:type_name -> public.portworx.platform.targetcluster.application.v1.Status + 10, // 9: public.portworx.platform.targetcluster.application.v1.Config.pds:type_name -> public.portworx.platform.targetcluster.application.v1.PDSProperties + 14, // 10: public.portworx.platform.targetcluster.application.v1.PDSProperties.global:type_name -> public.portworx.platform.targetcluster.application.v1.PDSProperties.Global + 0, // 11: public.portworx.platform.targetcluster.application.v1.Status.phase:type_name -> public.portworx.platform.targetcluster.application.v1.ApplicationPhase.Phase + 1, // 12: public.portworx.platform.targetcluster.application.v1.Status.health:type_name -> public.portworx.platform.targetcluster.application.v1.ApplicationHealth.Health + 15, // 13: public.portworx.platform.targetcluster.application.v1.Status.conditions:type_name -> public.portworx.platform.targetcluster.application.v1.Status.ConditionsEntry + 2, // 14: public.portworx.platform.targetcluster.application.v1.ApplicationService.ListApplications:input_type -> public.portworx.platform.targetcluster.application.v1.ListApplicationsRequest + 4, // 15: public.portworx.platform.targetcluster.application.v1.ApplicationService.GetApplication:input_type -> public.portworx.platform.targetcluster.application.v1.GetApplicationRequest + 5, // 16: public.portworx.platform.targetcluster.application.v1.ApplicationService.InstallApplication:input_type -> public.portworx.platform.targetcluster.application.v1.InstallApplicationRequest + 6, // 17: public.portworx.platform.targetcluster.application.v1.ApplicationService.UpdateApplication:input_type -> public.portworx.platform.targetcluster.application.v1.UpdateApplicationRequest + 7, // 18: public.portworx.platform.targetcluster.application.v1.ApplicationService.UninstallApplication:input_type -> public.portworx.platform.targetcluster.application.v1.UninstallApplicationRequest + 3, // 19: public.portworx.platform.targetcluster.application.v1.ApplicationService.ListApplications:output_type -> public.portworx.platform.targetcluster.application.v1.ListApplicationsResponse + 8, // 20: public.portworx.platform.targetcluster.application.v1.ApplicationService.GetApplication:output_type -> public.portworx.platform.targetcluster.application.v1.Application + 8, // 21: public.portworx.platform.targetcluster.application.v1.ApplicationService.InstallApplication:output_type -> public.portworx.platform.targetcluster.application.v1.Application + 8, // 22: public.portworx.platform.targetcluster.application.v1.ApplicationService.UpdateApplication:output_type -> public.portworx.platform.targetcluster.application.v1.Application + 20, // 23: public.portworx.platform.targetcluster.application.v1.ApplicationService.UninstallApplication:output_type -> google.protobuf.Empty + 19, // [19:24] is the sub-list for method output_type + 14, // [14:19] is the sub-list for method input_type + 14, // [14:14] is the sub-list for extension type_name + 14, // [14:14] is the sub-list for extension extendee + 0, // [0:14] is the sub-list for field type_name } func init() { file_public_portworx_platform_targetcluster_application_apiv1_application_proto_init() } @@ -908,7 +1300,7 @@ func file_public_portworx_platform_targetcluster_application_apiv1_application_p } } file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UninstallApplicationRequest); i { + switch v := v.(*UpdateApplicationRequest); i { case 0: return &v.state case 1: @@ -920,7 +1312,7 @@ func file_public_portworx_platform_targetcluster_application_apiv1_application_p } } file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Application); i { + switch v := v.(*UninstallApplicationRequest); i { case 0: return &v.state case 1: @@ -932,7 +1324,7 @@ func file_public_portworx_platform_targetcluster_application_apiv1_application_p } } file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Config); i { + switch v := v.(*Application); i { case 0: return &v.state case 1: @@ -944,7 +1336,7 @@ func file_public_portworx_platform_targetcluster_application_apiv1_application_p } } file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Status); i { + switch v := v.(*Config); i { case 0: return &v.state case 1: @@ -956,6 +1348,30 @@ func file_public_portworx_platform_targetcluster_application_apiv1_application_p } } file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PDSProperties); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Status); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ApplicationPhase); i { case 0: return &v.state @@ -967,14 +1383,41 @@ func file_public_portworx_platform_targetcluster_application_apiv1_application_p return nil } } + file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ApplicationHealth); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PDSProperties_Global); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_public_portworx_platform_targetcluster_application_apiv1_application_proto_msgTypes[7].OneofWrappers = []interface{}{ + (*Config_Pds)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_public_portworx_platform_targetcluster_application_apiv1_application_proto_rawDesc, - NumEnums: 1, - NumMessages: 9, + NumEnums: 2, + NumMessages: 14, NumExtensions: 0, NumServices: 1, }, diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application.pb.gw.go b/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application.pb.gw.go index 0141bab80..79ca781c8 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application.pb.gw.go +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application.pb.gw.go @@ -303,6 +303,66 @@ func local_request_ApplicationService_InstallApplication_0(ctx context.Context, } +func request_ApplicationService_UpdateApplication_0(ctx context.Context, marshaler runtime.Marshaler, client ApplicationServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateApplicationRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Application); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["application.meta.uid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "application.meta.uid") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "application.meta.uid", val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "application.meta.uid", err) + } + + msg, err := client.UpdateApplication(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ApplicationService_UpdateApplication_0(ctx context.Context, marshaler runtime.Marshaler, server ApplicationServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateApplicationRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Application); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["application.meta.uid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "application.meta.uid") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "application.meta.uid", val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "application.meta.uid", err) + } + + msg, err := server.UpdateApplication(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_ApplicationService_UninstallApplication_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -551,6 +611,31 @@ func RegisterApplicationServiceHandlerServer(ctx context.Context, mux *runtime.S }) + mux.Handle("PUT", pattern_ApplicationService_UpdateApplication_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.platform.targetcluster.application.v1.ApplicationService/UpdateApplication", runtime.WithHTTPPathPattern("/core/v1/applications/{application.meta.uid}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ApplicationService_UpdateApplication_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ApplicationService_UpdateApplication_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("DELETE", pattern_ApplicationService_UninstallApplication_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -730,6 +815,28 @@ func RegisterApplicationServiceHandlerClient(ctx context.Context, mux *runtime.S }) + mux.Handle("PUT", pattern_ApplicationService_UpdateApplication_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.platform.targetcluster.application.v1.ApplicationService/UpdateApplication", runtime.WithHTTPPathPattern("/core/v1/applications/{application.meta.uid}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ApplicationService_UpdateApplication_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ApplicationService_UpdateApplication_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("DELETE", pattern_ApplicationService_UninstallApplication_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -786,6 +893,8 @@ var ( pattern_ApplicationService_InstallApplication_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"core", "v1", "clusters", "cluster_id", "applications"}, "")) + pattern_ApplicationService_UpdateApplication_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"core", "v1", "applications", "application.meta.uid"}, "")) + pattern_ApplicationService_UninstallApplication_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"core", "v1", "applications", "id"}, "")) pattern_ApplicationService_UninstallApplication_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"core", "v1", "clusters", "cluster_id", "applications", "id"}, "")) @@ -800,6 +909,8 @@ var ( forward_ApplicationService_InstallApplication_0 = runtime.ForwardResponseMessage + forward_ApplicationService_UpdateApplication_0 = runtime.ForwardResponseMessage + forward_ApplicationService_UninstallApplication_0 = runtime.ForwardResponseMessage forward_ApplicationService_UninstallApplication_1 = runtime.ForwardResponseMessage diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application.pb.md b/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application.pb.md index cdc37a024..7a25b9a83 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application.pb.md +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application.pb.md @@ -13,14 +13,19 @@ - Messages - [Application](#application) + - [ApplicationHealth](#applicationhealth) - [ApplicationPhase](#applicationphase) - [Config](#config) - [GetApplicationRequest](#getapplicationrequest) - [InstallApplicationRequest](#installapplicationrequest) - [ListApplicationsRequest](#listapplicationsrequest) - [ListApplicationsResponse](#listapplicationsresponse) + - [PDSProperties](#pdsproperties) + - [PDSProperties.Global](#pdspropertiesglobal) - [Status](#status) + - [Status.ConditionsEntry](#statusconditionsentry) - [UninstallApplicationRequest](#uninstallapplicationrequest) + - [UpdateApplicationRequest](#updateapplicationrequest) @@ -51,6 +56,12 @@ GetApplication API returns the info about application with given id. [Application](#application) InstallApplication API installs specified application on the target cluster. +### UpdateApplication {#methodpublicportworxplatformtargetclusterapplicationv1applicationserviceupdateapplication} + +> **rpc** UpdateApplication([UpdateApplicationRequest](#updateapplicationrequest)) + [Application](#application) + +UpdateApplication API updates specified application on the target cluster. ### UninstallApplication {#methodpublicportworxplatformtargetclusterapplicationv1applicationserviceuninstallapplication} > **rpc** UninstallApplication([UninstallApplicationRequest](#uninstallapplicationrequest)) @@ -80,6 +91,12 @@ for e.g. PXE, BaaS, etc. +### ApplicationHealth {#applicationhealth} +ApplicationHealth represents the health of an application in target cluster. + + + + ### ApplicationPhase {#applicationphase} ApplicationPhase represents the phase of an application in target cluster. @@ -94,6 +111,7 @@ Desired configuration of the Application. | ----- | ---- | ----------- | | namespace | [ string](#string) | namespace in target cluster where application will be installed. | | version | [ string](#string) | desired application chart version. | +| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) properties.pds | [ PDSProperties](#pdsproperties) | pds app properties. | @@ -129,7 +147,8 @@ ListApplicationsRequest is the request to the ListApplications API. | Field | Type | Description | | ----- | ---- | ----------- | | cluster_id | [ string](#string) | Unique identifier of the cluster whose details needs to be fetched. | -| pagination | [ public.portworx.common.v1.PageBasedPaginationRequest](#publicportworxcommonv1pagebasedpaginationrequest) | Pagination parameters for listing target clusters. | +| pagination | [ public.portworx.common.v1.PageBasedPaginationRequest](#publicportworxcommonv1pagebasedpaginationrequest) | Pagination parameters for listing applications. | +| field_selector | [ public.portworx.common.v1.Selector](#publicportworxcommonv1selector) | Field selector is used to filter applications based on the fields in application proto message. | @@ -146,6 +165,28 @@ ListApplicationsResponse is the response to the ListApplications API. +### PDSProperties {#pdsproperties} +PDSProperties are the properties available for PDS. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| global | [ PDSProperties.Global](#pdspropertiesglobal) | global properties for PDS. (-- api-linter: core::0140::reserved-words=disabled aip.dev/not-precedent: We need to do this to be similar to helm config values. --). | + + + + +### PDSProperties.Global {#pdspropertiesglobal} +Global is the global property block for PDS. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| data_service_tls_enabled | [ bool](#bool) | data_service_tls_enabled enables TLS for dataservices. This requires cert-manager to be pre-installed. | + + + + ### Status {#status} Status of the Application. @@ -154,6 +195,20 @@ Status of the Application. | ----- | ---- | ----------- | | version | [ string](#string) | current application chart version. | | phase | [ ApplicationPhase.Phase](#applicationphasephase) | current phase of the application. | +| health | [ ApplicationHealth.Health](#applicationhealthhealth) | current health of the application. | +| conditions | [map Status.ConditionsEntry](#statusconditionsentry) | conditions of the application. | + + + + +### Status.ConditionsEntry {#statusconditionsentry} + + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| key | [ string](#string) | none | +| value | [ string](#string) | none | @@ -168,11 +223,35 @@ UninstallApplicationRequest is the request to the UninstallApplication API. | id | [ string](#string) | unique identifier of the application. | + + +### UpdateApplicationRequest {#updateapplicationrequest} +UpdateApplicationRequest is the request to the update application. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| application | [ Application](#application) | application to be updated. | + + ## Enums +### ApplicationHealth.Health {#applicationhealthhealth} +Health determines health of an application. + +| Name | Number | Description | +| ---- | ------ | ----------- | +| HEALTH_UNSPECIFIED | 0 | Must be set in the proto file; ignore. | +| UNKNOWN | 1 | Application health is unknown. | +| HEALTHY | 2 | Application is healthy. | +| UNHEALTHY | 3 | Application is unhealthy. | + + + + ### ApplicationPhase.Phase {#applicationphasephase} AppStatus determines status of an application. diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application.proto b/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application.proto index 326a5af0c..456278c72 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application.proto +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application.proto @@ -22,6 +22,7 @@ import "google/api/annotations.proto"; import "google/api/field_behavior.proto"; import "public/portworx/common/apiv1/meta.proto"; import "public/portworx/common/apiv1/pagination.proto"; +import "public/portworx/common/apiv1/selector.proto"; option go_package = "github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1;application"; option java_multiple_files = true; @@ -59,6 +60,15 @@ service ApplicationService { }; } + // UpdateApplication API updates specified application on the target cluster. + rpc UpdateApplication(UpdateApplicationRequest) + returns (Application) { + option(google.api.http) = { + put: "/core/v1/applications/{application.meta.uid}" + body: "application" + }; + } + // (-- api-linter: core::0136::http-method=disabled // aip.dev/not-precedent: We need to do this because // delete method is required for deleting resource. --) @@ -72,16 +82,16 @@ service ApplicationService { } }; } - - } // ListApplicationsRequest is the request to the ListApplications API. message ListApplicationsRequest { // Unique identifier of the cluster whose details needs to be fetched. string cluster_id = 1; - // Pagination parameters for listing target clusters. + // Pagination parameters for listing applications. public.portworx.common.v1.PageBasedPaginationRequest pagination = 2; + // Field selector is used to filter applications based on the fields in application proto message. + public.portworx.common.v1.Selector field_selector = 3 [(google.api.field_behavior) = OPTIONAL]; } // ListApplicationsResponse is the response to the ListApplications API. @@ -113,6 +123,12 @@ message InstallApplicationRequest { Application application = 2; } +// UpdateApplicationRequest is the request to the update application. +message UpdateApplicationRequest { + // application to be updated. + Application application = 1; +} + // UninstallApplicationRequest is the request to the UninstallApplication API. message UninstallApplicationRequest { // Unique identifier of the cluster whose details needs to be fetched. @@ -140,6 +156,26 @@ message Config { string namespace = 1[(google.api.field_behavior) = OUTPUT_ONLY]; // desired application chart version. string version = 2[(google.api.field_behavior) = OUTPUT_ONLY]; + // properties of the application. + oneof properties { + // pds app properties. + PDSProperties pds = 3; + } +} + +// PDSProperties are the properties available for PDS. +message PDSProperties { + // Global is the global property block for PDS. + message Global { + // data_service_tls_enabled enables TLS for dataservices. + // This requires cert-manager to be pre-installed. + bool data_service_tls_enabled = 1; + } + + // global properties for PDS. + // (-- api-linter: core::0140::reserved-words=disabled + // aip.dev/not-precedent: We need to do this to be similar to helm config values. --). + Global global = 1; } // Status of the Application. @@ -148,6 +184,10 @@ message Status { string version = 1; // current phase of the application. ApplicationPhase.Phase phase = 2; + // current health of the application. + ApplicationHealth.Health health = 3; + // conditions of the application. + map conditions = 4; } // ApplicationPhase represents the phase of an application in target cluster. @@ -168,3 +208,18 @@ message ApplicationPhase { DELETING = 5; } } + +// ApplicationHealth represents the health of an application in target cluster. +message ApplicationHealth { + // Health determines health of an application. + enum Health { + // Must be set in the proto file; ignore. + HEALTH_UNSPECIFIED = 0; + // Application health is unknown. + UNKNOWN = 1; + // Application is healthy. + HEALTHY = 2; + // Application is unhealthy. + UNHEALTHY = 3; + } +} \ No newline at end of file diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application.swagger.json b/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application.swagger.json index 6814c0c02..b80116045 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application.swagger.json +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application.swagger.json @@ -10,6 +10,124 @@ } ], "paths": { + "/core/v1/applications/{application.meta.uid}": { + "put": { + "summary": "UpdateApplication API updates specified application on the target cluster.", + "operationId": "ApplicationService_UpdateApplication", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v1Application" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/googlerpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "application.meta.uid", + "description": "UID of the resource of the format -.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "meta": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the resource." + }, + "description": { + "type": "string", + "description": "Description of the resource." + }, + "resourceVersion": { + "type": "string", + "description": "A string that identifies the version of this object that can be used by clients to determine when objects have changed.\nThis value must be passed unmodified back to the server by the client." + }, + "createTime": { + "type": "string", + "format": "date-time", + "description": "Creation time of the object.", + "readOnly": true + }, + "updateTime": { + "type": "string", + "format": "date-time", + "description": "Update time of the object.", + "readOnly": true + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Labels to apply to the object." + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Annotations for the object." + }, + "parentReference": { + "$ref": "#/components/schemas/v1Reference" + }, + "resourceNames": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Resource names holds the mapping between the resource IDs and its display name which will be consumed by the frontend.", + "readOnly": true + } + }, + "description": "Metadata of the application(Resource Meta).", + "title": "Metadata of the application(Resource Meta)." + }, + "config": { + "$ref": "#/components/schemas/v1Config" + }, + "status": { + "$ref": "#/components/schemas/applicationv1Status" + } + }, + "title": "application to be updated." + } + } + }, + "description": "application to be updated.", + "required": true + }, + "tags": [ + "ApplicationService" + ] + } + }, "/core/v1/applications/{id}": { "get": { "summary": "GetApplication API returns the info about application with given id.", @@ -328,6 +446,17 @@ }, "components": { "schemas": { + "ApplicationHealthHealth": { + "type": "string", + "enum": [ + "HEALTH_UNSPECIFIED", + "UNKNOWN", + "HEALTHY", + "UNHEALTHY" + ], + "default": "HEALTH_UNSPECIFIED", + "description": "Health determines health of an application.\n\n - HEALTH_UNSPECIFIED: Must be set in the proto file; ignore.\n - UNKNOWN: Application health is unknown.\n - HEALTHY: Application is healthy.\n - UNHEALTHY: Application is unhealthy." + }, "ApplicationPhasePhase": { "type": "string", "enum": [ @@ -341,6 +470,47 @@ "default": "PHASE_UNSPECIFIED", "description": "AppStatus determines status of an application.\n\n - PHASE_UNSPECIFIED: Must be set in the proto file; ignore.\n - PENDING: Application yet to be installed.\n - DEPLOYING: Application deployment on the target cluster in progress.\n - SUCCEEDED: Installed successfully.\n - FAILED: Application failed to install.\n - DELETING: Application is being deleted." }, + "PDSPropertiesGlobal": { + "type": "object", + "properties": { + "dataServiceTlsEnabled": { + "type": "boolean", + "description": "data_service_tls_enabled enables TLS for dataservices.\nThis requires cert-manager to be pre-installed." + } + }, + "description": "Global is the global property block for PDS." + }, + "SelectorFilter": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "Key of key,value pair against which filtering needs to be performs." + }, + "op": { + "$ref": "#/components/schemas/SelectorOperator" + }, + "values": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Value of key,value pair against which filtering needs to be performs if operator is EXIST, value should be an empty array." + } + }, + "description": "Filter for a given key." + }, + "SelectorOperator": { + "type": "string", + "enum": [ + "OPERATOR_UNSPECIFIED", + "IN", + "NOT_IN", + "LIKE" + ], + "default": "OPERATOR_UNSPECIFIED", + "description": "Operator specifies the relationship between the provided (key,value) pairs in the response.\n\n - OPERATOR_UNSPECIFIED: Unspecified, do not use.\n - IN: IN specifies that the key should be associated with atleast 1 of the element in value list.\n - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list.\n - LIKE: LIKE specified that the key should be of a specified pattern" + }, "applicationv1Status": { "type": "object", "properties": { @@ -350,6 +520,16 @@ }, "phase": { "$ref": "#/components/schemas/ApplicationPhasePhase" + }, + "health": { + "$ref": "#/components/schemas/ApplicationHealthHealth" + }, + "conditions": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "conditions of the application." } }, "description": "Status of the Application." @@ -408,6 +588,9 @@ "type": "string", "description": "desired application chart version.", "readOnly": true + }, + "pds": { + "$ref": "#/components/schemas/v1PDSProperties" } }, "description": "Desired configuration of the Application." @@ -487,6 +670,15 @@ }, "description": "Meta holds general resource metadata." }, + "v1PDSProperties": { + "type": "object", + "properties": { + "global": { + "$ref": "#/components/schemas/PDSPropertiesGlobal" + } + }, + "description": "PDSProperties are the properties available for PDS." + }, "v1PageBasedPaginationRequest": { "type": "object", "properties": { @@ -556,6 +748,19 @@ } }, "description": "Reference identifies the resource type, version of the uid and the resource." + }, + "v1Selector": { + "type": "object", + "properties": { + "filters": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SelectorFilter" + }, + "description": "FilterList is the list of all filters that should be applied." + } + }, + "description": "Selector is used to query resources using the associated labels or field names." } } } diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application_grpc.pb.go b/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application_grpc.pb.go index 5ef16456b..83b4f964f 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application_grpc.pb.go +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/targetcluster/application/apiv1/application_grpc.pb.go @@ -38,6 +38,7 @@ const ( ApplicationService_ListApplications_FullMethodName = "/public.portworx.platform.targetcluster.application.v1.ApplicationService/ListApplications" ApplicationService_GetApplication_FullMethodName = "/public.portworx.platform.targetcluster.application.v1.ApplicationService/GetApplication" ApplicationService_InstallApplication_FullMethodName = "/public.portworx.platform.targetcluster.application.v1.ApplicationService/InstallApplication" + ApplicationService_UpdateApplication_FullMethodName = "/public.portworx.platform.targetcluster.application.v1.ApplicationService/UpdateApplication" ApplicationService_UninstallApplication_FullMethodName = "/public.portworx.platform.targetcluster.application.v1.ApplicationService/UninstallApplication" ) @@ -51,6 +52,8 @@ type ApplicationServiceClient interface { GetApplication(ctx context.Context, in *GetApplicationRequest, opts ...grpc.CallOption) (*Application, error) // InstallApplication API installs specified application on the target cluster. InstallApplication(ctx context.Context, in *InstallApplicationRequest, opts ...grpc.CallOption) (*Application, error) + // UpdateApplication API updates specified application on the target cluster. + UpdateApplication(ctx context.Context, in *UpdateApplicationRequest, opts ...grpc.CallOption) (*Application, error) // (-- api-linter: core::0136::http-method=disabled // // aip.dev/not-precedent: We need to do this because @@ -94,6 +97,15 @@ func (c *applicationServiceClient) InstallApplication(ctx context.Context, in *I return out, nil } +func (c *applicationServiceClient) UpdateApplication(ctx context.Context, in *UpdateApplicationRequest, opts ...grpc.CallOption) (*Application, error) { + out := new(Application) + err := c.cc.Invoke(ctx, ApplicationService_UpdateApplication_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *applicationServiceClient) UninstallApplication(ctx context.Context, in *UninstallApplicationRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { out := new(emptypb.Empty) err := c.cc.Invoke(ctx, ApplicationService_UninstallApplication_FullMethodName, in, out, opts...) @@ -113,6 +125,8 @@ type ApplicationServiceServer interface { GetApplication(context.Context, *GetApplicationRequest) (*Application, error) // InstallApplication API installs specified application on the target cluster. InstallApplication(context.Context, *InstallApplicationRequest) (*Application, error) + // UpdateApplication API updates specified application on the target cluster. + UpdateApplication(context.Context, *UpdateApplicationRequest) (*Application, error) // (-- api-linter: core::0136::http-method=disabled // // aip.dev/not-precedent: We need to do this because @@ -135,6 +149,9 @@ func (UnimplementedApplicationServiceServer) GetApplication(context.Context, *Ge func (UnimplementedApplicationServiceServer) InstallApplication(context.Context, *InstallApplicationRequest) (*Application, error) { return nil, status.Errorf(codes.Unimplemented, "method InstallApplication not implemented") } +func (UnimplementedApplicationServiceServer) UpdateApplication(context.Context, *UpdateApplicationRequest) (*Application, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateApplication not implemented") +} func (UnimplementedApplicationServiceServer) UninstallApplication(context.Context, *UninstallApplicationRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method UninstallApplication not implemented") } @@ -205,6 +222,24 @@ func _ApplicationService_InstallApplication_Handler(srv interface{}, ctx context return interceptor(ctx, in, info, handler) } +func _ApplicationService_UpdateApplication_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateApplicationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ApplicationServiceServer).UpdateApplication(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ApplicationService_UpdateApplication_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ApplicationServiceServer).UpdateApplication(ctx, req.(*UpdateApplicationRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _ApplicationService_UninstallApplication_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(UninstallApplicationRequest) if err := dec(in); err != nil { @@ -242,6 +277,10 @@ var ApplicationService_ServiceDesc = grpc.ServiceDesc{ MethodName: "InstallApplication", Handler: _ApplicationService_InstallApplication_Handler, }, + { + MethodName: "UpdateApplication", + Handler: _ApplicationService_UpdateApplication_Handler, + }, { MethodName: "UninstallApplication", Handler: _ApplicationService_UninstallApplication_Handler, diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template.pb.go b/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template.pb.go index 0eaa6e160..498a5f291 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template.pb.go +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template.pb.go @@ -504,20 +504,18 @@ func (x *ListTemplatesRequest) GetSort() *apiv1.Sort { return nil } -// Request to update a template instance. -type UpdateTemplateRequest struct { +// Request to delete a template instance. +type DeleteTemplateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // ID of the template to be updated. + // ID of the template instance. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // Desired template configuration. - Template *Template `protobuf:"bytes,2,opt,name=template,proto3" json:"template,omitempty"` } -func (x *UpdateTemplateRequest) Reset() { - *x = UpdateTemplateRequest{} +func (x *DeleteTemplateRequest) Reset() { + *x = DeleteTemplateRequest{} if protoimpl.UnsafeEnabled { mi := &file_public_portworx_platform_template_apiv1_template_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -525,13 +523,13 @@ func (x *UpdateTemplateRequest) Reset() { } } -func (x *UpdateTemplateRequest) String() string { +func (x *DeleteTemplateRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdateTemplateRequest) ProtoMessage() {} +func (*DeleteTemplateRequest) ProtoMessage() {} -func (x *UpdateTemplateRequest) ProtoReflect() protoreflect.Message { +func (x *DeleteTemplateRequest) ProtoReflect() protoreflect.Message { mi := &file_public_portworx_platform_template_apiv1_template_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -543,37 +541,35 @@ func (x *UpdateTemplateRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdateTemplateRequest.ProtoReflect.Descriptor instead. -func (*UpdateTemplateRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use DeleteTemplateRequest.ProtoReflect.Descriptor instead. +func (*DeleteTemplateRequest) Descriptor() ([]byte, []int) { return file_public_portworx_platform_template_apiv1_template_proto_rawDescGZIP(), []int{6} } -func (x *UpdateTemplateRequest) GetId() string { +func (x *DeleteTemplateRequest) GetId() string { if x != nil { return x.Id } return "" } -func (x *UpdateTemplateRequest) GetTemplate() *Template { - if x != nil { - return x.Template - } - return nil -} - -// Request to delete a template instance. -type DeleteTemplateRequest struct { +// Response of list templates. +type ListTemplatesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // ID of the template instance. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The list of templates scoped to a tenant. + Templates []*Template `protobuf:"bytes,1,rep,name=templates,proto3" json:"templates,omitempty"` + // Pagination metadata for this response. + // (-- api-linter: core::0132::response-unknown-fields=disabled + // + // aip.dev/not-precedent: We need this field for pagination. --) + Pagination *apiv1.PageBasedPaginationResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (x *DeleteTemplateRequest) Reset() { - *x = DeleteTemplateRequest{} +func (x *ListTemplatesResponse) Reset() { + *x = ListTemplatesResponse{} if protoimpl.UnsafeEnabled { mi := &file_public_portworx_platform_template_apiv1_template_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -581,13 +577,13 @@ func (x *DeleteTemplateRequest) Reset() { } } -func (x *DeleteTemplateRequest) String() string { +func (x *ListTemplatesResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DeleteTemplateRequest) ProtoMessage() {} +func (*ListTemplatesResponse) ProtoMessage() {} -func (x *DeleteTemplateRequest) ProtoReflect() protoreflect.Message { +func (x *ListTemplatesResponse) ProtoReflect() protoreflect.Message { mi := &file_public_portworx_platform_template_apiv1_template_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -599,35 +595,37 @@ func (x *DeleteTemplateRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DeleteTemplateRequest.ProtoReflect.Descriptor instead. -func (*DeleteTemplateRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use ListTemplatesResponse.ProtoReflect.Descriptor instead. +func (*ListTemplatesResponse) Descriptor() ([]byte, []int) { return file_public_portworx_platform_template_apiv1_template_proto_rawDescGZIP(), []int{7} } -func (x *DeleteTemplateRequest) GetId() string { +func (x *ListTemplatesResponse) GetTemplates() []*Template { if x != nil { - return x.Id + return x.Templates } - return "" + return nil } -// Response of list templates. -type ListTemplatesResponse struct { +func (x *ListTemplatesResponse) GetPagination() *apiv1.PageBasedPaginationResponse { + if x != nil { + return x.Pagination + } + return nil +} + +// Request to update a template instance. +type UpdateTemplateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The list of templates scoped to a tenant. - Templates []*Template `protobuf:"bytes,1,rep,name=templates,proto3" json:"templates,omitempty"` - // Pagination metadata for this response. - // (-- api-linter: core::0132::response-unknown-fields=disabled - // - // aip.dev/not-precedent: We need this field for pagination. --) - Pagination *apiv1.PageBasedPaginationResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` + // Desired template configuration. + Template *Template `protobuf:"bytes,1,opt,name=template,proto3" json:"template,omitempty"` } -func (x *ListTemplatesResponse) Reset() { - *x = ListTemplatesResponse{} +func (x *UpdateTemplateRequest) Reset() { + *x = UpdateTemplateRequest{} if protoimpl.UnsafeEnabled { mi := &file_public_portworx_platform_template_apiv1_template_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -635,13 +633,13 @@ func (x *ListTemplatesResponse) Reset() { } } -func (x *ListTemplatesResponse) String() string { +func (x *UpdateTemplateRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListTemplatesResponse) ProtoMessage() {} +func (*UpdateTemplateRequest) ProtoMessage() {} -func (x *ListTemplatesResponse) ProtoReflect() protoreflect.Message { +func (x *UpdateTemplateRequest) ProtoReflect() protoreflect.Message { mi := &file_public_portworx_platform_template_apiv1_template_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -653,21 +651,14 @@ func (x *ListTemplatesResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListTemplatesResponse.ProtoReflect.Descriptor instead. -func (*ListTemplatesResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use UpdateTemplateRequest.ProtoReflect.Descriptor instead. +func (*UpdateTemplateRequest) Descriptor() ([]byte, []int) { return file_public_portworx_platform_template_apiv1_template_proto_rawDescGZIP(), []int{8} } -func (x *ListTemplatesResponse) GetTemplates() []*Template { - if x != nil { - return x.Templates - } - return nil -} - -func (x *ListTemplatesResponse) GetPagination() *apiv1.PageBasedPaginationResponse { +func (x *UpdateTemplateRequest) GetTemplate() *Template { if x != nil { - return x.Pagination + return x.Template } return nil } @@ -778,29 +769,28 @@ var file_public_portworx_platform_template_apiv1_template_proto_rawDesc = []byte 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x73, - 0x6f, 0x72, 0x74, 0x22, 0x73, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, + 0x6f, 0x72, 0x74, 0x22, 0x27, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4a, 0x0a, 0x08, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, - 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x08, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x27, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x22, 0xbd, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x09, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, - 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x09, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x0a, 0x70, 0x61, 0x67, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, - 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x32, 0x93, 0x07, 0x0a, 0x0f, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xbd, 0x01, 0x0a, + 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, + 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x63, 0x0a, 0x15, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x32, 0x9b, 0x07, 0x0a, 0x0f, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x98, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x38, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, @@ -822,7 +812,7 @@ var file_public_portworx_platform_template_apiv1_template_proto_rawDesc = []byte 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x3a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x26, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0xa8, 0x01, 0x0a, 0x0e, 0x55, + 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0xb0, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, @@ -830,43 +820,43 @@ var file_public_portworx_platform_template_apiv1_template_proto_rawDesc = []byte 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x23, 0x3a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x1a, 0x17, 0x2f, 0x63, - 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x3a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x6c, 0x92, 0x41, 0x2f, 0x12, 0x2d, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x41, 0x50, 0x49, 0x20, - 0x6c, 0x69, 0x73, 0x74, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x5a, 0x1e, 0x3a, 0x01, 0x2a, 0x22, - 0x19, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x3a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x12, 0x2f, 0x63, 0x6f, 0x72, - 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x86, - 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x12, 0x3b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, - 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, - 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x42, 0x85, 0x01, 0x0a, 0x28, 0x63, 0x6f, 0x6d, 0x2e, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0d, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xf6, 0x01, + 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, + 0x3a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6c, 0x92, 0x41, 0x2f, 0x12, 0x2d, 0x4c, + 0x69, 0x73, 0x74, 0x20, 0x41, 0x50, 0x49, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x20, 0x61, 0x6c, + 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x34, 0x5a, 0x1e, 0x3a, 0x01, 0x2a, 0x22, 0x19, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, + 0x31, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x3a, 0x73, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x12, 0x12, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x86, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x2e, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1f, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, + 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x42, + 0x85, 0x01, 0x0a, 0x28, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0d, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, + 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, + 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -891,9 +881,9 @@ var file_public_portworx_platform_template_apiv1_template_proto_goTypes = []inte (*CreateTemplateRequest)(nil), // 4: public.portworx.platform.template.v1.CreateTemplateRequest (*GetTemplateRequest)(nil), // 5: public.portworx.platform.template.v1.GetTemplateRequest (*ListTemplatesRequest)(nil), // 6: public.portworx.platform.template.v1.ListTemplatesRequest - (*UpdateTemplateRequest)(nil), // 7: public.portworx.platform.template.v1.UpdateTemplateRequest - (*DeleteTemplateRequest)(nil), // 8: public.portworx.platform.template.v1.DeleteTemplateRequest - (*ListTemplatesResponse)(nil), // 9: public.portworx.platform.template.v1.ListTemplatesResponse + (*DeleteTemplateRequest)(nil), // 7: public.portworx.platform.template.v1.DeleteTemplateRequest + (*ListTemplatesResponse)(nil), // 8: public.portworx.platform.template.v1.ListTemplatesResponse + (*UpdateTemplateRequest)(nil), // 9: public.portworx.platform.template.v1.UpdateTemplateRequest (*apiv1.Meta)(nil), // 10: public.portworx.common.v1.Meta (*structpb.Struct)(nil), // 11: google.protobuf.Struct (*apiv1.PageBasedPaginationRequest)(nil), // 12: public.portworx.common.v1.PageBasedPaginationRequest @@ -917,18 +907,18 @@ var file_public_portworx_platform_template_apiv1_template_proto_depIdxs = []int3 14, // 9: public.portworx.platform.template.v1.ListTemplatesRequest.infra_resource_selector:type_name -> public.portworx.common.v1.ResourceSelector 15, // 10: public.portworx.platform.template.v1.ListTemplatesRequest.resp_data:type_name -> public.portworx.common.v1.RespData 16, // 11: public.portworx.platform.template.v1.ListTemplatesRequest.sort:type_name -> public.portworx.common.v1.Sort - 1, // 12: public.portworx.platform.template.v1.UpdateTemplateRequest.template:type_name -> public.portworx.platform.template.v1.Template - 1, // 13: public.portworx.platform.template.v1.ListTemplatesResponse.templates:type_name -> public.portworx.platform.template.v1.Template - 17, // 14: public.portworx.platform.template.v1.ListTemplatesResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse + 1, // 12: public.portworx.platform.template.v1.ListTemplatesResponse.templates:type_name -> public.portworx.platform.template.v1.Template + 17, // 13: public.portworx.platform.template.v1.ListTemplatesResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse + 1, // 14: public.portworx.platform.template.v1.UpdateTemplateRequest.template:type_name -> public.portworx.platform.template.v1.Template 5, // 15: public.portworx.platform.template.v1.TemplateService.GetTemplate:input_type -> public.portworx.platform.template.v1.GetTemplateRequest 4, // 16: public.portworx.platform.template.v1.TemplateService.CreateTemplate:input_type -> public.portworx.platform.template.v1.CreateTemplateRequest - 7, // 17: public.portworx.platform.template.v1.TemplateService.UpdateTemplate:input_type -> public.portworx.platform.template.v1.UpdateTemplateRequest + 9, // 17: public.portworx.platform.template.v1.TemplateService.UpdateTemplate:input_type -> public.portworx.platform.template.v1.UpdateTemplateRequest 6, // 18: public.portworx.platform.template.v1.TemplateService.ListTemplates:input_type -> public.portworx.platform.template.v1.ListTemplatesRequest - 8, // 19: public.portworx.platform.template.v1.TemplateService.DeleteTemplate:input_type -> public.portworx.platform.template.v1.DeleteTemplateRequest + 7, // 19: public.portworx.platform.template.v1.TemplateService.DeleteTemplate:input_type -> public.portworx.platform.template.v1.DeleteTemplateRequest 1, // 20: public.portworx.platform.template.v1.TemplateService.GetTemplate:output_type -> public.portworx.platform.template.v1.Template 1, // 21: public.portworx.platform.template.v1.TemplateService.CreateTemplate:output_type -> public.portworx.platform.template.v1.Template 1, // 22: public.portworx.platform.template.v1.TemplateService.UpdateTemplate:output_type -> public.portworx.platform.template.v1.Template - 9, // 23: public.portworx.platform.template.v1.TemplateService.ListTemplates:output_type -> public.portworx.platform.template.v1.ListTemplatesResponse + 8, // 23: public.portworx.platform.template.v1.TemplateService.ListTemplates:output_type -> public.portworx.platform.template.v1.ListTemplatesResponse 18, // 24: public.portworx.platform.template.v1.TemplateService.DeleteTemplate:output_type -> google.protobuf.Empty 20, // [20:25] is the sub-list for method output_type 15, // [15:20] is the sub-list for method input_type @@ -1016,7 +1006,7 @@ func file_public_portworx_platform_template_apiv1_template_proto_init() { } } file_public_portworx_platform_template_apiv1_template_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateTemplateRequest); i { + switch v := v.(*DeleteTemplateRequest); i { case 0: return &v.state case 1: @@ -1028,7 +1018,7 @@ func file_public_portworx_platform_template_apiv1_template_proto_init() { } } file_public_portworx_platform_template_apiv1_template_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteTemplateRequest); i { + switch v := v.(*ListTemplatesResponse); i { case 0: return &v.state case 1: @@ -1040,7 +1030,7 @@ func file_public_portworx_platform_template_apiv1_template_proto_init() { } } file_public_portworx_platform_template_apiv1_template_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListTemplatesResponse); i { + switch v := v.(*UpdateTemplateRequest); i { case 0: return &v.state case 1: diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template.pb.gw.go b/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template.pb.gw.go index 4c33c1c5f..0b96db62a 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template.pb.gw.go +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template.pb.gw.go @@ -147,7 +147,7 @@ func request_TemplateService_UpdateTemplate_0(ctx context.Context, marshaler run var protoReq UpdateTemplateRequest var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Template); err != nil && err != io.EOF { + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -158,14 +158,14 @@ func request_TemplateService_UpdateTemplate_0(ctx context.Context, marshaler run _ = err ) - val, ok = pathParams["id"] + val, ok = pathParams["template.meta.uid"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "template.meta.uid") } - protoReq.Id, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "template.meta.uid", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "template.meta.uid", err) } msg, err := client.UpdateTemplate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -177,7 +177,7 @@ func local_request_TemplateService_UpdateTemplate_0(ctx context.Context, marshal var protoReq UpdateTemplateRequest var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Template); err != nil && err != io.EOF { + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -188,14 +188,14 @@ func local_request_TemplateService_UpdateTemplate_0(ctx context.Context, marshal _ = err ) - val, ok = pathParams["id"] + val, ok = pathParams["template.meta.uid"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "template.meta.uid") } - protoReq.Id, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "template.meta.uid", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "template.meta.uid", err) } msg, err := server.UpdateTemplate(ctx, &protoReq) @@ -381,7 +381,7 @@ func RegisterTemplateServiceHandlerServer(ctx context.Context, mux *runtime.Serv inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.platform.template.v1.TemplateService/UpdateTemplate", runtime.WithHTTPPathPattern("/core/v1/templates/{id}")) + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.platform.template.v1.TemplateService/UpdateTemplate", runtime.WithHTTPPathPattern("/core/v1/templates/{template.meta.uid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -564,7 +564,7 @@ func RegisterTemplateServiceHandlerClient(ctx context.Context, mux *runtime.Serv inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.platform.template.v1.TemplateService/UpdateTemplate", runtime.WithHTTPPathPattern("/core/v1/templates/{id}")) + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.platform.template.v1.TemplateService/UpdateTemplate", runtime.WithHTTPPathPattern("/core/v1/templates/{template.meta.uid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -654,7 +654,7 @@ var ( pattern_TemplateService_CreateTemplate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"core", "v1", "tenants", "tenant_id", "templates"}, "")) - pattern_TemplateService_UpdateTemplate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"core", "v1", "templates", "id"}, "")) + pattern_TemplateService_UpdateTemplate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"core", "v1", "templates", "template.meta.uid"}, "")) pattern_TemplateService_ListTemplates_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"core", "v1", "templates"}, "")) diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template.pb.md b/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template.pb.md index c87267168..e61a21a1e 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template.pb.md +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template.pb.md @@ -50,6 +50,8 @@ Create API creates a set of templates for a tenant. > **rpc** UpdateTemplate([UpdateTemplateRequest](#updatetemplaterequest)) [Template](#template) +(-- api-linter: core::0134::request-message-name=disabled + aip.dev/not-precedent: We need to do this because we have uid in template resource itself. --) Update API updates a template. ### ListTemplates {#methodpublicportworxplatformtemplatev1templateservicelisttemplates} @@ -181,7 +183,6 @@ Request to update a template instance. | Field | Type | Description | | ----- | ---- | ----------- | -| id | [ string](#string) | ID of the template to be updated. | | template | [ Template](#template) | Desired template configuration. | diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template.proto b/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template.proto index 1fffcba02..cae444581 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template.proto +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template.proto @@ -50,12 +50,14 @@ service TemplateService { }; } + // (-- api-linter: core::0134::request-message-name=disabled +// aip.dev/not-precedent: We need to do this because we have uid in template resource itself. --) // Update API updates a template. rpc UpdateTemplate(UpdateTemplateRequest) returns(Template) { option(google.api.http) = { - put: "/core/v1/templates/{id}" - body: "template" + put: "/core/v1/templates/{template.meta.uid}" + body: "*" }; } @@ -166,14 +168,6 @@ message ListTemplatesRequest { public.portworx.common.v1.Sort sort = 7; } -// Request to update a template instance. -message UpdateTemplateRequest { - // ID of the template to be updated. - string id = 1; - // Desired template configuration. - Template template = 2; -} - // Request to delete a template instance. message DeleteTemplateRequest { // ID of the template instance. @@ -189,3 +183,10 @@ message ListTemplatesResponse { // aip.dev/not-precedent: We need this field for pagination. --) public.portworx.common.v1.PageBasedPaginationResponse pagination = 2; } + + +// Request to update a template instance. +message UpdateTemplateRequest { + // Desired template configuration. + Template template = 1; +} \ No newline at end of file diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template.swagger.json b/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template.swagger.json index 50764771b..9f963a5d6 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template.swagger.json +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template.swagger.json @@ -201,7 +201,9 @@ "tags": [ "TemplateService" ] - }, + } + }, + "/core/v1/templates/{template.meta.uid}": { "put": { "summary": "Update API updates a template.", "operationId": "TemplateService_UpdateTemplate", @@ -229,8 +231,8 @@ }, "parameters": [ { - "name": "id", - "description": "ID of the template to be updated.", + "name": "template.meta.uid", + "description": "UID of the resource of the format -.", "in": "path", "required": true, "schema": { @@ -242,11 +244,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/v1Template" + "$ref": "#/components/schemas/TemplateServiceUpdateTemplateBody" } } }, - "description": "Desired template configuration.", "required": true }, "tags": [ @@ -396,10 +397,11 @@ "enum": [ "OPERATOR_UNSPECIFIED", "IN", - "NOT_IN" + "NOT_IN", + "LIKE" ], "default": "OPERATOR_UNSPECIFIED", - "description": "Operator specifies the relationship between the provided (key,value) pairs in the response.\n\n - OPERATOR_UNSPECIFIED: Unspecified, do not use.\n - IN: IN specifies that the key should be associated with atleast 1 of the element in value list.\n - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list." + "description": "Operator specifies the relationship between the provided (key,value) pairs in the response.\n\n - OPERATOR_UNSPECIFIED: Unspecified, do not use.\n - IN: IN specifies that the key should be associated with atleast 1 of the element in value list.\n - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list.\n - LIKE: LIKE specified that the key should be of a specified pattern" }, "SortByField": { "type": "string", @@ -423,6 +425,81 @@ "default": "PHASE_UNSPECIFIED", "description": "Different phases of template instance.\n\n - PHASE_UNSPECIFIED: Phase unspecified.\n - ACTIVE: Template instance is active.\n - DEPRECATED: Template instance is deprecated." }, + "TemplateServiceUpdateTemplateBody": { + "type": "object", + "properties": { + "template": { + "type": "object", + "properties": { + "meta": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the resource." + }, + "description": { + "type": "string", + "description": "Description of the resource." + }, + "resourceVersion": { + "type": "string", + "description": "A string that identifies the version of this object that can be used by clients to determine when objects have changed.\nThis value must be passed unmodified back to the server by the client." + }, + "createTime": { + "type": "string", + "format": "date-time", + "description": "Creation time of the object.", + "readOnly": true + }, + "updateTime": { + "type": "string", + "format": "date-time", + "description": "Update time of the object.", + "readOnly": true + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Labels to apply to the object." + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Annotations for the object." + }, + "parentReference": { + "$ref": "#/components/schemas/v1Reference" + }, + "resourceNames": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Resource names holds the mapping between the resource IDs and its display name which will be consumed by the frontend.", + "readOnly": true + } + }, + "description": "Metadata of the resource.", + "title": "Metadata of the resource." + }, + "config": { + "$ref": "#/components/schemas/v1Config" + }, + "status": { + "$ref": "#/components/schemas/templatev1Status" + } + }, + "description": "Desired template configuration.", + "title": "Desired template configuration." + } + }, + "description": "Request to update a template instance." + }, "googlerpcStatus": { "type": "object", "properties": { diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template_grpc.pb.go b/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template_grpc.pb.go index 514372812..5a76c4dfe 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template_grpc.pb.go +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/template/apiv1/template_grpc.pb.go @@ -50,6 +50,10 @@ type TemplateServiceClient interface { GetTemplate(ctx context.Context, in *GetTemplateRequest, opts ...grpc.CallOption) (*Template, error) // Create API creates a set of templates for a tenant. CreateTemplate(ctx context.Context, in *CreateTemplateRequest, opts ...grpc.CallOption) (*Template, error) + // (-- api-linter: core::0134::request-message-name=disabled + // + // aip.dev/not-precedent: We need to do this because we have uid in template resource itself. --) + // // Update API updates a template. UpdateTemplate(ctx context.Context, in *UpdateTemplateRequest, opts ...grpc.CallOption) (*Template, error) // (-- api-linter: core::0132::http-body=disabled @@ -126,6 +130,10 @@ type TemplateServiceServer interface { GetTemplate(context.Context, *GetTemplateRequest) (*Template, error) // Create API creates a set of templates for a tenant. CreateTemplate(context.Context, *CreateTemplateRequest) (*Template, error) + // (-- api-linter: core::0134::request-message-name=disabled + // + // aip.dev/not-precedent: We need to do this because we have uid in template resource itself. --) + // // Update API updates a template. UpdateTemplate(context.Context, *UpdateTemplateRequest) (*Template, error) // (-- api-linter: core::0132::http-body=disabled diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/tenant/apiv1/tenant.pb.go b/vendor/github.com/pure-px/apis/public/portworx/platform/tenant/apiv1/tenant.pb.go index 917495ab4..955fcebea 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/tenant/apiv1/tenant.pb.go +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/tenant/apiv1/tenant.pb.go @@ -1,5 +1,5 @@ // Please use the following editor setup for this file: -// Tab size=2; Tabs as spaces; Clean up trailing whitepsace +// Tab size=2; Tabs as spaces; Clean up trailing whitespace // // In vim add: au FileType proto setl sw=2 ts=2 expandtab list // @@ -107,6 +107,12 @@ type ListTenantsRequest struct { // Pagination parameters for listing tenants. Pagination *apiv1.PageBasedPaginationRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` + // (-- api-linter: core::0132::response-unknown-fields=disabled + // + // aip.dev/not-precedent: We need this field for resource_selector. --) + // + // Filtering list of tenants based on the provided resource details.. + ResourceSelector *apiv1.ResourceSelector `protobuf:"bytes,2,opt,name=resource_selector,json=resourceSelector,proto3" json:"resource_selector,omitempty"` } func (x *ListTenantsRequest) Reset() { @@ -148,6 +154,13 @@ func (x *ListTenantsRequest) GetPagination() *apiv1.PageBasedPaginationRequest { return nil } +func (x *ListTenantsRequest) GetResourceSelector() *apiv1.ResourceSelector { + if x != nil { + return x.ResourceSelector + } + return nil +} + // ListTenantsResponse is the response message to the ListTenants API and contains // the list of tenants visible to the caller. type ListTenantsResponse struct { @@ -581,123 +594,131 @@ var file_public_portworx_platform_tenant_apiv1_tenant_proto_rawDesc = []byte{ 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x67, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6b, 0x0a, 0x12, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x55, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, - 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, - 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb3, 0x01, 0x0a, 0x13, 0x4c, 0x69, - 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x44, 0x0a, 0x07, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x07, - 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x56, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, - 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0x2f, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, - 0x22, 0x59, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6e, - 0x61, 0x6e, 0x74, 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x22, 0x59, 0x0a, 0x13, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x42, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x06, - 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x22, 0x32, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, - 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x86, 0x01, 0x0a, 0x06, 0x54, - 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x47, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x75, 0x62, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2b, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc5, 0x01, 0x0a, 0x12, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x55, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, + 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x58, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, + 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, + 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x22, 0xb3, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x07, 0x74, 0x65, 0x6e, + 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x22, 0x66, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, - 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x2e, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x22, 0x70, 0x0a, 0x05, 0x50, - 0x68, 0x61, 0x73, 0x65, 0x22, 0x67, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x12, - 0x0a, 0x0e, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, - 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x5f, - 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, - 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x32, 0x8a, 0x06, - 0x0a, 0x0d, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x93, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x34, 0x2e, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, - 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x22, - 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, - 0x31, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x37, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, - 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x07, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x12, + 0x56, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, + 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x61, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2f, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x54, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, + 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x59, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x42, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x22, 0x20, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1a, 0x3a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x22, 0x10, 0x2f, 0x63, 0x6f, - 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x12, 0xa7, 0x01, - 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x37, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x06, 0x74, 0x65, 0x6e, + 0x61, 0x6e, 0x74, 0x22, 0x59, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, + 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x06, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x22, 0x32, + 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x49, 0x64, 0x22, 0x86, 0x01, 0x0a, 0x06, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x33, 0x0a, + 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, + 0x74, 0x61, 0x12, 0x47, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, + 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03, + 0xe0, 0x41, 0x03, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x66, 0x0a, 0x06, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x44, 0x0a, + 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x70, 0x68, + 0x61, 0x73, 0x65, 0x22, 0x70, 0x0a, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, 0x22, 0x67, 0x0a, 0x04, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, + 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, + 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x45, + 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, + 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, + 0x4c, 0x45, 0x44, 0x10, 0x04, 0x32, 0x8a, 0x06, 0x0a, 0x0d, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x93, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x54, + 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x34, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, + 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, + 0x1c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, + 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x37, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6e, - 0x61, 0x6e, 0x74, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x06, 0x74, 0x65, 0x6e, - 0x61, 0x6e, 0x74, 0x1a, 0x22, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x6d, 0x65, - 0x74, 0x61, 0x2e, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x85, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x37, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1e, 0x2a, 0x1c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, - 0x98, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x12, - 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x61, 0x6e, 0x74, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x06, 0x74, 0x65, 0x6e, + 0x61, 0x6e, 0x74, 0x22, 0x10, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x12, 0xa7, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x37, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, + 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x22, 0x32, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x2c, 0x3a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x1a, 0x22, 0x2f, 0x63, 0x6f, + 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x74, + 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x75, 0x69, 0x64, 0x7d, 0x12, + 0x85, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x12, 0x37, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, + 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x2a, 0x1c, 0x2f, 0x63, 0x6f, 0x72, 0x65, + 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6e, + 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x98, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x36, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, - 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x42, 0x7d, 0x0a, 0x26, 0x63, 0x6f, - 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x37, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x61, 0x70, 0x69, - 0x76, 0x31, 0x3b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, + 0x12, 0x10, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x73, 0x42, 0x7d, 0x0a, 0x26, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x54, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x44, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, 0x2f, + 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, + 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -726,34 +747,36 @@ var file_public_portworx_platform_tenant_apiv1_tenant_proto_goTypes = []interfac (*Status)(nil), // 8: public.portworx.platform.tenant.v1.Status (*Phase)(nil), // 9: public.portworx.platform.tenant.v1.Phase (*apiv1.PageBasedPaginationRequest)(nil), // 10: public.portworx.common.v1.PageBasedPaginationRequest - (*apiv1.PageBasedPaginationResponse)(nil), // 11: public.portworx.common.v1.PageBasedPaginationResponse - (*apiv1.Meta)(nil), // 12: public.portworx.common.v1.Meta - (*emptypb.Empty)(nil), // 13: google.protobuf.Empty + (*apiv1.ResourceSelector)(nil), // 11: public.portworx.common.v1.ResourceSelector + (*apiv1.PageBasedPaginationResponse)(nil), // 12: public.portworx.common.v1.PageBasedPaginationResponse + (*apiv1.Meta)(nil), // 13: public.portworx.common.v1.Meta + (*emptypb.Empty)(nil), // 14: google.protobuf.Empty } var file_public_portworx_platform_tenant_apiv1_tenant_proto_depIdxs = []int32{ 10, // 0: public.portworx.platform.tenant.v1.ListTenantsRequest.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationRequest - 7, // 1: public.portworx.platform.tenant.v1.ListTenantsResponse.tenants:type_name -> public.portworx.platform.tenant.v1.Tenant - 11, // 2: public.portworx.platform.tenant.v1.ListTenantsResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse - 7, // 3: public.portworx.platform.tenant.v1.UpdateTenantRequest.tenant:type_name -> public.portworx.platform.tenant.v1.Tenant - 7, // 4: public.portworx.platform.tenant.v1.CreateTenantRequest.tenant:type_name -> public.portworx.platform.tenant.v1.Tenant - 12, // 5: public.portworx.platform.tenant.v1.Tenant.meta:type_name -> public.portworx.common.v1.Meta - 8, // 6: public.portworx.platform.tenant.v1.Tenant.status:type_name -> public.portworx.platform.tenant.v1.Status - 0, // 7: public.portworx.platform.tenant.v1.Status.phase:type_name -> public.portworx.platform.tenant.v1.Phase.Type - 3, // 8: public.portworx.platform.tenant.v1.TenantService.GetTenant:input_type -> public.portworx.platform.tenant.v1.GetTenantRequest - 5, // 9: public.portworx.platform.tenant.v1.TenantService.CreateTenant:input_type -> public.portworx.platform.tenant.v1.CreateTenantRequest - 4, // 10: public.portworx.platform.tenant.v1.TenantService.UpdateTenant:input_type -> public.portworx.platform.tenant.v1.UpdateTenantRequest - 6, // 11: public.portworx.platform.tenant.v1.TenantService.DeleteTenant:input_type -> public.portworx.platform.tenant.v1.DeleteTenantRequest - 1, // 12: public.portworx.platform.tenant.v1.TenantService.ListTenants:input_type -> public.portworx.platform.tenant.v1.ListTenantsRequest - 7, // 13: public.portworx.platform.tenant.v1.TenantService.GetTenant:output_type -> public.portworx.platform.tenant.v1.Tenant - 7, // 14: public.portworx.platform.tenant.v1.TenantService.CreateTenant:output_type -> public.portworx.platform.tenant.v1.Tenant - 7, // 15: public.portworx.platform.tenant.v1.TenantService.UpdateTenant:output_type -> public.portworx.platform.tenant.v1.Tenant - 13, // 16: public.portworx.platform.tenant.v1.TenantService.DeleteTenant:output_type -> google.protobuf.Empty - 2, // 17: public.portworx.platform.tenant.v1.TenantService.ListTenants:output_type -> public.portworx.platform.tenant.v1.ListTenantsResponse - 13, // [13:18] is the sub-list for method output_type - 8, // [8:13] is the sub-list for method input_type - 8, // [8:8] is the sub-list for extension type_name - 8, // [8:8] is the sub-list for extension extendee - 0, // [0:8] is the sub-list for field type_name + 11, // 1: public.portworx.platform.tenant.v1.ListTenantsRequest.resource_selector:type_name -> public.portworx.common.v1.ResourceSelector + 7, // 2: public.portworx.platform.tenant.v1.ListTenantsResponse.tenants:type_name -> public.portworx.platform.tenant.v1.Tenant + 12, // 3: public.portworx.platform.tenant.v1.ListTenantsResponse.pagination:type_name -> public.portworx.common.v1.PageBasedPaginationResponse + 7, // 4: public.portworx.platform.tenant.v1.UpdateTenantRequest.tenant:type_name -> public.portworx.platform.tenant.v1.Tenant + 7, // 5: public.portworx.platform.tenant.v1.CreateTenantRequest.tenant:type_name -> public.portworx.platform.tenant.v1.Tenant + 13, // 6: public.portworx.platform.tenant.v1.Tenant.meta:type_name -> public.portworx.common.v1.Meta + 8, // 7: public.portworx.platform.tenant.v1.Tenant.status:type_name -> public.portworx.platform.tenant.v1.Status + 0, // 8: public.portworx.platform.tenant.v1.Status.phase:type_name -> public.portworx.platform.tenant.v1.Phase.Type + 3, // 9: public.portworx.platform.tenant.v1.TenantService.GetTenant:input_type -> public.portworx.platform.tenant.v1.GetTenantRequest + 5, // 10: public.portworx.platform.tenant.v1.TenantService.CreateTenant:input_type -> public.portworx.platform.tenant.v1.CreateTenantRequest + 4, // 11: public.portworx.platform.tenant.v1.TenantService.UpdateTenant:input_type -> public.portworx.platform.tenant.v1.UpdateTenantRequest + 6, // 12: public.portworx.platform.tenant.v1.TenantService.DeleteTenant:input_type -> public.portworx.platform.tenant.v1.DeleteTenantRequest + 1, // 13: public.portworx.platform.tenant.v1.TenantService.ListTenants:input_type -> public.portworx.platform.tenant.v1.ListTenantsRequest + 7, // 14: public.portworx.platform.tenant.v1.TenantService.GetTenant:output_type -> public.portworx.platform.tenant.v1.Tenant + 7, // 15: public.portworx.platform.tenant.v1.TenantService.CreateTenant:output_type -> public.portworx.platform.tenant.v1.Tenant + 7, // 16: public.portworx.platform.tenant.v1.TenantService.UpdateTenant:output_type -> public.portworx.platform.tenant.v1.Tenant + 14, // 17: public.portworx.platform.tenant.v1.TenantService.DeleteTenant:output_type -> google.protobuf.Empty + 2, // 18: public.portworx.platform.tenant.v1.TenantService.ListTenants:output_type -> public.portworx.platform.tenant.v1.ListTenantsResponse + 14, // [14:19] is the sub-list for method output_type + 9, // [9:14] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name } func init() { file_public_portworx_platform_tenant_apiv1_tenant_proto_init() } diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/tenant/apiv1/tenant.pb.md b/vendor/github.com/pure-px/apis/public/portworx/platform/tenant/apiv1/tenant.pb.md index 93b8ca9d4..5c98fc3ae 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/tenant/apiv1/tenant.pb.md +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/tenant/apiv1/tenant.pb.md @@ -109,6 +109,7 @@ ListTenantsRequest is the request message to the ListTenants API. | Field | Type | Description | | ----- | ---- | ----------- | | pagination | [ public.portworx.common.v1.PageBasedPaginationRequest](#publicportworxcommonv1pagebasedpaginationrequest) | Pagination parameters for listing tenants. | +| resource_selector | [ public.portworx.common.v1.ResourceSelector](#publicportworxcommonv1resourceselector) | (-- api-linter: core::0132::response-unknown-fields=disabled aip.dev/not-precedent: We need this field for resource_selector. --) Filtering list of tenants based on the provided resource details.. | diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/tenant/apiv1/tenant.proto b/vendor/github.com/pure-px/apis/public/portworx/platform/tenant/apiv1/tenant.proto index 75d86a738..fa8122bc4 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/tenant/apiv1/tenant.proto +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/tenant/apiv1/tenant.proto @@ -1,5 +1,5 @@ // Please use the following editor setup for this file: -// Tab size=2; Tabs as spaces; Clean up trailing whitepsace +// Tab size=2; Tabs as spaces; Clean up trailing whitespace // // In vim add: au FileType proto setl sw=2 ts=2 expandtab list // @@ -22,6 +22,7 @@ import "google/api/field_behavior.proto"; import "google/protobuf/empty.proto"; import "public/portworx/common/apiv1/meta.proto"; import "public/portworx/common/apiv1/pagination.proto"; +import "public/portworx/common/apiv1/selector.proto"; option go_package = "github.com/pure-px/apis/public/portworx/platform/tenant/apiv1;tenant"; option java_multiple_files = true; @@ -79,6 +80,10 @@ service TenantService { message ListTenantsRequest { // Pagination parameters for listing tenants. public.portworx.common.v1.PageBasedPaginationRequest pagination = 1; + // (-- api-linter: core::0132::response-unknown-fields=disabled + // aip.dev/not-precedent: We need this field for resource_selector. --) + // Filtering list of tenants based on the provided resource details.. + public.portworx.common.v1.ResourceSelector resource_selector = 2; } // ListTenantsResponse is the response message to the ListTenants API and contains @@ -90,7 +95,6 @@ message ListTenantsResponse { // (-- api-linter: core::0132::response-unknown-fields=disabled // aip.dev/not-precedent: We need this field for pagination. --) public.portworx.common.v1.PageBasedPaginationResponse pagination = 2; - } // Request for getting a tenant. diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/tenant/apiv1/tenant.swagger.json b/vendor/github.com/pure-px/apis/public/portworx/platform/tenant/apiv1/tenant.swagger.json index 46c4f7aee..1a5234804 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/tenant/apiv1/tenant.swagger.json +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/tenant/apiv1/tenant.swagger.json @@ -304,6 +304,36 @@ }, "components": { "schemas": { + "ResourceSelectorResourceFilter": { + "type": "object", + "properties": { + "resourceType": { + "$ref": "#/components/schemas/v1InfraResourceType" + }, + "op": { + "$ref": "#/components/schemas/SelectorOperator" + }, + "values": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Value of key,value pair against which filtering needs to be performs." + } + }, + "description": "ResourceFilter is filter for a given resource type." + }, + "SelectorOperator": { + "type": "string", + "enum": [ + "OPERATOR_UNSPECIFIED", + "IN", + "NOT_IN", + "LIKE" + ], + "default": "OPERATOR_UNSPECIFIED", + "description": "Operator specifies the relationship between the provided (key,value) pairs in the response.\n\n - OPERATOR_UNSPECIFIED: Unspecified, do not use.\n - IN: IN specifies that the key should be associated with atleast 1 of the element in value list.\n - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list.\n - LIKE: LIKE specified that the key should be of a specified pattern" + }, "googlerpcStatus": { "type": "object", "properties": { @@ -344,6 +374,23 @@ }, "description": "Status represents the current state of the tenant." }, + "v1InfraResourceType": { + "type": "string", + "enum": [ + "TYPE_UNSPECIFIED", + "ACCOUNT", + "TENANT", + "PROJECT", + "TARGET_CLUSTER", + "NAMESPACE", + "CREDENTIAL", + "BACKUP_LOCATION", + "BACKUP_POLICY", + "TEMPLATE" + ], + "default": "TYPE_UNSPECIFIED", + "description": "Type of the resource.\n\n - TYPE_UNSPECIFIED: Unspecified, do not use.\n - ACCOUNT: Currently supported infra resources.\nInfra resource of type account.\n - TENANT: Infra resource of type tenant.\n - PROJECT: Infra resource of type projects.\n - TARGET_CLUSTER: Infra resource target cluster.\n - NAMESPACE: Infra resource of type namespace.\n - CREDENTIAL: Infra resource of type credential.\n - BACKUP_LOCATION: Infra resource of type backup location.\n - BACKUP_POLICY: Infra resource of type backup policy.\n - TEMPLATE: Infra resource of type template." + }, "v1ListTenantsResponse": { "type": "object", "properties": { @@ -501,6 +548,19 @@ }, "description": "Reference identifies the resource type, version of the uid and the resource." }, + "v1ResourceSelector": { + "type": "object", + "properties": { + "infraResourceFilters": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ResourceSelectorResourceFilter" + }, + "description": "Infra_resource_filters is the list of all filters that should be applied to fetch data related to infra resource.\nEach filter will have AND relationship." + } + }, + "description": "ResourceSelector is used to query resources using the associated infra resources." + }, "v1Tenant": { "type": "object", "properties": { diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/tenant/apiv1/tenant_grpc.pb.go b/vendor/github.com/pure-px/apis/public/portworx/platform/tenant/apiv1/tenant_grpc.pb.go index 68e222c8b..2a9054ebe 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/tenant/apiv1/tenant_grpc.pb.go +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/tenant/apiv1/tenant_grpc.pb.go @@ -1,5 +1,5 @@ // Please use the following editor setup for this file: -// Tab size=2; Tabs as spaces; Clean up trailing whitepsace +// Tab size=2; Tabs as spaces; Clean up trailing whitespace // // In vim add: au FileType proto setl sw=2 ts=2 expandtab list // diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami.pb.go b/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami.pb.go index 993407c26..940934d59 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami.pb.go +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami.pb.go @@ -195,24 +195,32 @@ var file_public_portworx_platform_whoami_apiv1_whoami_proto_rawDesc = []byte{ 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x6e, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x6e, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x32, 0x7e, - 0x0a, 0x0d, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x6d, 0x0a, 0x06, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x32, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, - 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x77, 0x68, 0x6f, - 0x61, 0x6d, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, - 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x68, 0x6f, 0x61, 0x6d, 0x69, 0x42, 0x7d, - 0x0a, 0x26, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x77, - 0x68, 0x6f, 0x61, 0x6d, 0x69, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, 0x2d, 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, - 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, - 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x77, 0x68, 0x6f, 0x61, 0x6d, 0x69, - 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x77, 0x68, 0x6f, 0x61, 0x6d, 0x69, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x32, 0x85, + 0x02, 0x0a, 0x0d, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x6d, 0x0a, 0x06, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x32, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, + 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x77, 0x68, + 0x6f, 0x61, 0x6d, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x68, 0x6f, 0x61, 0x6d, 0x69, 0x12, + 0x84, 0x01, 0x0a, 0x11, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x57, + 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x32, 0x2e, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x77, 0x68, 0x6f, 0x61, 0x6d, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x63, 0x6f, 0x72, 0x65, + 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x68, 0x6f, 0x61, 0x6d, 0x69, 0x3a, 0x69, 0x6e, 0x76, 0x69, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x7d, 0x0a, 0x26, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x77, 0x68, 0x6f, 0x61, 0x6d, 0x69, 0x2e, 0x76, 0x31, + 0x42, 0x0b, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x72, 0x65, + 0x2d, 0x70, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, + 0x70, 0x6f, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x78, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2f, 0x77, 0x68, 0x6f, 0x61, 0x6d, 0x69, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x3b, 0x77, + 0x68, 0x6f, 0x61, 0x6d, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -236,9 +244,11 @@ var file_public_portworx_platform_whoami_apiv1_whoami_proto_goTypes = []interfac var file_public_portworx_platform_whoami_apiv1_whoami_proto_depIdxs = []int32{ 1, // 0: public.portworx.platform.whoami.v1.WhoAmIResponse.accounts:type_name -> public.portworx.platform.whoami.v1.Account 2, // 1: public.portworx.platform.whoami.v1.WhoAmIService.WhoAmI:input_type -> google.protobuf.Empty - 0, // 2: public.portworx.platform.whoami.v1.WhoAmIService.WhoAmI:output_type -> public.portworx.platform.whoami.v1.WhoAmIResponse - 2, // [2:3] is the sub-list for method output_type - 1, // [1:2] is the sub-list for method input_type + 2, // 2: public.portworx.platform.whoami.v1.WhoAmIService.InvitationsWhoAmI:input_type -> google.protobuf.Empty + 0, // 3: public.portworx.platform.whoami.v1.WhoAmIService.WhoAmI:output_type -> public.portworx.platform.whoami.v1.WhoAmIResponse + 0, // 4: public.portworx.platform.whoami.v1.WhoAmIService.InvitationsWhoAmI:output_type -> public.portworx.platform.whoami.v1.WhoAmIResponse + 3, // [3:5] is the sub-list for method output_type + 1, // [1:3] is the sub-list for method input_type 1, // [1:1] is the sub-list for extension type_name 1, // [1:1] is the sub-list for extension extendee 0, // [0:1] is the sub-list for field type_name diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami.pb.gw.go b/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami.pb.gw.go index a3559714b..8d48b663f 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami.pb.gw.go +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami.pb.gw.go @@ -50,6 +50,24 @@ func local_request_WhoAmIService_WhoAmI_0(ctx context.Context, marshaler runtime } +func request_WhoAmIService_InvitationsWhoAmI_0(ctx context.Context, marshaler runtime.Marshaler, client WhoAmIServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq emptypb.Empty + var metadata runtime.ServerMetadata + + msg, err := client.InvitationsWhoAmI(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_WhoAmIService_InvitationsWhoAmI_0(ctx context.Context, marshaler runtime.Marshaler, server WhoAmIServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq emptypb.Empty + var metadata runtime.ServerMetadata + + msg, err := server.InvitationsWhoAmI(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterWhoAmIServiceHandlerServer registers the http handlers for service WhoAmIService to "mux". // UnaryRPC :call WhoAmIServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -81,6 +99,31 @@ func RegisterWhoAmIServiceHandlerServer(ctx context.Context, mux *runtime.ServeM }) + mux.Handle("GET", pattern_WhoAmIService_InvitationsWhoAmI_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/public.portworx.platform.whoami.v1.WhoAmIService/InvitationsWhoAmI", runtime.WithHTTPPathPattern("/core/v1/whoami:invitations")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_WhoAmIService_InvitationsWhoAmI_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_WhoAmIService_InvitationsWhoAmI_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -144,13 +187,39 @@ func RegisterWhoAmIServiceHandlerClient(ctx context.Context, mux *runtime.ServeM }) + mux.Handle("GET", pattern_WhoAmIService_InvitationsWhoAmI_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/public.portworx.platform.whoami.v1.WhoAmIService/InvitationsWhoAmI", runtime.WithHTTPPathPattern("/core/v1/whoami:invitations")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_WhoAmIService_InvitationsWhoAmI_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_WhoAmIService_InvitationsWhoAmI_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } var ( pattern_WhoAmIService_WhoAmI_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"core", "v1", "whoami"}, "")) + + pattern_WhoAmIService_InvitationsWhoAmI_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"core", "v1", "whoami"}, "invitations")) ) var ( forward_WhoAmIService_WhoAmI_0 = runtime.ForwardResponseMessage + + forward_WhoAmIService_InvitationsWhoAmI_0 = runtime.ForwardResponseMessage ) diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami.pb.md b/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami.pb.md index 67ae663fa..0ef659745 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami.pb.md +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami.pb.md @@ -32,6 +32,12 @@ WhoAmIService service provides API to get the current actor accounts. [WhoAmIResponse](#whoamiresponse) WhoAmI API returns the current actor accounts. +### InvitationsWhoAmI {#methodpublicportworxplatformwhoamiv1whoamiserviceinvitationswhoami} + +> **rpc** InvitationsWhoAmI([.google.protobuf.Empty](#googleprotobufempty)) + [WhoAmIResponse](#whoamiresponse) + +InvitationsWhoAmI API returns the current actor pending invitations cross accounts. diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami.proto b/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami.proto index 870ccf528..fc16ac1e7 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami.proto +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami.proto @@ -35,6 +35,14 @@ service WhoAmIService { get: "/core/v1/whoami" }; } + + // InvitationsWhoAmI API returns the current actor pending invitations cross accounts. + rpc InvitationsWhoAmI(google.protobuf.Empty) + returns (WhoAmIResponse) { + option(google.api.http) = { + get: "/core/v1/whoami:invitations" + }; + } } // WhoAmI response return accounts for current actor. diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami.swagger.json b/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami.swagger.json index 0bb8a2310..363645758 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami.swagger.json +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami.swagger.json @@ -40,6 +40,37 @@ "WhoAmIService" ] } + }, + "/core/v1/whoami:invitations": { + "get": { + "summary": "InvitationsWhoAmI API returns the current actor pending invitations cross accounts.", + "operationId": "WhoAmIService_InvitationsWhoAmI", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v1WhoAmIResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "tags": [ + "WhoAmIService" + ] + } } }, "components": { diff --git a/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami_grpc.pb.go b/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami_grpc.pb.go index 3196f7ee1..49ee38e5a 100644 --- a/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami_grpc.pb.go +++ b/vendor/github.com/pure-px/apis/public/portworx/platform/whoami/apiv1/whoami_grpc.pb.go @@ -35,7 +35,8 @@ import ( const _ = grpc.SupportPackageIsVersion7 const ( - WhoAmIService_WhoAmI_FullMethodName = "/public.portworx.platform.whoami.v1.WhoAmIService/WhoAmI" + WhoAmIService_WhoAmI_FullMethodName = "/public.portworx.platform.whoami.v1.WhoAmIService/WhoAmI" + WhoAmIService_InvitationsWhoAmI_FullMethodName = "/public.portworx.platform.whoami.v1.WhoAmIService/InvitationsWhoAmI" ) // WhoAmIServiceClient is the client API for WhoAmIService service. @@ -44,6 +45,8 @@ const ( type WhoAmIServiceClient interface { // WhoAmI API returns the current actor accounts. WhoAmI(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*WhoAmIResponse, error) + // InvitationsWhoAmI API returns the current actor pending invitations cross accounts. + InvitationsWhoAmI(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*WhoAmIResponse, error) } type whoAmIServiceClient struct { @@ -63,12 +66,23 @@ func (c *whoAmIServiceClient) WhoAmI(ctx context.Context, in *emptypb.Empty, opt return out, nil } +func (c *whoAmIServiceClient) InvitationsWhoAmI(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*WhoAmIResponse, error) { + out := new(WhoAmIResponse) + err := c.cc.Invoke(ctx, WhoAmIService_InvitationsWhoAmI_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // WhoAmIServiceServer is the server API for WhoAmIService service. // All implementations must embed UnimplementedWhoAmIServiceServer // for forward compatibility type WhoAmIServiceServer interface { // WhoAmI API returns the current actor accounts. WhoAmI(context.Context, *emptypb.Empty) (*WhoAmIResponse, error) + // InvitationsWhoAmI API returns the current actor pending invitations cross accounts. + InvitationsWhoAmI(context.Context, *emptypb.Empty) (*WhoAmIResponse, error) mustEmbedUnimplementedWhoAmIServiceServer() } @@ -79,6 +93,9 @@ type UnimplementedWhoAmIServiceServer struct { func (UnimplementedWhoAmIServiceServer) WhoAmI(context.Context, *emptypb.Empty) (*WhoAmIResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method WhoAmI not implemented") } +func (UnimplementedWhoAmIServiceServer) InvitationsWhoAmI(context.Context, *emptypb.Empty) (*WhoAmIResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method InvitationsWhoAmI not implemented") +} func (UnimplementedWhoAmIServiceServer) mustEmbedUnimplementedWhoAmIServiceServer() {} // UnsafeWhoAmIServiceServer may be embedded to opt out of forward compatibility for this service. @@ -110,6 +127,24 @@ func _WhoAmIService_WhoAmI_Handler(srv interface{}, ctx context.Context, dec fun return interceptor(ctx, in, info, handler) } +func _WhoAmIService_InvitationsWhoAmI_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(emptypb.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WhoAmIServiceServer).InvitationsWhoAmI(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WhoAmIService_InvitationsWhoAmI_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WhoAmIServiceServer).InvitationsWhoAmI(ctx, req.(*emptypb.Empty)) + } + return interceptor(ctx, in, info, handler) +} + // WhoAmIService_ServiceDesc is the grpc.ServiceDesc for WhoAmIService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -121,6 +156,10 @@ var WhoAmIService_ServiceDesc = grpc.ServiceDesc{ MethodName: "WhoAmI", Handler: _WhoAmIService_WhoAmI_Handler, }, + { + MethodName: "InvitationsWhoAmI", + Handler: _WhoAmIService_InvitationsWhoAmI_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "public/portworx/platform/whoami/apiv1/whoami.proto", diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/README.md b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/README.md index 250722d7a..ee34865e9 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/README.md +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/README.md @@ -7,7 +7,7 @@ This API client was generated by the [OpenAPI Generator](https://openapi-generat - API version: version not set - Package version: 1.0.0 -- Generator version: 7.6.0-SNAPSHOT +- Generator version: 7.7.0-SNAPSHOT - Build package: org.openapitools.codegen.languages.GoClientCodegen ## Installation @@ -93,7 +93,7 @@ Class | Method | HTTP request | Description - [StatusPhase](docs/StatusPhase.md) - [V1Backup](docs/V1Backup.md) - [V1Config](docs/V1Config.md) - - [V1DeploymentMetaData](docs/V1DeploymentMetaData.md) + - [V1DataServiceDeploymentMetaData](docs/V1DataServiceDeploymentMetaData.md) - [V1ListBackupsResponse](docs/V1ListBackupsResponse.md) - [V1Meta](docs/V1Meta.md) - [V1PageBasedPaginationRequest](docs/V1PageBasedPaginationRequest.md) diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/api_backup_service.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/api_backup_service.go index 84d1e3bf6..c49dc74d1 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/api_backup_service.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/api_backup_service.go @@ -254,7 +254,7 @@ func (a *BackupServiceAPIService) BackupServiceGetBackupExecute(r ApiBackupServi type ApiBackupServiceListBackupsRequest struct { ctx context.Context ApiService *BackupServiceAPIService - deploymentId *string + dataServiceDeploymentId *string backupConfigId *string paginationPageNumber *string paginationPageSize *string @@ -262,9 +262,9 @@ type ApiBackupServiceListBackupsRequest struct { sortSortOrder *string } -// Deployment ID for which the backups will be listed. -func (r ApiBackupServiceListBackupsRequest) DeploymentId(deploymentId string) ApiBackupServiceListBackupsRequest { - r.deploymentId = &deploymentId +// Data service Deployment ID for which the backups will be listed. +func (r ApiBackupServiceListBackupsRequest) DataServiceDeploymentId(dataServiceDeploymentId string) ApiBackupServiceListBackupsRequest { + r.dataServiceDeploymentId = &dataServiceDeploymentId return r } @@ -336,8 +336,8 @@ func (a *BackupServiceAPIService) BackupServiceListBackupsExecute(r ApiBackupSer localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if r.deploymentId != nil { - parameterAddToHeaderOrQuery(localVarQueryParams, "deploymentId", r.deploymentId, "") + if r.dataServiceDeploymentId != nil { + parameterAddToHeaderOrQuery(localVarQueryParams, "dataServiceDeploymentId", r.dataServiceDeploymentId, "") } if r.backupConfigId != nil { parameterAddToHeaderOrQuery(localVarQueryParams, "backupConfigId", r.backupConfigId, "") diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/client.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/client.go index d2c74f3f9..2d20d8538 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/client.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/client.go @@ -162,7 +162,7 @@ func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix stri return } if t, ok := obj.(time.Time); ok { - parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339), collectionType) + parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339Nano), collectionType) return } value = v.Type().String() + " value" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/model_backupv1_status.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/model_backupv1_status.go index 020bd9958..af3adc187 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/model_backupv1_status.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/model_backupv1_status.go @@ -33,7 +33,7 @@ type Backupv1Status struct { ErrorMessage *string `json:"errorMessage,omitempty"` // FileSize of the CloudSnap image. FileSize *string `json:"fileSize,omitempty"` - DeploymentMetaData *V1DeploymentMetaData `json:"deploymentMetaData,omitempty"` + DataServiceDeploymentMetaData *V1DataServiceDeploymentMetaData `json:"dataServiceDeploymentMetaData,omitempty"` } // NewBackupv1Status instantiates a new Backupv1Status object @@ -281,36 +281,36 @@ func (o *Backupv1Status) SetFileSize(v string) { o.FileSize = &v } -// GetDeploymentMetaData returns the DeploymentMetaData field value if set, zero value otherwise. -func (o *Backupv1Status) GetDeploymentMetaData() V1DeploymentMetaData { - if o == nil || IsNil(o.DeploymentMetaData) { - var ret V1DeploymentMetaData +// GetDataServiceDeploymentMetaData returns the DataServiceDeploymentMetaData field value if set, zero value otherwise. +func (o *Backupv1Status) GetDataServiceDeploymentMetaData() V1DataServiceDeploymentMetaData { + if o == nil || IsNil(o.DataServiceDeploymentMetaData) { + var ret V1DataServiceDeploymentMetaData return ret } - return *o.DeploymentMetaData + return *o.DataServiceDeploymentMetaData } -// GetDeploymentMetaDataOk returns a tuple with the DeploymentMetaData field value if set, nil otherwise +// GetDataServiceDeploymentMetaDataOk returns a tuple with the DataServiceDeploymentMetaData field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *Backupv1Status) GetDeploymentMetaDataOk() (*V1DeploymentMetaData, bool) { - if o == nil || IsNil(o.DeploymentMetaData) { +func (o *Backupv1Status) GetDataServiceDeploymentMetaDataOk() (*V1DataServiceDeploymentMetaData, bool) { + if o == nil || IsNil(o.DataServiceDeploymentMetaData) { return nil, false } - return o.DeploymentMetaData, true + return o.DataServiceDeploymentMetaData, true } -// HasDeploymentMetaData returns a boolean if a field has been set. -func (o *Backupv1Status) HasDeploymentMetaData() bool { - if o != nil && !IsNil(o.DeploymentMetaData) { +// HasDataServiceDeploymentMetaData returns a boolean if a field has been set. +func (o *Backupv1Status) HasDataServiceDeploymentMetaData() bool { + if o != nil && !IsNil(o.DataServiceDeploymentMetaData) { return true } return false } -// SetDeploymentMetaData gets a reference to the given V1DeploymentMetaData and assigns it to the DeploymentMetaData field. -func (o *Backupv1Status) SetDeploymentMetaData(v V1DeploymentMetaData) { - o.DeploymentMetaData = &v +// SetDataServiceDeploymentMetaData gets a reference to the given V1DataServiceDeploymentMetaData and assigns it to the DataServiceDeploymentMetaData field. +func (o *Backupv1Status) SetDataServiceDeploymentMetaData(v V1DataServiceDeploymentMetaData) { + o.DataServiceDeploymentMetaData = &v } func (o Backupv1Status) MarshalJSON() ([]byte, error) { @@ -344,8 +344,8 @@ func (o Backupv1Status) ToMap() (map[string]interface{}, error) { if !IsNil(o.FileSize) { toSerialize["fileSize"] = o.FileSize } - if !IsNil(o.DeploymentMetaData) { - toSerialize["deploymentMetaData"] = o.DeploymentMetaData + if !IsNil(o.DataServiceDeploymentMetaData) { + toSerialize["dataServiceDeploymentMetaData"] = o.DataServiceDeploymentMetaData } return toSerialize, nil } diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/model_status_phase.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/model_status_phase.go index 1eaf75c8f..a1b66b285 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/model_status_phase.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/model_status_phase.go @@ -15,7 +15,7 @@ import ( "fmt" ) -// StatusPhase Enum for Phase of the Deployment. - PHASE_UNSPECIFIED: Phase is unspecified. - IN_PROGRESS: Backup is in_progress. - COMPLETED: Backup is completed. - FAILED: Backup is failed. +// StatusPhase Enum for Phase of the DataService Deployment. - PHASE_UNSPECIFIED: Phase is unspecified. - IN_PROGRESS: Backup is in_progress. - COMPLETED: Backup is completed. - FAILED: Backup is failed. type StatusPhase string // List of StatusPhase diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/model_v1_deployment_meta_data.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/model_v1_data_service_deployment_meta_data.go similarity index 60% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/model_v1_deployment_meta_data.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/model_v1_data_service_deployment_meta_data.go index 058e3c78a..fb23cfa3e 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/model_v1_deployment_meta_data.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backup/model_v1_data_service_deployment_meta_data.go @@ -14,22 +14,22 @@ import ( "encoding/json" ) -// checks if the V1DeploymentMetaData type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &V1DeploymentMetaData{} +// checks if the V1DataServiceDeploymentMetaData type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &V1DataServiceDeploymentMetaData{} -// V1DeploymentMetaData Deployment Meta Data contains the details of the deployment associated with the backup. -type V1DeploymentMetaData struct { - // Name of the deployment. +// V1DataServiceDeploymentMetaData DataService Deployment Meta Data contains the details of the deployment associated with the backup. +type V1DataServiceDeploymentMetaData struct { + // Name of the data service deployment. Name *string `json:"name,omitempty"` // Custom Resource Name is the kubernetes resource name for the deployment meta data. CustomResourceName *string `json:"customResourceName,omitempty"` - // Deployment Target Name associated with the backup. - DeploymentTargetName *string `json:"deploymentTargetName,omitempty"` + // Target cluster Name associated with the backup. + TargetClusterName *string `json:"targetClusterName,omitempty"` // Namespace name to which the backup is associated. NamespaceName *string `json:"namespaceName,omitempty"` // Flag to check whether Transport Layer Security support is enabled or not. TlsEnabled *bool `json:"tlsEnabled,omitempty"` - // Name of the data service of deployment. + // Name of the data service of data service deployment. DataServiceName *string `json:"dataServiceName,omitempty"` // Name of the version of data service. DataServiceVersion *string `json:"dataServiceVersion,omitempty"` @@ -37,25 +37,25 @@ type V1DeploymentMetaData struct { ImageBuild *string `json:"imageBuild,omitempty"` } -// NewV1DeploymentMetaData instantiates a new V1DeploymentMetaData object +// NewV1DataServiceDeploymentMetaData instantiates a new V1DataServiceDeploymentMetaData object // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewV1DeploymentMetaData() *V1DeploymentMetaData { - this := V1DeploymentMetaData{} +func NewV1DataServiceDeploymentMetaData() *V1DataServiceDeploymentMetaData { + this := V1DataServiceDeploymentMetaData{} return &this } -// NewV1DeploymentMetaDataWithDefaults instantiates a new V1DeploymentMetaData object +// NewV1DataServiceDeploymentMetaDataWithDefaults instantiates a new V1DataServiceDeploymentMetaData object // This constructor will only assign default values to properties that have it defined, // but it doesn't guarantee that properties required by API are set -func NewV1DeploymentMetaDataWithDefaults() *V1DeploymentMetaData { - this := V1DeploymentMetaData{} +func NewV1DataServiceDeploymentMetaDataWithDefaults() *V1DataServiceDeploymentMetaData { + this := V1DataServiceDeploymentMetaData{} return &this } // GetName returns the Name field value if set, zero value otherwise. -func (o *V1DeploymentMetaData) GetName() string { +func (o *V1DataServiceDeploymentMetaData) GetName() string { if o == nil || IsNil(o.Name) { var ret string return ret @@ -65,7 +65,7 @@ func (o *V1DeploymentMetaData) GetName() string { // GetNameOk returns a tuple with the Name field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentMetaData) GetNameOk() (*string, bool) { +func (o *V1DataServiceDeploymentMetaData) GetNameOk() (*string, bool) { if o == nil || IsNil(o.Name) { return nil, false } @@ -73,7 +73,7 @@ func (o *V1DeploymentMetaData) GetNameOk() (*string, bool) { } // HasName returns a boolean if a field has been set. -func (o *V1DeploymentMetaData) HasName() bool { +func (o *V1DataServiceDeploymentMetaData) HasName() bool { if o != nil && !IsNil(o.Name) { return true } @@ -82,12 +82,12 @@ func (o *V1DeploymentMetaData) HasName() bool { } // SetName gets a reference to the given string and assigns it to the Name field. -func (o *V1DeploymentMetaData) SetName(v string) { +func (o *V1DataServiceDeploymentMetaData) SetName(v string) { o.Name = &v } // GetCustomResourceName returns the CustomResourceName field value if set, zero value otherwise. -func (o *V1DeploymentMetaData) GetCustomResourceName() string { +func (o *V1DataServiceDeploymentMetaData) GetCustomResourceName() string { if o == nil || IsNil(o.CustomResourceName) { var ret string return ret @@ -97,7 +97,7 @@ func (o *V1DeploymentMetaData) GetCustomResourceName() string { // GetCustomResourceNameOk returns a tuple with the CustomResourceName field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentMetaData) GetCustomResourceNameOk() (*string, bool) { +func (o *V1DataServiceDeploymentMetaData) GetCustomResourceNameOk() (*string, bool) { if o == nil || IsNil(o.CustomResourceName) { return nil, false } @@ -105,7 +105,7 @@ func (o *V1DeploymentMetaData) GetCustomResourceNameOk() (*string, bool) { } // HasCustomResourceName returns a boolean if a field has been set. -func (o *V1DeploymentMetaData) HasCustomResourceName() bool { +func (o *V1DataServiceDeploymentMetaData) HasCustomResourceName() bool { if o != nil && !IsNil(o.CustomResourceName) { return true } @@ -114,44 +114,44 @@ func (o *V1DeploymentMetaData) HasCustomResourceName() bool { } // SetCustomResourceName gets a reference to the given string and assigns it to the CustomResourceName field. -func (o *V1DeploymentMetaData) SetCustomResourceName(v string) { +func (o *V1DataServiceDeploymentMetaData) SetCustomResourceName(v string) { o.CustomResourceName = &v } -// GetDeploymentTargetName returns the DeploymentTargetName field value if set, zero value otherwise. -func (o *V1DeploymentMetaData) GetDeploymentTargetName() string { - if o == nil || IsNil(o.DeploymentTargetName) { +// GetTargetClusterName returns the TargetClusterName field value if set, zero value otherwise. +func (o *V1DataServiceDeploymentMetaData) GetTargetClusterName() string { + if o == nil || IsNil(o.TargetClusterName) { var ret string return ret } - return *o.DeploymentTargetName + return *o.TargetClusterName } -// GetDeploymentTargetNameOk returns a tuple with the DeploymentTargetName field value if set, nil otherwise +// GetTargetClusterNameOk returns a tuple with the TargetClusterName field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentMetaData) GetDeploymentTargetNameOk() (*string, bool) { - if o == nil || IsNil(o.DeploymentTargetName) { +func (o *V1DataServiceDeploymentMetaData) GetTargetClusterNameOk() (*string, bool) { + if o == nil || IsNil(o.TargetClusterName) { return nil, false } - return o.DeploymentTargetName, true + return o.TargetClusterName, true } -// HasDeploymentTargetName returns a boolean if a field has been set. -func (o *V1DeploymentMetaData) HasDeploymentTargetName() bool { - if o != nil && !IsNil(o.DeploymentTargetName) { +// HasTargetClusterName returns a boolean if a field has been set. +func (o *V1DataServiceDeploymentMetaData) HasTargetClusterName() bool { + if o != nil && !IsNil(o.TargetClusterName) { return true } return false } -// SetDeploymentTargetName gets a reference to the given string and assigns it to the DeploymentTargetName field. -func (o *V1DeploymentMetaData) SetDeploymentTargetName(v string) { - o.DeploymentTargetName = &v +// SetTargetClusterName gets a reference to the given string and assigns it to the TargetClusterName field. +func (o *V1DataServiceDeploymentMetaData) SetTargetClusterName(v string) { + o.TargetClusterName = &v } // GetNamespaceName returns the NamespaceName field value if set, zero value otherwise. -func (o *V1DeploymentMetaData) GetNamespaceName() string { +func (o *V1DataServiceDeploymentMetaData) GetNamespaceName() string { if o == nil || IsNil(o.NamespaceName) { var ret string return ret @@ -161,7 +161,7 @@ func (o *V1DeploymentMetaData) GetNamespaceName() string { // GetNamespaceNameOk returns a tuple with the NamespaceName field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentMetaData) GetNamespaceNameOk() (*string, bool) { +func (o *V1DataServiceDeploymentMetaData) GetNamespaceNameOk() (*string, bool) { if o == nil || IsNil(o.NamespaceName) { return nil, false } @@ -169,7 +169,7 @@ func (o *V1DeploymentMetaData) GetNamespaceNameOk() (*string, bool) { } // HasNamespaceName returns a boolean if a field has been set. -func (o *V1DeploymentMetaData) HasNamespaceName() bool { +func (o *V1DataServiceDeploymentMetaData) HasNamespaceName() bool { if o != nil && !IsNil(o.NamespaceName) { return true } @@ -178,12 +178,12 @@ func (o *V1DeploymentMetaData) HasNamespaceName() bool { } // SetNamespaceName gets a reference to the given string and assigns it to the NamespaceName field. -func (o *V1DeploymentMetaData) SetNamespaceName(v string) { +func (o *V1DataServiceDeploymentMetaData) SetNamespaceName(v string) { o.NamespaceName = &v } // GetTlsEnabled returns the TlsEnabled field value if set, zero value otherwise. -func (o *V1DeploymentMetaData) GetTlsEnabled() bool { +func (o *V1DataServiceDeploymentMetaData) GetTlsEnabled() bool { if o == nil || IsNil(o.TlsEnabled) { var ret bool return ret @@ -193,7 +193,7 @@ func (o *V1DeploymentMetaData) GetTlsEnabled() bool { // GetTlsEnabledOk returns a tuple with the TlsEnabled field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentMetaData) GetTlsEnabledOk() (*bool, bool) { +func (o *V1DataServiceDeploymentMetaData) GetTlsEnabledOk() (*bool, bool) { if o == nil || IsNil(o.TlsEnabled) { return nil, false } @@ -201,7 +201,7 @@ func (o *V1DeploymentMetaData) GetTlsEnabledOk() (*bool, bool) { } // HasTlsEnabled returns a boolean if a field has been set. -func (o *V1DeploymentMetaData) HasTlsEnabled() bool { +func (o *V1DataServiceDeploymentMetaData) HasTlsEnabled() bool { if o != nil && !IsNil(o.TlsEnabled) { return true } @@ -210,12 +210,12 @@ func (o *V1DeploymentMetaData) HasTlsEnabled() bool { } // SetTlsEnabled gets a reference to the given bool and assigns it to the TlsEnabled field. -func (o *V1DeploymentMetaData) SetTlsEnabled(v bool) { +func (o *V1DataServiceDeploymentMetaData) SetTlsEnabled(v bool) { o.TlsEnabled = &v } // GetDataServiceName returns the DataServiceName field value if set, zero value otherwise. -func (o *V1DeploymentMetaData) GetDataServiceName() string { +func (o *V1DataServiceDeploymentMetaData) GetDataServiceName() string { if o == nil || IsNil(o.DataServiceName) { var ret string return ret @@ -225,7 +225,7 @@ func (o *V1DeploymentMetaData) GetDataServiceName() string { // GetDataServiceNameOk returns a tuple with the DataServiceName field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentMetaData) GetDataServiceNameOk() (*string, bool) { +func (o *V1DataServiceDeploymentMetaData) GetDataServiceNameOk() (*string, bool) { if o == nil || IsNil(o.DataServiceName) { return nil, false } @@ -233,7 +233,7 @@ func (o *V1DeploymentMetaData) GetDataServiceNameOk() (*string, bool) { } // HasDataServiceName returns a boolean if a field has been set. -func (o *V1DeploymentMetaData) HasDataServiceName() bool { +func (o *V1DataServiceDeploymentMetaData) HasDataServiceName() bool { if o != nil && !IsNil(o.DataServiceName) { return true } @@ -242,12 +242,12 @@ func (o *V1DeploymentMetaData) HasDataServiceName() bool { } // SetDataServiceName gets a reference to the given string and assigns it to the DataServiceName field. -func (o *V1DeploymentMetaData) SetDataServiceName(v string) { +func (o *V1DataServiceDeploymentMetaData) SetDataServiceName(v string) { o.DataServiceName = &v } // GetDataServiceVersion returns the DataServiceVersion field value if set, zero value otherwise. -func (o *V1DeploymentMetaData) GetDataServiceVersion() string { +func (o *V1DataServiceDeploymentMetaData) GetDataServiceVersion() string { if o == nil || IsNil(o.DataServiceVersion) { var ret string return ret @@ -257,7 +257,7 @@ func (o *V1DeploymentMetaData) GetDataServiceVersion() string { // GetDataServiceVersionOk returns a tuple with the DataServiceVersion field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentMetaData) GetDataServiceVersionOk() (*string, bool) { +func (o *V1DataServiceDeploymentMetaData) GetDataServiceVersionOk() (*string, bool) { if o == nil || IsNil(o.DataServiceVersion) { return nil, false } @@ -265,7 +265,7 @@ func (o *V1DeploymentMetaData) GetDataServiceVersionOk() (*string, bool) { } // HasDataServiceVersion returns a boolean if a field has been set. -func (o *V1DeploymentMetaData) HasDataServiceVersion() bool { +func (o *V1DataServiceDeploymentMetaData) HasDataServiceVersion() bool { if o != nil && !IsNil(o.DataServiceVersion) { return true } @@ -274,12 +274,12 @@ func (o *V1DeploymentMetaData) HasDataServiceVersion() bool { } // SetDataServiceVersion gets a reference to the given string and assigns it to the DataServiceVersion field. -func (o *V1DeploymentMetaData) SetDataServiceVersion(v string) { +func (o *V1DataServiceDeploymentMetaData) SetDataServiceVersion(v string) { o.DataServiceVersion = &v } // GetImageBuild returns the ImageBuild field value if set, zero value otherwise. -func (o *V1DeploymentMetaData) GetImageBuild() string { +func (o *V1DataServiceDeploymentMetaData) GetImageBuild() string { if o == nil || IsNil(o.ImageBuild) { var ret string return ret @@ -289,7 +289,7 @@ func (o *V1DeploymentMetaData) GetImageBuild() string { // GetImageBuildOk returns a tuple with the ImageBuild field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentMetaData) GetImageBuildOk() (*string, bool) { +func (o *V1DataServiceDeploymentMetaData) GetImageBuildOk() (*string, bool) { if o == nil || IsNil(o.ImageBuild) { return nil, false } @@ -297,7 +297,7 @@ func (o *V1DeploymentMetaData) GetImageBuildOk() (*string, bool) { } // HasImageBuild returns a boolean if a field has been set. -func (o *V1DeploymentMetaData) HasImageBuild() bool { +func (o *V1DataServiceDeploymentMetaData) HasImageBuild() bool { if o != nil && !IsNil(o.ImageBuild) { return true } @@ -306,11 +306,11 @@ func (o *V1DeploymentMetaData) HasImageBuild() bool { } // SetImageBuild gets a reference to the given string and assigns it to the ImageBuild field. -func (o *V1DeploymentMetaData) SetImageBuild(v string) { +func (o *V1DataServiceDeploymentMetaData) SetImageBuild(v string) { o.ImageBuild = &v } -func (o V1DeploymentMetaData) MarshalJSON() ([]byte, error) { +func (o V1DataServiceDeploymentMetaData) MarshalJSON() ([]byte, error) { toSerialize,err := o.ToMap() if err != nil { return []byte{}, err @@ -318,7 +318,7 @@ func (o V1DeploymentMetaData) MarshalJSON() ([]byte, error) { return json.Marshal(toSerialize) } -func (o V1DeploymentMetaData) ToMap() (map[string]interface{}, error) { +func (o V1DataServiceDeploymentMetaData) ToMap() (map[string]interface{}, error) { toSerialize := map[string]interface{}{} if !IsNil(o.Name) { toSerialize["name"] = o.Name @@ -326,8 +326,8 @@ func (o V1DeploymentMetaData) ToMap() (map[string]interface{}, error) { if !IsNil(o.CustomResourceName) { toSerialize["customResourceName"] = o.CustomResourceName } - if !IsNil(o.DeploymentTargetName) { - toSerialize["deploymentTargetName"] = o.DeploymentTargetName + if !IsNil(o.TargetClusterName) { + toSerialize["targetClusterName"] = o.TargetClusterName } if !IsNil(o.NamespaceName) { toSerialize["namespaceName"] = o.NamespaceName @@ -347,38 +347,38 @@ func (o V1DeploymentMetaData) ToMap() (map[string]interface{}, error) { return toSerialize, nil } -type NullableV1DeploymentMetaData struct { - value *V1DeploymentMetaData +type NullableV1DataServiceDeploymentMetaData struct { + value *V1DataServiceDeploymentMetaData isSet bool } -func (v NullableV1DeploymentMetaData) Get() *V1DeploymentMetaData { +func (v NullableV1DataServiceDeploymentMetaData) Get() *V1DataServiceDeploymentMetaData { return v.value } -func (v *NullableV1DeploymentMetaData) Set(val *V1DeploymentMetaData) { +func (v *NullableV1DataServiceDeploymentMetaData) Set(val *V1DataServiceDeploymentMetaData) { v.value = val v.isSet = true } -func (v NullableV1DeploymentMetaData) IsSet() bool { +func (v NullableV1DataServiceDeploymentMetaData) IsSet() bool { return v.isSet } -func (v *NullableV1DeploymentMetaData) Unset() { +func (v *NullableV1DataServiceDeploymentMetaData) Unset() { v.value = nil v.isSet = false } -func NewNullableV1DeploymentMetaData(val *V1DeploymentMetaData) *NullableV1DeploymentMetaData { - return &NullableV1DeploymentMetaData{value: val, isSet: true} +func NewNullableV1DataServiceDeploymentMetaData(val *V1DataServiceDeploymentMetaData) *NullableV1DataServiceDeploymentMetaData { + return &NullableV1DataServiceDeploymentMetaData{value: val, isSet: true} } -func (v NullableV1DeploymentMetaData) MarshalJSON() ([]byte, error) { +func (v NullableV1DataServiceDeploymentMetaData) MarshalJSON() ([]byte, error) { return json.Marshal(v.value) } -func (v *NullableV1DeploymentMetaData) UnmarshalJSON(src []byte) error { +func (v *NullableV1DataServiceDeploymentMetaData) UnmarshalJSON(src []byte) error { v.isSet = true return json.Unmarshal(src, &v.value) } diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/README.md b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/README.md index b028bb82c..353f0f692 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/README.md +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/README.md @@ -7,7 +7,7 @@ This API client was generated by the [OpenAPI Generator](https://openapi-generat - API version: version not set - Package version: 1.0.0 -- Generator version: 7.6.0-SNAPSHOT +- Generator version: 7.7.0-SNAPSHOT - Build package: org.openapitools.codegen.languages.GoClientCodegen ## Installation @@ -81,7 +81,7 @@ Class | Method | HTTP request | Description *BackupConfigServiceAPI* | [**BackupConfigServiceCreateBackupConfig**](docs/BackupConfigServiceAPI.md#backupconfigservicecreatebackupconfig) | **Post** /pds/v1/projects/{projectId}/backupConfigs | CreateBackupConfig API creates the backup configuration of the backup. *BackupConfigServiceAPI* | [**BackupConfigServiceDeleteBackupConfig**](docs/BackupConfigServiceAPI.md#backupconfigservicedeletebackupconfig) | **Delete** /pds/v1/backupConfigs/{id} | DeleteBackupConfig API deletes the backup configuration. *BackupConfigServiceAPI* | [**BackupConfigServiceGetBackupConfig**](docs/BackupConfigServiceAPI.md#backupconfigservicegetbackupconfig) | **Get** /pds/v1/backupConfigs/{id} | GetBackupConfig API returns the the backup configuration resource. -*BackupConfigServiceAPI* | [**BackupConfigServiceListBackupConfigs**](docs/BackupConfigServiceAPI.md#backupconfigservicelistbackupconfigs) | **Get** /pds/v1/backupConfigs | ListBackupConfigs API lists all the backup configuration for a deployment. +*BackupConfigServiceAPI* | [**BackupConfigServiceListBackupConfigs**](docs/BackupConfigServiceAPI.md#backupconfigservicelistbackupconfigs) | **Get** /pds/v1/backupConfigs | ListBackupConfigs API lists all the backup configuration for a data service deployment. *BackupConfigServiceAPI* | [**BackupConfigServiceUpdateBackupConfig**](docs/BackupConfigServiceAPI.md#backupconfigserviceupdatebackupconfig) | **Put** /pds/v1/backupConfigs/{id} | UpdateBackupConfig API updates the backup configuration of the backup. @@ -97,16 +97,16 @@ Class | Method | HTTP request | Description - [ProtobufAny](docs/ProtobufAny.md) - [SortByField](docs/SortByField.md) - [SortOrderValue](docs/SortOrderValue.md) - - [StatusPhase](docs/StatusPhase.md) - [V1BackupConfig](docs/V1BackupConfig.md) - [V1BackupConfigSuspended](docs/V1BackupConfigSuspended.md) - [V1BackupPolicy](docs/V1BackupPolicy.md) - [V1Config](docs/V1Config.md) - - [V1DeploymentMetaData](docs/V1DeploymentMetaData.md) + - [V1DataServiceDeploymentMetaData](docs/V1DataServiceDeploymentMetaData.md) - [V1ListBackupConfigsResponse](docs/V1ListBackupConfigsResponse.md) - [V1Meta](docs/V1Meta.md) - [V1PageBasedPaginationRequest](docs/V1PageBasedPaginationRequest.md) - [V1PageBasedPaginationResponse](docs/V1PageBasedPaginationResponse.md) + - [V1Phase](docs/V1Phase.md) - [V1Reference](docs/V1Reference.md) - [V1References](docs/V1References.md) - [V1Sort](docs/V1Sort.md) diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/api_backup_config_service.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/api_backup_config_service.go index 8e5afa724..3d50342c1 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/api_backup_config_service.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/api_backup_config_service.go @@ -378,7 +378,7 @@ type ApiBackupConfigServiceListBackupConfigsRequest struct { projectId *string targetClusterId *string namespaceId *string - deploymentId *string + dataServiceDeploymentId *string paginationPageNumber *string paginationPageSize *string sortSortBy *string @@ -410,9 +410,9 @@ func (r ApiBackupConfigServiceListBackupConfigsRequest) NamespaceId(namespaceId return r } -// Deployment ID for which the backup configurations will be listed. -func (r ApiBackupConfigServiceListBackupConfigsRequest) DeploymentId(deploymentId string) ApiBackupConfigServiceListBackupConfigsRequest { - r.deploymentId = &deploymentId +// Data service Deployment ID for which the backup configurations will be listed. +func (r ApiBackupConfigServiceListBackupConfigsRequest) DataServiceDeploymentId(dataServiceDeploymentId string) ApiBackupConfigServiceListBackupConfigsRequest { + r.dataServiceDeploymentId = &dataServiceDeploymentId return r } @@ -451,7 +451,7 @@ func (r ApiBackupConfigServiceListBackupConfigsRequest) Execute() (*V1ListBackup } /* -BackupConfigServiceListBackupConfigs ListBackupConfigs API lists all the backup configuration for a deployment. +BackupConfigServiceListBackupConfigs ListBackupConfigs API lists all the backup configuration for a data service deployment. @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). @return ApiBackupConfigServiceListBackupConfigsRequest @@ -496,8 +496,8 @@ func (a *BackupConfigServiceAPIService) BackupConfigServiceListBackupConfigsExec if r.namespaceId != nil { parameterAddToHeaderOrQuery(localVarQueryParams, "namespaceId", r.namespaceId, "") } - if r.deploymentId != nil { - parameterAddToHeaderOrQuery(localVarQueryParams, "deploymentId", r.deploymentId, "") + if r.dataServiceDeploymentId != nil { + parameterAddToHeaderOrQuery(localVarQueryParams, "dataServiceDeploymentId", r.dataServiceDeploymentId, "") } if r.paginationPageNumber != nil { parameterAddToHeaderOrQuery(localVarQueryParams, "pagination.pageNumber", r.paginationPageNumber, "") diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/client.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/client.go index 9a8ed090f..60ad7264e 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/client.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/client.go @@ -162,7 +162,7 @@ func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix stri return } if t, ok := obj.(time.Time); ok { - parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339), collectionType) + parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339Nano), collectionType) return } value = v.Type().String() + " value" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_backup_config_service_create_backup_config_body.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_backup_config_service_create_backup_config_body.go index 5301c0be9..685f7c485 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_backup_config_service_create_backup_config_body.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_backup_config_service_create_backup_config_body.go @@ -21,8 +21,8 @@ var _ MappedNullable = &BackupConfigServiceCreateBackupConfigBody{} // BackupConfigServiceCreateBackupConfigBody Request to create a backup configuration. type BackupConfigServiceCreateBackupConfigBody struct { - // Deployment id associated with the backup configuration. - DeploymentId string `json:"deploymentId"` + // Data service Deployment id associated with the backup configuration. + DataServiceDeploymentId string `json:"dataServiceDeploymentId"` BackupConfig V1BackupConfig `json:"backupConfig"` } @@ -32,9 +32,9 @@ type _BackupConfigServiceCreateBackupConfigBody BackupConfigServiceCreateBackupC // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewBackupConfigServiceCreateBackupConfigBody(deploymentId string, backupConfig V1BackupConfig) *BackupConfigServiceCreateBackupConfigBody { +func NewBackupConfigServiceCreateBackupConfigBody(dataServiceDeploymentId string, backupConfig V1BackupConfig) *BackupConfigServiceCreateBackupConfigBody { this := BackupConfigServiceCreateBackupConfigBody{} - this.DeploymentId = deploymentId + this.DataServiceDeploymentId = dataServiceDeploymentId this.BackupConfig = backupConfig return &this } @@ -47,28 +47,28 @@ func NewBackupConfigServiceCreateBackupConfigBodyWithDefaults() *BackupConfigSer return &this } -// GetDeploymentId returns the DeploymentId field value -func (o *BackupConfigServiceCreateBackupConfigBody) GetDeploymentId() string { +// GetDataServiceDeploymentId returns the DataServiceDeploymentId field value +func (o *BackupConfigServiceCreateBackupConfigBody) GetDataServiceDeploymentId() string { if o == nil { var ret string return ret } - return o.DeploymentId + return o.DataServiceDeploymentId } -// GetDeploymentIdOk returns a tuple with the DeploymentId field value +// GetDataServiceDeploymentIdOk returns a tuple with the DataServiceDeploymentId field value // and a boolean to check if the value has been set. -func (o *BackupConfigServiceCreateBackupConfigBody) GetDeploymentIdOk() (*string, bool) { +func (o *BackupConfigServiceCreateBackupConfigBody) GetDataServiceDeploymentIdOk() (*string, bool) { if o == nil { return nil, false } - return &o.DeploymentId, true + return &o.DataServiceDeploymentId, true } -// SetDeploymentId sets field value -func (o *BackupConfigServiceCreateBackupConfigBody) SetDeploymentId(v string) { - o.DeploymentId = v +// SetDataServiceDeploymentId sets field value +func (o *BackupConfigServiceCreateBackupConfigBody) SetDataServiceDeploymentId(v string) { + o.DataServiceDeploymentId = v } // GetBackupConfig returns the BackupConfig field value @@ -105,7 +105,7 @@ func (o BackupConfigServiceCreateBackupConfigBody) MarshalJSON() ([]byte, error) func (o BackupConfigServiceCreateBackupConfigBody) ToMap() (map[string]interface{}, error) { toSerialize := map[string]interface{}{} - toSerialize["deploymentId"] = o.DeploymentId + toSerialize["dataServiceDeploymentId"] = o.DataServiceDeploymentId toSerialize["backupConfig"] = o.BackupConfig return toSerialize, nil } @@ -115,7 +115,7 @@ func (o *BackupConfigServiceCreateBackupConfigBody) UnmarshalJSON(data []byte) ( // by unmarshalling the object into a generic map with string keys and checking // that every required field exists as a key in the generic map. requiredProperties := []string{ - "deploymentId", + "dataServiceDeploymentId", "backupConfig", } diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_backupconfigv1_status.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_backupconfigv1_status.go index 9765748f7..55871af32 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_backupconfigv1_status.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_backupconfigv1_status.go @@ -19,12 +19,16 @@ var _ MappedNullable = &Backupconfigv1Status{} // Backupconfigv1Status Status for backup configuration. type Backupconfigv1Status struct { - Phase *StatusPhase `json:"phase,omitempty"` + Phase *V1Phase `json:"phase,omitempty"` // Custom Resource Name is the kubernetes resource name for the backup that is built from ID. CustomResourceName *string `json:"customResourceName,omitempty"` // Flag to check if the backup policy is synchronized or not. IsBackupPolicySynchronized *bool `json:"isBackupPolicySynchronized,omitempty"` - DeploymentMetaData *V1DeploymentMetaData `json:"deploymentMetaData,omitempty"` + DataServiceDeploymentMetaData *V1DataServiceDeploymentMetaData `json:"dataServiceDeploymentMetaData,omitempty"` + // Error code. + ErrorCode *string `json:"errorCode,omitempty"` + // Error message. + ErrorMessage *string `json:"errorMessage,omitempty"` } // NewBackupconfigv1Status instantiates a new Backupconfigv1Status object @@ -33,7 +37,7 @@ type Backupconfigv1Status struct { // will change when the set of required properties is changed func NewBackupconfigv1Status() *Backupconfigv1Status { this := Backupconfigv1Status{} - var phase StatusPhase = STATUSPHASE_PHASE_UNSPECIFIED + var phase V1Phase = V1PHASE_PHASE_UNSPECIFIED this.Phase = &phase return &this } @@ -43,15 +47,15 @@ func NewBackupconfigv1Status() *Backupconfigv1Status { // but it doesn't guarantee that properties required by API are set func NewBackupconfigv1StatusWithDefaults() *Backupconfigv1Status { this := Backupconfigv1Status{} - var phase StatusPhase = STATUSPHASE_PHASE_UNSPECIFIED + var phase V1Phase = V1PHASE_PHASE_UNSPECIFIED this.Phase = &phase return &this } // GetPhase returns the Phase field value if set, zero value otherwise. -func (o *Backupconfigv1Status) GetPhase() StatusPhase { +func (o *Backupconfigv1Status) GetPhase() V1Phase { if o == nil || IsNil(o.Phase) { - var ret StatusPhase + var ret V1Phase return ret } return *o.Phase @@ -59,7 +63,7 @@ func (o *Backupconfigv1Status) GetPhase() StatusPhase { // GetPhaseOk returns a tuple with the Phase field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *Backupconfigv1Status) GetPhaseOk() (*StatusPhase, bool) { +func (o *Backupconfigv1Status) GetPhaseOk() (*V1Phase, bool) { if o == nil || IsNil(o.Phase) { return nil, false } @@ -75,8 +79,8 @@ func (o *Backupconfigv1Status) HasPhase() bool { return false } -// SetPhase gets a reference to the given StatusPhase and assigns it to the Phase field. -func (o *Backupconfigv1Status) SetPhase(v StatusPhase) { +// SetPhase gets a reference to the given V1Phase and assigns it to the Phase field. +func (o *Backupconfigv1Status) SetPhase(v V1Phase) { o.Phase = &v } @@ -144,36 +148,100 @@ func (o *Backupconfigv1Status) SetIsBackupPolicySynchronized(v bool) { o.IsBackupPolicySynchronized = &v } -// GetDeploymentMetaData returns the DeploymentMetaData field value if set, zero value otherwise. -func (o *Backupconfigv1Status) GetDeploymentMetaData() V1DeploymentMetaData { - if o == nil || IsNil(o.DeploymentMetaData) { - var ret V1DeploymentMetaData +// GetDataServiceDeploymentMetaData returns the DataServiceDeploymentMetaData field value if set, zero value otherwise. +func (o *Backupconfigv1Status) GetDataServiceDeploymentMetaData() V1DataServiceDeploymentMetaData { + if o == nil || IsNil(o.DataServiceDeploymentMetaData) { + var ret V1DataServiceDeploymentMetaData return ret } - return *o.DeploymentMetaData + return *o.DataServiceDeploymentMetaData } -// GetDeploymentMetaDataOk returns a tuple with the DeploymentMetaData field value if set, nil otherwise +// GetDataServiceDeploymentMetaDataOk returns a tuple with the DataServiceDeploymentMetaData field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *Backupconfigv1Status) GetDeploymentMetaDataOk() (*V1DeploymentMetaData, bool) { - if o == nil || IsNil(o.DeploymentMetaData) { +func (o *Backupconfigv1Status) GetDataServiceDeploymentMetaDataOk() (*V1DataServiceDeploymentMetaData, bool) { + if o == nil || IsNil(o.DataServiceDeploymentMetaData) { return nil, false } - return o.DeploymentMetaData, true + return o.DataServiceDeploymentMetaData, true } -// HasDeploymentMetaData returns a boolean if a field has been set. -func (o *Backupconfigv1Status) HasDeploymentMetaData() bool { - if o != nil && !IsNil(o.DeploymentMetaData) { +// HasDataServiceDeploymentMetaData returns a boolean if a field has been set. +func (o *Backupconfigv1Status) HasDataServiceDeploymentMetaData() bool { + if o != nil && !IsNil(o.DataServiceDeploymentMetaData) { return true } return false } -// SetDeploymentMetaData gets a reference to the given V1DeploymentMetaData and assigns it to the DeploymentMetaData field. -func (o *Backupconfigv1Status) SetDeploymentMetaData(v V1DeploymentMetaData) { - o.DeploymentMetaData = &v +// SetDataServiceDeploymentMetaData gets a reference to the given V1DataServiceDeploymentMetaData and assigns it to the DataServiceDeploymentMetaData field. +func (o *Backupconfigv1Status) SetDataServiceDeploymentMetaData(v V1DataServiceDeploymentMetaData) { + o.DataServiceDeploymentMetaData = &v +} + +// GetErrorCode returns the ErrorCode field value if set, zero value otherwise. +func (o *Backupconfigv1Status) GetErrorCode() string { + if o == nil || IsNil(o.ErrorCode) { + var ret string + return ret + } + return *o.ErrorCode +} + +// GetErrorCodeOk returns a tuple with the ErrorCode field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *Backupconfigv1Status) GetErrorCodeOk() (*string, bool) { + if o == nil || IsNil(o.ErrorCode) { + return nil, false + } + return o.ErrorCode, true +} + +// HasErrorCode returns a boolean if a field has been set. +func (o *Backupconfigv1Status) HasErrorCode() bool { + if o != nil && !IsNil(o.ErrorCode) { + return true + } + + return false +} + +// SetErrorCode gets a reference to the given string and assigns it to the ErrorCode field. +func (o *Backupconfigv1Status) SetErrorCode(v string) { + o.ErrorCode = &v +} + +// GetErrorMessage returns the ErrorMessage field value if set, zero value otherwise. +func (o *Backupconfigv1Status) GetErrorMessage() string { + if o == nil || IsNil(o.ErrorMessage) { + var ret string + return ret + } + return *o.ErrorMessage +} + +// GetErrorMessageOk returns a tuple with the ErrorMessage field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *Backupconfigv1Status) GetErrorMessageOk() (*string, bool) { + if o == nil || IsNil(o.ErrorMessage) { + return nil, false + } + return o.ErrorMessage, true +} + +// HasErrorMessage returns a boolean if a field has been set. +func (o *Backupconfigv1Status) HasErrorMessage() bool { + if o != nil && !IsNil(o.ErrorMessage) { + return true + } + + return false +} + +// SetErrorMessage gets a reference to the given string and assigns it to the ErrorMessage field. +func (o *Backupconfigv1Status) SetErrorMessage(v string) { + o.ErrorMessage = &v } func (o Backupconfigv1Status) MarshalJSON() ([]byte, error) { @@ -195,8 +263,14 @@ func (o Backupconfigv1Status) ToMap() (map[string]interface{}, error) { if !IsNil(o.IsBackupPolicySynchronized) { toSerialize["isBackupPolicySynchronized"] = o.IsBackupPolicySynchronized } - if !IsNil(o.DeploymentMetaData) { - toSerialize["deploymentMetaData"] = o.DeploymentMetaData + if !IsNil(o.DataServiceDeploymentMetaData) { + toSerialize["dataServiceDeploymentMetaData"] = o.DataServiceDeploymentMetaData + } + if !IsNil(o.ErrorCode) { + toSerialize["errorCode"] = o.ErrorCode + } + if !IsNil(o.ErrorMessage) { + toSerialize["errorMessage"] = o.ErrorMessage } return toSerialize, nil } diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_status_phase.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_status_phase.go deleted file mode 100644 index 54506e453..000000000 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_status_phase.go +++ /dev/null @@ -1,119 +0,0 @@ -/* -public/portworx/pds/backupconfig/apiv1/backupconfig.proto - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: version not set -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package backupconfig - -import ( - "encoding/json" - "fmt" -) - -// StatusPhase Enum for Phases of the backup configuration. - PHASE_UNSPECIFIED: Unspecified state. - PREPARING: Preparing state before creation is successful. - APPLIED: Applied state when create/update is successful. - UPDATING: Updating state. - FAILED: Failed state. - SUSPENDED: Suspended state. -type StatusPhase string - -// List of StatusPhase -const ( - STATUSPHASE_PHASE_UNSPECIFIED StatusPhase = "PHASE_UNSPECIFIED" - STATUSPHASE_PREPARING StatusPhase = "PREPARING" - STATUSPHASE_APPLIED StatusPhase = "APPLIED" - STATUSPHASE_UPDATING StatusPhase = "UPDATING" - STATUSPHASE_FAILED StatusPhase = "FAILED" - STATUSPHASE_SUSPENDED StatusPhase = "SUSPENDED" -) - -// All allowed values of StatusPhase enum -var AllowedStatusPhaseEnumValues = []StatusPhase{ - "PHASE_UNSPECIFIED", - "PREPARING", - "APPLIED", - "UPDATING", - "FAILED", - "SUSPENDED", -} - -func (v *StatusPhase) UnmarshalJSON(src []byte) error { - var value string - err := json.Unmarshal(src, &value) - if err != nil { - return err - } - enumTypeValue := StatusPhase(value) - for _, existing := range AllowedStatusPhaseEnumValues { - if existing == enumTypeValue { - *v = enumTypeValue - return nil - } - } - - return fmt.Errorf("%+v is not a valid StatusPhase", value) -} - -// NewStatusPhaseFromValue returns a pointer to a valid StatusPhase -// for the value passed as argument, or an error if the value passed is not allowed by the enum -func NewStatusPhaseFromValue(v string) (*StatusPhase, error) { - ev := StatusPhase(v) - if ev.IsValid() { - return &ev, nil - } else { - return nil, fmt.Errorf("invalid value '%v' for StatusPhase: valid values are %v", v, AllowedStatusPhaseEnumValues) - } -} - -// IsValid return true if the value is valid for the enum, false otherwise -func (v StatusPhase) IsValid() bool { - for _, existing := range AllowedStatusPhaseEnumValues { - if existing == v { - return true - } - } - return false -} - -// Ptr returns reference to StatusPhase value -func (v StatusPhase) Ptr() *StatusPhase { - return &v -} - -type NullableStatusPhase struct { - value *StatusPhase - isSet bool -} - -func (v NullableStatusPhase) Get() *StatusPhase { - return v.value -} - -func (v *NullableStatusPhase) Set(val *StatusPhase) { - v.value = val - v.isSet = true -} - -func (v NullableStatusPhase) IsSet() bool { - return v.isSet -} - -func (v *NullableStatusPhase) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullableStatusPhase(val *StatusPhase) *NullableStatusPhase { - return &NullableStatusPhase{value: val, isSet: true} -} - -func (v NullableStatusPhase) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullableStatusPhase) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_v1_deployment_meta_data.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_v1_data_service_deployment_meta_data.go similarity index 54% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_v1_deployment_meta_data.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_v1_data_service_deployment_meta_data.go index 64a0dbadd..34dd0d9d8 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_v1_deployment_meta_data.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_v1_data_service_deployment_meta_data.go @@ -14,42 +14,42 @@ import ( "encoding/json" ) -// checks if the V1DeploymentMetaData type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &V1DeploymentMetaData{} +// checks if the V1DataServiceDeploymentMetaData type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &V1DataServiceDeploymentMetaData{} -// V1DeploymentMetaData Deployment Meta Data contains the details of the deployment associated with the backup configuration. -type V1DeploymentMetaData struct { - // Name of the deployment. +// V1DataServiceDeploymentMetaData DataServiceDeployment Meta Data contains the details of the DataService deployment associated with the backup configuration. +type V1DataServiceDeploymentMetaData struct { + // Name of the DataService deployment. Name *string `json:"name,omitempty"` // Custom Resource Name is the kubernetes resource name for the deployment meta data. CustomResourceName *string `json:"customResourceName,omitempty"` - // Deployment Target Name associated with the backup configuration. - DeploymentTargetName *string `json:"deploymentTargetName,omitempty"` + // Target cluster Name associated with the backup configuration. + TargetClusterName *string `json:"targetClusterName,omitempty"` // Namespace name to which the backup configuration is associated. NamespaceName *string `json:"namespaceName,omitempty"` // Flag to check whether Transport Layer Security support is enabled or not. TlsEnabled *bool `json:"tlsEnabled,omitempty"` } -// NewV1DeploymentMetaData instantiates a new V1DeploymentMetaData object +// NewV1DataServiceDeploymentMetaData instantiates a new V1DataServiceDeploymentMetaData object // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewV1DeploymentMetaData() *V1DeploymentMetaData { - this := V1DeploymentMetaData{} +func NewV1DataServiceDeploymentMetaData() *V1DataServiceDeploymentMetaData { + this := V1DataServiceDeploymentMetaData{} return &this } -// NewV1DeploymentMetaDataWithDefaults instantiates a new V1DeploymentMetaData object +// NewV1DataServiceDeploymentMetaDataWithDefaults instantiates a new V1DataServiceDeploymentMetaData object // This constructor will only assign default values to properties that have it defined, // but it doesn't guarantee that properties required by API are set -func NewV1DeploymentMetaDataWithDefaults() *V1DeploymentMetaData { - this := V1DeploymentMetaData{} +func NewV1DataServiceDeploymentMetaDataWithDefaults() *V1DataServiceDeploymentMetaData { + this := V1DataServiceDeploymentMetaData{} return &this } // GetName returns the Name field value if set, zero value otherwise. -func (o *V1DeploymentMetaData) GetName() string { +func (o *V1DataServiceDeploymentMetaData) GetName() string { if o == nil || IsNil(o.Name) { var ret string return ret @@ -59,7 +59,7 @@ func (o *V1DeploymentMetaData) GetName() string { // GetNameOk returns a tuple with the Name field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentMetaData) GetNameOk() (*string, bool) { +func (o *V1DataServiceDeploymentMetaData) GetNameOk() (*string, bool) { if o == nil || IsNil(o.Name) { return nil, false } @@ -67,7 +67,7 @@ func (o *V1DeploymentMetaData) GetNameOk() (*string, bool) { } // HasName returns a boolean if a field has been set. -func (o *V1DeploymentMetaData) HasName() bool { +func (o *V1DataServiceDeploymentMetaData) HasName() bool { if o != nil && !IsNil(o.Name) { return true } @@ -76,12 +76,12 @@ func (o *V1DeploymentMetaData) HasName() bool { } // SetName gets a reference to the given string and assigns it to the Name field. -func (o *V1DeploymentMetaData) SetName(v string) { +func (o *V1DataServiceDeploymentMetaData) SetName(v string) { o.Name = &v } // GetCustomResourceName returns the CustomResourceName field value if set, zero value otherwise. -func (o *V1DeploymentMetaData) GetCustomResourceName() string { +func (o *V1DataServiceDeploymentMetaData) GetCustomResourceName() string { if o == nil || IsNil(o.CustomResourceName) { var ret string return ret @@ -91,7 +91,7 @@ func (o *V1DeploymentMetaData) GetCustomResourceName() string { // GetCustomResourceNameOk returns a tuple with the CustomResourceName field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentMetaData) GetCustomResourceNameOk() (*string, bool) { +func (o *V1DataServiceDeploymentMetaData) GetCustomResourceNameOk() (*string, bool) { if o == nil || IsNil(o.CustomResourceName) { return nil, false } @@ -99,7 +99,7 @@ func (o *V1DeploymentMetaData) GetCustomResourceNameOk() (*string, bool) { } // HasCustomResourceName returns a boolean if a field has been set. -func (o *V1DeploymentMetaData) HasCustomResourceName() bool { +func (o *V1DataServiceDeploymentMetaData) HasCustomResourceName() bool { if o != nil && !IsNil(o.CustomResourceName) { return true } @@ -108,44 +108,44 @@ func (o *V1DeploymentMetaData) HasCustomResourceName() bool { } // SetCustomResourceName gets a reference to the given string and assigns it to the CustomResourceName field. -func (o *V1DeploymentMetaData) SetCustomResourceName(v string) { +func (o *V1DataServiceDeploymentMetaData) SetCustomResourceName(v string) { o.CustomResourceName = &v } -// GetDeploymentTargetName returns the DeploymentTargetName field value if set, zero value otherwise. -func (o *V1DeploymentMetaData) GetDeploymentTargetName() string { - if o == nil || IsNil(o.DeploymentTargetName) { +// GetTargetClusterName returns the TargetClusterName field value if set, zero value otherwise. +func (o *V1DataServiceDeploymentMetaData) GetTargetClusterName() string { + if o == nil || IsNil(o.TargetClusterName) { var ret string return ret } - return *o.DeploymentTargetName + return *o.TargetClusterName } -// GetDeploymentTargetNameOk returns a tuple with the DeploymentTargetName field value if set, nil otherwise +// GetTargetClusterNameOk returns a tuple with the TargetClusterName field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentMetaData) GetDeploymentTargetNameOk() (*string, bool) { - if o == nil || IsNil(o.DeploymentTargetName) { +func (o *V1DataServiceDeploymentMetaData) GetTargetClusterNameOk() (*string, bool) { + if o == nil || IsNil(o.TargetClusterName) { return nil, false } - return o.DeploymentTargetName, true + return o.TargetClusterName, true } -// HasDeploymentTargetName returns a boolean if a field has been set. -func (o *V1DeploymentMetaData) HasDeploymentTargetName() bool { - if o != nil && !IsNil(o.DeploymentTargetName) { +// HasTargetClusterName returns a boolean if a field has been set. +func (o *V1DataServiceDeploymentMetaData) HasTargetClusterName() bool { + if o != nil && !IsNil(o.TargetClusterName) { return true } return false } -// SetDeploymentTargetName gets a reference to the given string and assigns it to the DeploymentTargetName field. -func (o *V1DeploymentMetaData) SetDeploymentTargetName(v string) { - o.DeploymentTargetName = &v +// SetTargetClusterName gets a reference to the given string and assigns it to the TargetClusterName field. +func (o *V1DataServiceDeploymentMetaData) SetTargetClusterName(v string) { + o.TargetClusterName = &v } // GetNamespaceName returns the NamespaceName field value if set, zero value otherwise. -func (o *V1DeploymentMetaData) GetNamespaceName() string { +func (o *V1DataServiceDeploymentMetaData) GetNamespaceName() string { if o == nil || IsNil(o.NamespaceName) { var ret string return ret @@ -155,7 +155,7 @@ func (o *V1DeploymentMetaData) GetNamespaceName() string { // GetNamespaceNameOk returns a tuple with the NamespaceName field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentMetaData) GetNamespaceNameOk() (*string, bool) { +func (o *V1DataServiceDeploymentMetaData) GetNamespaceNameOk() (*string, bool) { if o == nil || IsNil(o.NamespaceName) { return nil, false } @@ -163,7 +163,7 @@ func (o *V1DeploymentMetaData) GetNamespaceNameOk() (*string, bool) { } // HasNamespaceName returns a boolean if a field has been set. -func (o *V1DeploymentMetaData) HasNamespaceName() bool { +func (o *V1DataServiceDeploymentMetaData) HasNamespaceName() bool { if o != nil && !IsNil(o.NamespaceName) { return true } @@ -172,12 +172,12 @@ func (o *V1DeploymentMetaData) HasNamespaceName() bool { } // SetNamespaceName gets a reference to the given string and assigns it to the NamespaceName field. -func (o *V1DeploymentMetaData) SetNamespaceName(v string) { +func (o *V1DataServiceDeploymentMetaData) SetNamespaceName(v string) { o.NamespaceName = &v } // GetTlsEnabled returns the TlsEnabled field value if set, zero value otherwise. -func (o *V1DeploymentMetaData) GetTlsEnabled() bool { +func (o *V1DataServiceDeploymentMetaData) GetTlsEnabled() bool { if o == nil || IsNil(o.TlsEnabled) { var ret bool return ret @@ -187,7 +187,7 @@ func (o *V1DeploymentMetaData) GetTlsEnabled() bool { // GetTlsEnabledOk returns a tuple with the TlsEnabled field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentMetaData) GetTlsEnabledOk() (*bool, bool) { +func (o *V1DataServiceDeploymentMetaData) GetTlsEnabledOk() (*bool, bool) { if o == nil || IsNil(o.TlsEnabled) { return nil, false } @@ -195,7 +195,7 @@ func (o *V1DeploymentMetaData) GetTlsEnabledOk() (*bool, bool) { } // HasTlsEnabled returns a boolean if a field has been set. -func (o *V1DeploymentMetaData) HasTlsEnabled() bool { +func (o *V1DataServiceDeploymentMetaData) HasTlsEnabled() bool { if o != nil && !IsNil(o.TlsEnabled) { return true } @@ -204,11 +204,11 @@ func (o *V1DeploymentMetaData) HasTlsEnabled() bool { } // SetTlsEnabled gets a reference to the given bool and assigns it to the TlsEnabled field. -func (o *V1DeploymentMetaData) SetTlsEnabled(v bool) { +func (o *V1DataServiceDeploymentMetaData) SetTlsEnabled(v bool) { o.TlsEnabled = &v } -func (o V1DeploymentMetaData) MarshalJSON() ([]byte, error) { +func (o V1DataServiceDeploymentMetaData) MarshalJSON() ([]byte, error) { toSerialize,err := o.ToMap() if err != nil { return []byte{}, err @@ -216,7 +216,7 @@ func (o V1DeploymentMetaData) MarshalJSON() ([]byte, error) { return json.Marshal(toSerialize) } -func (o V1DeploymentMetaData) ToMap() (map[string]interface{}, error) { +func (o V1DataServiceDeploymentMetaData) ToMap() (map[string]interface{}, error) { toSerialize := map[string]interface{}{} if !IsNil(o.Name) { toSerialize["name"] = o.Name @@ -224,8 +224,8 @@ func (o V1DeploymentMetaData) ToMap() (map[string]interface{}, error) { if !IsNil(o.CustomResourceName) { toSerialize["customResourceName"] = o.CustomResourceName } - if !IsNil(o.DeploymentTargetName) { - toSerialize["deploymentTargetName"] = o.DeploymentTargetName + if !IsNil(o.TargetClusterName) { + toSerialize["targetClusterName"] = o.TargetClusterName } if !IsNil(o.NamespaceName) { toSerialize["namespaceName"] = o.NamespaceName @@ -236,38 +236,38 @@ func (o V1DeploymentMetaData) ToMap() (map[string]interface{}, error) { return toSerialize, nil } -type NullableV1DeploymentMetaData struct { - value *V1DeploymentMetaData +type NullableV1DataServiceDeploymentMetaData struct { + value *V1DataServiceDeploymentMetaData isSet bool } -func (v NullableV1DeploymentMetaData) Get() *V1DeploymentMetaData { +func (v NullableV1DataServiceDeploymentMetaData) Get() *V1DataServiceDeploymentMetaData { return v.value } -func (v *NullableV1DeploymentMetaData) Set(val *V1DeploymentMetaData) { +func (v *NullableV1DataServiceDeploymentMetaData) Set(val *V1DataServiceDeploymentMetaData) { v.value = val v.isSet = true } -func (v NullableV1DeploymentMetaData) IsSet() bool { +func (v NullableV1DataServiceDeploymentMetaData) IsSet() bool { return v.isSet } -func (v *NullableV1DeploymentMetaData) Unset() { +func (v *NullableV1DataServiceDeploymentMetaData) Unset() { v.value = nil v.isSet = false } -func NewNullableV1DeploymentMetaData(val *V1DeploymentMetaData) *NullableV1DeploymentMetaData { - return &NullableV1DeploymentMetaData{value: val, isSet: true} +func NewNullableV1DataServiceDeploymentMetaData(val *V1DataServiceDeploymentMetaData) *NullableV1DataServiceDeploymentMetaData { + return &NullableV1DataServiceDeploymentMetaData{value: val, isSet: true} } -func (v NullableV1DeploymentMetaData) MarshalJSON() ([]byte, error) { +func (v NullableV1DataServiceDeploymentMetaData) MarshalJSON() ([]byte, error) { return json.Marshal(v.value) } -func (v *NullableV1DeploymentMetaData) UnmarshalJSON(src []byte) error { +func (v *NullableV1DataServiceDeploymentMetaData) UnmarshalJSON(src []byte) error { v.isSet = true return json.Unmarshal(src, &v.value) } diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_v1_phase.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_v1_phase.go new file mode 100644 index 000000000..dddf229a9 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_v1_phase.go @@ -0,0 +1,121 @@ +/* +public/portworx/pds/backupconfig/apiv1/backupconfig.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package backupconfig + +import ( + "encoding/json" + "fmt" +) + +// V1Phase Enum for Phases of the backup configuration. - PHASE_UNSPECIFIED: Unspecified state. - PREPARING: Preparing state before creation is successful. - APPLIED: Applied state when create/update is successful. - UPDATING: Updating state. - FAILED: Failed state. - SUSPENDED: Suspended state. - DELETING: Deleting state. +type V1Phase string + +// List of v1Phase +const ( + V1PHASE_PHASE_UNSPECIFIED V1Phase = "PHASE_UNSPECIFIED" + V1PHASE_PREPARING V1Phase = "PREPARING" + V1PHASE_APPLIED V1Phase = "APPLIED" + V1PHASE_UPDATING V1Phase = "UPDATING" + V1PHASE_FAILED V1Phase = "FAILED" + V1PHASE_SUSPENDED V1Phase = "SUSPENDED" + V1PHASE_DELETING V1Phase = "DELETING" +) + +// All allowed values of V1Phase enum +var AllowedV1PhaseEnumValues = []V1Phase{ + "PHASE_UNSPECIFIED", + "PREPARING", + "APPLIED", + "UPDATING", + "FAILED", + "SUSPENDED", + "DELETING", +} + +func (v *V1Phase) UnmarshalJSON(src []byte) error { + var value string + err := json.Unmarshal(src, &value) + if err != nil { + return err + } + enumTypeValue := V1Phase(value) + for _, existing := range AllowedV1PhaseEnumValues { + if existing == enumTypeValue { + *v = enumTypeValue + return nil + } + } + + return fmt.Errorf("%+v is not a valid V1Phase", value) +} + +// NewV1PhaseFromValue returns a pointer to a valid V1Phase +// for the value passed as argument, or an error if the value passed is not allowed by the enum +func NewV1PhaseFromValue(v string) (*V1Phase, error) { + ev := V1Phase(v) + if ev.IsValid() { + return &ev, nil + } else { + return nil, fmt.Errorf("invalid value '%v' for V1Phase: valid values are %v", v, AllowedV1PhaseEnumValues) + } +} + +// IsValid return true if the value is valid for the enum, false otherwise +func (v V1Phase) IsValid() bool { + for _, existing := range AllowedV1PhaseEnumValues { + if existing == v { + return true + } + } + return false +} + +// Ptr returns reference to v1Phase value +func (v V1Phase) Ptr() *V1Phase { + return &v +} + +type NullableV1Phase struct { + value *V1Phase + isSet bool +} + +func (v NullableV1Phase) Get() *V1Phase { + return v.value +} + +func (v *NullableV1Phase) Set(val *V1Phase) { + v.value = val + v.isSet = true +} + +func (v NullableV1Phase) IsSet() bool { + return v.isSet +} + +func (v *NullableV1Phase) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableV1Phase(val *V1Phase) *NullableV1Phase { + return &NullableV1Phase{value: val, isSet: true} +} + +func (v NullableV1Phase) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableV1Phase) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_v1_references.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_v1_references.go index 271d88049..b2c98f6ec 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_v1_references.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/backupconfig/model_v1_references.go @@ -21,8 +21,8 @@ var _ MappedNullable = &V1References{} // V1References References to the associated resources for backup configuration. type V1References struct { - // UID of the deployment to which the backup configuration belong. - DeploymentId string `json:"deploymentId"` + // UID of the data service deployment to which the backup configuration belong. + DataServiceDeploymentId string `json:"dataServiceDeploymentId"` // UID of the backup target to which the backup configuration belong. BackupLocationId string `json:"backupLocationId"` // UID of the data service to which the backup configuration belong. @@ -35,9 +35,9 @@ type _V1References V1References // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewV1References(deploymentId string, backupLocationId string) *V1References { +func NewV1References(dataServiceDeploymentId string, backupLocationId string) *V1References { this := V1References{} - this.DeploymentId = deploymentId + this.DataServiceDeploymentId = dataServiceDeploymentId this.BackupLocationId = backupLocationId return &this } @@ -50,28 +50,28 @@ func NewV1ReferencesWithDefaults() *V1References { return &this } -// GetDeploymentId returns the DeploymentId field value -func (o *V1References) GetDeploymentId() string { +// GetDataServiceDeploymentId returns the DataServiceDeploymentId field value +func (o *V1References) GetDataServiceDeploymentId() string { if o == nil { var ret string return ret } - return o.DeploymentId + return o.DataServiceDeploymentId } -// GetDeploymentIdOk returns a tuple with the DeploymentId field value +// GetDataServiceDeploymentIdOk returns a tuple with the DataServiceDeploymentId field value // and a boolean to check if the value has been set. -func (o *V1References) GetDeploymentIdOk() (*string, bool) { +func (o *V1References) GetDataServiceDeploymentIdOk() (*string, bool) { if o == nil { return nil, false } - return &o.DeploymentId, true + return &o.DataServiceDeploymentId, true } -// SetDeploymentId sets field value -func (o *V1References) SetDeploymentId(v string) { - o.DeploymentId = v +// SetDataServiceDeploymentId sets field value +func (o *V1References) SetDataServiceDeploymentId(v string) { + o.DataServiceDeploymentId = v } // GetBackupLocationId returns the BackupLocationId field value @@ -140,7 +140,7 @@ func (o V1References) MarshalJSON() ([]byte, error) { func (o V1References) ToMap() (map[string]interface{}, error) { toSerialize := map[string]interface{}{} - toSerialize["deploymentId"] = o.DeploymentId + toSerialize["dataServiceDeploymentId"] = o.DataServiceDeploymentId toSerialize["backupLocationId"] = o.BackupLocationId if !IsNil(o.DataServiceId) { toSerialize["dataServiceId"] = o.DataServiceId @@ -153,7 +153,7 @@ func (o *V1References) UnmarshalJSON(data []byte) (err error) { // by unmarshalling the object into a generic map with string keys and checking // that every required field exists as a key in the generic map. requiredProperties := []string{ - "deploymentId", + "dataServiceDeploymentId", "backupLocationId", } diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/README.md b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/README.md index dc3e1365f..b50c16df3 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/README.md +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/README.md @@ -7,7 +7,7 @@ This API client was generated by the [OpenAPI Generator](https://openapi-generat - API version: version not set - Package version: 1.0.0 -- Generator version: 7.6.0-SNAPSHOT +- Generator version: 7.7.0-SNAPSHOT - Build package: org.openapitools.codegen.languages.GoClientCodegen ## Installation diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/client.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/client.go index d385b446c..d6bdac01c 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/client.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/client.go @@ -171,7 +171,7 @@ func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix stri return } if t, ok := obj.(time.Time); ok { - parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339), collectionType) + parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339Nano), collectionType) return } value = v.Type().String() + " value" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/model_selector_operator.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/model_selector_operator.go index 2769c41b4..05a531e0d 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/model_selector_operator.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/model_selector_operator.go @@ -15,7 +15,7 @@ import ( "fmt" ) -// SelectorOperator Operator specifies the relationship between the provided (key,value) pairs in the response. - OPERATOR_UNSPECIFIED: Unspecified, do not use. - IN: IN specifies that the key should be associated with atleast 1 of the element in value list. - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list. +// SelectorOperator Operator specifies the relationship between the provided (key,value) pairs in the response. - OPERATOR_UNSPECIFIED: Unspecified, do not use. - IN: IN specifies that the key should be associated with atleast 1 of the element in value list. - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list. - LIKE: LIKE specified that the key should be of a specified pattern type SelectorOperator string // List of SelectorOperator @@ -23,6 +23,7 @@ const ( SELECTOROPERATOR_OPERATOR_UNSPECIFIED SelectorOperator = "OPERATOR_UNSPECIFIED" SELECTOROPERATOR_IN SelectorOperator = "IN" SELECTOROPERATOR_NOT_IN SelectorOperator = "NOT_IN" + SELECTOROPERATOR_LIKE SelectorOperator = "LIKE" ) // All allowed values of SelectorOperator enum @@ -30,6 +31,7 @@ var AllowedSelectorOperatorEnumValues = []SelectorOperator{ "OPERATOR_UNSPECIFIED", "IN", "NOT_IN", + "LIKE", } func (v *SelectorOperator) UnmarshalJSON(src []byte) error { diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/model_v1_data_service_version.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/model_v1_data_service_version.go index 9eb3065ac..5d00bbfc8 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/model_v1_data_service_version.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/model_v1_data_service_version.go @@ -20,7 +20,7 @@ var _ MappedNullable = &V1DataServiceVersion{} // V1DataServiceVersion Version represents a particular version of a data service. type V1DataServiceVersion struct { Meta *V1Meta `json:"meta,omitempty"` - Info *V1Info1 `json:"info,omitempty"` + Info *V1Info2 `json:"info,omitempty"` } // NewV1DataServiceVersion instantiates a new V1DataServiceVersion object @@ -73,9 +73,9 @@ func (o *V1DataServiceVersion) SetMeta(v V1Meta) { } // GetInfo returns the Info field value if set, zero value otherwise. -func (o *V1DataServiceVersion) GetInfo() V1Info1 { +func (o *V1DataServiceVersion) GetInfo() V1Info2 { if o == nil || IsNil(o.Info) { - var ret V1Info1 + var ret V1Info2 return ret } return *o.Info @@ -83,7 +83,7 @@ func (o *V1DataServiceVersion) GetInfo() V1Info1 { // GetInfoOk returns a tuple with the Info field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DataServiceVersion) GetInfoOk() (*V1Info1, bool) { +func (o *V1DataServiceVersion) GetInfoOk() (*V1Info2, bool) { if o == nil || IsNil(o.Info) { return nil, false } @@ -99,8 +99,8 @@ func (o *V1DataServiceVersion) HasInfo() bool { return false } -// SetInfo gets a reference to the given V1Info1 and assigns it to the Info field. -func (o *V1DataServiceVersion) SetInfo(v V1Info1) { +// SetInfo gets a reference to the given V1Info2 and assigns it to the Info field. +func (o *V1DataServiceVersion) SetInfo(v V1Info2) { o.Info = &v } diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/model_v1_image.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/model_v1_image.go index 545612588..d09a02c4f 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/model_v1_image.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/model_v1_image.go @@ -20,7 +20,7 @@ var _ MappedNullable = &V1Image{} // V1Image Resource representing the data service image. type V1Image struct { Meta *V1Meta `json:"meta,omitempty"` - Info *V1Info2 `json:"info,omitempty"` + Info *V1Info1 `json:"info,omitempty"` } // NewV1Image instantiates a new V1Image object @@ -73,9 +73,9 @@ func (o *V1Image) SetMeta(v V1Meta) { } // GetInfo returns the Info field value if set, zero value otherwise. -func (o *V1Image) GetInfo() V1Info2 { +func (o *V1Image) GetInfo() V1Info1 { if o == nil || IsNil(o.Info) { - var ret V1Info2 + var ret V1Info1 return ret } return *o.Info @@ -83,7 +83,7 @@ func (o *V1Image) GetInfo() V1Info2 { // GetInfoOk returns a tuple with the Info field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1Image) GetInfoOk() (*V1Info2, bool) { +func (o *V1Image) GetInfoOk() (*V1Info1, bool) { if o == nil || IsNil(o.Info) { return nil, false } @@ -99,8 +99,8 @@ func (o *V1Image) HasInfo() bool { return false } -// SetInfo gets a reference to the given V1Info2 and assigns it to the Info field. -func (o *V1Image) SetInfo(v V1Info2) { +// SetInfo gets a reference to the given V1Info1 and assigns it to the Info field. +func (o *V1Image) SetInfo(v V1Info1) { o.Info = &v } diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/model_v1_info1.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/model_v1_info1.go index 162e21386..caddbfb94 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/model_v1_info1.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/model_v1_info1.go @@ -17,11 +17,23 @@ import ( // checks if the V1Info1 type satisfies the MappedNullable interface at compile time var _ MappedNullable = &V1Info1{} -// V1Info1 Information related to the data service version. +// V1Info1 Information related to the data service image. type V1Info1 struct { - // Enabled indicates if the version is enabled. - Enabled *bool `json:"enabled,omitempty"` - RevisionId *string `json:"revisionId,omitempty"` + References *V1References `json:"references,omitempty"` + // Image registry where the image is stored. + Registry *string `json:"registry,omitempty"` + // Image registry namespace where the image is stored. + Namespace *string `json:"namespace,omitempty"` + // Tag associated with the image. + Tag *string `json:"tag,omitempty"` + // Build version of the image. + Build *string `json:"build,omitempty"` + // Flag indicating if TLS is supported for a data service using this image. + TlsSupport *bool `json:"tlsSupport,omitempty"` + // Capabilities associated with this image. + Capabilities *map[string]string `json:"capabilities,omitempty"` + // Additional images associated with this data service image. + AdditionalImages *map[string]string `json:"additionalImages,omitempty"` } // NewV1Info1 instantiates a new V1Info1 object @@ -41,68 +53,260 @@ func NewV1Info1WithDefaults() *V1Info1 { return &this } -// GetEnabled returns the Enabled field value if set, zero value otherwise. -func (o *V1Info1) GetEnabled() bool { - if o == nil || IsNil(o.Enabled) { - var ret bool +// GetReferences returns the References field value if set, zero value otherwise. +func (o *V1Info1) GetReferences() V1References { + if o == nil || IsNil(o.References) { + var ret V1References return ret } - return *o.Enabled + return *o.References } -// GetEnabledOk returns a tuple with the Enabled field value if set, nil otherwise +// GetReferencesOk returns a tuple with the References field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1Info1) GetEnabledOk() (*bool, bool) { - if o == nil || IsNil(o.Enabled) { +func (o *V1Info1) GetReferencesOk() (*V1References, bool) { + if o == nil || IsNil(o.References) { return nil, false } - return o.Enabled, true + return o.References, true } -// HasEnabled returns a boolean if a field has been set. -func (o *V1Info1) HasEnabled() bool { - if o != nil && !IsNil(o.Enabled) { +// HasReferences returns a boolean if a field has been set. +func (o *V1Info1) HasReferences() bool { + if o != nil && !IsNil(o.References) { return true } return false } -// SetEnabled gets a reference to the given bool and assigns it to the Enabled field. -func (o *V1Info1) SetEnabled(v bool) { - o.Enabled = &v +// SetReferences gets a reference to the given V1References and assigns it to the References field. +func (o *V1Info1) SetReferences(v V1References) { + o.References = &v } -// GetRevisionId returns the RevisionId field value if set, zero value otherwise. -func (o *V1Info1) GetRevisionId() string { - if o == nil || IsNil(o.RevisionId) { +// GetRegistry returns the Registry field value if set, zero value otherwise. +func (o *V1Info1) GetRegistry() string { + if o == nil || IsNil(o.Registry) { var ret string return ret } - return *o.RevisionId + return *o.Registry } -// GetRevisionIdOk returns a tuple with the RevisionId field value if set, nil otherwise +// GetRegistryOk returns a tuple with the Registry field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1Info1) GetRevisionIdOk() (*string, bool) { - if o == nil || IsNil(o.RevisionId) { +func (o *V1Info1) GetRegistryOk() (*string, bool) { + if o == nil || IsNil(o.Registry) { return nil, false } - return o.RevisionId, true + return o.Registry, true } -// HasRevisionId returns a boolean if a field has been set. -func (o *V1Info1) HasRevisionId() bool { - if o != nil && !IsNil(o.RevisionId) { +// HasRegistry returns a boolean if a field has been set. +func (o *V1Info1) HasRegistry() bool { + if o != nil && !IsNil(o.Registry) { return true } return false } -// SetRevisionId gets a reference to the given string and assigns it to the RevisionId field. -func (o *V1Info1) SetRevisionId(v string) { - o.RevisionId = &v +// SetRegistry gets a reference to the given string and assigns it to the Registry field. +func (o *V1Info1) SetRegistry(v string) { + o.Registry = &v +} + +// GetNamespace returns the Namespace field value if set, zero value otherwise. +func (o *V1Info1) GetNamespace() string { + if o == nil || IsNil(o.Namespace) { + var ret string + return ret + } + return *o.Namespace +} + +// GetNamespaceOk returns a tuple with the Namespace field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1Info1) GetNamespaceOk() (*string, bool) { + if o == nil || IsNil(o.Namespace) { + return nil, false + } + return o.Namespace, true +} + +// HasNamespace returns a boolean if a field has been set. +func (o *V1Info1) HasNamespace() bool { + if o != nil && !IsNil(o.Namespace) { + return true + } + + return false +} + +// SetNamespace gets a reference to the given string and assigns it to the Namespace field. +func (o *V1Info1) SetNamespace(v string) { + o.Namespace = &v +} + +// GetTag returns the Tag field value if set, zero value otherwise. +func (o *V1Info1) GetTag() string { + if o == nil || IsNil(o.Tag) { + var ret string + return ret + } + return *o.Tag +} + +// GetTagOk returns a tuple with the Tag field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1Info1) GetTagOk() (*string, bool) { + if o == nil || IsNil(o.Tag) { + return nil, false + } + return o.Tag, true +} + +// HasTag returns a boolean if a field has been set. +func (o *V1Info1) HasTag() bool { + if o != nil && !IsNil(o.Tag) { + return true + } + + return false +} + +// SetTag gets a reference to the given string and assigns it to the Tag field. +func (o *V1Info1) SetTag(v string) { + o.Tag = &v +} + +// GetBuild returns the Build field value if set, zero value otherwise. +func (o *V1Info1) GetBuild() string { + if o == nil || IsNil(o.Build) { + var ret string + return ret + } + return *o.Build +} + +// GetBuildOk returns a tuple with the Build field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1Info1) GetBuildOk() (*string, bool) { + if o == nil || IsNil(o.Build) { + return nil, false + } + return o.Build, true +} + +// HasBuild returns a boolean if a field has been set. +func (o *V1Info1) HasBuild() bool { + if o != nil && !IsNil(o.Build) { + return true + } + + return false +} + +// SetBuild gets a reference to the given string and assigns it to the Build field. +func (o *V1Info1) SetBuild(v string) { + o.Build = &v +} + +// GetTlsSupport returns the TlsSupport field value if set, zero value otherwise. +func (o *V1Info1) GetTlsSupport() bool { + if o == nil || IsNil(o.TlsSupport) { + var ret bool + return ret + } + return *o.TlsSupport +} + +// GetTlsSupportOk returns a tuple with the TlsSupport field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1Info1) GetTlsSupportOk() (*bool, bool) { + if o == nil || IsNil(o.TlsSupport) { + return nil, false + } + return o.TlsSupport, true +} + +// HasTlsSupport returns a boolean if a field has been set. +func (o *V1Info1) HasTlsSupport() bool { + if o != nil && !IsNil(o.TlsSupport) { + return true + } + + return false +} + +// SetTlsSupport gets a reference to the given bool and assigns it to the TlsSupport field. +func (o *V1Info1) SetTlsSupport(v bool) { + o.TlsSupport = &v +} + +// GetCapabilities returns the Capabilities field value if set, zero value otherwise. +func (o *V1Info1) GetCapabilities() map[string]string { + if o == nil || IsNil(o.Capabilities) { + var ret map[string]string + return ret + } + return *o.Capabilities +} + +// GetCapabilitiesOk returns a tuple with the Capabilities field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1Info1) GetCapabilitiesOk() (*map[string]string, bool) { + if o == nil || IsNil(o.Capabilities) { + return nil, false + } + return o.Capabilities, true +} + +// HasCapabilities returns a boolean if a field has been set. +func (o *V1Info1) HasCapabilities() bool { + if o != nil && !IsNil(o.Capabilities) { + return true + } + + return false +} + +// SetCapabilities gets a reference to the given map[string]string and assigns it to the Capabilities field. +func (o *V1Info1) SetCapabilities(v map[string]string) { + o.Capabilities = &v +} + +// GetAdditionalImages returns the AdditionalImages field value if set, zero value otherwise. +func (o *V1Info1) GetAdditionalImages() map[string]string { + if o == nil || IsNil(o.AdditionalImages) { + var ret map[string]string + return ret + } + return *o.AdditionalImages +} + +// GetAdditionalImagesOk returns a tuple with the AdditionalImages field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1Info1) GetAdditionalImagesOk() (*map[string]string, bool) { + if o == nil || IsNil(o.AdditionalImages) { + return nil, false + } + return o.AdditionalImages, true +} + +// HasAdditionalImages returns a boolean if a field has been set. +func (o *V1Info1) HasAdditionalImages() bool { + if o != nil && !IsNil(o.AdditionalImages) { + return true + } + + return false +} + +// SetAdditionalImages gets a reference to the given map[string]string and assigns it to the AdditionalImages field. +func (o *V1Info1) SetAdditionalImages(v map[string]string) { + o.AdditionalImages = &v } func (o V1Info1) MarshalJSON() ([]byte, error) { @@ -115,11 +319,29 @@ func (o V1Info1) MarshalJSON() ([]byte, error) { func (o V1Info1) ToMap() (map[string]interface{}, error) { toSerialize := map[string]interface{}{} - if !IsNil(o.Enabled) { - toSerialize["enabled"] = o.Enabled + if !IsNil(o.References) { + toSerialize["references"] = o.References + } + if !IsNil(o.Registry) { + toSerialize["registry"] = o.Registry + } + if !IsNil(o.Namespace) { + toSerialize["namespace"] = o.Namespace + } + if !IsNil(o.Tag) { + toSerialize["tag"] = o.Tag + } + if !IsNil(o.Build) { + toSerialize["build"] = o.Build + } + if !IsNil(o.TlsSupport) { + toSerialize["tlsSupport"] = o.TlsSupport + } + if !IsNil(o.Capabilities) { + toSerialize["capabilities"] = o.Capabilities } - if !IsNil(o.RevisionId) { - toSerialize["revisionId"] = o.RevisionId + if !IsNil(o.AdditionalImages) { + toSerialize["additionalImages"] = o.AdditionalImages } return toSerialize, nil } diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/model_v1_info2.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/model_v1_info2.go index 9807f3f06..1a69cd100 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/model_v1_info2.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/catalog/model_v1_info2.go @@ -17,23 +17,11 @@ import ( // checks if the V1Info2 type satisfies the MappedNullable interface at compile time var _ MappedNullable = &V1Info2{} -// V1Info2 Information related to the data service image. +// V1Info2 Information related to the data service version. type V1Info2 struct { - References *V1References `json:"references,omitempty"` - // Image registry where the image is stored. - Registry *string `json:"registry,omitempty"` - // Image registry namespace where the image is stored. - Namespace *string `json:"namespace,omitempty"` - // Tag associated with the image. - Tag *string `json:"tag,omitempty"` - // Build version of the image. - Build *string `json:"build,omitempty"` - // Flag indicating if TLS is supported for a data service using this image. - TlsSupport *bool `json:"tlsSupport,omitempty"` - // Capabilities associated with this image. - Capabilities *map[string]string `json:"capabilities,omitempty"` - // Additional images associated with this data service image. - AdditionalImages *map[string]string `json:"additionalImages,omitempty"` + // Enabled indicates if the version is enabled. + Enabled *bool `json:"enabled,omitempty"` + RevisionId *string `json:"revisionId,omitempty"` } // NewV1Info2 instantiates a new V1Info2 object @@ -53,260 +41,68 @@ func NewV1Info2WithDefaults() *V1Info2 { return &this } -// GetReferences returns the References field value if set, zero value otherwise. -func (o *V1Info2) GetReferences() V1References { - if o == nil || IsNil(o.References) { - var ret V1References - return ret - } - return *o.References -} - -// GetReferencesOk returns a tuple with the References field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *V1Info2) GetReferencesOk() (*V1References, bool) { - if o == nil || IsNil(o.References) { - return nil, false - } - return o.References, true -} - -// HasReferences returns a boolean if a field has been set. -func (o *V1Info2) HasReferences() bool { - if o != nil && !IsNil(o.References) { - return true - } - - return false -} - -// SetReferences gets a reference to the given V1References and assigns it to the References field. -func (o *V1Info2) SetReferences(v V1References) { - o.References = &v -} - -// GetRegistry returns the Registry field value if set, zero value otherwise. -func (o *V1Info2) GetRegistry() string { - if o == nil || IsNil(o.Registry) { - var ret string - return ret - } - return *o.Registry -} - -// GetRegistryOk returns a tuple with the Registry field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *V1Info2) GetRegistryOk() (*string, bool) { - if o == nil || IsNil(o.Registry) { - return nil, false - } - return o.Registry, true -} - -// HasRegistry returns a boolean if a field has been set. -func (o *V1Info2) HasRegistry() bool { - if o != nil && !IsNil(o.Registry) { - return true - } - - return false -} - -// SetRegistry gets a reference to the given string and assigns it to the Registry field. -func (o *V1Info2) SetRegistry(v string) { - o.Registry = &v -} - -// GetNamespace returns the Namespace field value if set, zero value otherwise. -func (o *V1Info2) GetNamespace() string { - if o == nil || IsNil(o.Namespace) { - var ret string - return ret - } - return *o.Namespace -} - -// GetNamespaceOk returns a tuple with the Namespace field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *V1Info2) GetNamespaceOk() (*string, bool) { - if o == nil || IsNil(o.Namespace) { - return nil, false - } - return o.Namespace, true -} - -// HasNamespace returns a boolean if a field has been set. -func (o *V1Info2) HasNamespace() bool { - if o != nil && !IsNil(o.Namespace) { - return true - } - - return false -} - -// SetNamespace gets a reference to the given string and assigns it to the Namespace field. -func (o *V1Info2) SetNamespace(v string) { - o.Namespace = &v -} - -// GetTag returns the Tag field value if set, zero value otherwise. -func (o *V1Info2) GetTag() string { - if o == nil || IsNil(o.Tag) { - var ret string - return ret - } - return *o.Tag -} - -// GetTagOk returns a tuple with the Tag field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *V1Info2) GetTagOk() (*string, bool) { - if o == nil || IsNil(o.Tag) { - return nil, false - } - return o.Tag, true -} - -// HasTag returns a boolean if a field has been set. -func (o *V1Info2) HasTag() bool { - if o != nil && !IsNil(o.Tag) { - return true - } - - return false -} - -// SetTag gets a reference to the given string and assigns it to the Tag field. -func (o *V1Info2) SetTag(v string) { - o.Tag = &v -} - -// GetBuild returns the Build field value if set, zero value otherwise. -func (o *V1Info2) GetBuild() string { - if o == nil || IsNil(o.Build) { - var ret string - return ret - } - return *o.Build -} - -// GetBuildOk returns a tuple with the Build field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *V1Info2) GetBuildOk() (*string, bool) { - if o == nil || IsNil(o.Build) { - return nil, false - } - return o.Build, true -} - -// HasBuild returns a boolean if a field has been set. -func (o *V1Info2) HasBuild() bool { - if o != nil && !IsNil(o.Build) { - return true - } - - return false -} - -// SetBuild gets a reference to the given string and assigns it to the Build field. -func (o *V1Info2) SetBuild(v string) { - o.Build = &v -} - -// GetTlsSupport returns the TlsSupport field value if set, zero value otherwise. -func (o *V1Info2) GetTlsSupport() bool { - if o == nil || IsNil(o.TlsSupport) { +// GetEnabled returns the Enabled field value if set, zero value otherwise. +func (o *V1Info2) GetEnabled() bool { + if o == nil || IsNil(o.Enabled) { var ret bool return ret } - return *o.TlsSupport -} - -// GetTlsSupportOk returns a tuple with the TlsSupport field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *V1Info2) GetTlsSupportOk() (*bool, bool) { - if o == nil || IsNil(o.TlsSupport) { - return nil, false - } - return o.TlsSupport, true -} - -// HasTlsSupport returns a boolean if a field has been set. -func (o *V1Info2) HasTlsSupport() bool { - if o != nil && !IsNil(o.TlsSupport) { - return true - } - - return false -} - -// SetTlsSupport gets a reference to the given bool and assigns it to the TlsSupport field. -func (o *V1Info2) SetTlsSupport(v bool) { - o.TlsSupport = &v -} - -// GetCapabilities returns the Capabilities field value if set, zero value otherwise. -func (o *V1Info2) GetCapabilities() map[string]string { - if o == nil || IsNil(o.Capabilities) { - var ret map[string]string - return ret - } - return *o.Capabilities + return *o.Enabled } -// GetCapabilitiesOk returns a tuple with the Capabilities field value if set, nil otherwise +// GetEnabledOk returns a tuple with the Enabled field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1Info2) GetCapabilitiesOk() (*map[string]string, bool) { - if o == nil || IsNil(o.Capabilities) { +func (o *V1Info2) GetEnabledOk() (*bool, bool) { + if o == nil || IsNil(o.Enabled) { return nil, false } - return o.Capabilities, true + return o.Enabled, true } -// HasCapabilities returns a boolean if a field has been set. -func (o *V1Info2) HasCapabilities() bool { - if o != nil && !IsNil(o.Capabilities) { +// HasEnabled returns a boolean if a field has been set. +func (o *V1Info2) HasEnabled() bool { + if o != nil && !IsNil(o.Enabled) { return true } return false } -// SetCapabilities gets a reference to the given map[string]string and assigns it to the Capabilities field. -func (o *V1Info2) SetCapabilities(v map[string]string) { - o.Capabilities = &v +// SetEnabled gets a reference to the given bool and assigns it to the Enabled field. +func (o *V1Info2) SetEnabled(v bool) { + o.Enabled = &v } -// GetAdditionalImages returns the AdditionalImages field value if set, zero value otherwise. -func (o *V1Info2) GetAdditionalImages() map[string]string { - if o == nil || IsNil(o.AdditionalImages) { - var ret map[string]string +// GetRevisionId returns the RevisionId field value if set, zero value otherwise. +func (o *V1Info2) GetRevisionId() string { + if o == nil || IsNil(o.RevisionId) { + var ret string return ret } - return *o.AdditionalImages + return *o.RevisionId } -// GetAdditionalImagesOk returns a tuple with the AdditionalImages field value if set, nil otherwise +// GetRevisionIdOk returns a tuple with the RevisionId field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1Info2) GetAdditionalImagesOk() (*map[string]string, bool) { - if o == nil || IsNil(o.AdditionalImages) { +func (o *V1Info2) GetRevisionIdOk() (*string, bool) { + if o == nil || IsNil(o.RevisionId) { return nil, false } - return o.AdditionalImages, true + return o.RevisionId, true } -// HasAdditionalImages returns a boolean if a field has been set. -func (o *V1Info2) HasAdditionalImages() bool { - if o != nil && !IsNil(o.AdditionalImages) { +// HasRevisionId returns a boolean if a field has been set. +func (o *V1Info2) HasRevisionId() bool { + if o != nil && !IsNil(o.RevisionId) { return true } return false } -// SetAdditionalImages gets a reference to the given map[string]string and assigns it to the AdditionalImages field. -func (o *V1Info2) SetAdditionalImages(v map[string]string) { - o.AdditionalImages = &v +// SetRevisionId gets a reference to the given string and assigns it to the RevisionId field. +func (o *V1Info2) SetRevisionId(v string) { + o.RevisionId = &v } func (o V1Info2) MarshalJSON() ([]byte, error) { @@ -319,29 +115,11 @@ func (o V1Info2) MarshalJSON() ([]byte, error) { func (o V1Info2) ToMap() (map[string]interface{}, error) { toSerialize := map[string]interface{}{} - if !IsNil(o.References) { - toSerialize["references"] = o.References - } - if !IsNil(o.Registry) { - toSerialize["registry"] = o.Registry - } - if !IsNil(o.Namespace) { - toSerialize["namespace"] = o.Namespace - } - if !IsNil(o.Tag) { - toSerialize["tag"] = o.Tag - } - if !IsNil(o.Build) { - toSerialize["build"] = o.Build - } - if !IsNil(o.TlsSupport) { - toSerialize["tlsSupport"] = o.TlsSupport - } - if !IsNil(o.Capabilities) { - toSerialize["capabilities"] = o.Capabilities + if !IsNil(o.Enabled) { + toSerialize["enabled"] = o.Enabled } - if !IsNil(o.AdditionalImages) { - toSerialize["additionalImages"] = o.AdditionalImages + if !IsNil(o.RevisionId) { + toSerialize["revisionId"] = o.RevisionId } return toSerialize, nil } diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/.travis.yml b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/.travis.yml similarity index 100% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/.travis.yml rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/.travis.yml diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/README.md b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/README.md new file mode 100644 index 000000000..82fee660f --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/README.md @@ -0,0 +1,156 @@ +# Go API client for dataservicedeployment + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +## Overview +This API client was generated by the [OpenAPI Generator](https://openapi-generator.tech) project. By using the [OpenAPI-spec](https://www.openapis.org/) from a remote server, you can easily generate an API client. + +- API version: version not set +- Package version: 1.0.0 +- Generator version: 7.7.0-SNAPSHOT +- Build package: org.openapitools.codegen.languages.GoClientCodegen + +## Installation + +Install the following dependencies: + +```sh +go get github.com/stretchr/testify/assert +go get golang.org/x/net/context +``` + +Put the package under your project folder and add the following in import: + +```go +import dataservicedeployment "github.com/GIT_USER_ID/GIT_REPO_ID" +``` + +To use a proxy, set the environment variable `HTTP_PROXY`: + +```go +os.Setenv("HTTP_PROXY", "http://proxy_name:proxy_port") +``` + +## Configuration of Server URL + +Default configuration comes with `Servers` field that contains server objects as defined in the OpenAPI specification. + +### Select Server Configuration + +For using other server than the one defined on index 0 set context value `dataservicedeployment.ContextServerIndex` of type `int`. + +```go +ctx := context.WithValue(context.Background(), dataservicedeployment.ContextServerIndex, 1) +``` + +### Templated Server URL + +Templated server URL is formatted using default variables from configuration or from context value `dataservicedeployment.ContextServerVariables` of type `map[string]string`. + +```go +ctx := context.WithValue(context.Background(), dataservicedeployment.ContextServerVariables, map[string]string{ + "basePath": "v2", +}) +``` + +Note, enum values are always validated and all unused variables are silently ignored. + +### URLs Configuration per Operation + +Each operation can use different server URL defined using `OperationServers` map in the `Configuration`. +An operation is uniquely identified by `"{classname}Service.{nickname}"` string. +Similar rules for overriding default operation server index and variables applies by using `dataservicedeployment.ContextOperationServerIndices` and `dataservicedeployment.ContextOperationServerVariables` context maps. + +```go +ctx := context.WithValue(context.Background(), dataservicedeployment.ContextOperationServerIndices, map[string]int{ + "{classname}Service.{nickname}": 2, +}) +ctx = context.WithValue(context.Background(), dataservicedeployment.ContextOperationServerVariables, map[string]map[string]string{ + "{classname}Service.{nickname}": { + "port": "8443", + }, +}) +``` + +## Documentation for API Endpoints + +All URIs are relative to *http://localhost* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +*DataServiceDeploymentServiceAPI* | [**DataServiceDeploymentServiceCreateDataServiceDeployment**](docs/DataServiceDeploymentServiceAPI.md#dataservicedeploymentservicecreatedataservicedeployment) | **Post** /pds/v1/namespace/{namespaceId}/dataServiceDeployment | CreateDataServiceDeployment API creates the Deployment resource. +*DataServiceDeploymentServiceAPI* | [**DataServiceDeploymentServiceDeleteDataServiceDeployment**](docs/DataServiceDeploymentServiceAPI.md#dataservicedeploymentservicedeletedataservicedeployment) | **Delete** /pds/v1/dataServiceDeployments/{id} | DeleteDataServiceDeployment API deletes the DataService Deployment resource. +*DataServiceDeploymentServiceAPI* | [**DataServiceDeploymentServiceGetDataServiceDeployment**](docs/DataServiceDeploymentServiceAPI.md#dataservicedeploymentservicegetdataservicedeployment) | **Get** /pds/v1/dataServiceDeployments/{id} | GetDataServiceDeployment API returns the DataService Deployment resource. +*DataServiceDeploymentServiceAPI* | [**DataServiceDeploymentServiceGetDataServiceDeploymentCredentials**](docs/DataServiceDeploymentServiceAPI.md#dataservicedeploymentservicegetdataservicedeploymentcredentials) | **Get** /pds/v1/dataServiceDeployments/{id}:credentials | GetDataServiceDeploymentCredentials API returns the Credentials to be used to access the DataService Deployment. +*DataServiceDeploymentServiceAPI* | [**DataServiceDeploymentServiceGetKeyPerformanceIndicators**](docs/DataServiceDeploymentServiceAPI.md#dataservicedeploymentservicegetkeyperformanceindicators) | **Post** /pds/v1/dataServiceDeployments:kpis | GetKeyPerformanceIndicator API return the analytics of the DataService Deployment resources. +*DataServiceDeploymentServiceAPI* | [**DataServiceDeploymentServiceListDataServiceDeployments**](docs/DataServiceDeploymentServiceAPI.md#dataservicedeploymentservicelistdataservicedeployments) | **Post** /pds/v1/dataServiceDeployments:search | ListDataServiceDeployments API lists the DataService Deployment resources. + + +## Documentation For Models + + - [DataServiceDeploymentServiceCreateDataServiceDeploymentBody](docs/DataServiceDeploymentServiceCreateDataServiceDeploymentBody.md) + - [Dataservicedeploymentv1Status](docs/Dataservicedeploymentv1Status.md) + - [GooglerpcStatus](docs/GooglerpcStatus.md) + - [PDSApplicationSelectorPDSApplicationFilter](docs/PDSApplicationSelectorPDSApplicationFilter.md) + - [ProtobufAny](docs/ProtobufAny.md) + - [ProtobufNullValue](docs/ProtobufNullValue.md) + - [ResourceSelectorResourceFilter](docs/ResourceSelectorResourceFilter.md) + - [SelectorFilter](docs/SelectorFilter.md) + - [SelectorOperator](docs/SelectorOperator.md) + - [SortByField](docs/SortByField.md) + - [V1Config](docs/V1Config.md) + - [V1ConnectionDetails](docs/V1ConnectionDetails.md) + - [V1ConnectionInfo](docs/V1ConnectionInfo.md) + - [V1DataServiceDeployment](docs/V1DataServiceDeployment.md) + - [V1DataServiceDeploymentCredentials](docs/V1DataServiceDeploymentCredentials.md) + - [V1DataServiceDeploymentTopology](docs/V1DataServiceDeploymentTopology.md) + - [V1DataServiceDeploymentTopologyStatus](docs/V1DataServiceDeploymentTopologyStatus.md) + - [V1DataServiceDeploymentTopologyStatusHealth](docs/V1DataServiceDeploymentTopologyStatusHealth.md) + - [V1DataServiceDeploymentTopologyStatusPhase](docs/V1DataServiceDeploymentTopologyStatusPhase.md) + - [V1InfraResourceType](docs/V1InfraResourceType.md) + - [V1InstanceInfo](docs/V1InstanceInfo.md) + - [V1KeyPerformanceIndicators](docs/V1KeyPerformanceIndicators.md) + - [V1ListDataServiceDeploymentsRequest](docs/V1ListDataServiceDeploymentsRequest.md) + - [V1ListDataServiceDeploymentsResponse](docs/V1ListDataServiceDeploymentsResponse.md) + - [V1Meta](docs/V1Meta.md) + - [V1PDSApplicationResourceType](docs/V1PDSApplicationResourceType.md) + - [V1PDSApplicationSelector](docs/V1PDSApplicationSelector.md) + - [V1PageBasedPaginationRequest](docs/V1PageBasedPaginationRequest.md) + - [V1PageBasedPaginationResponse](docs/V1PageBasedPaginationResponse.md) + - [V1Reference](docs/V1Reference.md) + - [V1References](docs/V1References.md) + - [V1ResourceSelector](docs/V1ResourceSelector.md) + - [V1Selector](docs/V1Selector.md) + - [V1Sort](docs/V1Sort.md) + - [V1SortOrderValue](docs/V1SortOrderValue.md) + - [V1StatusHealth](docs/V1StatusHealth.md) + - [V1StatusPhase](docs/V1StatusPhase.md) + - [V1TLSConfig](docs/V1TLSConfig.md) + - [V1Template](docs/V1Template.md) + + +## Documentation For Authorization + +Endpoints do not require authorization. + + +## Documentation for Utility Methods + +Due to the fact that model structure members are all pointers, this package contains +a number of utility functions to easily obtain pointers to values of basic types. +Each of these functions takes a value of the given basic type and returns a pointer to it: + +* `PtrBool` +* `PtrInt` +* `PtrInt32` +* `PtrInt64` +* `PtrFloat` +* `PtrFloat32` +* `PtrFloat64` +* `PtrString` +* `PtrTime` + +## Author + + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/api_deployment_service.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/api_data_service_deployment_service.go similarity index 52% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/api_deployment_service.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/api_data_service_deployment_service.go index 8e02e4d4c..77f17f91d 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/api_deployment_service.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/api_data_service_deployment_service.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "bytes" @@ -20,34 +20,34 @@ import ( ) -// DeploymentServiceAPIService DeploymentServiceAPI service -type DeploymentServiceAPIService service +// DataServiceDeploymentServiceAPIService DataServiceDeploymentServiceAPI service +type DataServiceDeploymentServiceAPIService service -type ApiDeploymentServiceCreateDeploymentRequest struct { +type ApiDataServiceDeploymentServiceCreateDataServiceDeploymentRequest struct { ctx context.Context - ApiService *DeploymentServiceAPIService + ApiService *DataServiceDeploymentServiceAPIService namespaceId string - deploymentServiceCreateDeploymentBody *DeploymentServiceCreateDeploymentBody + dataServiceDeploymentServiceCreateDataServiceDeploymentBody *DataServiceDeploymentServiceCreateDataServiceDeploymentBody } -func (r ApiDeploymentServiceCreateDeploymentRequest) DeploymentServiceCreateDeploymentBody(deploymentServiceCreateDeploymentBody DeploymentServiceCreateDeploymentBody) ApiDeploymentServiceCreateDeploymentRequest { - r.deploymentServiceCreateDeploymentBody = &deploymentServiceCreateDeploymentBody +func (r ApiDataServiceDeploymentServiceCreateDataServiceDeploymentRequest) DataServiceDeploymentServiceCreateDataServiceDeploymentBody(dataServiceDeploymentServiceCreateDataServiceDeploymentBody DataServiceDeploymentServiceCreateDataServiceDeploymentBody) ApiDataServiceDeploymentServiceCreateDataServiceDeploymentRequest { + r.dataServiceDeploymentServiceCreateDataServiceDeploymentBody = &dataServiceDeploymentServiceCreateDataServiceDeploymentBody return r } -func (r ApiDeploymentServiceCreateDeploymentRequest) Execute() (*V1Deployment, *http.Response, error) { - return r.ApiService.DeploymentServiceCreateDeploymentExecute(r) +func (r ApiDataServiceDeploymentServiceCreateDataServiceDeploymentRequest) Execute() (*V1DataServiceDeployment, *http.Response, error) { + return r.ApiService.DataServiceDeploymentServiceCreateDataServiceDeploymentExecute(r) } /* -DeploymentServiceCreateDeployment CreateDeployment API creates the Deployment resource. +DataServiceDeploymentServiceCreateDataServiceDeployment CreateDataServiceDeployment API creates the Deployment resource. @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param namespaceId UID of the namespace resource where this deployment will be created. - @return ApiDeploymentServiceCreateDeploymentRequest + @param namespaceId UID of the namespace resource where this DataService deployment will be created. + @return ApiDataServiceDeploymentServiceCreateDataServiceDeploymentRequest */ -func (a *DeploymentServiceAPIService) DeploymentServiceCreateDeployment(ctx context.Context, namespaceId string) ApiDeploymentServiceCreateDeploymentRequest { - return ApiDeploymentServiceCreateDeploymentRequest{ +func (a *DataServiceDeploymentServiceAPIService) DataServiceDeploymentServiceCreateDataServiceDeployment(ctx context.Context, namespaceId string) ApiDataServiceDeploymentServiceCreateDataServiceDeploymentRequest { + return ApiDataServiceDeploymentServiceCreateDataServiceDeploymentRequest{ ApiService: a, ctx: ctx, namespaceId: namespaceId, @@ -55,28 +55,28 @@ func (a *DeploymentServiceAPIService) DeploymentServiceCreateDeployment(ctx cont } // Execute executes the request -// @return V1Deployment -func (a *DeploymentServiceAPIService) DeploymentServiceCreateDeploymentExecute(r ApiDeploymentServiceCreateDeploymentRequest) (*V1Deployment, *http.Response, error) { +// @return V1DataServiceDeployment +func (a *DataServiceDeploymentServiceAPIService) DataServiceDeploymentServiceCreateDataServiceDeploymentExecute(r ApiDataServiceDeploymentServiceCreateDataServiceDeploymentRequest) (*V1DataServiceDeployment, *http.Response, error) { var ( localVarHTTPMethod = http.MethodPost localVarPostBody interface{} formFiles []formFile - localVarReturnValue *V1Deployment + localVarReturnValue *V1DataServiceDeployment ) - localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DeploymentServiceAPIService.DeploymentServiceCreateDeployment") + localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DataServiceDeploymentServiceAPIService.DataServiceDeploymentServiceCreateDataServiceDeployment") if err != nil { return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()} } - localVarPath := localBasePath + "/pds/v1/namespace/{namespaceId}/deployment" + localVarPath := localBasePath + "/pds/v1/namespace/{namespaceId}/dataServiceDeployment" localVarPath = strings.Replace(localVarPath, "{"+"namespaceId"+"}", url.PathEscape(parameterValueToString(r.namespaceId, "namespaceId")), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if r.deploymentServiceCreateDeploymentBody == nil { - return localVarReturnValue, nil, reportError("deploymentServiceCreateDeploymentBody is required and must be specified") + if r.dataServiceDeploymentServiceCreateDataServiceDeploymentBody == nil { + return localVarReturnValue, nil, reportError("dataServiceDeploymentServiceCreateDataServiceDeploymentBody is required and must be specified") } // to determine the Content-Type header @@ -97,7 +97,7 @@ func (a *DeploymentServiceAPIService) DeploymentServiceCreateDeploymentExecute(r localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept } // body params - localVarPostBody = r.deploymentServiceCreateDeploymentBody + localVarPostBody = r.dataServiceDeploymentServiceCreateDataServiceDeploymentBody req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles) if err != nil { return localVarReturnValue, nil, err @@ -143,32 +143,32 @@ func (a *DeploymentServiceAPIService) DeploymentServiceCreateDeploymentExecute(r return localVarReturnValue, localVarHTTPResponse, nil } -type ApiDeploymentServiceDeleteDeploymentRequest struct { +type ApiDataServiceDeploymentServiceDeleteDataServiceDeploymentRequest struct { ctx context.Context - ApiService *DeploymentServiceAPIService + ApiService *DataServiceDeploymentServiceAPIService id string force *bool } // Force flag to delete backup configuration from control plane only. -func (r ApiDeploymentServiceDeleteDeploymentRequest) Force(force bool) ApiDeploymentServiceDeleteDeploymentRequest { +func (r ApiDataServiceDeploymentServiceDeleteDataServiceDeploymentRequest) Force(force bool) ApiDataServiceDeploymentServiceDeleteDataServiceDeploymentRequest { r.force = &force return r } -func (r ApiDeploymentServiceDeleteDeploymentRequest) Execute() (map[string]interface{}, *http.Response, error) { - return r.ApiService.DeploymentServiceDeleteDeploymentExecute(r) +func (r ApiDataServiceDeploymentServiceDeleteDataServiceDeploymentRequest) Execute() (map[string]interface{}, *http.Response, error) { + return r.ApiService.DataServiceDeploymentServiceDeleteDataServiceDeploymentExecute(r) } /* -DeploymentServiceDeleteDeployment DeleteDeployment API deletes the Deployment resource. +DataServiceDeploymentServiceDeleteDataServiceDeployment DeleteDataServiceDeployment API deletes the DataService Deployment resource. @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param id UID of the Deployment. - @return ApiDeploymentServiceDeleteDeploymentRequest + @param id UID of the DataService Deployment. + @return ApiDataServiceDeploymentServiceDeleteDataServiceDeploymentRequest */ -func (a *DeploymentServiceAPIService) DeploymentServiceDeleteDeployment(ctx context.Context, id string) ApiDeploymentServiceDeleteDeploymentRequest { - return ApiDeploymentServiceDeleteDeploymentRequest{ +func (a *DataServiceDeploymentServiceAPIService) DataServiceDeploymentServiceDeleteDataServiceDeployment(ctx context.Context, id string) ApiDataServiceDeploymentServiceDeleteDataServiceDeploymentRequest { + return ApiDataServiceDeploymentServiceDeleteDataServiceDeploymentRequest{ ApiService: a, ctx: ctx, id: id, @@ -177,7 +177,7 @@ func (a *DeploymentServiceAPIService) DeploymentServiceDeleteDeployment(ctx cont // Execute executes the request // @return map[string]interface{} -func (a *DeploymentServiceAPIService) DeploymentServiceDeleteDeploymentExecute(r ApiDeploymentServiceDeleteDeploymentRequest) (map[string]interface{}, *http.Response, error) { +func (a *DataServiceDeploymentServiceAPIService) DataServiceDeploymentServiceDeleteDataServiceDeploymentExecute(r ApiDataServiceDeploymentServiceDeleteDataServiceDeploymentRequest) (map[string]interface{}, *http.Response, error) { var ( localVarHTTPMethod = http.MethodDelete localVarPostBody interface{} @@ -185,12 +185,12 @@ func (a *DeploymentServiceAPIService) DeploymentServiceDeleteDeploymentExecute(r localVarReturnValue map[string]interface{} ) - localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DeploymentServiceAPIService.DeploymentServiceDeleteDeployment") + localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DataServiceDeploymentServiceAPIService.DataServiceDeploymentServiceDeleteDataServiceDeployment") if err != nil { return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()} } - localVarPath := localBasePath + "/pds/v1/deployments/{id}" + localVarPath := localBasePath + "/pds/v1/dataServiceDeployments/{id}" localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", url.PathEscape(parameterValueToString(r.id, "id")), -1) localVarHeaderParams := make(map[string]string) @@ -262,25 +262,25 @@ func (a *DeploymentServiceAPIService) DeploymentServiceDeleteDeploymentExecute(r return localVarReturnValue, localVarHTTPResponse, nil } -type ApiDeploymentServiceGetDeploymentRequest struct { +type ApiDataServiceDeploymentServiceGetDataServiceDeploymentRequest struct { ctx context.Context - ApiService *DeploymentServiceAPIService + ApiService *DataServiceDeploymentServiceAPIService id string } -func (r ApiDeploymentServiceGetDeploymentRequest) Execute() (*V1Deployment, *http.Response, error) { - return r.ApiService.DeploymentServiceGetDeploymentExecute(r) +func (r ApiDataServiceDeploymentServiceGetDataServiceDeploymentRequest) Execute() (*V1DataServiceDeployment, *http.Response, error) { + return r.ApiService.DataServiceDeploymentServiceGetDataServiceDeploymentExecute(r) } /* -DeploymentServiceGetDeployment GetDeployment API returns the Deployment resource. +DataServiceDeploymentServiceGetDataServiceDeployment GetDataServiceDeployment API returns the DataService Deployment resource. @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param id UID of the Deployment. - @return ApiDeploymentServiceGetDeploymentRequest + @param id UID of the DataService Deployment. + @return ApiDataServiceDeploymentServiceGetDataServiceDeploymentRequest */ -func (a *DeploymentServiceAPIService) DeploymentServiceGetDeployment(ctx context.Context, id string) ApiDeploymentServiceGetDeploymentRequest { - return ApiDeploymentServiceGetDeploymentRequest{ +func (a *DataServiceDeploymentServiceAPIService) DataServiceDeploymentServiceGetDataServiceDeployment(ctx context.Context, id string) ApiDataServiceDeploymentServiceGetDataServiceDeploymentRequest { + return ApiDataServiceDeploymentServiceGetDataServiceDeploymentRequest{ ApiService: a, ctx: ctx, id: id, @@ -288,21 +288,21 @@ func (a *DeploymentServiceAPIService) DeploymentServiceGetDeployment(ctx context } // Execute executes the request -// @return V1Deployment -func (a *DeploymentServiceAPIService) DeploymentServiceGetDeploymentExecute(r ApiDeploymentServiceGetDeploymentRequest) (*V1Deployment, *http.Response, error) { +// @return V1DataServiceDeployment +func (a *DataServiceDeploymentServiceAPIService) DataServiceDeploymentServiceGetDataServiceDeploymentExecute(r ApiDataServiceDeploymentServiceGetDataServiceDeploymentRequest) (*V1DataServiceDeployment, *http.Response, error) { var ( localVarHTTPMethod = http.MethodGet localVarPostBody interface{} formFiles []formFile - localVarReturnValue *V1Deployment + localVarReturnValue *V1DataServiceDeployment ) - localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DeploymentServiceAPIService.DeploymentServiceGetDeployment") + localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DataServiceDeploymentServiceAPIService.DataServiceDeploymentServiceGetDataServiceDeployment") if err != nil { return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()} } - localVarPath := localBasePath + "/pds/v1/deployments/{id}" + localVarPath := localBasePath + "/pds/v1/dataServiceDeployments/{id}" localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", url.PathEscape(parameterValueToString(r.id, "id")), -1) localVarHeaderParams := make(map[string]string) @@ -371,25 +371,25 @@ func (a *DeploymentServiceAPIService) DeploymentServiceGetDeploymentExecute(r Ap return localVarReturnValue, localVarHTTPResponse, nil } -type ApiDeploymentServiceGetDeploymentCredentialsRequest struct { +type ApiDataServiceDeploymentServiceGetDataServiceDeploymentCredentialsRequest struct { ctx context.Context - ApiService *DeploymentServiceAPIService + ApiService *DataServiceDeploymentServiceAPIService id string } -func (r ApiDeploymentServiceGetDeploymentCredentialsRequest) Execute() (*V1DeploymentCredentials, *http.Response, error) { - return r.ApiService.DeploymentServiceGetDeploymentCredentialsExecute(r) +func (r ApiDataServiceDeploymentServiceGetDataServiceDeploymentCredentialsRequest) Execute() (*V1DataServiceDeploymentCredentials, *http.Response, error) { + return r.ApiService.DataServiceDeploymentServiceGetDataServiceDeploymentCredentialsExecute(r) } /* -DeploymentServiceGetDeploymentCredentials GetDeploymentCredentials API returns the Credentials to be used to access the Deployment. +DataServiceDeploymentServiceGetDataServiceDeploymentCredentials GetDataServiceDeploymentCredentials API returns the Credentials to be used to access the DataService Deployment. @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param id UID of the Deployment. - @return ApiDeploymentServiceGetDeploymentCredentialsRequest + @param id UID of the DataService Deployment. + @return ApiDataServiceDeploymentServiceGetDataServiceDeploymentCredentialsRequest */ -func (a *DeploymentServiceAPIService) DeploymentServiceGetDeploymentCredentials(ctx context.Context, id string) ApiDeploymentServiceGetDeploymentCredentialsRequest { - return ApiDeploymentServiceGetDeploymentCredentialsRequest{ +func (a *DataServiceDeploymentServiceAPIService) DataServiceDeploymentServiceGetDataServiceDeploymentCredentials(ctx context.Context, id string) ApiDataServiceDeploymentServiceGetDataServiceDeploymentCredentialsRequest { + return ApiDataServiceDeploymentServiceGetDataServiceDeploymentCredentialsRequest{ ApiService: a, ctx: ctx, id: id, @@ -397,21 +397,21 @@ func (a *DeploymentServiceAPIService) DeploymentServiceGetDeploymentCredentials( } // Execute executes the request -// @return V1DeploymentCredentials -func (a *DeploymentServiceAPIService) DeploymentServiceGetDeploymentCredentialsExecute(r ApiDeploymentServiceGetDeploymentCredentialsRequest) (*V1DeploymentCredentials, *http.Response, error) { +// @return V1DataServiceDeploymentCredentials +func (a *DataServiceDeploymentServiceAPIService) DataServiceDeploymentServiceGetDataServiceDeploymentCredentialsExecute(r ApiDataServiceDeploymentServiceGetDataServiceDeploymentCredentialsRequest) (*V1DataServiceDeploymentCredentials, *http.Response, error) { var ( localVarHTTPMethod = http.MethodGet localVarPostBody interface{} formFiles []formFile - localVarReturnValue *V1DeploymentCredentials + localVarReturnValue *V1DataServiceDeploymentCredentials ) - localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DeploymentServiceAPIService.DeploymentServiceGetDeploymentCredentials") + localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DataServiceDeploymentServiceAPIService.DataServiceDeploymentServiceGetDataServiceDeploymentCredentials") if err != nil { return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()} } - localVarPath := localBasePath + "/pds/v1/deployments/{id}:credentials" + localVarPath := localBasePath + "/pds/v1/dataServiceDeployments/{id}:credentials" localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", url.PathEscape(parameterValueToString(r.id, "id")), -1) localVarHeaderParams := make(map[string]string) @@ -480,137 +480,178 @@ func (a *DeploymentServiceAPIService) DeploymentServiceGetDeploymentCredentialsE return localVarReturnValue, localVarHTTPResponse, nil } -type ApiDeploymentServiceListDeploymentsRequest struct { +type ApiDataServiceDeploymentServiceGetKeyPerformanceIndicatorsRequest struct { ctx context.Context - ApiService *DeploymentServiceAPIService - tenantId *string - clusterId *string - namespaceId *string - projectId *string - paginationPageNumber *string - paginationPageSize *string - sortSortBy *string - sortSortOrder *string + ApiService *DataServiceDeploymentServiceAPIService + v1ListDataServiceDeploymentsRequest *V1ListDataServiceDeploymentsRequest } -// UID of the tenant. -func (r ApiDeploymentServiceListDeploymentsRequest) TenantId(tenantId string) ApiDeploymentServiceListDeploymentsRequest { - r.tenantId = &tenantId +// Request to list the data service deployment resources. +func (r ApiDataServiceDeploymentServiceGetKeyPerformanceIndicatorsRequest) V1ListDataServiceDeploymentsRequest(v1ListDataServiceDeploymentsRequest V1ListDataServiceDeploymentsRequest) ApiDataServiceDeploymentServiceGetKeyPerformanceIndicatorsRequest { + r.v1ListDataServiceDeploymentsRequest = &v1ListDataServiceDeploymentsRequest return r } -// UID of the target cluster. -func (r ApiDeploymentServiceListDeploymentsRequest) ClusterId(clusterId string) ApiDeploymentServiceListDeploymentsRequest { - r.clusterId = &clusterId - return r +func (r ApiDataServiceDeploymentServiceGetKeyPerformanceIndicatorsRequest) Execute() (*V1KeyPerformanceIndicators, *http.Response, error) { + return r.ApiService.DataServiceDeploymentServiceGetKeyPerformanceIndicatorsExecute(r) } -// UID of the namespace. -func (r ApiDeploymentServiceListDeploymentsRequest) NamespaceId(namespaceId string) ApiDeploymentServiceListDeploymentsRequest { - r.namespaceId = &namespaceId - return r -} +/* +DataServiceDeploymentServiceGetKeyPerformanceIndicators GetKeyPerformanceIndicator API return the analytics of the DataService Deployment resources. -// UID of the project. -func (r ApiDeploymentServiceListDeploymentsRequest) ProjectId(projectId string) ApiDeploymentServiceListDeploymentsRequest { - r.projectId = &projectId - return r + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiDataServiceDeploymentServiceGetKeyPerformanceIndicatorsRequest +*/ +func (a *DataServiceDeploymentServiceAPIService) DataServiceDeploymentServiceGetKeyPerformanceIndicators(ctx context.Context) ApiDataServiceDeploymentServiceGetKeyPerformanceIndicatorsRequest { + return ApiDataServiceDeploymentServiceGetKeyPerformanceIndicatorsRequest{ + ApiService: a, + ctx: ctx, + } } -// Page number is the page number to return based on the size. -func (r ApiDeploymentServiceListDeploymentsRequest) PaginationPageNumber(paginationPageNumber string) ApiDeploymentServiceListDeploymentsRequest { - r.paginationPageNumber = &paginationPageNumber - return r -} +// Execute executes the request +// @return V1KeyPerformanceIndicators +func (a *DataServiceDeploymentServiceAPIService) DataServiceDeploymentServiceGetKeyPerformanceIndicatorsExecute(r ApiDataServiceDeploymentServiceGetKeyPerformanceIndicatorsRequest) (*V1KeyPerformanceIndicators, *http.Response, error) { + var ( + localVarHTTPMethod = http.MethodPost + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *V1KeyPerformanceIndicators + ) -// Page size is the maximum number of records to include per page. -func (r ApiDeploymentServiceListDeploymentsRequest) PaginationPageSize(paginationPageSize string) ApiDeploymentServiceListDeploymentsRequest { - r.paginationPageSize = &paginationPageSize - return r + localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DataServiceDeploymentServiceAPIService.DataServiceDeploymentServiceGetKeyPerformanceIndicators") + if err != nil { + return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()} + } + + localVarPath := localBasePath + "/pds/v1/dataServiceDeployments:kpis" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + if r.v1ListDataServiceDeploymentsRequest == nil { + return localVarReturnValue, nil, reportError("v1ListDataServiceDeploymentsRequest is required and must be specified") + } + + // to determine the Content-Type header + localVarHTTPContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes) + if localVarHTTPContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHTTPContentType + } + + // to determine the Accept header + localVarHTTPHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts) + if localVarHTTPHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept + } + // body params + localVarPostBody = r.v1ListDataServiceDeploymentsRequest + req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHTTPResponse, err := a.client.callAPI(req) + if err != nil || localVarHTTPResponse == nil { + return localVarReturnValue, localVarHTTPResponse, err + } + + localVarBody, err := io.ReadAll(localVarHTTPResponse.Body) + localVarHTTPResponse.Body.Close() + localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody)) + if err != nil { + return localVarReturnValue, localVarHTTPResponse, err + } + + if localVarHTTPResponse.StatusCode >= 300 { + newErr := &GenericOpenAPIError{ + body: localVarBody, + error: localVarHTTPResponse.Status, + } + var v GooglerpcStatus + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHTTPResponse, newErr + } + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v + return localVarReturnValue, localVarHTTPResponse, newErr + } + + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr := &GenericOpenAPIError{ + body: localVarBody, + error: err.Error(), + } + return localVarReturnValue, localVarHTTPResponse, newErr + } + + return localVarReturnValue, localVarHTTPResponse, nil } -// Name of the attribute to sort results by. - FIELD_UNSPECIFIED: Unspecified, do not use. - NAME: Sorting based on the name of the resource. - CREATED_AT: Sorting on create time of the resource. - UPDATED_AT: Sorting on update time of the resource. - PHASE: Sorting on phase of the resource. -func (r ApiDeploymentServiceListDeploymentsRequest) SortSortBy(sortSortBy string) ApiDeploymentServiceListDeploymentsRequest { - r.sortSortBy = &sortSortBy - return r +type ApiDataServiceDeploymentServiceListDataServiceDeploymentsRequest struct { + ctx context.Context + ApiService *DataServiceDeploymentServiceAPIService + v1ListDataServiceDeploymentsRequest *V1ListDataServiceDeploymentsRequest } -// Order of sorting to be applied on requested list. If sort_by having some value and sort_order is not provided, by default ascending order will be used to sort the list. - VALUE_UNSPECIFIED: Unspecified, do not use. - ASC: Sort order ascending. - DESC: Sort order descending. -func (r ApiDeploymentServiceListDeploymentsRequest) SortSortOrder(sortSortOrder string) ApiDeploymentServiceListDeploymentsRequest { - r.sortSortOrder = &sortSortOrder +// Request to list the data service deployment resources. +func (r ApiDataServiceDeploymentServiceListDataServiceDeploymentsRequest) V1ListDataServiceDeploymentsRequest(v1ListDataServiceDeploymentsRequest V1ListDataServiceDeploymentsRequest) ApiDataServiceDeploymentServiceListDataServiceDeploymentsRequest { + r.v1ListDataServiceDeploymentsRequest = &v1ListDataServiceDeploymentsRequest return r } -func (r ApiDeploymentServiceListDeploymentsRequest) Execute() (*V1ListDeploymentsResponse, *http.Response, error) { - return r.ApiService.DeploymentServiceListDeploymentsExecute(r) +func (r ApiDataServiceDeploymentServiceListDataServiceDeploymentsRequest) Execute() (*V1ListDataServiceDeploymentsResponse, *http.Response, error) { + return r.ApiService.DataServiceDeploymentServiceListDataServiceDeploymentsExecute(r) } /* -DeploymentServiceListDeployments ListDeployments API lists the Deployment resources. +DataServiceDeploymentServiceListDataServiceDeployments ListDataServiceDeployments API lists the DataService Deployment resources. @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiDeploymentServiceListDeploymentsRequest + @return ApiDataServiceDeploymentServiceListDataServiceDeploymentsRequest */ -func (a *DeploymentServiceAPIService) DeploymentServiceListDeployments(ctx context.Context) ApiDeploymentServiceListDeploymentsRequest { - return ApiDeploymentServiceListDeploymentsRequest{ +func (a *DataServiceDeploymentServiceAPIService) DataServiceDeploymentServiceListDataServiceDeployments(ctx context.Context) ApiDataServiceDeploymentServiceListDataServiceDeploymentsRequest { + return ApiDataServiceDeploymentServiceListDataServiceDeploymentsRequest{ ApiService: a, ctx: ctx, } } // Execute executes the request -// @return V1ListDeploymentsResponse -func (a *DeploymentServiceAPIService) DeploymentServiceListDeploymentsExecute(r ApiDeploymentServiceListDeploymentsRequest) (*V1ListDeploymentsResponse, *http.Response, error) { +// @return V1ListDataServiceDeploymentsResponse +func (a *DataServiceDeploymentServiceAPIService) DataServiceDeploymentServiceListDataServiceDeploymentsExecute(r ApiDataServiceDeploymentServiceListDataServiceDeploymentsRequest) (*V1ListDataServiceDeploymentsResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet + localVarHTTPMethod = http.MethodPost localVarPostBody interface{} formFiles []formFile - localVarReturnValue *V1ListDeploymentsResponse + localVarReturnValue *V1ListDataServiceDeploymentsResponse ) - localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DeploymentServiceAPIService.DeploymentServiceListDeployments") + localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DataServiceDeploymentServiceAPIService.DataServiceDeploymentServiceListDataServiceDeployments") if err != nil { return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()} } - localVarPath := localBasePath + "/pds/v1/deployments" + localVarPath := localBasePath + "/pds/v1/dataServiceDeployments:search" localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - - if r.tenantId != nil { - parameterAddToHeaderOrQuery(localVarQueryParams, "tenantId", r.tenantId, "") - } - if r.clusterId != nil { - parameterAddToHeaderOrQuery(localVarQueryParams, "clusterId", r.clusterId, "") - } - if r.namespaceId != nil { - parameterAddToHeaderOrQuery(localVarQueryParams, "namespaceId", r.namespaceId, "") - } - if r.projectId != nil { - parameterAddToHeaderOrQuery(localVarQueryParams, "projectId", r.projectId, "") - } - if r.paginationPageNumber != nil { - parameterAddToHeaderOrQuery(localVarQueryParams, "pagination.pageNumber", r.paginationPageNumber, "") - } - if r.paginationPageSize != nil { - parameterAddToHeaderOrQuery(localVarQueryParams, "pagination.pageSize", r.paginationPageSize, "") - } - if r.sortSortBy != nil { - parameterAddToHeaderOrQuery(localVarQueryParams, "sort.sortBy", r.sortSortBy, "") - } else { - var defaultValue string = "FIELD_UNSPECIFIED" - r.sortSortBy = &defaultValue - } - if r.sortSortOrder != nil { - parameterAddToHeaderOrQuery(localVarQueryParams, "sort.sortOrder", r.sortSortOrder, "") - } else { - var defaultValue string = "VALUE_UNSPECIFIED" - r.sortSortOrder = &defaultValue + if r.v1ListDataServiceDeploymentsRequest == nil { + return localVarReturnValue, nil, reportError("v1ListDataServiceDeploymentsRequest is required and must be specified") } + // to determine the Content-Type header - localVarHTTPContentTypes := []string{} + localVarHTTPContentTypes := []string{"application/json"} // set Content-Type header localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes) @@ -626,6 +667,8 @@ func (a *DeploymentServiceAPIService) DeploymentServiceListDeploymentsExecute(r if localVarHTTPHeaderAccept != "" { localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept } + // body params + localVarPostBody = r.v1ListDataServiceDeploymentsRequest req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles) if err != nil { return localVarReturnValue, nil, err diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/client.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/client.go similarity index 97% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/client.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/client.go index 0fb00ecdc..d4778640f 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/client.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/client.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "bytes" @@ -41,7 +41,7 @@ var ( queryDescape = strings.NewReplacer( "%5B", "[", "%5D", "]" ) ) -// APIClient manages communication with the public/portworx/pds/deployment/apiv1/deployment.proto API vversion not set +// APIClient manages communication with the public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto API vversion not set // In most cases there should be only one, shared, APIClient. type APIClient struct { cfg *Configuration @@ -49,7 +49,7 @@ type APIClient struct { // API Services - DeploymentServiceAPI *DeploymentServiceAPIService + DataServiceDeploymentServiceAPI *DataServiceDeploymentServiceAPIService } type service struct { @@ -68,7 +68,7 @@ func NewAPIClient(cfg *Configuration) *APIClient { c.common.client = c // API Services - c.DeploymentServiceAPI = (*DeploymentServiceAPIService)(&c.common) + c.DataServiceDeploymentServiceAPI = (*DataServiceDeploymentServiceAPIService)(&c.common) return c } @@ -162,7 +162,7 @@ func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix stri return } if t, ok := obj.(time.Time); ok { - parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339), collectionType) + parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339Nano), collectionType) return } value = v.Type().String() + " value" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/configuration.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/configuration.go similarity index 98% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/configuration.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/configuration.go index 089dd56d4..2c7df7a78 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/configuration.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/configuration.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "context" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_data_service_deployment_service_create_data_service_deployment_body.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_data_service_deployment_service_create_data_service_deployment_body.go new file mode 100644 index 000000000..affd915d7 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_data_service_deployment_service_create_data_service_deployment_body.go @@ -0,0 +1,163 @@ +/* +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeployment + +import ( + "encoding/json" +) + +// checks if the DataServiceDeploymentServiceCreateDataServiceDeploymentBody type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &DataServiceDeploymentServiceCreateDataServiceDeploymentBody{} + +// DataServiceDeploymentServiceCreateDataServiceDeploymentBody Request to create the DataService Deployment resource. +type DataServiceDeploymentServiceCreateDataServiceDeploymentBody struct { + // UID of the project. + ProjectId *string `json:"projectId,omitempty"` + DataServiceDeployment *V1DataServiceDeployment `json:"dataServiceDeployment,omitempty"` +} + +// NewDataServiceDeploymentServiceCreateDataServiceDeploymentBody instantiates a new DataServiceDeploymentServiceCreateDataServiceDeploymentBody object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewDataServiceDeploymentServiceCreateDataServiceDeploymentBody() *DataServiceDeploymentServiceCreateDataServiceDeploymentBody { + this := DataServiceDeploymentServiceCreateDataServiceDeploymentBody{} + return &this +} + +// NewDataServiceDeploymentServiceCreateDataServiceDeploymentBodyWithDefaults instantiates a new DataServiceDeploymentServiceCreateDataServiceDeploymentBody object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewDataServiceDeploymentServiceCreateDataServiceDeploymentBodyWithDefaults() *DataServiceDeploymentServiceCreateDataServiceDeploymentBody { + this := DataServiceDeploymentServiceCreateDataServiceDeploymentBody{} + return &this +} + +// GetProjectId returns the ProjectId field value if set, zero value otherwise. +func (o *DataServiceDeploymentServiceCreateDataServiceDeploymentBody) GetProjectId() string { + if o == nil || IsNil(o.ProjectId) { + var ret string + return ret + } + return *o.ProjectId +} + +// GetProjectIdOk returns a tuple with the ProjectId field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *DataServiceDeploymentServiceCreateDataServiceDeploymentBody) GetProjectIdOk() (*string, bool) { + if o == nil || IsNil(o.ProjectId) { + return nil, false + } + return o.ProjectId, true +} + +// HasProjectId returns a boolean if a field has been set. +func (o *DataServiceDeploymentServiceCreateDataServiceDeploymentBody) HasProjectId() bool { + if o != nil && !IsNil(o.ProjectId) { + return true + } + + return false +} + +// SetProjectId gets a reference to the given string and assigns it to the ProjectId field. +func (o *DataServiceDeploymentServiceCreateDataServiceDeploymentBody) SetProjectId(v string) { + o.ProjectId = &v +} + +// GetDataServiceDeployment returns the DataServiceDeployment field value if set, zero value otherwise. +func (o *DataServiceDeploymentServiceCreateDataServiceDeploymentBody) GetDataServiceDeployment() V1DataServiceDeployment { + if o == nil || IsNil(o.DataServiceDeployment) { + var ret V1DataServiceDeployment + return ret + } + return *o.DataServiceDeployment +} + +// GetDataServiceDeploymentOk returns a tuple with the DataServiceDeployment field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *DataServiceDeploymentServiceCreateDataServiceDeploymentBody) GetDataServiceDeploymentOk() (*V1DataServiceDeployment, bool) { + if o == nil || IsNil(o.DataServiceDeployment) { + return nil, false + } + return o.DataServiceDeployment, true +} + +// HasDataServiceDeployment returns a boolean if a field has been set. +func (o *DataServiceDeploymentServiceCreateDataServiceDeploymentBody) HasDataServiceDeployment() bool { + if o != nil && !IsNil(o.DataServiceDeployment) { + return true + } + + return false +} + +// SetDataServiceDeployment gets a reference to the given V1DataServiceDeployment and assigns it to the DataServiceDeployment field. +func (o *DataServiceDeploymentServiceCreateDataServiceDeploymentBody) SetDataServiceDeployment(v V1DataServiceDeployment) { + o.DataServiceDeployment = &v +} + +func (o DataServiceDeploymentServiceCreateDataServiceDeploymentBody) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o DataServiceDeploymentServiceCreateDataServiceDeploymentBody) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.ProjectId) { + toSerialize["projectId"] = o.ProjectId + } + if !IsNil(o.DataServiceDeployment) { + toSerialize["dataServiceDeployment"] = o.DataServiceDeployment + } + return toSerialize, nil +} + +type NullableDataServiceDeploymentServiceCreateDataServiceDeploymentBody struct { + value *DataServiceDeploymentServiceCreateDataServiceDeploymentBody + isSet bool +} + +func (v NullableDataServiceDeploymentServiceCreateDataServiceDeploymentBody) Get() *DataServiceDeploymentServiceCreateDataServiceDeploymentBody { + return v.value +} + +func (v *NullableDataServiceDeploymentServiceCreateDataServiceDeploymentBody) Set(val *DataServiceDeploymentServiceCreateDataServiceDeploymentBody) { + v.value = val + v.isSet = true +} + +func (v NullableDataServiceDeploymentServiceCreateDataServiceDeploymentBody) IsSet() bool { + return v.isSet +} + +func (v *NullableDataServiceDeploymentServiceCreateDataServiceDeploymentBody) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableDataServiceDeploymentServiceCreateDataServiceDeploymentBody(val *DataServiceDeploymentServiceCreateDataServiceDeploymentBody) *NullableDataServiceDeploymentServiceCreateDataServiceDeploymentBody { + return &NullableDataServiceDeploymentServiceCreateDataServiceDeploymentBody{value: val, isSet: true} +} + +func (v NullableDataServiceDeploymentServiceCreateDataServiceDeploymentBody) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableDataServiceDeploymentServiceCreateDataServiceDeploymentBody) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_deploymentv1_status.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_dataservicedeploymentv1_status.go similarity index 50% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_deploymentv1_status.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_dataservicedeploymentv1_status.go index dd027cfc0..5309669e3 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_deploymentv1_status.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_dataservicedeploymentv1_status.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,17 +8,17 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "encoding/json" ) -// checks if the Deploymentv1Status type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &Deploymentv1Status{} +// checks if the Dataservicedeploymentv1Status type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &Dataservicedeploymentv1Status{} -// Deploymentv1Status Status of the Deployment. -type Deploymentv1Status struct { +// Dataservicedeploymentv1Status Status of the DataService Deployment. +type Dataservicedeploymentv1Status struct { Health *V1StatusHealth `json:"health,omitempty"` Phase *V1StatusPhase `json:"phase,omitempty"` // ConnectionDetails urls, ports, credentials, etc for connecting to the data service. @@ -26,17 +26,19 @@ type Deploymentv1Status struct { // Initialize used to control startup scripts. Initialized *string `json:"initialized,omitempty"` // Status of the deployment topology. - DeploymentTopologyStatus []V1DeploymentTopologyStatus `json:"deploymentTopologyStatus,omitempty"` + DataServiceDeploymentTopologyStatus []V1DataServiceDeploymentTopologyStatus `json:"dataServiceDeploymentTopologyStatus,omitempty"` // Custom Resource Name is the kubernetes resource name for the deployment that is built from ID. CustomResourceName *string `json:"customResourceName,omitempty"` + // dns zone of the deployment. + DnsZone *string `json:"dnsZone,omitempty"` } -// NewDeploymentv1Status instantiates a new Deploymentv1Status object +// NewDataservicedeploymentv1Status instantiates a new Dataservicedeploymentv1Status object // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewDeploymentv1Status() *Deploymentv1Status { - this := Deploymentv1Status{} +func NewDataservicedeploymentv1Status() *Dataservicedeploymentv1Status { + this := Dataservicedeploymentv1Status{} var health V1StatusHealth = V1STATUSHEALTH_HEALTH_UNSPECIFIED this.Health = &health var phase V1StatusPhase = V1STATUSPHASE_PHASE_UNSPECIFIED @@ -44,11 +46,11 @@ func NewDeploymentv1Status() *Deploymentv1Status { return &this } -// NewDeploymentv1StatusWithDefaults instantiates a new Deploymentv1Status object +// NewDataservicedeploymentv1StatusWithDefaults instantiates a new Dataservicedeploymentv1Status object // This constructor will only assign default values to properties that have it defined, // but it doesn't guarantee that properties required by API are set -func NewDeploymentv1StatusWithDefaults() *Deploymentv1Status { - this := Deploymentv1Status{} +func NewDataservicedeploymentv1StatusWithDefaults() *Dataservicedeploymentv1Status { + this := Dataservicedeploymentv1Status{} var health V1StatusHealth = V1STATUSHEALTH_HEALTH_UNSPECIFIED this.Health = &health var phase V1StatusPhase = V1STATUSPHASE_PHASE_UNSPECIFIED @@ -57,7 +59,7 @@ func NewDeploymentv1StatusWithDefaults() *Deploymentv1Status { } // GetHealth returns the Health field value if set, zero value otherwise. -func (o *Deploymentv1Status) GetHealth() V1StatusHealth { +func (o *Dataservicedeploymentv1Status) GetHealth() V1StatusHealth { if o == nil || IsNil(o.Health) { var ret V1StatusHealth return ret @@ -67,7 +69,7 @@ func (o *Deploymentv1Status) GetHealth() V1StatusHealth { // GetHealthOk returns a tuple with the Health field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *Deploymentv1Status) GetHealthOk() (*V1StatusHealth, bool) { +func (o *Dataservicedeploymentv1Status) GetHealthOk() (*V1StatusHealth, bool) { if o == nil || IsNil(o.Health) { return nil, false } @@ -75,7 +77,7 @@ func (o *Deploymentv1Status) GetHealthOk() (*V1StatusHealth, bool) { } // HasHealth returns a boolean if a field has been set. -func (o *Deploymentv1Status) HasHealth() bool { +func (o *Dataservicedeploymentv1Status) HasHealth() bool { if o != nil && !IsNil(o.Health) { return true } @@ -84,12 +86,12 @@ func (o *Deploymentv1Status) HasHealth() bool { } // SetHealth gets a reference to the given V1StatusHealth and assigns it to the Health field. -func (o *Deploymentv1Status) SetHealth(v V1StatusHealth) { +func (o *Dataservicedeploymentv1Status) SetHealth(v V1StatusHealth) { o.Health = &v } // GetPhase returns the Phase field value if set, zero value otherwise. -func (o *Deploymentv1Status) GetPhase() V1StatusPhase { +func (o *Dataservicedeploymentv1Status) GetPhase() V1StatusPhase { if o == nil || IsNil(o.Phase) { var ret V1StatusPhase return ret @@ -99,7 +101,7 @@ func (o *Deploymentv1Status) GetPhase() V1StatusPhase { // GetPhaseOk returns a tuple with the Phase field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *Deploymentv1Status) GetPhaseOk() (*V1StatusPhase, bool) { +func (o *Dataservicedeploymentv1Status) GetPhaseOk() (*V1StatusPhase, bool) { if o == nil || IsNil(o.Phase) { return nil, false } @@ -107,7 +109,7 @@ func (o *Deploymentv1Status) GetPhaseOk() (*V1StatusPhase, bool) { } // HasPhase returns a boolean if a field has been set. -func (o *Deploymentv1Status) HasPhase() bool { +func (o *Dataservicedeploymentv1Status) HasPhase() bool { if o != nil && !IsNil(o.Phase) { return true } @@ -116,12 +118,12 @@ func (o *Deploymentv1Status) HasPhase() bool { } // SetPhase gets a reference to the given V1StatusPhase and assigns it to the Phase field. -func (o *Deploymentv1Status) SetPhase(v V1StatusPhase) { +func (o *Dataservicedeploymentv1Status) SetPhase(v V1StatusPhase) { o.Phase = &v } // GetConnectionInfo returns the ConnectionInfo field value if set, zero value otherwise. -func (o *Deploymentv1Status) GetConnectionInfo() map[string]interface{} { +func (o *Dataservicedeploymentv1Status) GetConnectionInfo() map[string]interface{} { if o == nil || IsNil(o.ConnectionInfo) { var ret map[string]interface{} return ret @@ -131,7 +133,7 @@ func (o *Deploymentv1Status) GetConnectionInfo() map[string]interface{} { // GetConnectionInfoOk returns a tuple with the ConnectionInfo field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *Deploymentv1Status) GetConnectionInfoOk() (map[string]interface{}, bool) { +func (o *Dataservicedeploymentv1Status) GetConnectionInfoOk() (map[string]interface{}, bool) { if o == nil || IsNil(o.ConnectionInfo) { return map[string]interface{}{}, false } @@ -139,7 +141,7 @@ func (o *Deploymentv1Status) GetConnectionInfoOk() (map[string]interface{}, bool } // HasConnectionInfo returns a boolean if a field has been set. -func (o *Deploymentv1Status) HasConnectionInfo() bool { +func (o *Dataservicedeploymentv1Status) HasConnectionInfo() bool { if o != nil && !IsNil(o.ConnectionInfo) { return true } @@ -148,12 +150,12 @@ func (o *Deploymentv1Status) HasConnectionInfo() bool { } // SetConnectionInfo gets a reference to the given map[string]interface{} and assigns it to the ConnectionInfo field. -func (o *Deploymentv1Status) SetConnectionInfo(v map[string]interface{}) { +func (o *Dataservicedeploymentv1Status) SetConnectionInfo(v map[string]interface{}) { o.ConnectionInfo = v } // GetInitialized returns the Initialized field value if set, zero value otherwise. -func (o *Deploymentv1Status) GetInitialized() string { +func (o *Dataservicedeploymentv1Status) GetInitialized() string { if o == nil || IsNil(o.Initialized) { var ret string return ret @@ -163,7 +165,7 @@ func (o *Deploymentv1Status) GetInitialized() string { // GetInitializedOk returns a tuple with the Initialized field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *Deploymentv1Status) GetInitializedOk() (*string, bool) { +func (o *Dataservicedeploymentv1Status) GetInitializedOk() (*string, bool) { if o == nil || IsNil(o.Initialized) { return nil, false } @@ -171,7 +173,7 @@ func (o *Deploymentv1Status) GetInitializedOk() (*string, bool) { } // HasInitialized returns a boolean if a field has been set. -func (o *Deploymentv1Status) HasInitialized() bool { +func (o *Dataservicedeploymentv1Status) HasInitialized() bool { if o != nil && !IsNil(o.Initialized) { return true } @@ -180,44 +182,44 @@ func (o *Deploymentv1Status) HasInitialized() bool { } // SetInitialized gets a reference to the given string and assigns it to the Initialized field. -func (o *Deploymentv1Status) SetInitialized(v string) { +func (o *Dataservicedeploymentv1Status) SetInitialized(v string) { o.Initialized = &v } -// GetDeploymentTopologyStatus returns the DeploymentTopologyStatus field value if set, zero value otherwise. -func (o *Deploymentv1Status) GetDeploymentTopologyStatus() []V1DeploymentTopologyStatus { - if o == nil || IsNil(o.DeploymentTopologyStatus) { - var ret []V1DeploymentTopologyStatus +// GetDataServiceDeploymentTopologyStatus returns the DataServiceDeploymentTopologyStatus field value if set, zero value otherwise. +func (o *Dataservicedeploymentv1Status) GetDataServiceDeploymentTopologyStatus() []V1DataServiceDeploymentTopologyStatus { + if o == nil || IsNil(o.DataServiceDeploymentTopologyStatus) { + var ret []V1DataServiceDeploymentTopologyStatus return ret } - return o.DeploymentTopologyStatus + return o.DataServiceDeploymentTopologyStatus } -// GetDeploymentTopologyStatusOk returns a tuple with the DeploymentTopologyStatus field value if set, nil otherwise +// GetDataServiceDeploymentTopologyStatusOk returns a tuple with the DataServiceDeploymentTopologyStatus field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *Deploymentv1Status) GetDeploymentTopologyStatusOk() ([]V1DeploymentTopologyStatus, bool) { - if o == nil || IsNil(o.DeploymentTopologyStatus) { +func (o *Dataservicedeploymentv1Status) GetDataServiceDeploymentTopologyStatusOk() ([]V1DataServiceDeploymentTopologyStatus, bool) { + if o == nil || IsNil(o.DataServiceDeploymentTopologyStatus) { return nil, false } - return o.DeploymentTopologyStatus, true + return o.DataServiceDeploymentTopologyStatus, true } -// HasDeploymentTopologyStatus returns a boolean if a field has been set. -func (o *Deploymentv1Status) HasDeploymentTopologyStatus() bool { - if o != nil && !IsNil(o.DeploymentTopologyStatus) { +// HasDataServiceDeploymentTopologyStatus returns a boolean if a field has been set. +func (o *Dataservicedeploymentv1Status) HasDataServiceDeploymentTopologyStatus() bool { + if o != nil && !IsNil(o.DataServiceDeploymentTopologyStatus) { return true } return false } -// SetDeploymentTopologyStatus gets a reference to the given []V1DeploymentTopologyStatus and assigns it to the DeploymentTopologyStatus field. -func (o *Deploymentv1Status) SetDeploymentTopologyStatus(v []V1DeploymentTopologyStatus) { - o.DeploymentTopologyStatus = v +// SetDataServiceDeploymentTopologyStatus gets a reference to the given []V1DataServiceDeploymentTopologyStatus and assigns it to the DataServiceDeploymentTopologyStatus field. +func (o *Dataservicedeploymentv1Status) SetDataServiceDeploymentTopologyStatus(v []V1DataServiceDeploymentTopologyStatus) { + o.DataServiceDeploymentTopologyStatus = v } // GetCustomResourceName returns the CustomResourceName field value if set, zero value otherwise. -func (o *Deploymentv1Status) GetCustomResourceName() string { +func (o *Dataservicedeploymentv1Status) GetCustomResourceName() string { if o == nil || IsNil(o.CustomResourceName) { var ret string return ret @@ -227,7 +229,7 @@ func (o *Deploymentv1Status) GetCustomResourceName() string { // GetCustomResourceNameOk returns a tuple with the CustomResourceName field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *Deploymentv1Status) GetCustomResourceNameOk() (*string, bool) { +func (o *Dataservicedeploymentv1Status) GetCustomResourceNameOk() (*string, bool) { if o == nil || IsNil(o.CustomResourceName) { return nil, false } @@ -235,7 +237,7 @@ func (o *Deploymentv1Status) GetCustomResourceNameOk() (*string, bool) { } // HasCustomResourceName returns a boolean if a field has been set. -func (o *Deploymentv1Status) HasCustomResourceName() bool { +func (o *Dataservicedeploymentv1Status) HasCustomResourceName() bool { if o != nil && !IsNil(o.CustomResourceName) { return true } @@ -244,11 +246,43 @@ func (o *Deploymentv1Status) HasCustomResourceName() bool { } // SetCustomResourceName gets a reference to the given string and assigns it to the CustomResourceName field. -func (o *Deploymentv1Status) SetCustomResourceName(v string) { +func (o *Dataservicedeploymentv1Status) SetCustomResourceName(v string) { o.CustomResourceName = &v } -func (o Deploymentv1Status) MarshalJSON() ([]byte, error) { +// GetDnsZone returns the DnsZone field value if set, zero value otherwise. +func (o *Dataservicedeploymentv1Status) GetDnsZone() string { + if o == nil || IsNil(o.DnsZone) { + var ret string + return ret + } + return *o.DnsZone +} + +// GetDnsZoneOk returns a tuple with the DnsZone field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *Dataservicedeploymentv1Status) GetDnsZoneOk() (*string, bool) { + if o == nil || IsNil(o.DnsZone) { + return nil, false + } + return o.DnsZone, true +} + +// HasDnsZone returns a boolean if a field has been set. +func (o *Dataservicedeploymentv1Status) HasDnsZone() bool { + if o != nil && !IsNil(o.DnsZone) { + return true + } + + return false +} + +// SetDnsZone gets a reference to the given string and assigns it to the DnsZone field. +func (o *Dataservicedeploymentv1Status) SetDnsZone(v string) { + o.DnsZone = &v +} + +func (o Dataservicedeploymentv1Status) MarshalJSON() ([]byte, error) { toSerialize,err := o.ToMap() if err != nil { return []byte{}, err @@ -256,7 +290,7 @@ func (o Deploymentv1Status) MarshalJSON() ([]byte, error) { return json.Marshal(toSerialize) } -func (o Deploymentv1Status) ToMap() (map[string]interface{}, error) { +func (o Dataservicedeploymentv1Status) ToMap() (map[string]interface{}, error) { toSerialize := map[string]interface{}{} if !IsNil(o.Health) { toSerialize["health"] = o.Health @@ -270,47 +304,50 @@ func (o Deploymentv1Status) ToMap() (map[string]interface{}, error) { if !IsNil(o.Initialized) { toSerialize["initialized"] = o.Initialized } - if !IsNil(o.DeploymentTopologyStatus) { - toSerialize["deploymentTopologyStatus"] = o.DeploymentTopologyStatus + if !IsNil(o.DataServiceDeploymentTopologyStatus) { + toSerialize["dataServiceDeploymentTopologyStatus"] = o.DataServiceDeploymentTopologyStatus } if !IsNil(o.CustomResourceName) { toSerialize["customResourceName"] = o.CustomResourceName } + if !IsNil(o.DnsZone) { + toSerialize["dnsZone"] = o.DnsZone + } return toSerialize, nil } -type NullableDeploymentv1Status struct { - value *Deploymentv1Status +type NullableDataservicedeploymentv1Status struct { + value *Dataservicedeploymentv1Status isSet bool } -func (v NullableDeploymentv1Status) Get() *Deploymentv1Status { +func (v NullableDataservicedeploymentv1Status) Get() *Dataservicedeploymentv1Status { return v.value } -func (v *NullableDeploymentv1Status) Set(val *Deploymentv1Status) { +func (v *NullableDataservicedeploymentv1Status) Set(val *Dataservicedeploymentv1Status) { v.value = val v.isSet = true } -func (v NullableDeploymentv1Status) IsSet() bool { +func (v NullableDataservicedeploymentv1Status) IsSet() bool { return v.isSet } -func (v *NullableDeploymentv1Status) Unset() { +func (v *NullableDataservicedeploymentv1Status) Unset() { v.value = nil v.isSet = false } -func NewNullableDeploymentv1Status(val *Deploymentv1Status) *NullableDeploymentv1Status { - return &NullableDeploymentv1Status{value: val, isSet: true} +func NewNullableDataservicedeploymentv1Status(val *Dataservicedeploymentv1Status) *NullableDataservicedeploymentv1Status { + return &NullableDataservicedeploymentv1Status{value: val, isSet: true} } -func (v NullableDeploymentv1Status) MarshalJSON() ([]byte, error) { +func (v NullableDataservicedeploymentv1Status) MarshalJSON() ([]byte, error) { return json.Marshal(v.value) } -func (v *NullableDeploymentv1Status) UnmarshalJSON(src []byte) error { +func (v *NullableDataservicedeploymentv1Status) UnmarshalJSON(src []byte) error { v.isSet = true return json.Unmarshal(src, &v.value) } diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_googlerpc_status.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_googlerpc_status.go similarity index 97% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_googlerpc_status.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_googlerpc_status.go index c1575d47b..9fb2e2186 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_googlerpc_status.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_googlerpc_status.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_pds_application_selector_pds_application_filter.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_pds_application_selector_pds_application_filter.go new file mode 100644 index 000000000..a9000ff9f --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_pds_application_selector_pds_application_filter.go @@ -0,0 +1,207 @@ +/* +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeployment + +import ( + "encoding/json" +) + +// checks if the PDSApplicationSelectorPDSApplicationFilter type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &PDSApplicationSelectorPDSApplicationFilter{} + +// PDSApplicationSelectorPDSApplicationFilter PDSApplicationFilter is filter for a given resource type. +type PDSApplicationSelectorPDSApplicationFilter struct { + ResourceType *V1PDSApplicationResourceType `json:"resourceType,omitempty"` + Op *SelectorOperator `json:"op,omitempty"` + // Value of key,value pair against which filtering needs to be performs. + Values []string `json:"values,omitempty"` +} + +// NewPDSApplicationSelectorPDSApplicationFilter instantiates a new PDSApplicationSelectorPDSApplicationFilter object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewPDSApplicationSelectorPDSApplicationFilter() *PDSApplicationSelectorPDSApplicationFilter { + this := PDSApplicationSelectorPDSApplicationFilter{} + var resourceType V1PDSApplicationResourceType = V1PDSAPPLICATIONRESOURCETYPE_TYPE_UNSPECIFIED + this.ResourceType = &resourceType + var op SelectorOperator = SELECTOROPERATOR_OPERATOR_UNSPECIFIED + this.Op = &op + return &this +} + +// NewPDSApplicationSelectorPDSApplicationFilterWithDefaults instantiates a new PDSApplicationSelectorPDSApplicationFilter object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewPDSApplicationSelectorPDSApplicationFilterWithDefaults() *PDSApplicationSelectorPDSApplicationFilter { + this := PDSApplicationSelectorPDSApplicationFilter{} + var resourceType V1PDSApplicationResourceType = V1PDSAPPLICATIONRESOURCETYPE_TYPE_UNSPECIFIED + this.ResourceType = &resourceType + var op SelectorOperator = SELECTOROPERATOR_OPERATOR_UNSPECIFIED + this.Op = &op + return &this +} + +// GetResourceType returns the ResourceType field value if set, zero value otherwise. +func (o *PDSApplicationSelectorPDSApplicationFilter) GetResourceType() V1PDSApplicationResourceType { + if o == nil || IsNil(o.ResourceType) { + var ret V1PDSApplicationResourceType + return ret + } + return *o.ResourceType +} + +// GetResourceTypeOk returns a tuple with the ResourceType field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *PDSApplicationSelectorPDSApplicationFilter) GetResourceTypeOk() (*V1PDSApplicationResourceType, bool) { + if o == nil || IsNil(o.ResourceType) { + return nil, false + } + return o.ResourceType, true +} + +// HasResourceType returns a boolean if a field has been set. +func (o *PDSApplicationSelectorPDSApplicationFilter) HasResourceType() bool { + if o != nil && !IsNil(o.ResourceType) { + return true + } + + return false +} + +// SetResourceType gets a reference to the given V1PDSApplicationResourceType and assigns it to the ResourceType field. +func (o *PDSApplicationSelectorPDSApplicationFilter) SetResourceType(v V1PDSApplicationResourceType) { + o.ResourceType = &v +} + +// GetOp returns the Op field value if set, zero value otherwise. +func (o *PDSApplicationSelectorPDSApplicationFilter) GetOp() SelectorOperator { + if o == nil || IsNil(o.Op) { + var ret SelectorOperator + return ret + } + return *o.Op +} + +// GetOpOk returns a tuple with the Op field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *PDSApplicationSelectorPDSApplicationFilter) GetOpOk() (*SelectorOperator, bool) { + if o == nil || IsNil(o.Op) { + return nil, false + } + return o.Op, true +} + +// HasOp returns a boolean if a field has been set. +func (o *PDSApplicationSelectorPDSApplicationFilter) HasOp() bool { + if o != nil && !IsNil(o.Op) { + return true + } + + return false +} + +// SetOp gets a reference to the given SelectorOperator and assigns it to the Op field. +func (o *PDSApplicationSelectorPDSApplicationFilter) SetOp(v SelectorOperator) { + o.Op = &v +} + +// GetValues returns the Values field value if set, zero value otherwise. +func (o *PDSApplicationSelectorPDSApplicationFilter) GetValues() []string { + if o == nil || IsNil(o.Values) { + var ret []string + return ret + } + return o.Values +} + +// GetValuesOk returns a tuple with the Values field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *PDSApplicationSelectorPDSApplicationFilter) GetValuesOk() ([]string, bool) { + if o == nil || IsNil(o.Values) { + return nil, false + } + return o.Values, true +} + +// HasValues returns a boolean if a field has been set. +func (o *PDSApplicationSelectorPDSApplicationFilter) HasValues() bool { + if o != nil && !IsNil(o.Values) { + return true + } + + return false +} + +// SetValues gets a reference to the given []string and assigns it to the Values field. +func (o *PDSApplicationSelectorPDSApplicationFilter) SetValues(v []string) { + o.Values = v +} + +func (o PDSApplicationSelectorPDSApplicationFilter) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o PDSApplicationSelectorPDSApplicationFilter) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.ResourceType) { + toSerialize["resourceType"] = o.ResourceType + } + if !IsNil(o.Op) { + toSerialize["op"] = o.Op + } + if !IsNil(o.Values) { + toSerialize["values"] = o.Values + } + return toSerialize, nil +} + +type NullablePDSApplicationSelectorPDSApplicationFilter struct { + value *PDSApplicationSelectorPDSApplicationFilter + isSet bool +} + +func (v NullablePDSApplicationSelectorPDSApplicationFilter) Get() *PDSApplicationSelectorPDSApplicationFilter { + return v.value +} + +func (v *NullablePDSApplicationSelectorPDSApplicationFilter) Set(val *PDSApplicationSelectorPDSApplicationFilter) { + v.value = val + v.isSet = true +} + +func (v NullablePDSApplicationSelectorPDSApplicationFilter) IsSet() bool { + return v.isSet +} + +func (v *NullablePDSApplicationSelectorPDSApplicationFilter) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullablePDSApplicationSelectorPDSApplicationFilter(val *PDSApplicationSelectorPDSApplicationFilter) *NullablePDSApplicationSelectorPDSApplicationFilter { + return &NullablePDSApplicationSelectorPDSApplicationFilter{value: val, isSet: true} +} + +func (v NullablePDSApplicationSelectorPDSApplicationFilter) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullablePDSApplicationSelectorPDSApplicationFilter) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_protobuf_any.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_protobuf_any.go similarity index 97% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_protobuf_any.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_protobuf_any.go index 3174562d8..8d99fc715 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_protobuf_any.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_protobuf_any.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_protobuf_null_value.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_protobuf_null_value.go similarity index 96% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_protobuf_null_value.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_protobuf_null_value.go index 4b889daa5..7f3104101 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_protobuf_null_value.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_protobuf_null_value.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_resource_selector_resource_filter.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_resource_selector_resource_filter.go new file mode 100644 index 000000000..3a3d07373 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_resource_selector_resource_filter.go @@ -0,0 +1,207 @@ +/* +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeployment + +import ( + "encoding/json" +) + +// checks if the ResourceSelectorResourceFilter type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &ResourceSelectorResourceFilter{} + +// ResourceSelectorResourceFilter ResourceFilter is filter for a given resource type. +type ResourceSelectorResourceFilter struct { + ResourceType *V1InfraResourceType `json:"resourceType,omitempty"` + Op *SelectorOperator `json:"op,omitempty"` + // Value of key,value pair against which filtering needs to be performs. + Values []string `json:"values,omitempty"` +} + +// NewResourceSelectorResourceFilter instantiates a new ResourceSelectorResourceFilter object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewResourceSelectorResourceFilter() *ResourceSelectorResourceFilter { + this := ResourceSelectorResourceFilter{} + var resourceType V1InfraResourceType = V1INFRARESOURCETYPE_TYPE_UNSPECIFIED + this.ResourceType = &resourceType + var op SelectorOperator = SELECTOROPERATOR_OPERATOR_UNSPECIFIED + this.Op = &op + return &this +} + +// NewResourceSelectorResourceFilterWithDefaults instantiates a new ResourceSelectorResourceFilter object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewResourceSelectorResourceFilterWithDefaults() *ResourceSelectorResourceFilter { + this := ResourceSelectorResourceFilter{} + var resourceType V1InfraResourceType = V1INFRARESOURCETYPE_TYPE_UNSPECIFIED + this.ResourceType = &resourceType + var op SelectorOperator = SELECTOROPERATOR_OPERATOR_UNSPECIFIED + this.Op = &op + return &this +} + +// GetResourceType returns the ResourceType field value if set, zero value otherwise. +func (o *ResourceSelectorResourceFilter) GetResourceType() V1InfraResourceType { + if o == nil || IsNil(o.ResourceType) { + var ret V1InfraResourceType + return ret + } + return *o.ResourceType +} + +// GetResourceTypeOk returns a tuple with the ResourceType field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ResourceSelectorResourceFilter) GetResourceTypeOk() (*V1InfraResourceType, bool) { + if o == nil || IsNil(o.ResourceType) { + return nil, false + } + return o.ResourceType, true +} + +// HasResourceType returns a boolean if a field has been set. +func (o *ResourceSelectorResourceFilter) HasResourceType() bool { + if o != nil && !IsNil(o.ResourceType) { + return true + } + + return false +} + +// SetResourceType gets a reference to the given V1InfraResourceType and assigns it to the ResourceType field. +func (o *ResourceSelectorResourceFilter) SetResourceType(v V1InfraResourceType) { + o.ResourceType = &v +} + +// GetOp returns the Op field value if set, zero value otherwise. +func (o *ResourceSelectorResourceFilter) GetOp() SelectorOperator { + if o == nil || IsNil(o.Op) { + var ret SelectorOperator + return ret + } + return *o.Op +} + +// GetOpOk returns a tuple with the Op field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ResourceSelectorResourceFilter) GetOpOk() (*SelectorOperator, bool) { + if o == nil || IsNil(o.Op) { + return nil, false + } + return o.Op, true +} + +// HasOp returns a boolean if a field has been set. +func (o *ResourceSelectorResourceFilter) HasOp() bool { + if o != nil && !IsNil(o.Op) { + return true + } + + return false +} + +// SetOp gets a reference to the given SelectorOperator and assigns it to the Op field. +func (o *ResourceSelectorResourceFilter) SetOp(v SelectorOperator) { + o.Op = &v +} + +// GetValues returns the Values field value if set, zero value otherwise. +func (o *ResourceSelectorResourceFilter) GetValues() []string { + if o == nil || IsNil(o.Values) { + var ret []string + return ret + } + return o.Values +} + +// GetValuesOk returns a tuple with the Values field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ResourceSelectorResourceFilter) GetValuesOk() ([]string, bool) { + if o == nil || IsNil(o.Values) { + return nil, false + } + return o.Values, true +} + +// HasValues returns a boolean if a field has been set. +func (o *ResourceSelectorResourceFilter) HasValues() bool { + if o != nil && !IsNil(o.Values) { + return true + } + + return false +} + +// SetValues gets a reference to the given []string and assigns it to the Values field. +func (o *ResourceSelectorResourceFilter) SetValues(v []string) { + o.Values = v +} + +func (o ResourceSelectorResourceFilter) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o ResourceSelectorResourceFilter) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.ResourceType) { + toSerialize["resourceType"] = o.ResourceType + } + if !IsNil(o.Op) { + toSerialize["op"] = o.Op + } + if !IsNil(o.Values) { + toSerialize["values"] = o.Values + } + return toSerialize, nil +} + +type NullableResourceSelectorResourceFilter struct { + value *ResourceSelectorResourceFilter + isSet bool +} + +func (v NullableResourceSelectorResourceFilter) Get() *ResourceSelectorResourceFilter { + return v.value +} + +func (v *NullableResourceSelectorResourceFilter) Set(val *ResourceSelectorResourceFilter) { + v.value = val + v.isSet = true +} + +func (v NullableResourceSelectorResourceFilter) IsSet() bool { + return v.isSet +} + +func (v *NullableResourceSelectorResourceFilter) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableResourceSelectorResourceFilter(val *ResourceSelectorResourceFilter) *NullableResourceSelectorResourceFilter { + return &NullableResourceSelectorResourceFilter{value: val, isSet: true} +} + +func (v NullableResourceSelectorResourceFilter) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableResourceSelectorResourceFilter) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_selector_filter.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_selector_filter.go new file mode 100644 index 000000000..9473a0b71 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_selector_filter.go @@ -0,0 +1,204 @@ +/* +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeployment + +import ( + "encoding/json" +) + +// checks if the SelectorFilter type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &SelectorFilter{} + +// SelectorFilter Filter for a given key. +type SelectorFilter struct { + // Key of key,value pair against which filtering needs to be performs. + Key *string `json:"key,omitempty"` + Op *SelectorOperator `json:"op,omitempty"` + // Value of key,value pair against which filtering needs to be performs if operator is EXIST, value should be an empty array. + Values []string `json:"values,omitempty"` +} + +// NewSelectorFilter instantiates a new SelectorFilter object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewSelectorFilter() *SelectorFilter { + this := SelectorFilter{} + var op SelectorOperator = SELECTOROPERATOR_OPERATOR_UNSPECIFIED + this.Op = &op + return &this +} + +// NewSelectorFilterWithDefaults instantiates a new SelectorFilter object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewSelectorFilterWithDefaults() *SelectorFilter { + this := SelectorFilter{} + var op SelectorOperator = SELECTOROPERATOR_OPERATOR_UNSPECIFIED + this.Op = &op + return &this +} + +// GetKey returns the Key field value if set, zero value otherwise. +func (o *SelectorFilter) GetKey() string { + if o == nil || IsNil(o.Key) { + var ret string + return ret + } + return *o.Key +} + +// GetKeyOk returns a tuple with the Key field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *SelectorFilter) GetKeyOk() (*string, bool) { + if o == nil || IsNil(o.Key) { + return nil, false + } + return o.Key, true +} + +// HasKey returns a boolean if a field has been set. +func (o *SelectorFilter) HasKey() bool { + if o != nil && !IsNil(o.Key) { + return true + } + + return false +} + +// SetKey gets a reference to the given string and assigns it to the Key field. +func (o *SelectorFilter) SetKey(v string) { + o.Key = &v +} + +// GetOp returns the Op field value if set, zero value otherwise. +func (o *SelectorFilter) GetOp() SelectorOperator { + if o == nil || IsNil(o.Op) { + var ret SelectorOperator + return ret + } + return *o.Op +} + +// GetOpOk returns a tuple with the Op field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *SelectorFilter) GetOpOk() (*SelectorOperator, bool) { + if o == nil || IsNil(o.Op) { + return nil, false + } + return o.Op, true +} + +// HasOp returns a boolean if a field has been set. +func (o *SelectorFilter) HasOp() bool { + if o != nil && !IsNil(o.Op) { + return true + } + + return false +} + +// SetOp gets a reference to the given SelectorOperator and assigns it to the Op field. +func (o *SelectorFilter) SetOp(v SelectorOperator) { + o.Op = &v +} + +// GetValues returns the Values field value if set, zero value otherwise. +func (o *SelectorFilter) GetValues() []string { + if o == nil || IsNil(o.Values) { + var ret []string + return ret + } + return o.Values +} + +// GetValuesOk returns a tuple with the Values field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *SelectorFilter) GetValuesOk() ([]string, bool) { + if o == nil || IsNil(o.Values) { + return nil, false + } + return o.Values, true +} + +// HasValues returns a boolean if a field has been set. +func (o *SelectorFilter) HasValues() bool { + if o != nil && !IsNil(o.Values) { + return true + } + + return false +} + +// SetValues gets a reference to the given []string and assigns it to the Values field. +func (o *SelectorFilter) SetValues(v []string) { + o.Values = v +} + +func (o SelectorFilter) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o SelectorFilter) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.Key) { + toSerialize["key"] = o.Key + } + if !IsNil(o.Op) { + toSerialize["op"] = o.Op + } + if !IsNil(o.Values) { + toSerialize["values"] = o.Values + } + return toSerialize, nil +} + +type NullableSelectorFilter struct { + value *SelectorFilter + isSet bool +} + +func (v NullableSelectorFilter) Get() *SelectorFilter { + return v.value +} + +func (v *NullableSelectorFilter) Set(val *SelectorFilter) { + v.value = val + v.isSet = true +} + +func (v NullableSelectorFilter) IsSet() bool { + return v.isSet +} + +func (v *NullableSelectorFilter) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableSelectorFilter(val *SelectorFilter) *NullableSelectorFilter { + return &NullableSelectorFilter{value: val, isSet: true} +} + +func (v NullableSelectorFilter) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableSelectorFilter) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_selector_operator.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_selector_operator.go new file mode 100644 index 000000000..a3fead4f6 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_selector_operator.go @@ -0,0 +1,115 @@ +/* +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeployment + +import ( + "encoding/json" + "fmt" +) + +// SelectorOperator Operator specifies the relationship between the provided (key,value) pairs in the response. - OPERATOR_UNSPECIFIED: Unspecified, do not use. - IN: IN specifies that the key should be associated with atleast 1 of the element in value list. - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list. - LIKE: LIKE specified that the key should be of a specified pattern +type SelectorOperator string + +// List of SelectorOperator +const ( + SELECTOROPERATOR_OPERATOR_UNSPECIFIED SelectorOperator = "OPERATOR_UNSPECIFIED" + SELECTOROPERATOR_IN SelectorOperator = "IN" + SELECTOROPERATOR_NOT_IN SelectorOperator = "NOT_IN" + SELECTOROPERATOR_LIKE SelectorOperator = "LIKE" +) + +// All allowed values of SelectorOperator enum +var AllowedSelectorOperatorEnumValues = []SelectorOperator{ + "OPERATOR_UNSPECIFIED", + "IN", + "NOT_IN", + "LIKE", +} + +func (v *SelectorOperator) UnmarshalJSON(src []byte) error { + var value string + err := json.Unmarshal(src, &value) + if err != nil { + return err + } + enumTypeValue := SelectorOperator(value) + for _, existing := range AllowedSelectorOperatorEnumValues { + if existing == enumTypeValue { + *v = enumTypeValue + return nil + } + } + + return fmt.Errorf("%+v is not a valid SelectorOperator", value) +} + +// NewSelectorOperatorFromValue returns a pointer to a valid SelectorOperator +// for the value passed as argument, or an error if the value passed is not allowed by the enum +func NewSelectorOperatorFromValue(v string) (*SelectorOperator, error) { + ev := SelectorOperator(v) + if ev.IsValid() { + return &ev, nil + } else { + return nil, fmt.Errorf("invalid value '%v' for SelectorOperator: valid values are %v", v, AllowedSelectorOperatorEnumValues) + } +} + +// IsValid return true if the value is valid for the enum, false otherwise +func (v SelectorOperator) IsValid() bool { + for _, existing := range AllowedSelectorOperatorEnumValues { + if existing == v { + return true + } + } + return false +} + +// Ptr returns reference to SelectorOperator value +func (v SelectorOperator) Ptr() *SelectorOperator { + return &v +} + +type NullableSelectorOperator struct { + value *SelectorOperator + isSet bool +} + +func (v NullableSelectorOperator) Get() *SelectorOperator { + return v.value +} + +func (v *NullableSelectorOperator) Set(val *SelectorOperator) { + v.value = val + v.isSet = true +} + +func (v NullableSelectorOperator) IsSet() bool { + return v.isSet +} + +func (v *NullableSelectorOperator) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableSelectorOperator(val *SelectorOperator) *NullableSelectorOperator { + return &NullableSelectorOperator{value: val, isSet: true} +} + +func (v NullableSelectorOperator) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableSelectorOperator) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_sort_by_field.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_sort_by_field.go similarity index 96% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_sort_by_field.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_sort_by_field.go index b8e12a18a..31581001a 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_sort_by_field.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_sort_by_field.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_config.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_config.go similarity index 70% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_config.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_config.go index 49e6841fe..cb765d25e 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_config.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_config.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "encoding/json" @@ -17,12 +17,12 @@ import ( // checks if the V1Config type satisfies the MappedNullable interface at compile time var _ MappedNullable = &V1Config{} -// V1Config Desired configuration of the Deployment. +// V1Config Desired configuration of the DataService Deployment. type V1Config struct { References *V1References `json:"references,omitempty"` TlsConfig *V1TLSConfig `json:"tlsConfig,omitempty"` - // A deployment topology contains a number of nodes that have various attributes as a collective group. - DeploymentTopologies []V1DeploymentTopology `json:"deploymentTopologies,omitempty"` + // A DataService deployment topology contains a number of nodes that have various attributes as a collective group. + DataServiceDeploymentTopologies []V1DataServiceDeploymentTopology `json:"dataServiceDeploymentTopologies,omitempty"` } // NewV1Config instantiates a new V1Config object @@ -106,36 +106,36 @@ func (o *V1Config) SetTlsConfig(v V1TLSConfig) { o.TlsConfig = &v } -// GetDeploymentTopologies returns the DeploymentTopologies field value if set, zero value otherwise. -func (o *V1Config) GetDeploymentTopologies() []V1DeploymentTopology { - if o == nil || IsNil(o.DeploymentTopologies) { - var ret []V1DeploymentTopology +// GetDataServiceDeploymentTopologies returns the DataServiceDeploymentTopologies field value if set, zero value otherwise. +func (o *V1Config) GetDataServiceDeploymentTopologies() []V1DataServiceDeploymentTopology { + if o == nil || IsNil(o.DataServiceDeploymentTopologies) { + var ret []V1DataServiceDeploymentTopology return ret } - return o.DeploymentTopologies + return o.DataServiceDeploymentTopologies } -// GetDeploymentTopologiesOk returns a tuple with the DeploymentTopologies field value if set, nil otherwise +// GetDataServiceDeploymentTopologiesOk returns a tuple with the DataServiceDeploymentTopologies field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1Config) GetDeploymentTopologiesOk() ([]V1DeploymentTopology, bool) { - if o == nil || IsNil(o.DeploymentTopologies) { +func (o *V1Config) GetDataServiceDeploymentTopologiesOk() ([]V1DataServiceDeploymentTopology, bool) { + if o == nil || IsNil(o.DataServiceDeploymentTopologies) { return nil, false } - return o.DeploymentTopologies, true + return o.DataServiceDeploymentTopologies, true } -// HasDeploymentTopologies returns a boolean if a field has been set. -func (o *V1Config) HasDeploymentTopologies() bool { - if o != nil && !IsNil(o.DeploymentTopologies) { +// HasDataServiceDeploymentTopologies returns a boolean if a field has been set. +func (o *V1Config) HasDataServiceDeploymentTopologies() bool { + if o != nil && !IsNil(o.DataServiceDeploymentTopologies) { return true } return false } -// SetDeploymentTopologies gets a reference to the given []V1DeploymentTopology and assigns it to the DeploymentTopologies field. -func (o *V1Config) SetDeploymentTopologies(v []V1DeploymentTopology) { - o.DeploymentTopologies = v +// SetDataServiceDeploymentTopologies gets a reference to the given []V1DataServiceDeploymentTopology and assigns it to the DataServiceDeploymentTopologies field. +func (o *V1Config) SetDataServiceDeploymentTopologies(v []V1DataServiceDeploymentTopology) { + o.DataServiceDeploymentTopologies = v } func (o V1Config) MarshalJSON() ([]byte, error) { @@ -154,8 +154,8 @@ func (o V1Config) ToMap() (map[string]interface{}, error) { if !IsNil(o.TlsConfig) { toSerialize["tlsConfig"] = o.TlsConfig } - if !IsNil(o.DeploymentTopologies) { - toSerialize["deploymentTopologies"] = o.DeploymentTopologies + if !IsNil(o.DataServiceDeploymentTopologies) { + toSerialize["dataServiceDeploymentTopologies"] = o.DataServiceDeploymentTopologies } return toSerialize, nil } diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_connection_details.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_connection_details.go similarity index 76% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_connection_details.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_connection_details.go index 783710422..18cfa6383 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_connection_details.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_connection_details.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "encoding/json" @@ -19,9 +19,9 @@ var _ MappedNullable = &V1ConnectionDetails{} // V1ConnectionDetails ConnectionDetails of data service. type V1ConnectionDetails struct { - // Nodes of the data service. - Nodes []string `json:"nodes,omitempty"` - // Ports provided by the data service (name and number). + // Instances of the data service deployment. + Instances []string `json:"instances,omitempty"` + // Ports provided by the data service deployment (name and number). Ports *map[string]int32 `json:"ports,omitempty"` } @@ -42,36 +42,36 @@ func NewV1ConnectionDetailsWithDefaults() *V1ConnectionDetails { return &this } -// GetNodes returns the Nodes field value if set, zero value otherwise. -func (o *V1ConnectionDetails) GetNodes() []string { - if o == nil || IsNil(o.Nodes) { +// GetInstances returns the Instances field value if set, zero value otherwise. +func (o *V1ConnectionDetails) GetInstances() []string { + if o == nil || IsNil(o.Instances) { var ret []string return ret } - return o.Nodes + return o.Instances } -// GetNodesOk returns a tuple with the Nodes field value if set, nil otherwise +// GetInstancesOk returns a tuple with the Instances field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1ConnectionDetails) GetNodesOk() ([]string, bool) { - if o == nil || IsNil(o.Nodes) { +func (o *V1ConnectionDetails) GetInstancesOk() ([]string, bool) { + if o == nil || IsNil(o.Instances) { return nil, false } - return o.Nodes, true + return o.Instances, true } -// HasNodes returns a boolean if a field has been set. -func (o *V1ConnectionDetails) HasNodes() bool { - if o != nil && !IsNil(o.Nodes) { +// HasInstances returns a boolean if a field has been set. +func (o *V1ConnectionDetails) HasInstances() bool { + if o != nil && !IsNil(o.Instances) { return true } return false } -// SetNodes gets a reference to the given []string and assigns it to the Nodes field. -func (o *V1ConnectionDetails) SetNodes(v []string) { - o.Nodes = v +// SetInstances gets a reference to the given []string and assigns it to the Instances field. +func (o *V1ConnectionDetails) SetInstances(v []string) { + o.Instances = v } // GetPorts returns the Ports field value if set, zero value otherwise. @@ -116,8 +116,8 @@ func (o V1ConnectionDetails) MarshalJSON() ([]byte, error) { func (o V1ConnectionDetails) ToMap() (map[string]interface{}, error) { toSerialize := map[string]interface{}{} - if !IsNil(o.Nodes) { - toSerialize["nodes"] = o.Nodes + if !IsNil(o.Instances) { + toSerialize["instances"] = o.Instances } if !IsNil(o.Ports) { toSerialize["ports"] = o.Ports diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_connection_info.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_connection_info.go similarity index 68% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_connection_info.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_connection_info.go index fb7a02724..5a150194b 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_connection_info.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_connection_info.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "encoding/json" @@ -17,12 +17,12 @@ import ( // checks if the V1ConnectionInfo type satisfies the MappedNullable interface at compile time var _ MappedNullable = &V1ConnectionInfo{} -// V1ConnectionInfo Connection Information for the Deployment Topology. +// V1ConnectionInfo Connection Information for the DataServiceDeployment Topology. type V1ConnectionInfo struct { - // Ready pods. - Pods []V1PodInfo `json:"pods,omitempty"` - // Pods that are not ready. - NotReadyPods []V1PodInfo `json:"notReadyPods,omitempty"` + // Ready instances. + ReadyInstances []V1InstanceInfo `json:"readyInstances,omitempty"` + // Instances that are not ready. + NotReadyInstances []V1InstanceInfo `json:"notReadyInstances,omitempty"` ConnectionDetails *V1ConnectionDetails `json:"connectionDetails,omitempty"` // Stores details about the cluster. ClusterDetails map[string]interface{} `json:"clusterDetails,omitempty"` @@ -45,68 +45,68 @@ func NewV1ConnectionInfoWithDefaults() *V1ConnectionInfo { return &this } -// GetPods returns the Pods field value if set, zero value otherwise. -func (o *V1ConnectionInfo) GetPods() []V1PodInfo { - if o == nil || IsNil(o.Pods) { - var ret []V1PodInfo +// GetReadyInstances returns the ReadyInstances field value if set, zero value otherwise. +func (o *V1ConnectionInfo) GetReadyInstances() []V1InstanceInfo { + if o == nil || IsNil(o.ReadyInstances) { + var ret []V1InstanceInfo return ret } - return o.Pods + return o.ReadyInstances } -// GetPodsOk returns a tuple with the Pods field value if set, nil otherwise +// GetReadyInstancesOk returns a tuple with the ReadyInstances field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1ConnectionInfo) GetPodsOk() ([]V1PodInfo, bool) { - if o == nil || IsNil(o.Pods) { +func (o *V1ConnectionInfo) GetReadyInstancesOk() ([]V1InstanceInfo, bool) { + if o == nil || IsNil(o.ReadyInstances) { return nil, false } - return o.Pods, true + return o.ReadyInstances, true } -// HasPods returns a boolean if a field has been set. -func (o *V1ConnectionInfo) HasPods() bool { - if o != nil && !IsNil(o.Pods) { +// HasReadyInstances returns a boolean if a field has been set. +func (o *V1ConnectionInfo) HasReadyInstances() bool { + if o != nil && !IsNil(o.ReadyInstances) { return true } return false } -// SetPods gets a reference to the given []V1PodInfo and assigns it to the Pods field. -func (o *V1ConnectionInfo) SetPods(v []V1PodInfo) { - o.Pods = v +// SetReadyInstances gets a reference to the given []V1InstanceInfo and assigns it to the ReadyInstances field. +func (o *V1ConnectionInfo) SetReadyInstances(v []V1InstanceInfo) { + o.ReadyInstances = v } -// GetNotReadyPods returns the NotReadyPods field value if set, zero value otherwise. -func (o *V1ConnectionInfo) GetNotReadyPods() []V1PodInfo { - if o == nil || IsNil(o.NotReadyPods) { - var ret []V1PodInfo +// GetNotReadyInstances returns the NotReadyInstances field value if set, zero value otherwise. +func (o *V1ConnectionInfo) GetNotReadyInstances() []V1InstanceInfo { + if o == nil || IsNil(o.NotReadyInstances) { + var ret []V1InstanceInfo return ret } - return o.NotReadyPods + return o.NotReadyInstances } -// GetNotReadyPodsOk returns a tuple with the NotReadyPods field value if set, nil otherwise +// GetNotReadyInstancesOk returns a tuple with the NotReadyInstances field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1ConnectionInfo) GetNotReadyPodsOk() ([]V1PodInfo, bool) { - if o == nil || IsNil(o.NotReadyPods) { +func (o *V1ConnectionInfo) GetNotReadyInstancesOk() ([]V1InstanceInfo, bool) { + if o == nil || IsNil(o.NotReadyInstances) { return nil, false } - return o.NotReadyPods, true + return o.NotReadyInstances, true } -// HasNotReadyPods returns a boolean if a field has been set. -func (o *V1ConnectionInfo) HasNotReadyPods() bool { - if o != nil && !IsNil(o.NotReadyPods) { +// HasNotReadyInstances returns a boolean if a field has been set. +func (o *V1ConnectionInfo) HasNotReadyInstances() bool { + if o != nil && !IsNil(o.NotReadyInstances) { return true } return false } -// SetNotReadyPods gets a reference to the given []V1PodInfo and assigns it to the NotReadyPods field. -func (o *V1ConnectionInfo) SetNotReadyPods(v []V1PodInfo) { - o.NotReadyPods = v +// SetNotReadyInstances gets a reference to the given []V1InstanceInfo and assigns it to the NotReadyInstances field. +func (o *V1ConnectionInfo) SetNotReadyInstances(v []V1InstanceInfo) { + o.NotReadyInstances = v } // GetConnectionDetails returns the ConnectionDetails field value if set, zero value otherwise. @@ -183,11 +183,11 @@ func (o V1ConnectionInfo) MarshalJSON() ([]byte, error) { func (o V1ConnectionInfo) ToMap() (map[string]interface{}, error) { toSerialize := map[string]interface{}{} - if !IsNil(o.Pods) { - toSerialize["pods"] = o.Pods + if !IsNil(o.ReadyInstances) { + toSerialize["readyInstances"] = o.ReadyInstances } - if !IsNil(o.NotReadyPods) { - toSerialize["notReadyPods"] = o.NotReadyPods + if !IsNil(o.NotReadyInstances) { + toSerialize["notReadyInstances"] = o.NotReadyInstances } if !IsNil(o.ConnectionDetails) { toSerialize["connectionDetails"] = o.ConnectionDetails diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_deployment.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_data_service_deployment.go similarity index 54% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_deployment.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_data_service_deployment.go index eac821e2a..b9c35e15f 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_deployment.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_data_service_deployment.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,41 +8,41 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "encoding/json" ) -// checks if the V1Deployment type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &V1Deployment{} +// checks if the V1DataServiceDeployment type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &V1DataServiceDeployment{} -// V1Deployment Resource representing a Data Service Deployment. -type V1Deployment struct { +// V1DataServiceDeployment Resource representing a DataService Deployment. +type V1DataServiceDeployment struct { Meta *V1Meta `json:"meta,omitempty"` Config *V1Config `json:"config,omitempty"` - Status *Deploymentv1Status `json:"status,omitempty"` + Status *Dataservicedeploymentv1Status `json:"status,omitempty"` } -// NewV1Deployment instantiates a new V1Deployment object +// NewV1DataServiceDeployment instantiates a new V1DataServiceDeployment object // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewV1Deployment() *V1Deployment { - this := V1Deployment{} +func NewV1DataServiceDeployment() *V1DataServiceDeployment { + this := V1DataServiceDeployment{} return &this } -// NewV1DeploymentWithDefaults instantiates a new V1Deployment object +// NewV1DataServiceDeploymentWithDefaults instantiates a new V1DataServiceDeployment object // This constructor will only assign default values to properties that have it defined, // but it doesn't guarantee that properties required by API are set -func NewV1DeploymentWithDefaults() *V1Deployment { - this := V1Deployment{} +func NewV1DataServiceDeploymentWithDefaults() *V1DataServiceDeployment { + this := V1DataServiceDeployment{} return &this } // GetMeta returns the Meta field value if set, zero value otherwise. -func (o *V1Deployment) GetMeta() V1Meta { +func (o *V1DataServiceDeployment) GetMeta() V1Meta { if o == nil || IsNil(o.Meta) { var ret V1Meta return ret @@ -52,7 +52,7 @@ func (o *V1Deployment) GetMeta() V1Meta { // GetMetaOk returns a tuple with the Meta field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1Deployment) GetMetaOk() (*V1Meta, bool) { +func (o *V1DataServiceDeployment) GetMetaOk() (*V1Meta, bool) { if o == nil || IsNil(o.Meta) { return nil, false } @@ -60,7 +60,7 @@ func (o *V1Deployment) GetMetaOk() (*V1Meta, bool) { } // HasMeta returns a boolean if a field has been set. -func (o *V1Deployment) HasMeta() bool { +func (o *V1DataServiceDeployment) HasMeta() bool { if o != nil && !IsNil(o.Meta) { return true } @@ -69,12 +69,12 @@ func (o *V1Deployment) HasMeta() bool { } // SetMeta gets a reference to the given V1Meta and assigns it to the Meta field. -func (o *V1Deployment) SetMeta(v V1Meta) { +func (o *V1DataServiceDeployment) SetMeta(v V1Meta) { o.Meta = &v } // GetConfig returns the Config field value if set, zero value otherwise. -func (o *V1Deployment) GetConfig() V1Config { +func (o *V1DataServiceDeployment) GetConfig() V1Config { if o == nil || IsNil(o.Config) { var ret V1Config return ret @@ -84,7 +84,7 @@ func (o *V1Deployment) GetConfig() V1Config { // GetConfigOk returns a tuple with the Config field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1Deployment) GetConfigOk() (*V1Config, bool) { +func (o *V1DataServiceDeployment) GetConfigOk() (*V1Config, bool) { if o == nil || IsNil(o.Config) { return nil, false } @@ -92,7 +92,7 @@ func (o *V1Deployment) GetConfigOk() (*V1Config, bool) { } // HasConfig returns a boolean if a field has been set. -func (o *V1Deployment) HasConfig() bool { +func (o *V1DataServiceDeployment) HasConfig() bool { if o != nil && !IsNil(o.Config) { return true } @@ -101,14 +101,14 @@ func (o *V1Deployment) HasConfig() bool { } // SetConfig gets a reference to the given V1Config and assigns it to the Config field. -func (o *V1Deployment) SetConfig(v V1Config) { +func (o *V1DataServiceDeployment) SetConfig(v V1Config) { o.Config = &v } // GetStatus returns the Status field value if set, zero value otherwise. -func (o *V1Deployment) GetStatus() Deploymentv1Status { +func (o *V1DataServiceDeployment) GetStatus() Dataservicedeploymentv1Status { if o == nil || IsNil(o.Status) { - var ret Deploymentv1Status + var ret Dataservicedeploymentv1Status return ret } return *o.Status @@ -116,7 +116,7 @@ func (o *V1Deployment) GetStatus() Deploymentv1Status { // GetStatusOk returns a tuple with the Status field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1Deployment) GetStatusOk() (*Deploymentv1Status, bool) { +func (o *V1DataServiceDeployment) GetStatusOk() (*Dataservicedeploymentv1Status, bool) { if o == nil || IsNil(o.Status) { return nil, false } @@ -124,7 +124,7 @@ func (o *V1Deployment) GetStatusOk() (*Deploymentv1Status, bool) { } // HasStatus returns a boolean if a field has been set. -func (o *V1Deployment) HasStatus() bool { +func (o *V1DataServiceDeployment) HasStatus() bool { if o != nil && !IsNil(o.Status) { return true } @@ -132,12 +132,12 @@ func (o *V1Deployment) HasStatus() bool { return false } -// SetStatus gets a reference to the given Deploymentv1Status and assigns it to the Status field. -func (o *V1Deployment) SetStatus(v Deploymentv1Status) { +// SetStatus gets a reference to the given Dataservicedeploymentv1Status and assigns it to the Status field. +func (o *V1DataServiceDeployment) SetStatus(v Dataservicedeploymentv1Status) { o.Status = &v } -func (o V1Deployment) MarshalJSON() ([]byte, error) { +func (o V1DataServiceDeployment) MarshalJSON() ([]byte, error) { toSerialize,err := o.ToMap() if err != nil { return []byte{}, err @@ -145,7 +145,7 @@ func (o V1Deployment) MarshalJSON() ([]byte, error) { return json.Marshal(toSerialize) } -func (o V1Deployment) ToMap() (map[string]interface{}, error) { +func (o V1DataServiceDeployment) ToMap() (map[string]interface{}, error) { toSerialize := map[string]interface{}{} if !IsNil(o.Meta) { toSerialize["meta"] = o.Meta @@ -159,38 +159,38 @@ func (o V1Deployment) ToMap() (map[string]interface{}, error) { return toSerialize, nil } -type NullableV1Deployment struct { - value *V1Deployment +type NullableV1DataServiceDeployment struct { + value *V1DataServiceDeployment isSet bool } -func (v NullableV1Deployment) Get() *V1Deployment { +func (v NullableV1DataServiceDeployment) Get() *V1DataServiceDeployment { return v.value } -func (v *NullableV1Deployment) Set(val *V1Deployment) { +func (v *NullableV1DataServiceDeployment) Set(val *V1DataServiceDeployment) { v.value = val v.isSet = true } -func (v NullableV1Deployment) IsSet() bool { +func (v NullableV1DataServiceDeployment) IsSet() bool { return v.isSet } -func (v *NullableV1Deployment) Unset() { +func (v *NullableV1DataServiceDeployment) Unset() { v.value = nil v.isSet = false } -func NewNullableV1Deployment(val *V1Deployment) *NullableV1Deployment { - return &NullableV1Deployment{value: val, isSet: true} +func NewNullableV1DataServiceDeployment(val *V1DataServiceDeployment) *NullableV1DataServiceDeployment { + return &NullableV1DataServiceDeployment{value: val, isSet: true} } -func (v NullableV1Deployment) MarshalJSON() ([]byte, error) { +func (v NullableV1DataServiceDeployment) MarshalJSON() ([]byte, error) { return json.Marshal(v.value) } -func (v *NullableV1Deployment) UnmarshalJSON(src []byte) error { +func (v *NullableV1DataServiceDeployment) UnmarshalJSON(src []byte) error { v.isSet = true return json.Unmarshal(src, &v.value) } diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_data_service_deployment_credentials.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_data_service_deployment_credentials.go new file mode 100644 index 000000000..aff56cc08 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_data_service_deployment_credentials.go @@ -0,0 +1,127 @@ +/* +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeployment + +import ( + "encoding/json" +) + +// checks if the V1DataServiceDeploymentCredentials type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &V1DataServiceDeploymentCredentials{} + +// V1DataServiceDeploymentCredentials Credentials to access a DataService Deployment. +type V1DataServiceDeploymentCredentials struct { + // secret to access the resource. + Secret *string `json:"secret,omitempty"` +} + +// NewV1DataServiceDeploymentCredentials instantiates a new V1DataServiceDeploymentCredentials object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewV1DataServiceDeploymentCredentials() *V1DataServiceDeploymentCredentials { + this := V1DataServiceDeploymentCredentials{} + return &this +} + +// NewV1DataServiceDeploymentCredentialsWithDefaults instantiates a new V1DataServiceDeploymentCredentials object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewV1DataServiceDeploymentCredentialsWithDefaults() *V1DataServiceDeploymentCredentials { + this := V1DataServiceDeploymentCredentials{} + return &this +} + +// GetSecret returns the Secret field value if set, zero value otherwise. +func (o *V1DataServiceDeploymentCredentials) GetSecret() string { + if o == nil || IsNil(o.Secret) { + var ret string + return ret + } + return *o.Secret +} + +// GetSecretOk returns a tuple with the Secret field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1DataServiceDeploymentCredentials) GetSecretOk() (*string, bool) { + if o == nil || IsNil(o.Secret) { + return nil, false + } + return o.Secret, true +} + +// HasSecret returns a boolean if a field has been set. +func (o *V1DataServiceDeploymentCredentials) HasSecret() bool { + if o != nil && !IsNil(o.Secret) { + return true + } + + return false +} + +// SetSecret gets a reference to the given string and assigns it to the Secret field. +func (o *V1DataServiceDeploymentCredentials) SetSecret(v string) { + o.Secret = &v +} + +func (o V1DataServiceDeploymentCredentials) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o V1DataServiceDeploymentCredentials) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.Secret) { + toSerialize["secret"] = o.Secret + } + return toSerialize, nil +} + +type NullableV1DataServiceDeploymentCredentials struct { + value *V1DataServiceDeploymentCredentials + isSet bool +} + +func (v NullableV1DataServiceDeploymentCredentials) Get() *V1DataServiceDeploymentCredentials { + return v.value +} + +func (v *NullableV1DataServiceDeploymentCredentials) Set(val *V1DataServiceDeploymentCredentials) { + v.value = val + v.isSet = true +} + +func (v NullableV1DataServiceDeploymentCredentials) IsSet() bool { + return v.isSet +} + +func (v *NullableV1DataServiceDeploymentCredentials) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableV1DataServiceDeploymentCredentials(val *V1DataServiceDeploymentCredentials) *NullableV1DataServiceDeploymentCredentials { + return &NullableV1DataServiceDeploymentCredentials{value: val, isSet: true} +} + +func (v NullableV1DataServiceDeploymentCredentials) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableV1DataServiceDeploymentCredentials) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_deployment_topology.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_data_service_deployment_topology.go similarity index 60% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_deployment_topology.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_data_service_deployment_topology.go index 3f1a3d44a..dd5cb11eb 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_deployment_topology.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_data_service_deployment_topology.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,23 +8,23 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deploymentconfigupdate +package dataservicedeployment import ( "encoding/json" ) -// checks if the V1DeploymentTopology type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &V1DeploymentTopology{} +// checks if the V1DataServiceDeploymentTopology type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &V1DataServiceDeploymentTopology{} -// V1DeploymentTopology A deployment topology contains a number of nodes that have various attributes as a collective group. This is consumed in a deployment and the functionality is being controlled by the CRUD APIs of deployment. -type V1DeploymentTopology struct { - // Name of the deployment topology. +// V1DataServiceDeploymentTopology A DataService topology contains a number of nodes that have various attributes as a collective group. This is consumed in a DataService Deployment and the functionality is being controlled by the CRUD APIs of DataService Deployment. +type V1DataServiceDeploymentTopology struct { + // Name of the DataServiceDeployment topology. Name *string `json:"name,omitempty"` - // Description of the deployment topology. + // Description of the DataServiceDeployment topology. Description *string `json:"description,omitempty"` - // Number of replicas of data services. - Replicas *string `json:"replicas,omitempty"` + // Number of instances of data services. + Instances *string `json:"instances,omitempty"` // Service type are standard Kubernetes service types such as clusterIP, NodePort, load balancers, etc. ServiceType *string `json:"serviceType,omitempty"` // Service name is the name of service as provided by user. @@ -36,25 +36,25 @@ type V1DeploymentTopology struct { StorageOptions *V1Template `json:"storageOptions,omitempty"` } -// NewV1DeploymentTopology instantiates a new V1DeploymentTopology object +// NewV1DataServiceDeploymentTopology instantiates a new V1DataServiceDeploymentTopology object // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewV1DeploymentTopology() *V1DeploymentTopology { - this := V1DeploymentTopology{} +func NewV1DataServiceDeploymentTopology() *V1DataServiceDeploymentTopology { + this := V1DataServiceDeploymentTopology{} return &this } -// NewV1DeploymentTopologyWithDefaults instantiates a new V1DeploymentTopology object +// NewV1DataServiceDeploymentTopologyWithDefaults instantiates a new V1DataServiceDeploymentTopology object // This constructor will only assign default values to properties that have it defined, // but it doesn't guarantee that properties required by API are set -func NewV1DeploymentTopologyWithDefaults() *V1DeploymentTopology { - this := V1DeploymentTopology{} +func NewV1DataServiceDeploymentTopologyWithDefaults() *V1DataServiceDeploymentTopology { + this := V1DataServiceDeploymentTopology{} return &this } // GetName returns the Name field value if set, zero value otherwise. -func (o *V1DeploymentTopology) GetName() string { +func (o *V1DataServiceDeploymentTopology) GetName() string { if o == nil || IsNil(o.Name) { var ret string return ret @@ -64,7 +64,7 @@ func (o *V1DeploymentTopology) GetName() string { // GetNameOk returns a tuple with the Name field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentTopology) GetNameOk() (*string, bool) { +func (o *V1DataServiceDeploymentTopology) GetNameOk() (*string, bool) { if o == nil || IsNil(o.Name) { return nil, false } @@ -72,7 +72,7 @@ func (o *V1DeploymentTopology) GetNameOk() (*string, bool) { } // HasName returns a boolean if a field has been set. -func (o *V1DeploymentTopology) HasName() bool { +func (o *V1DataServiceDeploymentTopology) HasName() bool { if o != nil && !IsNil(o.Name) { return true } @@ -81,12 +81,12 @@ func (o *V1DeploymentTopology) HasName() bool { } // SetName gets a reference to the given string and assigns it to the Name field. -func (o *V1DeploymentTopology) SetName(v string) { +func (o *V1DataServiceDeploymentTopology) SetName(v string) { o.Name = &v } // GetDescription returns the Description field value if set, zero value otherwise. -func (o *V1DeploymentTopology) GetDescription() string { +func (o *V1DataServiceDeploymentTopology) GetDescription() string { if o == nil || IsNil(o.Description) { var ret string return ret @@ -96,7 +96,7 @@ func (o *V1DeploymentTopology) GetDescription() string { // GetDescriptionOk returns a tuple with the Description field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentTopology) GetDescriptionOk() (*string, bool) { +func (o *V1DataServiceDeploymentTopology) GetDescriptionOk() (*string, bool) { if o == nil || IsNil(o.Description) { return nil, false } @@ -104,7 +104,7 @@ func (o *V1DeploymentTopology) GetDescriptionOk() (*string, bool) { } // HasDescription returns a boolean if a field has been set. -func (o *V1DeploymentTopology) HasDescription() bool { +func (o *V1DataServiceDeploymentTopology) HasDescription() bool { if o != nil && !IsNil(o.Description) { return true } @@ -113,44 +113,44 @@ func (o *V1DeploymentTopology) HasDescription() bool { } // SetDescription gets a reference to the given string and assigns it to the Description field. -func (o *V1DeploymentTopology) SetDescription(v string) { +func (o *V1DataServiceDeploymentTopology) SetDescription(v string) { o.Description = &v } -// GetReplicas returns the Replicas field value if set, zero value otherwise. -func (o *V1DeploymentTopology) GetReplicas() string { - if o == nil || IsNil(o.Replicas) { +// GetInstances returns the Instances field value if set, zero value otherwise. +func (o *V1DataServiceDeploymentTopology) GetInstances() string { + if o == nil || IsNil(o.Instances) { var ret string return ret } - return *o.Replicas + return *o.Instances } -// GetReplicasOk returns a tuple with the Replicas field value if set, nil otherwise +// GetInstancesOk returns a tuple with the Instances field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentTopology) GetReplicasOk() (*string, bool) { - if o == nil || IsNil(o.Replicas) { +func (o *V1DataServiceDeploymentTopology) GetInstancesOk() (*string, bool) { + if o == nil || IsNil(o.Instances) { return nil, false } - return o.Replicas, true + return o.Instances, true } -// HasReplicas returns a boolean if a field has been set. -func (o *V1DeploymentTopology) HasReplicas() bool { - if o != nil && !IsNil(o.Replicas) { +// HasInstances returns a boolean if a field has been set. +func (o *V1DataServiceDeploymentTopology) HasInstances() bool { + if o != nil && !IsNil(o.Instances) { return true } return false } -// SetReplicas gets a reference to the given string and assigns it to the Replicas field. -func (o *V1DeploymentTopology) SetReplicas(v string) { - o.Replicas = &v +// SetInstances gets a reference to the given string and assigns it to the Instances field. +func (o *V1DataServiceDeploymentTopology) SetInstances(v string) { + o.Instances = &v } // GetServiceType returns the ServiceType field value if set, zero value otherwise. -func (o *V1DeploymentTopology) GetServiceType() string { +func (o *V1DataServiceDeploymentTopology) GetServiceType() string { if o == nil || IsNil(o.ServiceType) { var ret string return ret @@ -160,7 +160,7 @@ func (o *V1DeploymentTopology) GetServiceType() string { // GetServiceTypeOk returns a tuple with the ServiceType field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentTopology) GetServiceTypeOk() (*string, bool) { +func (o *V1DataServiceDeploymentTopology) GetServiceTypeOk() (*string, bool) { if o == nil || IsNil(o.ServiceType) { return nil, false } @@ -168,7 +168,7 @@ func (o *V1DeploymentTopology) GetServiceTypeOk() (*string, bool) { } // HasServiceType returns a boolean if a field has been set. -func (o *V1DeploymentTopology) HasServiceType() bool { +func (o *V1DataServiceDeploymentTopology) HasServiceType() bool { if o != nil && !IsNil(o.ServiceType) { return true } @@ -177,12 +177,12 @@ func (o *V1DeploymentTopology) HasServiceType() bool { } // SetServiceType gets a reference to the given string and assigns it to the ServiceType field. -func (o *V1DeploymentTopology) SetServiceType(v string) { +func (o *V1DataServiceDeploymentTopology) SetServiceType(v string) { o.ServiceType = &v } // GetServiceName returns the ServiceName field value if set, zero value otherwise. -func (o *V1DeploymentTopology) GetServiceName() string { +func (o *V1DataServiceDeploymentTopology) GetServiceName() string { if o == nil || IsNil(o.ServiceName) { var ret string return ret @@ -192,7 +192,7 @@ func (o *V1DeploymentTopology) GetServiceName() string { // GetServiceNameOk returns a tuple with the ServiceName field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentTopology) GetServiceNameOk() (*string, bool) { +func (o *V1DataServiceDeploymentTopology) GetServiceNameOk() (*string, bool) { if o == nil || IsNil(o.ServiceName) { return nil, false } @@ -200,7 +200,7 @@ func (o *V1DeploymentTopology) GetServiceNameOk() (*string, bool) { } // HasServiceName returns a boolean if a field has been set. -func (o *V1DeploymentTopology) HasServiceName() bool { +func (o *V1DataServiceDeploymentTopology) HasServiceName() bool { if o != nil && !IsNil(o.ServiceName) { return true } @@ -209,12 +209,12 @@ func (o *V1DeploymentTopology) HasServiceName() bool { } // SetServiceName gets a reference to the given string and assigns it to the ServiceName field. -func (o *V1DeploymentTopology) SetServiceName(v string) { +func (o *V1DataServiceDeploymentTopology) SetServiceName(v string) { o.ServiceName = &v } // GetLoadBalancerSourceRanges returns the LoadBalancerSourceRanges field value if set, zero value otherwise. -func (o *V1DeploymentTopology) GetLoadBalancerSourceRanges() []string { +func (o *V1DataServiceDeploymentTopology) GetLoadBalancerSourceRanges() []string { if o == nil || IsNil(o.LoadBalancerSourceRanges) { var ret []string return ret @@ -224,7 +224,7 @@ func (o *V1DeploymentTopology) GetLoadBalancerSourceRanges() []string { // GetLoadBalancerSourceRangesOk returns a tuple with the LoadBalancerSourceRanges field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentTopology) GetLoadBalancerSourceRangesOk() ([]string, bool) { +func (o *V1DataServiceDeploymentTopology) GetLoadBalancerSourceRangesOk() ([]string, bool) { if o == nil || IsNil(o.LoadBalancerSourceRanges) { return nil, false } @@ -232,7 +232,7 @@ func (o *V1DeploymentTopology) GetLoadBalancerSourceRangesOk() ([]string, bool) } // HasLoadBalancerSourceRanges returns a boolean if a field has been set. -func (o *V1DeploymentTopology) HasLoadBalancerSourceRanges() bool { +func (o *V1DataServiceDeploymentTopology) HasLoadBalancerSourceRanges() bool { if o != nil && !IsNil(o.LoadBalancerSourceRanges) { return true } @@ -241,12 +241,12 @@ func (o *V1DeploymentTopology) HasLoadBalancerSourceRanges() bool { } // SetLoadBalancerSourceRanges gets a reference to the given []string and assigns it to the LoadBalancerSourceRanges field. -func (o *V1DeploymentTopology) SetLoadBalancerSourceRanges(v []string) { +func (o *V1DataServiceDeploymentTopology) SetLoadBalancerSourceRanges(v []string) { o.LoadBalancerSourceRanges = v } // GetResourceSettings returns the ResourceSettings field value if set, zero value otherwise. -func (o *V1DeploymentTopology) GetResourceSettings() V1Template { +func (o *V1DataServiceDeploymentTopology) GetResourceSettings() V1Template { if o == nil || IsNil(o.ResourceSettings) { var ret V1Template return ret @@ -256,7 +256,7 @@ func (o *V1DeploymentTopology) GetResourceSettings() V1Template { // GetResourceSettingsOk returns a tuple with the ResourceSettings field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentTopology) GetResourceSettingsOk() (*V1Template, bool) { +func (o *V1DataServiceDeploymentTopology) GetResourceSettingsOk() (*V1Template, bool) { if o == nil || IsNil(o.ResourceSettings) { return nil, false } @@ -264,7 +264,7 @@ func (o *V1DeploymentTopology) GetResourceSettingsOk() (*V1Template, bool) { } // HasResourceSettings returns a boolean if a field has been set. -func (o *V1DeploymentTopology) HasResourceSettings() bool { +func (o *V1DataServiceDeploymentTopology) HasResourceSettings() bool { if o != nil && !IsNil(o.ResourceSettings) { return true } @@ -273,12 +273,12 @@ func (o *V1DeploymentTopology) HasResourceSettings() bool { } // SetResourceSettings gets a reference to the given V1Template and assigns it to the ResourceSettings field. -func (o *V1DeploymentTopology) SetResourceSettings(v V1Template) { +func (o *V1DataServiceDeploymentTopology) SetResourceSettings(v V1Template) { o.ResourceSettings = &v } // GetServiceConfigurations returns the ServiceConfigurations field value if set, zero value otherwise. -func (o *V1DeploymentTopology) GetServiceConfigurations() V1Template { +func (o *V1DataServiceDeploymentTopology) GetServiceConfigurations() V1Template { if o == nil || IsNil(o.ServiceConfigurations) { var ret V1Template return ret @@ -288,7 +288,7 @@ func (o *V1DeploymentTopology) GetServiceConfigurations() V1Template { // GetServiceConfigurationsOk returns a tuple with the ServiceConfigurations field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentTopology) GetServiceConfigurationsOk() (*V1Template, bool) { +func (o *V1DataServiceDeploymentTopology) GetServiceConfigurationsOk() (*V1Template, bool) { if o == nil || IsNil(o.ServiceConfigurations) { return nil, false } @@ -296,7 +296,7 @@ func (o *V1DeploymentTopology) GetServiceConfigurationsOk() (*V1Template, bool) } // HasServiceConfigurations returns a boolean if a field has been set. -func (o *V1DeploymentTopology) HasServiceConfigurations() bool { +func (o *V1DataServiceDeploymentTopology) HasServiceConfigurations() bool { if o != nil && !IsNil(o.ServiceConfigurations) { return true } @@ -305,12 +305,12 @@ func (o *V1DeploymentTopology) HasServiceConfigurations() bool { } // SetServiceConfigurations gets a reference to the given V1Template and assigns it to the ServiceConfigurations field. -func (o *V1DeploymentTopology) SetServiceConfigurations(v V1Template) { +func (o *V1DataServiceDeploymentTopology) SetServiceConfigurations(v V1Template) { o.ServiceConfigurations = &v } // GetStorageOptions returns the StorageOptions field value if set, zero value otherwise. -func (o *V1DeploymentTopology) GetStorageOptions() V1Template { +func (o *V1DataServiceDeploymentTopology) GetStorageOptions() V1Template { if o == nil || IsNil(o.StorageOptions) { var ret V1Template return ret @@ -320,7 +320,7 @@ func (o *V1DeploymentTopology) GetStorageOptions() V1Template { // GetStorageOptionsOk returns a tuple with the StorageOptions field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentTopology) GetStorageOptionsOk() (*V1Template, bool) { +func (o *V1DataServiceDeploymentTopology) GetStorageOptionsOk() (*V1Template, bool) { if o == nil || IsNil(o.StorageOptions) { return nil, false } @@ -328,7 +328,7 @@ func (o *V1DeploymentTopology) GetStorageOptionsOk() (*V1Template, bool) { } // HasStorageOptions returns a boolean if a field has been set. -func (o *V1DeploymentTopology) HasStorageOptions() bool { +func (o *V1DataServiceDeploymentTopology) HasStorageOptions() bool { if o != nil && !IsNil(o.StorageOptions) { return true } @@ -337,11 +337,11 @@ func (o *V1DeploymentTopology) HasStorageOptions() bool { } // SetStorageOptions gets a reference to the given V1Template and assigns it to the StorageOptions field. -func (o *V1DeploymentTopology) SetStorageOptions(v V1Template) { +func (o *V1DataServiceDeploymentTopology) SetStorageOptions(v V1Template) { o.StorageOptions = &v } -func (o V1DeploymentTopology) MarshalJSON() ([]byte, error) { +func (o V1DataServiceDeploymentTopology) MarshalJSON() ([]byte, error) { toSerialize,err := o.ToMap() if err != nil { return []byte{}, err @@ -349,7 +349,7 @@ func (o V1DeploymentTopology) MarshalJSON() ([]byte, error) { return json.Marshal(toSerialize) } -func (o V1DeploymentTopology) ToMap() (map[string]interface{}, error) { +func (o V1DataServiceDeploymentTopology) ToMap() (map[string]interface{}, error) { toSerialize := map[string]interface{}{} if !IsNil(o.Name) { toSerialize["name"] = o.Name @@ -357,8 +357,8 @@ func (o V1DeploymentTopology) ToMap() (map[string]interface{}, error) { if !IsNil(o.Description) { toSerialize["description"] = o.Description } - if !IsNil(o.Replicas) { - toSerialize["replicas"] = o.Replicas + if !IsNil(o.Instances) { + toSerialize["instances"] = o.Instances } if !IsNil(o.ServiceType) { toSerialize["serviceType"] = o.ServiceType @@ -381,38 +381,38 @@ func (o V1DeploymentTopology) ToMap() (map[string]interface{}, error) { return toSerialize, nil } -type NullableV1DeploymentTopology struct { - value *V1DeploymentTopology +type NullableV1DataServiceDeploymentTopology struct { + value *V1DataServiceDeploymentTopology isSet bool } -func (v NullableV1DeploymentTopology) Get() *V1DeploymentTopology { +func (v NullableV1DataServiceDeploymentTopology) Get() *V1DataServiceDeploymentTopology { return v.value } -func (v *NullableV1DeploymentTopology) Set(val *V1DeploymentTopology) { +func (v *NullableV1DataServiceDeploymentTopology) Set(val *V1DataServiceDeploymentTopology) { v.value = val v.isSet = true } -func (v NullableV1DeploymentTopology) IsSet() bool { +func (v NullableV1DataServiceDeploymentTopology) IsSet() bool { return v.isSet } -func (v *NullableV1DeploymentTopology) Unset() { +func (v *NullableV1DataServiceDeploymentTopology) Unset() { v.value = nil v.isSet = false } -func NewNullableV1DeploymentTopology(val *V1DeploymentTopology) *NullableV1DeploymentTopology { - return &NullableV1DeploymentTopology{value: val, isSet: true} +func NewNullableV1DataServiceDeploymentTopology(val *V1DataServiceDeploymentTopology) *NullableV1DataServiceDeploymentTopology { + return &NullableV1DataServiceDeploymentTopology{value: val, isSet: true} } -func (v NullableV1DeploymentTopology) MarshalJSON() ([]byte, error) { +func (v NullableV1DataServiceDeploymentTopology) MarshalJSON() ([]byte, error) { return json.Marshal(v.value) } -func (v *NullableV1DeploymentTopology) UnmarshalJSON(src []byte) error { +func (v *NullableV1DataServiceDeploymentTopology) UnmarshalJSON(src []byte) error { v.isSet = true return json.Unmarshal(src, &v.value) } diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_data_service_deployment_topology_status.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_data_service_deployment_topology_status.go new file mode 100644 index 000000000..f6c56c8ae --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_data_service_deployment_topology_status.go @@ -0,0 +1,243 @@ +/* +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeployment + +import ( + "encoding/json" +) + +// checks if the V1DataServiceDeploymentTopologyStatus type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &V1DataServiceDeploymentTopologyStatus{} + +// V1DataServiceDeploymentTopologyStatus Status of the data service topology. It is consumed in DataServiceDeployment. +type V1DataServiceDeploymentTopologyStatus struct { + Health *V1DataServiceDeploymentTopologyStatusHealth `json:"health,omitempty"` + Phase *V1DataServiceDeploymentTopologyStatusPhase `json:"phase,omitempty"` + // Number of ready replicas reported by Target Cluster that are up and running. + ReadyInstances *string `json:"readyInstances,omitempty"` + ConnectionInfo *V1ConnectionInfo `json:"connectionInfo,omitempty"` +} + +// NewV1DataServiceDeploymentTopologyStatus instantiates a new V1DataServiceDeploymentTopologyStatus object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewV1DataServiceDeploymentTopologyStatus() *V1DataServiceDeploymentTopologyStatus { + this := V1DataServiceDeploymentTopologyStatus{} + var health V1DataServiceDeploymentTopologyStatusHealth = V1DATASERVICEDEPLOYMENTTOPOLOGYSTATUSHEALTH_UNKNOWN + this.Health = &health + var phase V1DataServiceDeploymentTopologyStatusPhase = V1DATASERVICEDEPLOYMENTTOPOLOGYSTATUSPHASE_PHASE_UNSPECIFIED + this.Phase = &phase + return &this +} + +// NewV1DataServiceDeploymentTopologyStatusWithDefaults instantiates a new V1DataServiceDeploymentTopologyStatus object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewV1DataServiceDeploymentTopologyStatusWithDefaults() *V1DataServiceDeploymentTopologyStatus { + this := V1DataServiceDeploymentTopologyStatus{} + var health V1DataServiceDeploymentTopologyStatusHealth = V1DATASERVICEDEPLOYMENTTOPOLOGYSTATUSHEALTH_UNKNOWN + this.Health = &health + var phase V1DataServiceDeploymentTopologyStatusPhase = V1DATASERVICEDEPLOYMENTTOPOLOGYSTATUSPHASE_PHASE_UNSPECIFIED + this.Phase = &phase + return &this +} + +// GetHealth returns the Health field value if set, zero value otherwise. +func (o *V1DataServiceDeploymentTopologyStatus) GetHealth() V1DataServiceDeploymentTopologyStatusHealth { + if o == nil || IsNil(o.Health) { + var ret V1DataServiceDeploymentTopologyStatusHealth + return ret + } + return *o.Health +} + +// GetHealthOk returns a tuple with the Health field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1DataServiceDeploymentTopologyStatus) GetHealthOk() (*V1DataServiceDeploymentTopologyStatusHealth, bool) { + if o == nil || IsNil(o.Health) { + return nil, false + } + return o.Health, true +} + +// HasHealth returns a boolean if a field has been set. +func (o *V1DataServiceDeploymentTopologyStatus) HasHealth() bool { + if o != nil && !IsNil(o.Health) { + return true + } + + return false +} + +// SetHealth gets a reference to the given V1DataServiceDeploymentTopologyStatusHealth and assigns it to the Health field. +func (o *V1DataServiceDeploymentTopologyStatus) SetHealth(v V1DataServiceDeploymentTopologyStatusHealth) { + o.Health = &v +} + +// GetPhase returns the Phase field value if set, zero value otherwise. +func (o *V1DataServiceDeploymentTopologyStatus) GetPhase() V1DataServiceDeploymentTopologyStatusPhase { + if o == nil || IsNil(o.Phase) { + var ret V1DataServiceDeploymentTopologyStatusPhase + return ret + } + return *o.Phase +} + +// GetPhaseOk returns a tuple with the Phase field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1DataServiceDeploymentTopologyStatus) GetPhaseOk() (*V1DataServiceDeploymentTopologyStatusPhase, bool) { + if o == nil || IsNil(o.Phase) { + return nil, false + } + return o.Phase, true +} + +// HasPhase returns a boolean if a field has been set. +func (o *V1DataServiceDeploymentTopologyStatus) HasPhase() bool { + if o != nil && !IsNil(o.Phase) { + return true + } + + return false +} + +// SetPhase gets a reference to the given V1DataServiceDeploymentTopologyStatusPhase and assigns it to the Phase field. +func (o *V1DataServiceDeploymentTopologyStatus) SetPhase(v V1DataServiceDeploymentTopologyStatusPhase) { + o.Phase = &v +} + +// GetReadyInstances returns the ReadyInstances field value if set, zero value otherwise. +func (o *V1DataServiceDeploymentTopologyStatus) GetReadyInstances() string { + if o == nil || IsNil(o.ReadyInstances) { + var ret string + return ret + } + return *o.ReadyInstances +} + +// GetReadyInstancesOk returns a tuple with the ReadyInstances field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1DataServiceDeploymentTopologyStatus) GetReadyInstancesOk() (*string, bool) { + if o == nil || IsNil(o.ReadyInstances) { + return nil, false + } + return o.ReadyInstances, true +} + +// HasReadyInstances returns a boolean if a field has been set. +func (o *V1DataServiceDeploymentTopologyStatus) HasReadyInstances() bool { + if o != nil && !IsNil(o.ReadyInstances) { + return true + } + + return false +} + +// SetReadyInstances gets a reference to the given string and assigns it to the ReadyInstances field. +func (o *V1DataServiceDeploymentTopologyStatus) SetReadyInstances(v string) { + o.ReadyInstances = &v +} + +// GetConnectionInfo returns the ConnectionInfo field value if set, zero value otherwise. +func (o *V1DataServiceDeploymentTopologyStatus) GetConnectionInfo() V1ConnectionInfo { + if o == nil || IsNil(o.ConnectionInfo) { + var ret V1ConnectionInfo + return ret + } + return *o.ConnectionInfo +} + +// GetConnectionInfoOk returns a tuple with the ConnectionInfo field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1DataServiceDeploymentTopologyStatus) GetConnectionInfoOk() (*V1ConnectionInfo, bool) { + if o == nil || IsNil(o.ConnectionInfo) { + return nil, false + } + return o.ConnectionInfo, true +} + +// HasConnectionInfo returns a boolean if a field has been set. +func (o *V1DataServiceDeploymentTopologyStatus) HasConnectionInfo() bool { + if o != nil && !IsNil(o.ConnectionInfo) { + return true + } + + return false +} + +// SetConnectionInfo gets a reference to the given V1ConnectionInfo and assigns it to the ConnectionInfo field. +func (o *V1DataServiceDeploymentTopologyStatus) SetConnectionInfo(v V1ConnectionInfo) { + o.ConnectionInfo = &v +} + +func (o V1DataServiceDeploymentTopologyStatus) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o V1DataServiceDeploymentTopologyStatus) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.Health) { + toSerialize["health"] = o.Health + } + if !IsNil(o.Phase) { + toSerialize["phase"] = o.Phase + } + if !IsNil(o.ReadyInstances) { + toSerialize["readyInstances"] = o.ReadyInstances + } + if !IsNil(o.ConnectionInfo) { + toSerialize["connectionInfo"] = o.ConnectionInfo + } + return toSerialize, nil +} + +type NullableV1DataServiceDeploymentTopologyStatus struct { + value *V1DataServiceDeploymentTopologyStatus + isSet bool +} + +func (v NullableV1DataServiceDeploymentTopologyStatus) Get() *V1DataServiceDeploymentTopologyStatus { + return v.value +} + +func (v *NullableV1DataServiceDeploymentTopologyStatus) Set(val *V1DataServiceDeploymentTopologyStatus) { + v.value = val + v.isSet = true +} + +func (v NullableV1DataServiceDeploymentTopologyStatus) IsSet() bool { + return v.isSet +} + +func (v *NullableV1DataServiceDeploymentTopologyStatus) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableV1DataServiceDeploymentTopologyStatus(val *V1DataServiceDeploymentTopologyStatus) *NullableV1DataServiceDeploymentTopologyStatus { + return &NullableV1DataServiceDeploymentTopologyStatus{value: val, isSet: true} +} + +func (v NullableV1DataServiceDeploymentTopologyStatus) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableV1DataServiceDeploymentTopologyStatus) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_data_service_deployment_topology_status_health.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_data_service_deployment_topology_status_health.go new file mode 100644 index 000000000..7ae5b6704 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_data_service_deployment_topology_status_health.go @@ -0,0 +1,115 @@ +/* +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeployment + +import ( + "encoding/json" + "fmt" +) + +// V1DataServiceDeploymentTopologyStatusHealth Enum for Health of the data service topology. - UNKNOWN: Health is unknown. - UNAVAILABLE: DataServiceDeployment Topology is Unavailable. - PARTIALLY_AVAILABLE: DataServiceDeployment Topology is Partially available. - AVAILABLE: DataServiceDeployment Topology is available. +type V1DataServiceDeploymentTopologyStatusHealth string + +// List of v1DataServiceDeploymentTopologyStatusHealth +const ( + V1DATASERVICEDEPLOYMENTTOPOLOGYSTATUSHEALTH_UNKNOWN V1DataServiceDeploymentTopologyStatusHealth = "UNKNOWN" + V1DATASERVICEDEPLOYMENTTOPOLOGYSTATUSHEALTH_UNAVAILABLE V1DataServiceDeploymentTopologyStatusHealth = "UNAVAILABLE" + V1DATASERVICEDEPLOYMENTTOPOLOGYSTATUSHEALTH_PARTIALLY_AVAILABLE V1DataServiceDeploymentTopologyStatusHealth = "PARTIALLY_AVAILABLE" + V1DATASERVICEDEPLOYMENTTOPOLOGYSTATUSHEALTH_AVAILABLE V1DataServiceDeploymentTopologyStatusHealth = "AVAILABLE" +) + +// All allowed values of V1DataServiceDeploymentTopologyStatusHealth enum +var AllowedV1DataServiceDeploymentTopologyStatusHealthEnumValues = []V1DataServiceDeploymentTopologyStatusHealth{ + "UNKNOWN", + "UNAVAILABLE", + "PARTIALLY_AVAILABLE", + "AVAILABLE", +} + +func (v *V1DataServiceDeploymentTopologyStatusHealth) UnmarshalJSON(src []byte) error { + var value string + err := json.Unmarshal(src, &value) + if err != nil { + return err + } + enumTypeValue := V1DataServiceDeploymentTopologyStatusHealth(value) + for _, existing := range AllowedV1DataServiceDeploymentTopologyStatusHealthEnumValues { + if existing == enumTypeValue { + *v = enumTypeValue + return nil + } + } + + return fmt.Errorf("%+v is not a valid V1DataServiceDeploymentTopologyStatusHealth", value) +} + +// NewV1DataServiceDeploymentTopologyStatusHealthFromValue returns a pointer to a valid V1DataServiceDeploymentTopologyStatusHealth +// for the value passed as argument, or an error if the value passed is not allowed by the enum +func NewV1DataServiceDeploymentTopologyStatusHealthFromValue(v string) (*V1DataServiceDeploymentTopologyStatusHealth, error) { + ev := V1DataServiceDeploymentTopologyStatusHealth(v) + if ev.IsValid() { + return &ev, nil + } else { + return nil, fmt.Errorf("invalid value '%v' for V1DataServiceDeploymentTopologyStatusHealth: valid values are %v", v, AllowedV1DataServiceDeploymentTopologyStatusHealthEnumValues) + } +} + +// IsValid return true if the value is valid for the enum, false otherwise +func (v V1DataServiceDeploymentTopologyStatusHealth) IsValid() bool { + for _, existing := range AllowedV1DataServiceDeploymentTopologyStatusHealthEnumValues { + if existing == v { + return true + } + } + return false +} + +// Ptr returns reference to v1DataServiceDeploymentTopologyStatusHealth value +func (v V1DataServiceDeploymentTopologyStatusHealth) Ptr() *V1DataServiceDeploymentTopologyStatusHealth { + return &v +} + +type NullableV1DataServiceDeploymentTopologyStatusHealth struct { + value *V1DataServiceDeploymentTopologyStatusHealth + isSet bool +} + +func (v NullableV1DataServiceDeploymentTopologyStatusHealth) Get() *V1DataServiceDeploymentTopologyStatusHealth { + return v.value +} + +func (v *NullableV1DataServiceDeploymentTopologyStatusHealth) Set(val *V1DataServiceDeploymentTopologyStatusHealth) { + v.value = val + v.isSet = true +} + +func (v NullableV1DataServiceDeploymentTopologyStatusHealth) IsSet() bool { + return v.isSet +} + +func (v *NullableV1DataServiceDeploymentTopologyStatusHealth) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableV1DataServiceDeploymentTopologyStatusHealth(val *V1DataServiceDeploymentTopologyStatusHealth) *NullableV1DataServiceDeploymentTopologyStatusHealth { + return &NullableV1DataServiceDeploymentTopologyStatusHealth{value: val, isSet: true} +} + +func (v NullableV1DataServiceDeploymentTopologyStatusHealth) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableV1DataServiceDeploymentTopologyStatusHealth) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_data_service_deployment_topology_status_phase.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_data_service_deployment_topology_status_phase.go new file mode 100644 index 000000000..19078ceb0 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_data_service_deployment_topology_status_phase.go @@ -0,0 +1,123 @@ +/* +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeployment + +import ( + "encoding/json" + "fmt" +) + +// V1DataServiceDeploymentTopologyStatusPhase Enum for Phase of the DataServiceDeployment Topology. - PHASE_UNSPECIFIED: Unspecified status. - IN_PROGRESS: In progress Status. - PARTIAL_SUCCESS: Partial Success Status. - SUCCESS: Successful Status. - DELETE_PENDING: Delete is pending Status. - DELETING: Delete in progress Status. - FAILED: Failed Status. - TIMED_OUT: Timed Out Status. +type V1DataServiceDeploymentTopologyStatusPhase string + +// List of v1DataServiceDeploymentTopologyStatusPhase +const ( + V1DATASERVICEDEPLOYMENTTOPOLOGYSTATUSPHASE_PHASE_UNSPECIFIED V1DataServiceDeploymentTopologyStatusPhase = "PHASE_UNSPECIFIED" + V1DATASERVICEDEPLOYMENTTOPOLOGYSTATUSPHASE_IN_PROGRESS V1DataServiceDeploymentTopologyStatusPhase = "IN_PROGRESS" + V1DATASERVICEDEPLOYMENTTOPOLOGYSTATUSPHASE_PARTIAL_SUCCESS V1DataServiceDeploymentTopologyStatusPhase = "PARTIAL_SUCCESS" + V1DATASERVICEDEPLOYMENTTOPOLOGYSTATUSPHASE_SUCCESS V1DataServiceDeploymentTopologyStatusPhase = "SUCCESS" + V1DATASERVICEDEPLOYMENTTOPOLOGYSTATUSPHASE_DELETE_PENDING V1DataServiceDeploymentTopologyStatusPhase = "DELETE_PENDING" + V1DATASERVICEDEPLOYMENTTOPOLOGYSTATUSPHASE_DELETING V1DataServiceDeploymentTopologyStatusPhase = "DELETING" + V1DATASERVICEDEPLOYMENTTOPOLOGYSTATUSPHASE_FAILED V1DataServiceDeploymentTopologyStatusPhase = "FAILED" + V1DATASERVICEDEPLOYMENTTOPOLOGYSTATUSPHASE_TIMED_OUT V1DataServiceDeploymentTopologyStatusPhase = "TIMED_OUT" +) + +// All allowed values of V1DataServiceDeploymentTopologyStatusPhase enum +var AllowedV1DataServiceDeploymentTopologyStatusPhaseEnumValues = []V1DataServiceDeploymentTopologyStatusPhase{ + "PHASE_UNSPECIFIED", + "IN_PROGRESS", + "PARTIAL_SUCCESS", + "SUCCESS", + "DELETE_PENDING", + "DELETING", + "FAILED", + "TIMED_OUT", +} + +func (v *V1DataServiceDeploymentTopologyStatusPhase) UnmarshalJSON(src []byte) error { + var value string + err := json.Unmarshal(src, &value) + if err != nil { + return err + } + enumTypeValue := V1DataServiceDeploymentTopologyStatusPhase(value) + for _, existing := range AllowedV1DataServiceDeploymentTopologyStatusPhaseEnumValues { + if existing == enumTypeValue { + *v = enumTypeValue + return nil + } + } + + return fmt.Errorf("%+v is not a valid V1DataServiceDeploymentTopologyStatusPhase", value) +} + +// NewV1DataServiceDeploymentTopologyStatusPhaseFromValue returns a pointer to a valid V1DataServiceDeploymentTopologyStatusPhase +// for the value passed as argument, or an error if the value passed is not allowed by the enum +func NewV1DataServiceDeploymentTopologyStatusPhaseFromValue(v string) (*V1DataServiceDeploymentTopologyStatusPhase, error) { + ev := V1DataServiceDeploymentTopologyStatusPhase(v) + if ev.IsValid() { + return &ev, nil + } else { + return nil, fmt.Errorf("invalid value '%v' for V1DataServiceDeploymentTopologyStatusPhase: valid values are %v", v, AllowedV1DataServiceDeploymentTopologyStatusPhaseEnumValues) + } +} + +// IsValid return true if the value is valid for the enum, false otherwise +func (v V1DataServiceDeploymentTopologyStatusPhase) IsValid() bool { + for _, existing := range AllowedV1DataServiceDeploymentTopologyStatusPhaseEnumValues { + if existing == v { + return true + } + } + return false +} + +// Ptr returns reference to v1DataServiceDeploymentTopologyStatusPhase value +func (v V1DataServiceDeploymentTopologyStatusPhase) Ptr() *V1DataServiceDeploymentTopologyStatusPhase { + return &v +} + +type NullableV1DataServiceDeploymentTopologyStatusPhase struct { + value *V1DataServiceDeploymentTopologyStatusPhase + isSet bool +} + +func (v NullableV1DataServiceDeploymentTopologyStatusPhase) Get() *V1DataServiceDeploymentTopologyStatusPhase { + return v.value +} + +func (v *NullableV1DataServiceDeploymentTopologyStatusPhase) Set(val *V1DataServiceDeploymentTopologyStatusPhase) { + v.value = val + v.isSet = true +} + +func (v NullableV1DataServiceDeploymentTopologyStatusPhase) IsSet() bool { + return v.isSet +} + +func (v *NullableV1DataServiceDeploymentTopologyStatusPhase) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableV1DataServiceDeploymentTopologyStatusPhase(val *V1DataServiceDeploymentTopologyStatusPhase) *NullableV1DataServiceDeploymentTopologyStatusPhase { + return &NullableV1DataServiceDeploymentTopologyStatusPhase{value: val, isSet: true} +} + +func (v NullableV1DataServiceDeploymentTopologyStatusPhase) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableV1DataServiceDeploymentTopologyStatusPhase) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_infra_resource_type.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_infra_resource_type.go new file mode 100644 index 000000000..67e242b75 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_infra_resource_type.go @@ -0,0 +1,127 @@ +/* +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeployment + +import ( + "encoding/json" + "fmt" +) + +// V1InfraResourceType Type of the resource. - TYPE_UNSPECIFIED: Unspecified, do not use. - ACCOUNT: Currently supported infra resources. Infra resource of type account. - TENANT: Infra resource of type tenant. - PROJECT: Infra resource of type projects. - TARGET_CLUSTER: Infra resource target cluster. - NAMESPACE: Infra resource of type namespace. - CREDENTIAL: Infra resource of type credential. - BACKUP_LOCATION: Infra resource of type backup location. - BACKUP_POLICY: Infra resource of type backup policy. - TEMPLATE: Infra resource of type template. +type V1InfraResourceType string + +// List of v1InfraResourceType +const ( + V1INFRARESOURCETYPE_TYPE_UNSPECIFIED V1InfraResourceType = "TYPE_UNSPECIFIED" + V1INFRARESOURCETYPE_ACCOUNT V1InfraResourceType = "ACCOUNT" + V1INFRARESOURCETYPE_TENANT V1InfraResourceType = "TENANT" + V1INFRARESOURCETYPE_PROJECT V1InfraResourceType = "PROJECT" + V1INFRARESOURCETYPE_TARGET_CLUSTER V1InfraResourceType = "TARGET_CLUSTER" + V1INFRARESOURCETYPE_NAMESPACE V1InfraResourceType = "NAMESPACE" + V1INFRARESOURCETYPE_CREDENTIAL V1InfraResourceType = "CREDENTIAL" + V1INFRARESOURCETYPE_BACKUP_LOCATION V1InfraResourceType = "BACKUP_LOCATION" + V1INFRARESOURCETYPE_BACKUP_POLICY V1InfraResourceType = "BACKUP_POLICY" + V1INFRARESOURCETYPE_TEMPLATE V1InfraResourceType = "TEMPLATE" +) + +// All allowed values of V1InfraResourceType enum +var AllowedV1InfraResourceTypeEnumValues = []V1InfraResourceType{ + "TYPE_UNSPECIFIED", + "ACCOUNT", + "TENANT", + "PROJECT", + "TARGET_CLUSTER", + "NAMESPACE", + "CREDENTIAL", + "BACKUP_LOCATION", + "BACKUP_POLICY", + "TEMPLATE", +} + +func (v *V1InfraResourceType) UnmarshalJSON(src []byte) error { + var value string + err := json.Unmarshal(src, &value) + if err != nil { + return err + } + enumTypeValue := V1InfraResourceType(value) + for _, existing := range AllowedV1InfraResourceTypeEnumValues { + if existing == enumTypeValue { + *v = enumTypeValue + return nil + } + } + + return fmt.Errorf("%+v is not a valid V1InfraResourceType", value) +} + +// NewV1InfraResourceTypeFromValue returns a pointer to a valid V1InfraResourceType +// for the value passed as argument, or an error if the value passed is not allowed by the enum +func NewV1InfraResourceTypeFromValue(v string) (*V1InfraResourceType, error) { + ev := V1InfraResourceType(v) + if ev.IsValid() { + return &ev, nil + } else { + return nil, fmt.Errorf("invalid value '%v' for V1InfraResourceType: valid values are %v", v, AllowedV1InfraResourceTypeEnumValues) + } +} + +// IsValid return true if the value is valid for the enum, false otherwise +func (v V1InfraResourceType) IsValid() bool { + for _, existing := range AllowedV1InfraResourceTypeEnumValues { + if existing == v { + return true + } + } + return false +} + +// Ptr returns reference to v1InfraResourceType value +func (v V1InfraResourceType) Ptr() *V1InfraResourceType { + return &v +} + +type NullableV1InfraResourceType struct { + value *V1InfraResourceType + isSet bool +} + +func (v NullableV1InfraResourceType) Get() *V1InfraResourceType { + return v.value +} + +func (v *NullableV1InfraResourceType) Set(val *V1InfraResourceType) { + v.value = val + v.isSet = true +} + +func (v NullableV1InfraResourceType) IsSet() bool { + return v.isSet +} + +func (v *NullableV1InfraResourceType) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableV1InfraResourceType(val *V1InfraResourceType) *NullableV1InfraResourceType { + return &NullableV1InfraResourceType{value: val, isSet: true} +} + +func (v NullableV1InfraResourceType) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableV1InfraResourceType) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_pod_info.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_instance_info.go similarity index 61% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_pod_info.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_instance_info.go index 200bbec65..ddde47d1f 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_pod_info.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_instance_info.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,44 +8,44 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "encoding/json" ) -// checks if the V1PodInfo type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &V1PodInfo{} +// checks if the V1InstanceInfo type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &V1InstanceInfo{} -// V1PodInfo PodInfo contains information about a pod. -type V1PodInfo struct { - // The IP of a pod. +// V1InstanceInfo InstanceInfo contains information about a instance. +type V1InstanceInfo struct { + // The IP of a instance. Ip *string `json:"ip,omitempty"` - // Name is the Hostname of a pod. + // Name is the Hostname of a instance. Name *string `json:"name,omitempty"` - // Node that hosts a particular pod. + // Node that hosts a particular instance. WorkerNode *string `json:"workerNode,omitempty"` } -// NewV1PodInfo instantiates a new V1PodInfo object +// NewV1InstanceInfo instantiates a new V1InstanceInfo object // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewV1PodInfo() *V1PodInfo { - this := V1PodInfo{} +func NewV1InstanceInfo() *V1InstanceInfo { + this := V1InstanceInfo{} return &this } -// NewV1PodInfoWithDefaults instantiates a new V1PodInfo object +// NewV1InstanceInfoWithDefaults instantiates a new V1InstanceInfo object // This constructor will only assign default values to properties that have it defined, // but it doesn't guarantee that properties required by API are set -func NewV1PodInfoWithDefaults() *V1PodInfo { - this := V1PodInfo{} +func NewV1InstanceInfoWithDefaults() *V1InstanceInfo { + this := V1InstanceInfo{} return &this } // GetIp returns the Ip field value if set, zero value otherwise. -func (o *V1PodInfo) GetIp() string { +func (o *V1InstanceInfo) GetIp() string { if o == nil || IsNil(o.Ip) { var ret string return ret @@ -55,7 +55,7 @@ func (o *V1PodInfo) GetIp() string { // GetIpOk returns a tuple with the Ip field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1PodInfo) GetIpOk() (*string, bool) { +func (o *V1InstanceInfo) GetIpOk() (*string, bool) { if o == nil || IsNil(o.Ip) { return nil, false } @@ -63,7 +63,7 @@ func (o *V1PodInfo) GetIpOk() (*string, bool) { } // HasIp returns a boolean if a field has been set. -func (o *V1PodInfo) HasIp() bool { +func (o *V1InstanceInfo) HasIp() bool { if o != nil && !IsNil(o.Ip) { return true } @@ -72,12 +72,12 @@ func (o *V1PodInfo) HasIp() bool { } // SetIp gets a reference to the given string and assigns it to the Ip field. -func (o *V1PodInfo) SetIp(v string) { +func (o *V1InstanceInfo) SetIp(v string) { o.Ip = &v } // GetName returns the Name field value if set, zero value otherwise. -func (o *V1PodInfo) GetName() string { +func (o *V1InstanceInfo) GetName() string { if o == nil || IsNil(o.Name) { var ret string return ret @@ -87,7 +87,7 @@ func (o *V1PodInfo) GetName() string { // GetNameOk returns a tuple with the Name field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1PodInfo) GetNameOk() (*string, bool) { +func (o *V1InstanceInfo) GetNameOk() (*string, bool) { if o == nil || IsNil(o.Name) { return nil, false } @@ -95,7 +95,7 @@ func (o *V1PodInfo) GetNameOk() (*string, bool) { } // HasName returns a boolean if a field has been set. -func (o *V1PodInfo) HasName() bool { +func (o *V1InstanceInfo) HasName() bool { if o != nil && !IsNil(o.Name) { return true } @@ -104,12 +104,12 @@ func (o *V1PodInfo) HasName() bool { } // SetName gets a reference to the given string and assigns it to the Name field. -func (o *V1PodInfo) SetName(v string) { +func (o *V1InstanceInfo) SetName(v string) { o.Name = &v } // GetWorkerNode returns the WorkerNode field value if set, zero value otherwise. -func (o *V1PodInfo) GetWorkerNode() string { +func (o *V1InstanceInfo) GetWorkerNode() string { if o == nil || IsNil(o.WorkerNode) { var ret string return ret @@ -119,7 +119,7 @@ func (o *V1PodInfo) GetWorkerNode() string { // GetWorkerNodeOk returns a tuple with the WorkerNode field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1PodInfo) GetWorkerNodeOk() (*string, bool) { +func (o *V1InstanceInfo) GetWorkerNodeOk() (*string, bool) { if o == nil || IsNil(o.WorkerNode) { return nil, false } @@ -127,7 +127,7 @@ func (o *V1PodInfo) GetWorkerNodeOk() (*string, bool) { } // HasWorkerNode returns a boolean if a field has been set. -func (o *V1PodInfo) HasWorkerNode() bool { +func (o *V1InstanceInfo) HasWorkerNode() bool { if o != nil && !IsNil(o.WorkerNode) { return true } @@ -136,11 +136,11 @@ func (o *V1PodInfo) HasWorkerNode() bool { } // SetWorkerNode gets a reference to the given string and assigns it to the WorkerNode field. -func (o *V1PodInfo) SetWorkerNode(v string) { +func (o *V1InstanceInfo) SetWorkerNode(v string) { o.WorkerNode = &v } -func (o V1PodInfo) MarshalJSON() ([]byte, error) { +func (o V1InstanceInfo) MarshalJSON() ([]byte, error) { toSerialize,err := o.ToMap() if err != nil { return []byte{}, err @@ -148,7 +148,7 @@ func (o V1PodInfo) MarshalJSON() ([]byte, error) { return json.Marshal(toSerialize) } -func (o V1PodInfo) ToMap() (map[string]interface{}, error) { +func (o V1InstanceInfo) ToMap() (map[string]interface{}, error) { toSerialize := map[string]interface{}{} if !IsNil(o.Ip) { toSerialize["ip"] = o.Ip @@ -162,38 +162,38 @@ func (o V1PodInfo) ToMap() (map[string]interface{}, error) { return toSerialize, nil } -type NullableV1PodInfo struct { - value *V1PodInfo +type NullableV1InstanceInfo struct { + value *V1InstanceInfo isSet bool } -func (v NullableV1PodInfo) Get() *V1PodInfo { +func (v NullableV1InstanceInfo) Get() *V1InstanceInfo { return v.value } -func (v *NullableV1PodInfo) Set(val *V1PodInfo) { +func (v *NullableV1InstanceInfo) Set(val *V1InstanceInfo) { v.value = val v.isSet = true } -func (v NullableV1PodInfo) IsSet() bool { +func (v NullableV1InstanceInfo) IsSet() bool { return v.isSet } -func (v *NullableV1PodInfo) Unset() { +func (v *NullableV1InstanceInfo) Unset() { v.value = nil v.isSet = false } -func NewNullableV1PodInfo(val *V1PodInfo) *NullableV1PodInfo { - return &NullableV1PodInfo{value: val, isSet: true} +func NewNullableV1InstanceInfo(val *V1InstanceInfo) *NullableV1InstanceInfo { + return &NullableV1InstanceInfo{value: val, isSet: true} } -func (v NullableV1PodInfo) MarshalJSON() ([]byte, error) { +func (v NullableV1InstanceInfo) MarshalJSON() ([]byte, error) { return json.Marshal(v.value) } -func (v *NullableV1PodInfo) UnmarshalJSON(src []byte) error { +func (v *NullableV1InstanceInfo) UnmarshalJSON(src []byte) error { v.isSet = true return json.Unmarshal(src, &v.value) } diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_key_performance_indicators.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_key_performance_indicators.go new file mode 100644 index 000000000..4ca02ccc2 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_key_performance_indicators.go @@ -0,0 +1,349 @@ +/* +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeployment + +import ( + "encoding/json" +) + +// checks if the V1KeyPerformanceIndicators type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &V1KeyPerformanceIndicators{} + +// V1KeyPerformanceIndicators struct for V1KeyPerformanceIndicators +type V1KeyPerformanceIndicators struct { + // count of available data service deployments. + DataServiceDeploymentAvailableCount *int32 `json:"dataServiceDeploymentAvailableCount,omitempty"` + // count of partially available data service deployments. + DataServiceDeploymentPartiallyAvailableCount *int32 `json:"dataServiceDeploymentPartiallyAvailableCount,omitempty"` + // count of unavailable data service deployments. + DataServiceDeploymentUnavailableCount *int32 `json:"dataServiceDeploymentUnavailableCount,omitempty"` + // count of unknown data service deployments. + DataServiceDeploymentUnknownCount *int32 `json:"dataServiceDeploymentUnknownCount,omitempty"` + // count of unknown data service deployments. + DataServiceDeploymentNotApplicableCount *int32 `json:"dataServiceDeploymentNotApplicableCount,omitempty"` + // count of running instances. + RunningInstances *int32 `json:"runningInstances,omitempty"` + // count of not running instances. + NotRunningInstances *int32 `json:"notRunningInstances,omitempty"` +} + +// NewV1KeyPerformanceIndicators instantiates a new V1KeyPerformanceIndicators object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewV1KeyPerformanceIndicators() *V1KeyPerformanceIndicators { + this := V1KeyPerformanceIndicators{} + return &this +} + +// NewV1KeyPerformanceIndicatorsWithDefaults instantiates a new V1KeyPerformanceIndicators object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewV1KeyPerformanceIndicatorsWithDefaults() *V1KeyPerformanceIndicators { + this := V1KeyPerformanceIndicators{} + return &this +} + +// GetDataServiceDeploymentAvailableCount returns the DataServiceDeploymentAvailableCount field value if set, zero value otherwise. +func (o *V1KeyPerformanceIndicators) GetDataServiceDeploymentAvailableCount() int32 { + if o == nil || IsNil(o.DataServiceDeploymentAvailableCount) { + var ret int32 + return ret + } + return *o.DataServiceDeploymentAvailableCount +} + +// GetDataServiceDeploymentAvailableCountOk returns a tuple with the DataServiceDeploymentAvailableCount field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1KeyPerformanceIndicators) GetDataServiceDeploymentAvailableCountOk() (*int32, bool) { + if o == nil || IsNil(o.DataServiceDeploymentAvailableCount) { + return nil, false + } + return o.DataServiceDeploymentAvailableCount, true +} + +// HasDataServiceDeploymentAvailableCount returns a boolean if a field has been set. +func (o *V1KeyPerformanceIndicators) HasDataServiceDeploymentAvailableCount() bool { + if o != nil && !IsNil(o.DataServiceDeploymentAvailableCount) { + return true + } + + return false +} + +// SetDataServiceDeploymentAvailableCount gets a reference to the given int32 and assigns it to the DataServiceDeploymentAvailableCount field. +func (o *V1KeyPerformanceIndicators) SetDataServiceDeploymentAvailableCount(v int32) { + o.DataServiceDeploymentAvailableCount = &v +} + +// GetDataServiceDeploymentPartiallyAvailableCount returns the DataServiceDeploymentPartiallyAvailableCount field value if set, zero value otherwise. +func (o *V1KeyPerformanceIndicators) GetDataServiceDeploymentPartiallyAvailableCount() int32 { + if o == nil || IsNil(o.DataServiceDeploymentPartiallyAvailableCount) { + var ret int32 + return ret + } + return *o.DataServiceDeploymentPartiallyAvailableCount +} + +// GetDataServiceDeploymentPartiallyAvailableCountOk returns a tuple with the DataServiceDeploymentPartiallyAvailableCount field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1KeyPerformanceIndicators) GetDataServiceDeploymentPartiallyAvailableCountOk() (*int32, bool) { + if o == nil || IsNil(o.DataServiceDeploymentPartiallyAvailableCount) { + return nil, false + } + return o.DataServiceDeploymentPartiallyAvailableCount, true +} + +// HasDataServiceDeploymentPartiallyAvailableCount returns a boolean if a field has been set. +func (o *V1KeyPerformanceIndicators) HasDataServiceDeploymentPartiallyAvailableCount() bool { + if o != nil && !IsNil(o.DataServiceDeploymentPartiallyAvailableCount) { + return true + } + + return false +} + +// SetDataServiceDeploymentPartiallyAvailableCount gets a reference to the given int32 and assigns it to the DataServiceDeploymentPartiallyAvailableCount field. +func (o *V1KeyPerformanceIndicators) SetDataServiceDeploymentPartiallyAvailableCount(v int32) { + o.DataServiceDeploymentPartiallyAvailableCount = &v +} + +// GetDataServiceDeploymentUnavailableCount returns the DataServiceDeploymentUnavailableCount field value if set, zero value otherwise. +func (o *V1KeyPerformanceIndicators) GetDataServiceDeploymentUnavailableCount() int32 { + if o == nil || IsNil(o.DataServiceDeploymentUnavailableCount) { + var ret int32 + return ret + } + return *o.DataServiceDeploymentUnavailableCount +} + +// GetDataServiceDeploymentUnavailableCountOk returns a tuple with the DataServiceDeploymentUnavailableCount field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1KeyPerformanceIndicators) GetDataServiceDeploymentUnavailableCountOk() (*int32, bool) { + if o == nil || IsNil(o.DataServiceDeploymentUnavailableCount) { + return nil, false + } + return o.DataServiceDeploymentUnavailableCount, true +} + +// HasDataServiceDeploymentUnavailableCount returns a boolean if a field has been set. +func (o *V1KeyPerformanceIndicators) HasDataServiceDeploymentUnavailableCount() bool { + if o != nil && !IsNil(o.DataServiceDeploymentUnavailableCount) { + return true + } + + return false +} + +// SetDataServiceDeploymentUnavailableCount gets a reference to the given int32 and assigns it to the DataServiceDeploymentUnavailableCount field. +func (o *V1KeyPerformanceIndicators) SetDataServiceDeploymentUnavailableCount(v int32) { + o.DataServiceDeploymentUnavailableCount = &v +} + +// GetDataServiceDeploymentUnknownCount returns the DataServiceDeploymentUnknownCount field value if set, zero value otherwise. +func (o *V1KeyPerformanceIndicators) GetDataServiceDeploymentUnknownCount() int32 { + if o == nil || IsNil(o.DataServiceDeploymentUnknownCount) { + var ret int32 + return ret + } + return *o.DataServiceDeploymentUnknownCount +} + +// GetDataServiceDeploymentUnknownCountOk returns a tuple with the DataServiceDeploymentUnknownCount field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1KeyPerformanceIndicators) GetDataServiceDeploymentUnknownCountOk() (*int32, bool) { + if o == nil || IsNil(o.DataServiceDeploymentUnknownCount) { + return nil, false + } + return o.DataServiceDeploymentUnknownCount, true +} + +// HasDataServiceDeploymentUnknownCount returns a boolean if a field has been set. +func (o *V1KeyPerformanceIndicators) HasDataServiceDeploymentUnknownCount() bool { + if o != nil && !IsNil(o.DataServiceDeploymentUnknownCount) { + return true + } + + return false +} + +// SetDataServiceDeploymentUnknownCount gets a reference to the given int32 and assigns it to the DataServiceDeploymentUnknownCount field. +func (o *V1KeyPerformanceIndicators) SetDataServiceDeploymentUnknownCount(v int32) { + o.DataServiceDeploymentUnknownCount = &v +} + +// GetDataServiceDeploymentNotApplicableCount returns the DataServiceDeploymentNotApplicableCount field value if set, zero value otherwise. +func (o *V1KeyPerformanceIndicators) GetDataServiceDeploymentNotApplicableCount() int32 { + if o == nil || IsNil(o.DataServiceDeploymentNotApplicableCount) { + var ret int32 + return ret + } + return *o.DataServiceDeploymentNotApplicableCount +} + +// GetDataServiceDeploymentNotApplicableCountOk returns a tuple with the DataServiceDeploymentNotApplicableCount field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1KeyPerformanceIndicators) GetDataServiceDeploymentNotApplicableCountOk() (*int32, bool) { + if o == nil || IsNil(o.DataServiceDeploymentNotApplicableCount) { + return nil, false + } + return o.DataServiceDeploymentNotApplicableCount, true +} + +// HasDataServiceDeploymentNotApplicableCount returns a boolean if a field has been set. +func (o *V1KeyPerformanceIndicators) HasDataServiceDeploymentNotApplicableCount() bool { + if o != nil && !IsNil(o.DataServiceDeploymentNotApplicableCount) { + return true + } + + return false +} + +// SetDataServiceDeploymentNotApplicableCount gets a reference to the given int32 and assigns it to the DataServiceDeploymentNotApplicableCount field. +func (o *V1KeyPerformanceIndicators) SetDataServiceDeploymentNotApplicableCount(v int32) { + o.DataServiceDeploymentNotApplicableCount = &v +} + +// GetRunningInstances returns the RunningInstances field value if set, zero value otherwise. +func (o *V1KeyPerformanceIndicators) GetRunningInstances() int32 { + if o == nil || IsNil(o.RunningInstances) { + var ret int32 + return ret + } + return *o.RunningInstances +} + +// GetRunningInstancesOk returns a tuple with the RunningInstances field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1KeyPerformanceIndicators) GetRunningInstancesOk() (*int32, bool) { + if o == nil || IsNil(o.RunningInstances) { + return nil, false + } + return o.RunningInstances, true +} + +// HasRunningInstances returns a boolean if a field has been set. +func (o *V1KeyPerformanceIndicators) HasRunningInstances() bool { + if o != nil && !IsNil(o.RunningInstances) { + return true + } + + return false +} + +// SetRunningInstances gets a reference to the given int32 and assigns it to the RunningInstances field. +func (o *V1KeyPerformanceIndicators) SetRunningInstances(v int32) { + o.RunningInstances = &v +} + +// GetNotRunningInstances returns the NotRunningInstances field value if set, zero value otherwise. +func (o *V1KeyPerformanceIndicators) GetNotRunningInstances() int32 { + if o == nil || IsNil(o.NotRunningInstances) { + var ret int32 + return ret + } + return *o.NotRunningInstances +} + +// GetNotRunningInstancesOk returns a tuple with the NotRunningInstances field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1KeyPerformanceIndicators) GetNotRunningInstancesOk() (*int32, bool) { + if o == nil || IsNil(o.NotRunningInstances) { + return nil, false + } + return o.NotRunningInstances, true +} + +// HasNotRunningInstances returns a boolean if a field has been set. +func (o *V1KeyPerformanceIndicators) HasNotRunningInstances() bool { + if o != nil && !IsNil(o.NotRunningInstances) { + return true + } + + return false +} + +// SetNotRunningInstances gets a reference to the given int32 and assigns it to the NotRunningInstances field. +func (o *V1KeyPerformanceIndicators) SetNotRunningInstances(v int32) { + o.NotRunningInstances = &v +} + +func (o V1KeyPerformanceIndicators) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o V1KeyPerformanceIndicators) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.DataServiceDeploymentAvailableCount) { + toSerialize["dataServiceDeploymentAvailableCount"] = o.DataServiceDeploymentAvailableCount + } + if !IsNil(o.DataServiceDeploymentPartiallyAvailableCount) { + toSerialize["dataServiceDeploymentPartiallyAvailableCount"] = o.DataServiceDeploymentPartiallyAvailableCount + } + if !IsNil(o.DataServiceDeploymentUnavailableCount) { + toSerialize["dataServiceDeploymentUnavailableCount"] = o.DataServiceDeploymentUnavailableCount + } + if !IsNil(o.DataServiceDeploymentUnknownCount) { + toSerialize["dataServiceDeploymentUnknownCount"] = o.DataServiceDeploymentUnknownCount + } + if !IsNil(o.DataServiceDeploymentNotApplicableCount) { + toSerialize["dataServiceDeploymentNotApplicableCount"] = o.DataServiceDeploymentNotApplicableCount + } + if !IsNil(o.RunningInstances) { + toSerialize["runningInstances"] = o.RunningInstances + } + if !IsNil(o.NotRunningInstances) { + toSerialize["notRunningInstances"] = o.NotRunningInstances + } + return toSerialize, nil +} + +type NullableV1KeyPerformanceIndicators struct { + value *V1KeyPerformanceIndicators + isSet bool +} + +func (v NullableV1KeyPerformanceIndicators) Get() *V1KeyPerformanceIndicators { + return v.value +} + +func (v *NullableV1KeyPerformanceIndicators) Set(val *V1KeyPerformanceIndicators) { + v.value = val + v.isSet = true +} + +func (v NullableV1KeyPerformanceIndicators) IsSet() bool { + return v.isSet +} + +func (v *NullableV1KeyPerformanceIndicators) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableV1KeyPerformanceIndicators(val *V1KeyPerformanceIndicators) *NullableV1KeyPerformanceIndicators { + return &NullableV1KeyPerformanceIndicators{value: val, isSet: true} +} + +func (v NullableV1KeyPerformanceIndicators) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableV1KeyPerformanceIndicators) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_list_data_service_deployments_request.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_list_data_service_deployments_request.go new file mode 100644 index 000000000..e57d36e32 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_list_data_service_deployments_request.go @@ -0,0 +1,375 @@ +/* +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeployment + +import ( + "encoding/json" + "bytes" + "fmt" +) + +// checks if the V1ListDataServiceDeploymentsRequest type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &V1ListDataServiceDeploymentsRequest{} + +// V1ListDataServiceDeploymentsRequest Request to list the data service deployment resources. +type V1ListDataServiceDeploymentsRequest struct { + // tenant ID for which data service deployments need to be fetched. + TenantId string `json:"tenantId"` + LabelSelector *V1Selector `json:"labelSelector,omitempty"` + FieldSelector *V1Selector `json:"fieldSelector,omitempty"` + InfraResourceSelector *V1ResourceSelector `json:"infraResourceSelector,omitempty"` + Sort *V1Sort `json:"sort,omitempty"` + Pagination *V1PageBasedPaginationRequest `json:"pagination,omitempty"` + ApplicationSelector *V1PDSApplicationSelector `json:"applicationSelector,omitempty"` +} + +type _V1ListDataServiceDeploymentsRequest V1ListDataServiceDeploymentsRequest + +// NewV1ListDataServiceDeploymentsRequest instantiates a new V1ListDataServiceDeploymentsRequest object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewV1ListDataServiceDeploymentsRequest(tenantId string) *V1ListDataServiceDeploymentsRequest { + this := V1ListDataServiceDeploymentsRequest{} + this.TenantId = tenantId + return &this +} + +// NewV1ListDataServiceDeploymentsRequestWithDefaults instantiates a new V1ListDataServiceDeploymentsRequest object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewV1ListDataServiceDeploymentsRequestWithDefaults() *V1ListDataServiceDeploymentsRequest { + this := V1ListDataServiceDeploymentsRequest{} + return &this +} + +// GetTenantId returns the TenantId field value +func (o *V1ListDataServiceDeploymentsRequest) GetTenantId() string { + if o == nil { + var ret string + return ret + } + + return o.TenantId +} + +// GetTenantIdOk returns a tuple with the TenantId field value +// and a boolean to check if the value has been set. +func (o *V1ListDataServiceDeploymentsRequest) GetTenantIdOk() (*string, bool) { + if o == nil { + return nil, false + } + return &o.TenantId, true +} + +// SetTenantId sets field value +func (o *V1ListDataServiceDeploymentsRequest) SetTenantId(v string) { + o.TenantId = v +} + +// GetLabelSelector returns the LabelSelector field value if set, zero value otherwise. +func (o *V1ListDataServiceDeploymentsRequest) GetLabelSelector() V1Selector { + if o == nil || IsNil(o.LabelSelector) { + var ret V1Selector + return ret + } + return *o.LabelSelector +} + +// GetLabelSelectorOk returns a tuple with the LabelSelector field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1ListDataServiceDeploymentsRequest) GetLabelSelectorOk() (*V1Selector, bool) { + if o == nil || IsNil(o.LabelSelector) { + return nil, false + } + return o.LabelSelector, true +} + +// HasLabelSelector returns a boolean if a field has been set. +func (o *V1ListDataServiceDeploymentsRequest) HasLabelSelector() bool { + if o != nil && !IsNil(o.LabelSelector) { + return true + } + + return false +} + +// SetLabelSelector gets a reference to the given V1Selector and assigns it to the LabelSelector field. +func (o *V1ListDataServiceDeploymentsRequest) SetLabelSelector(v V1Selector) { + o.LabelSelector = &v +} + +// GetFieldSelector returns the FieldSelector field value if set, zero value otherwise. +func (o *V1ListDataServiceDeploymentsRequest) GetFieldSelector() V1Selector { + if o == nil || IsNil(o.FieldSelector) { + var ret V1Selector + return ret + } + return *o.FieldSelector +} + +// GetFieldSelectorOk returns a tuple with the FieldSelector field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1ListDataServiceDeploymentsRequest) GetFieldSelectorOk() (*V1Selector, bool) { + if o == nil || IsNil(o.FieldSelector) { + return nil, false + } + return o.FieldSelector, true +} + +// HasFieldSelector returns a boolean if a field has been set. +func (o *V1ListDataServiceDeploymentsRequest) HasFieldSelector() bool { + if o != nil && !IsNil(o.FieldSelector) { + return true + } + + return false +} + +// SetFieldSelector gets a reference to the given V1Selector and assigns it to the FieldSelector field. +func (o *V1ListDataServiceDeploymentsRequest) SetFieldSelector(v V1Selector) { + o.FieldSelector = &v +} + +// GetInfraResourceSelector returns the InfraResourceSelector field value if set, zero value otherwise. +func (o *V1ListDataServiceDeploymentsRequest) GetInfraResourceSelector() V1ResourceSelector { + if o == nil || IsNil(o.InfraResourceSelector) { + var ret V1ResourceSelector + return ret + } + return *o.InfraResourceSelector +} + +// GetInfraResourceSelectorOk returns a tuple with the InfraResourceSelector field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1ListDataServiceDeploymentsRequest) GetInfraResourceSelectorOk() (*V1ResourceSelector, bool) { + if o == nil || IsNil(o.InfraResourceSelector) { + return nil, false + } + return o.InfraResourceSelector, true +} + +// HasInfraResourceSelector returns a boolean if a field has been set. +func (o *V1ListDataServiceDeploymentsRequest) HasInfraResourceSelector() bool { + if o != nil && !IsNil(o.InfraResourceSelector) { + return true + } + + return false +} + +// SetInfraResourceSelector gets a reference to the given V1ResourceSelector and assigns it to the InfraResourceSelector field. +func (o *V1ListDataServiceDeploymentsRequest) SetInfraResourceSelector(v V1ResourceSelector) { + o.InfraResourceSelector = &v +} + +// GetSort returns the Sort field value if set, zero value otherwise. +func (o *V1ListDataServiceDeploymentsRequest) GetSort() V1Sort { + if o == nil || IsNil(o.Sort) { + var ret V1Sort + return ret + } + return *o.Sort +} + +// GetSortOk returns a tuple with the Sort field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1ListDataServiceDeploymentsRequest) GetSortOk() (*V1Sort, bool) { + if o == nil || IsNil(o.Sort) { + return nil, false + } + return o.Sort, true +} + +// HasSort returns a boolean if a field has been set. +func (o *V1ListDataServiceDeploymentsRequest) HasSort() bool { + if o != nil && !IsNil(o.Sort) { + return true + } + + return false +} + +// SetSort gets a reference to the given V1Sort and assigns it to the Sort field. +func (o *V1ListDataServiceDeploymentsRequest) SetSort(v V1Sort) { + o.Sort = &v +} + +// GetPagination returns the Pagination field value if set, zero value otherwise. +func (o *V1ListDataServiceDeploymentsRequest) GetPagination() V1PageBasedPaginationRequest { + if o == nil || IsNil(o.Pagination) { + var ret V1PageBasedPaginationRequest + return ret + } + return *o.Pagination +} + +// GetPaginationOk returns a tuple with the Pagination field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1ListDataServiceDeploymentsRequest) GetPaginationOk() (*V1PageBasedPaginationRequest, bool) { + if o == nil || IsNil(o.Pagination) { + return nil, false + } + return o.Pagination, true +} + +// HasPagination returns a boolean if a field has been set. +func (o *V1ListDataServiceDeploymentsRequest) HasPagination() bool { + if o != nil && !IsNil(o.Pagination) { + return true + } + + return false +} + +// SetPagination gets a reference to the given V1PageBasedPaginationRequest and assigns it to the Pagination field. +func (o *V1ListDataServiceDeploymentsRequest) SetPagination(v V1PageBasedPaginationRequest) { + o.Pagination = &v +} + +// GetApplicationSelector returns the ApplicationSelector field value if set, zero value otherwise. +func (o *V1ListDataServiceDeploymentsRequest) GetApplicationSelector() V1PDSApplicationSelector { + if o == nil || IsNil(o.ApplicationSelector) { + var ret V1PDSApplicationSelector + return ret + } + return *o.ApplicationSelector +} + +// GetApplicationSelectorOk returns a tuple with the ApplicationSelector field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1ListDataServiceDeploymentsRequest) GetApplicationSelectorOk() (*V1PDSApplicationSelector, bool) { + if o == nil || IsNil(o.ApplicationSelector) { + return nil, false + } + return o.ApplicationSelector, true +} + +// HasApplicationSelector returns a boolean if a field has been set. +func (o *V1ListDataServiceDeploymentsRequest) HasApplicationSelector() bool { + if o != nil && !IsNil(o.ApplicationSelector) { + return true + } + + return false +} + +// SetApplicationSelector gets a reference to the given V1PDSApplicationSelector and assigns it to the ApplicationSelector field. +func (o *V1ListDataServiceDeploymentsRequest) SetApplicationSelector(v V1PDSApplicationSelector) { + o.ApplicationSelector = &v +} + +func (o V1ListDataServiceDeploymentsRequest) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o V1ListDataServiceDeploymentsRequest) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + toSerialize["tenantId"] = o.TenantId + if !IsNil(o.LabelSelector) { + toSerialize["labelSelector"] = o.LabelSelector + } + if !IsNil(o.FieldSelector) { + toSerialize["fieldSelector"] = o.FieldSelector + } + if !IsNil(o.InfraResourceSelector) { + toSerialize["infraResourceSelector"] = o.InfraResourceSelector + } + if !IsNil(o.Sort) { + toSerialize["sort"] = o.Sort + } + if !IsNil(o.Pagination) { + toSerialize["pagination"] = o.Pagination + } + if !IsNil(o.ApplicationSelector) { + toSerialize["applicationSelector"] = o.ApplicationSelector + } + return toSerialize, nil +} + +func (o *V1ListDataServiceDeploymentsRequest) UnmarshalJSON(data []byte) (err error) { + // This validates that all required properties are included in the JSON object + // by unmarshalling the object into a generic map with string keys and checking + // that every required field exists as a key in the generic map. + requiredProperties := []string{ + "tenantId", + } + + allProperties := make(map[string]interface{}) + + err = json.Unmarshal(data, &allProperties) + + if err != nil { + return err; + } + + for _, requiredProperty := range(requiredProperties) { + if _, exists := allProperties[requiredProperty]; !exists { + return fmt.Errorf("no value given for required property %v", requiredProperty) + } + } + + varV1ListDataServiceDeploymentsRequest := _V1ListDataServiceDeploymentsRequest{} + + decoder := json.NewDecoder(bytes.NewReader(data)) + decoder.DisallowUnknownFields() + err = decoder.Decode(&varV1ListDataServiceDeploymentsRequest) + + if err != nil { + return err + } + + *o = V1ListDataServiceDeploymentsRequest(varV1ListDataServiceDeploymentsRequest) + + return err +} + +type NullableV1ListDataServiceDeploymentsRequest struct { + value *V1ListDataServiceDeploymentsRequest + isSet bool +} + +func (v NullableV1ListDataServiceDeploymentsRequest) Get() *V1ListDataServiceDeploymentsRequest { + return v.value +} + +func (v *NullableV1ListDataServiceDeploymentsRequest) Set(val *V1ListDataServiceDeploymentsRequest) { + v.value = val + v.isSet = true +} + +func (v NullableV1ListDataServiceDeploymentsRequest) IsSet() bool { + return v.isSet +} + +func (v *NullableV1ListDataServiceDeploymentsRequest) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableV1ListDataServiceDeploymentsRequest(val *V1ListDataServiceDeploymentsRequest) *NullableV1ListDataServiceDeploymentsRequest { + return &NullableV1ListDataServiceDeploymentsRequest{value: val, isSet: true} +} + +func (v NullableV1ListDataServiceDeploymentsRequest) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableV1ListDataServiceDeploymentsRequest) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_list_data_service_deployments_response.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_list_data_service_deployments_response.go new file mode 100644 index 000000000..4186666f1 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_list_data_service_deployments_response.go @@ -0,0 +1,163 @@ +/* +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeployment + +import ( + "encoding/json" +) + +// checks if the V1ListDataServiceDeploymentsResponse type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &V1ListDataServiceDeploymentsResponse{} + +// V1ListDataServiceDeploymentsResponse Response to list DataService Deployment request. +type V1ListDataServiceDeploymentsResponse struct { + // List of DataService deployment resources. + DataServiceDeployments []V1DataServiceDeployment `json:"dataServiceDeployments,omitempty"` + Pagination *V1PageBasedPaginationResponse `json:"pagination,omitempty"` +} + +// NewV1ListDataServiceDeploymentsResponse instantiates a new V1ListDataServiceDeploymentsResponse object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewV1ListDataServiceDeploymentsResponse() *V1ListDataServiceDeploymentsResponse { + this := V1ListDataServiceDeploymentsResponse{} + return &this +} + +// NewV1ListDataServiceDeploymentsResponseWithDefaults instantiates a new V1ListDataServiceDeploymentsResponse object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewV1ListDataServiceDeploymentsResponseWithDefaults() *V1ListDataServiceDeploymentsResponse { + this := V1ListDataServiceDeploymentsResponse{} + return &this +} + +// GetDataServiceDeployments returns the DataServiceDeployments field value if set, zero value otherwise. +func (o *V1ListDataServiceDeploymentsResponse) GetDataServiceDeployments() []V1DataServiceDeployment { + if o == nil || IsNil(o.DataServiceDeployments) { + var ret []V1DataServiceDeployment + return ret + } + return o.DataServiceDeployments +} + +// GetDataServiceDeploymentsOk returns a tuple with the DataServiceDeployments field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1ListDataServiceDeploymentsResponse) GetDataServiceDeploymentsOk() ([]V1DataServiceDeployment, bool) { + if o == nil || IsNil(o.DataServiceDeployments) { + return nil, false + } + return o.DataServiceDeployments, true +} + +// HasDataServiceDeployments returns a boolean if a field has been set. +func (o *V1ListDataServiceDeploymentsResponse) HasDataServiceDeployments() bool { + if o != nil && !IsNil(o.DataServiceDeployments) { + return true + } + + return false +} + +// SetDataServiceDeployments gets a reference to the given []V1DataServiceDeployment and assigns it to the DataServiceDeployments field. +func (o *V1ListDataServiceDeploymentsResponse) SetDataServiceDeployments(v []V1DataServiceDeployment) { + o.DataServiceDeployments = v +} + +// GetPagination returns the Pagination field value if set, zero value otherwise. +func (o *V1ListDataServiceDeploymentsResponse) GetPagination() V1PageBasedPaginationResponse { + if o == nil || IsNil(o.Pagination) { + var ret V1PageBasedPaginationResponse + return ret + } + return *o.Pagination +} + +// GetPaginationOk returns a tuple with the Pagination field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1ListDataServiceDeploymentsResponse) GetPaginationOk() (*V1PageBasedPaginationResponse, bool) { + if o == nil || IsNil(o.Pagination) { + return nil, false + } + return o.Pagination, true +} + +// HasPagination returns a boolean if a field has been set. +func (o *V1ListDataServiceDeploymentsResponse) HasPagination() bool { + if o != nil && !IsNil(o.Pagination) { + return true + } + + return false +} + +// SetPagination gets a reference to the given V1PageBasedPaginationResponse and assigns it to the Pagination field. +func (o *V1ListDataServiceDeploymentsResponse) SetPagination(v V1PageBasedPaginationResponse) { + o.Pagination = &v +} + +func (o V1ListDataServiceDeploymentsResponse) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o V1ListDataServiceDeploymentsResponse) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.DataServiceDeployments) { + toSerialize["dataServiceDeployments"] = o.DataServiceDeployments + } + if !IsNil(o.Pagination) { + toSerialize["pagination"] = o.Pagination + } + return toSerialize, nil +} + +type NullableV1ListDataServiceDeploymentsResponse struct { + value *V1ListDataServiceDeploymentsResponse + isSet bool +} + +func (v NullableV1ListDataServiceDeploymentsResponse) Get() *V1ListDataServiceDeploymentsResponse { + return v.value +} + +func (v *NullableV1ListDataServiceDeploymentsResponse) Set(val *V1ListDataServiceDeploymentsResponse) { + v.value = val + v.isSet = true +} + +func (v NullableV1ListDataServiceDeploymentsResponse) IsSet() bool { + return v.isSet +} + +func (v *NullableV1ListDataServiceDeploymentsResponse) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableV1ListDataServiceDeploymentsResponse(val *V1ListDataServiceDeploymentsResponse) *NullableV1ListDataServiceDeploymentsResponse { + return &NullableV1ListDataServiceDeploymentsResponse{value: val, isSet: true} +} + +func (v NullableV1ListDataServiceDeploymentsResponse) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableV1ListDataServiceDeploymentsResponse) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_meta.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_meta.go similarity index 99% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_meta.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_meta.go index d3ae61483..04a6189e5 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_meta.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_meta.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_page_based_pagination_request.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_page_based_pagination_request.go similarity index 97% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_page_based_pagination_request.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_page_based_pagination_request.go index 06f7f259e..829ec1a08 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_page_based_pagination_request.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_page_based_pagination_request.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_page_based_pagination_response.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_page_based_pagination_response.go similarity index 98% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_page_based_pagination_response.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_page_based_pagination_response.go index d3540d1f7..9bc40fa34 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_page_based_pagination_response.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_page_based_pagination_response.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_pds_application_resource_type.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_pds_application_resource_type.go new file mode 100644 index 000000000..4072575cd --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_pds_application_resource_type.go @@ -0,0 +1,111 @@ +/* +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeployment + +import ( + "encoding/json" + "fmt" +) + +// V1PDSApplicationResourceType Type of the resource can be associated to the project. - TYPE_UNSPECIFIED: Unspecified, do not use. - DATA_SERVICE: List of supported PDS application resources. data service resource. +type V1PDSApplicationResourceType string + +// List of v1PDSApplicationResourceType +const ( + V1PDSAPPLICATIONRESOURCETYPE_TYPE_UNSPECIFIED V1PDSApplicationResourceType = "TYPE_UNSPECIFIED" + V1PDSAPPLICATIONRESOURCETYPE_DATA_SERVICE V1PDSApplicationResourceType = "DATA_SERVICE" +) + +// All allowed values of V1PDSApplicationResourceType enum +var AllowedV1PDSApplicationResourceTypeEnumValues = []V1PDSApplicationResourceType{ + "TYPE_UNSPECIFIED", + "DATA_SERVICE", +} + +func (v *V1PDSApplicationResourceType) UnmarshalJSON(src []byte) error { + var value string + err := json.Unmarshal(src, &value) + if err != nil { + return err + } + enumTypeValue := V1PDSApplicationResourceType(value) + for _, existing := range AllowedV1PDSApplicationResourceTypeEnumValues { + if existing == enumTypeValue { + *v = enumTypeValue + return nil + } + } + + return fmt.Errorf("%+v is not a valid V1PDSApplicationResourceType", value) +} + +// NewV1PDSApplicationResourceTypeFromValue returns a pointer to a valid V1PDSApplicationResourceType +// for the value passed as argument, or an error if the value passed is not allowed by the enum +func NewV1PDSApplicationResourceTypeFromValue(v string) (*V1PDSApplicationResourceType, error) { + ev := V1PDSApplicationResourceType(v) + if ev.IsValid() { + return &ev, nil + } else { + return nil, fmt.Errorf("invalid value '%v' for V1PDSApplicationResourceType: valid values are %v", v, AllowedV1PDSApplicationResourceTypeEnumValues) + } +} + +// IsValid return true if the value is valid for the enum, false otherwise +func (v V1PDSApplicationResourceType) IsValid() bool { + for _, existing := range AllowedV1PDSApplicationResourceTypeEnumValues { + if existing == v { + return true + } + } + return false +} + +// Ptr returns reference to v1PDSApplicationResourceType value +func (v V1PDSApplicationResourceType) Ptr() *V1PDSApplicationResourceType { + return &v +} + +type NullableV1PDSApplicationResourceType struct { + value *V1PDSApplicationResourceType + isSet bool +} + +func (v NullableV1PDSApplicationResourceType) Get() *V1PDSApplicationResourceType { + return v.value +} + +func (v *NullableV1PDSApplicationResourceType) Set(val *V1PDSApplicationResourceType) { + v.value = val + v.isSet = true +} + +func (v NullableV1PDSApplicationResourceType) IsSet() bool { + return v.isSet +} + +func (v *NullableV1PDSApplicationResourceType) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableV1PDSApplicationResourceType(val *V1PDSApplicationResourceType) *NullableV1PDSApplicationResourceType { + return &NullableV1PDSApplicationResourceType{value: val, isSet: true} +} + +func (v NullableV1PDSApplicationResourceType) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableV1PDSApplicationResourceType) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_pds_application_selector.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_pds_application_selector.go new file mode 100644 index 000000000..aa75e2b3d --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_pds_application_selector.go @@ -0,0 +1,127 @@ +/* +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeployment + +import ( + "encoding/json" +) + +// checks if the V1PDSApplicationSelector type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &V1PDSApplicationSelector{} + +// V1PDSApplicationSelector PDSApplicationSelector is used to query deployments using the associated application reesources. +type V1PDSApplicationSelector struct { + // Application_filters is the list of all filters that should be applied to fetch data related to deployment. Each filter will have AND relationship. + ApplicationFilters []PDSApplicationSelectorPDSApplicationFilter `json:"applicationFilters,omitempty"` +} + +// NewV1PDSApplicationSelector instantiates a new V1PDSApplicationSelector object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewV1PDSApplicationSelector() *V1PDSApplicationSelector { + this := V1PDSApplicationSelector{} + return &this +} + +// NewV1PDSApplicationSelectorWithDefaults instantiates a new V1PDSApplicationSelector object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewV1PDSApplicationSelectorWithDefaults() *V1PDSApplicationSelector { + this := V1PDSApplicationSelector{} + return &this +} + +// GetApplicationFilters returns the ApplicationFilters field value if set, zero value otherwise. +func (o *V1PDSApplicationSelector) GetApplicationFilters() []PDSApplicationSelectorPDSApplicationFilter { + if o == nil || IsNil(o.ApplicationFilters) { + var ret []PDSApplicationSelectorPDSApplicationFilter + return ret + } + return o.ApplicationFilters +} + +// GetApplicationFiltersOk returns a tuple with the ApplicationFilters field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1PDSApplicationSelector) GetApplicationFiltersOk() ([]PDSApplicationSelectorPDSApplicationFilter, bool) { + if o == nil || IsNil(o.ApplicationFilters) { + return nil, false + } + return o.ApplicationFilters, true +} + +// HasApplicationFilters returns a boolean if a field has been set. +func (o *V1PDSApplicationSelector) HasApplicationFilters() bool { + if o != nil && !IsNil(o.ApplicationFilters) { + return true + } + + return false +} + +// SetApplicationFilters gets a reference to the given []PDSApplicationSelectorPDSApplicationFilter and assigns it to the ApplicationFilters field. +func (o *V1PDSApplicationSelector) SetApplicationFilters(v []PDSApplicationSelectorPDSApplicationFilter) { + o.ApplicationFilters = v +} + +func (o V1PDSApplicationSelector) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o V1PDSApplicationSelector) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.ApplicationFilters) { + toSerialize["applicationFilters"] = o.ApplicationFilters + } + return toSerialize, nil +} + +type NullableV1PDSApplicationSelector struct { + value *V1PDSApplicationSelector + isSet bool +} + +func (v NullableV1PDSApplicationSelector) Get() *V1PDSApplicationSelector { + return v.value +} + +func (v *NullableV1PDSApplicationSelector) Set(val *V1PDSApplicationSelector) { + v.value = val + v.isSet = true +} + +func (v NullableV1PDSApplicationSelector) IsSet() bool { + return v.isSet +} + +func (v *NullableV1PDSApplicationSelector) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableV1PDSApplicationSelector(val *V1PDSApplicationSelector) *NullableV1PDSApplicationSelector { + return &NullableV1PDSApplicationSelector{value: val, isSet: true} +} + +func (v NullableV1PDSApplicationSelector) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableV1PDSApplicationSelector) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_reference.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_reference.go similarity index 97% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_reference.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_reference.go index 511187335..c7d3c157a 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_reference.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_reference.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_references.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_references.go similarity index 97% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_references.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_references.go index 4ba0cdc36..af7ef5302 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_references.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_references.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deploymentconfigupdate +package dataservicedeployment import ( "encoding/json" @@ -25,7 +25,7 @@ type V1References struct { ImageId *string `json:"imageId,omitempty"` // UID of the project to which DataService Deployment associated. ProjectId *string `json:"projectId,omitempty"` - // UID of the restore id for the Deployment. + // UID of the restore id for the data service Deployment. RestoreId *string `json:"restoreId,omitempty"` DataServiceId *string `json:"dataServiceId,omitempty"` } diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_resource_selector.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_resource_selector.go new file mode 100644 index 000000000..56e9beba8 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_resource_selector.go @@ -0,0 +1,127 @@ +/* +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeployment + +import ( + "encoding/json" +) + +// checks if the V1ResourceSelector type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &V1ResourceSelector{} + +// V1ResourceSelector ResourceSelector is used to query resources using the associated infra resources. +type V1ResourceSelector struct { + // Infra_resource_filters is the list of all filters that should be applied to fetch data related to infra resource. Each filter will have AND relationship. + InfraResourceFilters []ResourceSelectorResourceFilter `json:"infraResourceFilters,omitempty"` +} + +// NewV1ResourceSelector instantiates a new V1ResourceSelector object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewV1ResourceSelector() *V1ResourceSelector { + this := V1ResourceSelector{} + return &this +} + +// NewV1ResourceSelectorWithDefaults instantiates a new V1ResourceSelector object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewV1ResourceSelectorWithDefaults() *V1ResourceSelector { + this := V1ResourceSelector{} + return &this +} + +// GetInfraResourceFilters returns the InfraResourceFilters field value if set, zero value otherwise. +func (o *V1ResourceSelector) GetInfraResourceFilters() []ResourceSelectorResourceFilter { + if o == nil || IsNil(o.InfraResourceFilters) { + var ret []ResourceSelectorResourceFilter + return ret + } + return o.InfraResourceFilters +} + +// GetInfraResourceFiltersOk returns a tuple with the InfraResourceFilters field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1ResourceSelector) GetInfraResourceFiltersOk() ([]ResourceSelectorResourceFilter, bool) { + if o == nil || IsNil(o.InfraResourceFilters) { + return nil, false + } + return o.InfraResourceFilters, true +} + +// HasInfraResourceFilters returns a boolean if a field has been set. +func (o *V1ResourceSelector) HasInfraResourceFilters() bool { + if o != nil && !IsNil(o.InfraResourceFilters) { + return true + } + + return false +} + +// SetInfraResourceFilters gets a reference to the given []ResourceSelectorResourceFilter and assigns it to the InfraResourceFilters field. +func (o *V1ResourceSelector) SetInfraResourceFilters(v []ResourceSelectorResourceFilter) { + o.InfraResourceFilters = v +} + +func (o V1ResourceSelector) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o V1ResourceSelector) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.InfraResourceFilters) { + toSerialize["infraResourceFilters"] = o.InfraResourceFilters + } + return toSerialize, nil +} + +type NullableV1ResourceSelector struct { + value *V1ResourceSelector + isSet bool +} + +func (v NullableV1ResourceSelector) Get() *V1ResourceSelector { + return v.value +} + +func (v *NullableV1ResourceSelector) Set(val *V1ResourceSelector) { + v.value = val + v.isSet = true +} + +func (v NullableV1ResourceSelector) IsSet() bool { + return v.isSet +} + +func (v *NullableV1ResourceSelector) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableV1ResourceSelector(val *V1ResourceSelector) *NullableV1ResourceSelector { + return &NullableV1ResourceSelector{value: val, isSet: true} +} + +func (v NullableV1ResourceSelector) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableV1ResourceSelector) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_selector.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_selector.go new file mode 100644 index 000000000..d4a95aaf9 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_selector.go @@ -0,0 +1,127 @@ +/* +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeployment + +import ( + "encoding/json" +) + +// checks if the V1Selector type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &V1Selector{} + +// V1Selector Selector is used to query resources using the associated labels or field names. +type V1Selector struct { + // FilterList is the list of all filters that should be applied. + Filters []SelectorFilter `json:"filters,omitempty"` +} + +// NewV1Selector instantiates a new V1Selector object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewV1Selector() *V1Selector { + this := V1Selector{} + return &this +} + +// NewV1SelectorWithDefaults instantiates a new V1Selector object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewV1SelectorWithDefaults() *V1Selector { + this := V1Selector{} + return &this +} + +// GetFilters returns the Filters field value if set, zero value otherwise. +func (o *V1Selector) GetFilters() []SelectorFilter { + if o == nil || IsNil(o.Filters) { + var ret []SelectorFilter + return ret + } + return o.Filters +} + +// GetFiltersOk returns a tuple with the Filters field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1Selector) GetFiltersOk() ([]SelectorFilter, bool) { + if o == nil || IsNil(o.Filters) { + return nil, false + } + return o.Filters, true +} + +// HasFilters returns a boolean if a field has been set. +func (o *V1Selector) HasFilters() bool { + if o != nil && !IsNil(o.Filters) { + return true + } + + return false +} + +// SetFilters gets a reference to the given []SelectorFilter and assigns it to the Filters field. +func (o *V1Selector) SetFilters(v []SelectorFilter) { + o.Filters = v +} + +func (o V1Selector) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o V1Selector) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.Filters) { + toSerialize["filters"] = o.Filters + } + return toSerialize, nil +} + +type NullableV1Selector struct { + value *V1Selector + isSet bool +} + +func (v NullableV1Selector) Get() *V1Selector { + return v.value +} + +func (v *NullableV1Selector) Set(val *V1Selector) { + v.value = val + v.isSet = true +} + +func (v NullableV1Selector) IsSet() bool { + return v.isSet +} + +func (v *NullableV1Selector) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableV1Selector(val *V1Selector) *NullableV1Selector { + return &NullableV1Selector{value: val, isSet: true} +} + +func (v NullableV1Selector) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableV1Selector) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_sort.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_sort.go similarity index 97% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_sort.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_sort.go index 4c66e8cf5..28548baff 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_sort.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_sort.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_sort_order_value.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_sort_order_value.go similarity index 96% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_sort_order_value.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_sort_order_value.go index e7d4ab80d..2416c0e37 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_sort_order_value.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_sort_order_value.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_status_health.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_status_health.go similarity index 85% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_status_health.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_status_health.go index ad16a47a8..b5f20d0b8 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_status_health.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_status_health.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,14 +8,14 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "encoding/json" "fmt" ) -// V1StatusHealth Enum for Health of the Deployment. - HEALTH_UNSPECIFIED: Health is unspecified. - AVAILABLE: Deployment is Available. - PARTIALLY_AVAILABLE: Deployment is PartiallyAvailable. - UNAVAILABLE: Deployment is Unavailable. - NOT_APPLICABLE: Deployment is deleted from cluster. +// V1StatusHealth Enum for Health of the DataService Deployment. - HEALTH_UNSPECIFIED: Health is unspecified. - AVAILABLE: DataService Deployment is Available. - PARTIALLY_AVAILABLE: DataService Deployment is PartiallyAvailable. - UNAVAILABLE: DataService Deployment is Unavailable. - NOT_APPLICABLE: DataService Deployment is deleted from cluster. type V1StatusHealth string // List of v1StatusHealth diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_status_phase.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_status_phase.go similarity index 81% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_status_phase.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_status_phase.go index 6375666bb..049c107cd 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_status_phase.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_status_phase.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,14 +8,14 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "encoding/json" "fmt" ) -// V1StatusPhase Enum for Status of the Deployment. - PHASE_UNSPECIFIED: Phase is unspecified. - RESTORING: Restore of Deployment is in progress. - FAILED: Deployment is Failed. - DELETING: Deployment is being deleted. - PREPARING: Deployment is Preparing. - DEPLOYING: Deployment is Deploying. - DEPLOYED: Deployment is Deployed. - UPDATING: Deployment is Updating. - TIMED_OUT: Deployment is Timeout. - DELETED_FROM_CLUSTER: Deployment is deleted from cluster. +// V1StatusPhase Enum for Status of the DataService Deployment. - PHASE_UNSPECIFIED: Phase is unspecified. - RESTORING: Restore of DataService Deployment is in progress. - FAILED: DataService Deployment is Failed. - DELETING: DataService Deployment is being deleted. - PREPARING: DataService Deployment is Preparing. - DEPLOYING: DataService Deployment is Deploying. - DEPLOYED: DataService Deployment is Deployed. - UPDATING: DataService Deployment is Updating. - TIMED_OUT: DataService Deployment is Timeout. - DELETED_FROM_CLUSTER: DataService Deployment is deleted from cluster. type V1StatusPhase string // List of v1StatusPhase diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_template.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_template.go similarity index 97% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_template.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_template.go index 19e9926b7..d52fef199 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_template.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_template.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_tls_config.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_tls_config.go similarity index 97% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_tls_config.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_tls_config.go index c4fc7b752..3eba7a1ef 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_tls_config.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/model_v1_tls_config.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/response.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/response.go similarity index 93% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/response.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/response.go index f1042b099..8811d2575 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/response.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/response.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "net/http" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/utils.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/utils.go similarity index 98% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/utils.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/utils.go index 14b505ca6..8d0a143ea 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/utils.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment/utils.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeployment/apiv1/dataservicedeployment.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeployment import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/.travis.yml b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/.travis.yml similarity index 100% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/.travis.yml rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/.travis.yml diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/README.md b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/README.md new file mode 100644 index 000000000..ebf37a798 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/README.md @@ -0,0 +1,137 @@ +# Go API client for dataservicedeploymentconfigupdate + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +## Overview +This API client was generated by the [OpenAPI Generator](https://openapi-generator.tech) project. By using the [OpenAPI-spec](https://www.openapis.org/) from a remote server, you can easily generate an API client. + +- API version: version not set +- Package version: 1.0.0 +- Generator version: 7.7.0-SNAPSHOT +- Build package: org.openapitools.codegen.languages.GoClientCodegen + +## Installation + +Install the following dependencies: + +```sh +go get github.com/stretchr/testify/assert +go get golang.org/x/net/context +``` + +Put the package under your project folder and add the following in import: + +```go +import dataservicedeploymentconfigupdate "github.com/GIT_USER_ID/GIT_REPO_ID" +``` + +To use a proxy, set the environment variable `HTTP_PROXY`: + +```go +os.Setenv("HTTP_PROXY", "http://proxy_name:proxy_port") +``` + +## Configuration of Server URL + +Default configuration comes with `Servers` field that contains server objects as defined in the OpenAPI specification. + +### Select Server Configuration + +For using other server than the one defined on index 0 set context value `dataservicedeploymentconfigupdate.ContextServerIndex` of type `int`. + +```go +ctx := context.WithValue(context.Background(), dataservicedeploymentconfigupdate.ContextServerIndex, 1) +``` + +### Templated Server URL + +Templated server URL is formatted using default variables from configuration or from context value `dataservicedeploymentconfigupdate.ContextServerVariables` of type `map[string]string`. + +```go +ctx := context.WithValue(context.Background(), dataservicedeploymentconfigupdate.ContextServerVariables, map[string]string{ + "basePath": "v2", +}) +``` + +Note, enum values are always validated and all unused variables are silently ignored. + +### URLs Configuration per Operation + +Each operation can use different server URL defined using `OperationServers` map in the `Configuration`. +An operation is uniquely identified by `"{classname}Service.{nickname}"` string. +Similar rules for overriding default operation server index and variables applies by using `dataservicedeploymentconfigupdate.ContextOperationServerIndices` and `dataservicedeploymentconfigupdate.ContextOperationServerVariables` context maps. + +```go +ctx := context.WithValue(context.Background(), dataservicedeploymentconfigupdate.ContextOperationServerIndices, map[string]int{ + "{classname}Service.{nickname}": 2, +}) +ctx = context.WithValue(context.Background(), dataservicedeploymentconfigupdate.ContextOperationServerVariables, map[string]map[string]string{ + "{classname}Service.{nickname}": { + "port": "8443", + }, +}) +``` + +## Documentation for API Endpoints + +All URIs are relative to *http://localhost* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +*DataServiceDeploymentConfigUpdateServiceAPI* | [**DataServiceDeploymentConfigUpdateServiceCreateDataServiceDeploymentConfigUpdate**](docs/DataServiceDeploymentConfigUpdateServiceAPI.md#dataservicedeploymentconfigupdateservicecreatedataservicedeploymentconfigupdate) | **Put** /pds/v1/dataServiceDeployments/{dataServiceDeploymentConfigUpdate.config.dataServiceDeploymentMeta.uid}/dataServiceDeploymentConfigUpdates | CreateDataServiceDeploymentConfigUpdate API creates config update for deployment. +*DataServiceDeploymentConfigUpdateServiceAPI* | [**DataServiceDeploymentConfigUpdateServiceGetDataServiceDeploymentConfigUpdate**](docs/DataServiceDeploymentConfigUpdateServiceAPI.md#dataservicedeploymentconfigupdateservicegetdataservicedeploymentconfigupdate) | **Get** /pds/v1/dataServiceDeploymentConfigUpdates/{id} | GetDataServiceDeploymentConfigUpdate API returns a DataService deployment config update by id. +*DataServiceDeploymentConfigUpdateServiceAPI* | [**DataServiceDeploymentConfigUpdateServiceListDataServiceDeploymentConfigUpdates**](docs/DataServiceDeploymentConfigUpdateServiceAPI.md#dataservicedeploymentconfigupdateservicelistdataservicedeploymentconfigupdates) | **Get** /pds/v1/dataServiceDeploymentConfigUpdates | ListDataServiceDeploymentConfigUpdates API returns a list of data service deployment config updates. +*DataServiceDeploymentConfigUpdateServiceAPI* | [**DataServiceDeploymentConfigUpdateServiceRetryDataServiceDeploymentConfigUpdate**](docs/DataServiceDeploymentConfigUpdateServiceAPI.md#dataservicedeploymentconfigupdateserviceretrydataservicedeploymentconfigupdate) | **Post** /pds/v1/dataServiceDeploymentConfigUpdates/{id}:retry | RetryDataServiceDeploymentConfigUpdate API retries a data service deployment config update. + + +## Documentation For Models + + - [ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested](docs/ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested.md) + - [DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest](docs/DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest.md) + - [GooglerpcStatus](docs/GooglerpcStatus.md) + - [MetadataOfTheDataServiceDeploymentResource](docs/MetadataOfTheDataServiceDeploymentResource.md) + - [Pdsdataservicedeploymentconfigupdatev1Config](docs/Pdsdataservicedeploymentconfigupdatev1Config.md) + - [Pdsdataservicedeploymentconfigupdatev1Status](docs/Pdsdataservicedeploymentconfigupdatev1Status.md) + - [Pdsdataservicedeploymentconfigupdatev1StatusPhase](docs/Pdsdataservicedeploymentconfigupdatev1StatusPhase.md) + - [Pdsdataservicedeploymentv1Config](docs/Pdsdataservicedeploymentv1Config.md) + - [ProtobufAny](docs/ProtobufAny.md) + - [SortByField](docs/SortByField.md) + - [V1DataServiceDeploymentConfigUpdate](docs/V1DataServiceDeploymentConfigUpdate.md) + - [V1DataServiceDeploymentTopology](docs/V1DataServiceDeploymentTopology.md) + - [V1ListDataServiceDeploymentConfigUpdatesResponse](docs/V1ListDataServiceDeploymentConfigUpdatesResponse.md) + - [V1Meta](docs/V1Meta.md) + - [V1PageBasedPaginationRequest](docs/V1PageBasedPaginationRequest.md) + - [V1PageBasedPaginationResponse](docs/V1PageBasedPaginationResponse.md) + - [V1Reference](docs/V1Reference.md) + - [V1References](docs/V1References.md) + - [V1Sort](docs/V1Sort.md) + - [V1SortOrderValue](docs/V1SortOrderValue.md) + - [V1TLSConfig](docs/V1TLSConfig.md) + - [V1Template](docs/V1Template.md) + + +## Documentation For Authorization + +Endpoints do not require authorization. + + +## Documentation for Utility Methods + +Due to the fact that model structure members are all pointers, this package contains +a number of utility functions to easily obtain pointers to values of basic types. +Each of these functions takes a value of the given basic type and returns a pointer to it: + +* `PtrBool` +* `PtrInt` +* `PtrInt32` +* `PtrInt64` +* `PtrFloat` +* `PtrFloat32` +* `PtrFloat64` +* `PtrString` +* `PtrTime` + +## Author + + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/api_deployment_config_update_service.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/api_data_service_deployment_config_update_service.go similarity index 55% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/api_deployment_config_update_service.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/api_data_service_deployment_config_update_service.go index 05f0070ba..4f2eae9f4 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/api_deployment_config_update_service.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/api_data_service_deployment_config_update_service.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deploymentconfigupdate +package dataservicedeploymentconfigupdate import ( "bytes" @@ -20,64 +20,64 @@ import ( ) -// DeploymentConfigUpdateServiceAPIService DeploymentConfigUpdateServiceAPI service -type DeploymentConfigUpdateServiceAPIService service +// DataServiceDeploymentConfigUpdateServiceAPIService DataServiceDeploymentConfigUpdateServiceAPI service +type DataServiceDeploymentConfigUpdateServiceAPIService service -type ApiDeploymentConfigUpdateServiceCreateDeploymentConfigUpdateRequest struct { +type ApiDataServiceDeploymentConfigUpdateServiceCreateDataServiceDeploymentConfigUpdateRequest struct { ctx context.Context - ApiService *DeploymentConfigUpdateServiceAPIService - deploymentConfigUpdateConfigDeploymentMetaUid string - deploymentConfigUpdateOfTheDeploymentUpdateRequest *DeploymentConfigUpdateOfTheDeploymentUpdateRequest + ApiService *DataServiceDeploymentConfigUpdateServiceAPIService + dataServiceDeploymentConfigUpdateConfigDataServiceDeploymentMetaUid string + dataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest *DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest } -// DeploymentConfigUpdate of the deployment update request. -func (r ApiDeploymentConfigUpdateServiceCreateDeploymentConfigUpdateRequest) DeploymentConfigUpdateOfTheDeploymentUpdateRequest(deploymentConfigUpdateOfTheDeploymentUpdateRequest DeploymentConfigUpdateOfTheDeploymentUpdateRequest) ApiDeploymentConfigUpdateServiceCreateDeploymentConfigUpdateRequest { - r.deploymentConfigUpdateOfTheDeploymentUpdateRequest = &deploymentConfigUpdateOfTheDeploymentUpdateRequest +// DataServiceDeploymentConfigUpdate of the DataService config deployment update request. +func (r ApiDataServiceDeploymentConfigUpdateServiceCreateDataServiceDeploymentConfigUpdateRequest) DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest(dataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) ApiDataServiceDeploymentConfigUpdateServiceCreateDataServiceDeploymentConfigUpdateRequest { + r.dataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest = &dataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest return r } -func (r ApiDeploymentConfigUpdateServiceCreateDeploymentConfigUpdateRequest) Execute() (*V1DeploymentConfigUpdate, *http.Response, error) { - return r.ApiService.DeploymentConfigUpdateServiceCreateDeploymentConfigUpdateExecute(r) +func (r ApiDataServiceDeploymentConfigUpdateServiceCreateDataServiceDeploymentConfigUpdateRequest) Execute() (*V1DataServiceDeploymentConfigUpdate, *http.Response, error) { + return r.ApiService.DataServiceDeploymentConfigUpdateServiceCreateDataServiceDeploymentConfigUpdateExecute(r) } /* -DeploymentConfigUpdateServiceCreateDeploymentConfigUpdate CreateDeploymentConfigUpdate API creates a deployment config update. +DataServiceDeploymentConfigUpdateServiceCreateDataServiceDeploymentConfigUpdate CreateDataServiceDeploymentConfigUpdate API creates config update for deployment. @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param deploymentConfigUpdateConfigDeploymentMetaUid UID of the resource of the format -. - @return ApiDeploymentConfigUpdateServiceCreateDeploymentConfigUpdateRequest + @param dataServiceDeploymentConfigUpdateConfigDataServiceDeploymentMetaUid UID of the resource of the format -. + @return ApiDataServiceDeploymentConfigUpdateServiceCreateDataServiceDeploymentConfigUpdateRequest */ -func (a *DeploymentConfigUpdateServiceAPIService) DeploymentConfigUpdateServiceCreateDeploymentConfigUpdate(ctx context.Context, deploymentConfigUpdateConfigDeploymentMetaUid string) ApiDeploymentConfigUpdateServiceCreateDeploymentConfigUpdateRequest { - return ApiDeploymentConfigUpdateServiceCreateDeploymentConfigUpdateRequest{ +func (a *DataServiceDeploymentConfigUpdateServiceAPIService) DataServiceDeploymentConfigUpdateServiceCreateDataServiceDeploymentConfigUpdate(ctx context.Context, dataServiceDeploymentConfigUpdateConfigDataServiceDeploymentMetaUid string) ApiDataServiceDeploymentConfigUpdateServiceCreateDataServiceDeploymentConfigUpdateRequest { + return ApiDataServiceDeploymentConfigUpdateServiceCreateDataServiceDeploymentConfigUpdateRequest{ ApiService: a, ctx: ctx, - deploymentConfigUpdateConfigDeploymentMetaUid: deploymentConfigUpdateConfigDeploymentMetaUid, + dataServiceDeploymentConfigUpdateConfigDataServiceDeploymentMetaUid: dataServiceDeploymentConfigUpdateConfigDataServiceDeploymentMetaUid, } } // Execute executes the request -// @return V1DeploymentConfigUpdate -func (a *DeploymentConfigUpdateServiceAPIService) DeploymentConfigUpdateServiceCreateDeploymentConfigUpdateExecute(r ApiDeploymentConfigUpdateServiceCreateDeploymentConfigUpdateRequest) (*V1DeploymentConfigUpdate, *http.Response, error) { +// @return V1DataServiceDeploymentConfigUpdate +func (a *DataServiceDeploymentConfigUpdateServiceAPIService) DataServiceDeploymentConfigUpdateServiceCreateDataServiceDeploymentConfigUpdateExecute(r ApiDataServiceDeploymentConfigUpdateServiceCreateDataServiceDeploymentConfigUpdateRequest) (*V1DataServiceDeploymentConfigUpdate, *http.Response, error) { var ( localVarHTTPMethod = http.MethodPut localVarPostBody interface{} formFiles []formFile - localVarReturnValue *V1DeploymentConfigUpdate + localVarReturnValue *V1DataServiceDeploymentConfigUpdate ) - localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DeploymentConfigUpdateServiceAPIService.DeploymentConfigUpdateServiceCreateDeploymentConfigUpdate") + localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DataServiceDeploymentConfigUpdateServiceAPIService.DataServiceDeploymentConfigUpdateServiceCreateDataServiceDeploymentConfigUpdate") if err != nil { return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()} } - localVarPath := localBasePath + "/pds/v1/deployments/{deploymentConfigUpdate.config.deploymentMeta.uid}/deploymentConfigUpdates" - localVarPath = strings.Replace(localVarPath, "{"+"deploymentConfigUpdate.config.deploymentMeta.uid"+"}", url.PathEscape(parameterValueToString(r.deploymentConfigUpdateConfigDeploymentMetaUid, "deploymentConfigUpdateConfigDeploymentMetaUid")), -1) + localVarPath := localBasePath + "/pds/v1/dataServiceDeployments/{dataServiceDeploymentConfigUpdate.config.dataServiceDeploymentMeta.uid}/dataServiceDeploymentConfigUpdates" + localVarPath = strings.Replace(localVarPath, "{"+"dataServiceDeploymentConfigUpdate.config.dataServiceDeploymentMeta.uid"+"}", url.PathEscape(parameterValueToString(r.dataServiceDeploymentConfigUpdateConfigDataServiceDeploymentMetaUid, "dataServiceDeploymentConfigUpdateConfigDataServiceDeploymentMetaUid")), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if r.deploymentConfigUpdateOfTheDeploymentUpdateRequest == nil { - return localVarReturnValue, nil, reportError("deploymentConfigUpdateOfTheDeploymentUpdateRequest is required and must be specified") + if r.dataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest == nil { + return localVarReturnValue, nil, reportError("dataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest is required and must be specified") } // to determine the Content-Type header @@ -98,7 +98,7 @@ func (a *DeploymentConfigUpdateServiceAPIService) DeploymentConfigUpdateServiceC localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept } // body params - localVarPostBody = r.deploymentConfigUpdateOfTheDeploymentUpdateRequest + localVarPostBody = r.dataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles) if err != nil { return localVarReturnValue, nil, err @@ -144,25 +144,25 @@ func (a *DeploymentConfigUpdateServiceAPIService) DeploymentConfigUpdateServiceC return localVarReturnValue, localVarHTTPResponse, nil } -type ApiDeploymentConfigUpdateServiceGetDeploymentConfigUpdateRequest struct { +type ApiDataServiceDeploymentConfigUpdateServiceGetDataServiceDeploymentConfigUpdateRequest struct { ctx context.Context - ApiService *DeploymentConfigUpdateServiceAPIService + ApiService *DataServiceDeploymentConfigUpdateServiceAPIService id string } -func (r ApiDeploymentConfigUpdateServiceGetDeploymentConfigUpdateRequest) Execute() (*V1DeploymentConfigUpdate, *http.Response, error) { - return r.ApiService.DeploymentConfigUpdateServiceGetDeploymentConfigUpdateExecute(r) +func (r ApiDataServiceDeploymentConfigUpdateServiceGetDataServiceDeploymentConfigUpdateRequest) Execute() (*V1DataServiceDeploymentConfigUpdate, *http.Response, error) { + return r.ApiService.DataServiceDeploymentConfigUpdateServiceGetDataServiceDeploymentConfigUpdateExecute(r) } /* -DeploymentConfigUpdateServiceGetDeploymentConfigUpdate GetDeploymentConfigUpdate API returns a deployment config update by id. +DataServiceDeploymentConfigUpdateServiceGetDataServiceDeploymentConfigUpdate GetDataServiceDeploymentConfigUpdate API returns a DataService deployment config update by id. @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param id UID of the deployment config update. - @return ApiDeploymentConfigUpdateServiceGetDeploymentConfigUpdateRequest + @param id UID of the DataService deployment config update. + @return ApiDataServiceDeploymentConfigUpdateServiceGetDataServiceDeploymentConfigUpdateRequest */ -func (a *DeploymentConfigUpdateServiceAPIService) DeploymentConfigUpdateServiceGetDeploymentConfigUpdate(ctx context.Context, id string) ApiDeploymentConfigUpdateServiceGetDeploymentConfigUpdateRequest { - return ApiDeploymentConfigUpdateServiceGetDeploymentConfigUpdateRequest{ +func (a *DataServiceDeploymentConfigUpdateServiceAPIService) DataServiceDeploymentConfigUpdateServiceGetDataServiceDeploymentConfigUpdate(ctx context.Context, id string) ApiDataServiceDeploymentConfigUpdateServiceGetDataServiceDeploymentConfigUpdateRequest { + return ApiDataServiceDeploymentConfigUpdateServiceGetDataServiceDeploymentConfigUpdateRequest{ ApiService: a, ctx: ctx, id: id, @@ -170,21 +170,21 @@ func (a *DeploymentConfigUpdateServiceAPIService) DeploymentConfigUpdateServiceG } // Execute executes the request -// @return V1DeploymentConfigUpdate -func (a *DeploymentConfigUpdateServiceAPIService) DeploymentConfigUpdateServiceGetDeploymentConfigUpdateExecute(r ApiDeploymentConfigUpdateServiceGetDeploymentConfigUpdateRequest) (*V1DeploymentConfigUpdate, *http.Response, error) { +// @return V1DataServiceDeploymentConfigUpdate +func (a *DataServiceDeploymentConfigUpdateServiceAPIService) DataServiceDeploymentConfigUpdateServiceGetDataServiceDeploymentConfigUpdateExecute(r ApiDataServiceDeploymentConfigUpdateServiceGetDataServiceDeploymentConfigUpdateRequest) (*V1DataServiceDeploymentConfigUpdate, *http.Response, error) { var ( localVarHTTPMethod = http.MethodGet localVarPostBody interface{} formFiles []formFile - localVarReturnValue *V1DeploymentConfigUpdate + localVarReturnValue *V1DataServiceDeploymentConfigUpdate ) - localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DeploymentConfigUpdateServiceAPIService.DeploymentConfigUpdateServiceGetDeploymentConfigUpdate") + localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DataServiceDeploymentConfigUpdateServiceAPIService.DataServiceDeploymentConfigUpdateServiceGetDataServiceDeploymentConfigUpdate") if err != nil { return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()} } - localVarPath := localBasePath + "/pds/v1/deploymentConfigUpdates/{id}" + localVarPath := localBasePath + "/pds/v1/dataServiceDeploymentConfigUpdates/{id}" localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", url.PathEscape(parameterValueToString(r.id, "id")), -1) localVarHeaderParams := make(map[string]string) @@ -253,86 +253,86 @@ func (a *DeploymentConfigUpdateServiceAPIService) DeploymentConfigUpdateServiceG return localVarReturnValue, localVarHTTPResponse, nil } -type ApiDeploymentConfigUpdateServiceListDeploymentConfigUpdatesRequest struct { +type ApiDataServiceDeploymentConfigUpdateServiceListDataServiceDeploymentConfigUpdatesRequest struct { ctx context.Context - ApiService *DeploymentConfigUpdateServiceAPIService - deploymentId *string + ApiService *DataServiceDeploymentConfigUpdateServiceAPIService + dataServiceDeploymentId *string sortSortBy *string sortSortOrder *string paginationPageNumber *string paginationPageSize *string } -// UID of the deployment. -func (r ApiDeploymentConfigUpdateServiceListDeploymentConfigUpdatesRequest) DeploymentId(deploymentId string) ApiDeploymentConfigUpdateServiceListDeploymentConfigUpdatesRequest { - r.deploymentId = &deploymentId +// UID of the DataService Deployment. +func (r ApiDataServiceDeploymentConfigUpdateServiceListDataServiceDeploymentConfigUpdatesRequest) DataServiceDeploymentId(dataServiceDeploymentId string) ApiDataServiceDeploymentConfigUpdateServiceListDataServiceDeploymentConfigUpdatesRequest { + r.dataServiceDeploymentId = &dataServiceDeploymentId return r } // Name of the attribute to sort results by. - FIELD_UNSPECIFIED: Unspecified, do not use. - NAME: Sorting based on the name of the resource. - CREATED_AT: Sorting on create time of the resource. - UPDATED_AT: Sorting on update time of the resource. - PHASE: Sorting on phase of the resource. -func (r ApiDeploymentConfigUpdateServiceListDeploymentConfigUpdatesRequest) SortSortBy(sortSortBy string) ApiDeploymentConfigUpdateServiceListDeploymentConfigUpdatesRequest { +func (r ApiDataServiceDeploymentConfigUpdateServiceListDataServiceDeploymentConfigUpdatesRequest) SortSortBy(sortSortBy string) ApiDataServiceDeploymentConfigUpdateServiceListDataServiceDeploymentConfigUpdatesRequest { r.sortSortBy = &sortSortBy return r } // Order of sorting to be applied on requested list. If sort_by having some value and sort_order is not provided, by default ascending order will be used to sort the list. - VALUE_UNSPECIFIED: Unspecified, do not use. - ASC: Sort order ascending. - DESC: Sort order descending. -func (r ApiDeploymentConfigUpdateServiceListDeploymentConfigUpdatesRequest) SortSortOrder(sortSortOrder string) ApiDeploymentConfigUpdateServiceListDeploymentConfigUpdatesRequest { +func (r ApiDataServiceDeploymentConfigUpdateServiceListDataServiceDeploymentConfigUpdatesRequest) SortSortOrder(sortSortOrder string) ApiDataServiceDeploymentConfigUpdateServiceListDataServiceDeploymentConfigUpdatesRequest { r.sortSortOrder = &sortSortOrder return r } // Page number is the page number to return based on the size. -func (r ApiDeploymentConfigUpdateServiceListDeploymentConfigUpdatesRequest) PaginationPageNumber(paginationPageNumber string) ApiDeploymentConfigUpdateServiceListDeploymentConfigUpdatesRequest { +func (r ApiDataServiceDeploymentConfigUpdateServiceListDataServiceDeploymentConfigUpdatesRequest) PaginationPageNumber(paginationPageNumber string) ApiDataServiceDeploymentConfigUpdateServiceListDataServiceDeploymentConfigUpdatesRequest { r.paginationPageNumber = &paginationPageNumber return r } // Page size is the maximum number of records to include per page. -func (r ApiDeploymentConfigUpdateServiceListDeploymentConfigUpdatesRequest) PaginationPageSize(paginationPageSize string) ApiDeploymentConfigUpdateServiceListDeploymentConfigUpdatesRequest { +func (r ApiDataServiceDeploymentConfigUpdateServiceListDataServiceDeploymentConfigUpdatesRequest) PaginationPageSize(paginationPageSize string) ApiDataServiceDeploymentConfigUpdateServiceListDataServiceDeploymentConfigUpdatesRequest { r.paginationPageSize = &paginationPageSize return r } -func (r ApiDeploymentConfigUpdateServiceListDeploymentConfigUpdatesRequest) Execute() (*V1ListDeploymentConfigUpdatesResponse, *http.Response, error) { - return r.ApiService.DeploymentConfigUpdateServiceListDeploymentConfigUpdatesExecute(r) +func (r ApiDataServiceDeploymentConfigUpdateServiceListDataServiceDeploymentConfigUpdatesRequest) Execute() (*V1ListDataServiceDeploymentConfigUpdatesResponse, *http.Response, error) { + return r.ApiService.DataServiceDeploymentConfigUpdateServiceListDataServiceDeploymentConfigUpdatesExecute(r) } /* -DeploymentConfigUpdateServiceListDeploymentConfigUpdates ListDeploymentConfigUpdates API returns a list of deployment config updates. +DataServiceDeploymentConfigUpdateServiceListDataServiceDeploymentConfigUpdates ListDataServiceDeploymentConfigUpdates API returns a list of data service deployment config updates. @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiDeploymentConfigUpdateServiceListDeploymentConfigUpdatesRequest + @return ApiDataServiceDeploymentConfigUpdateServiceListDataServiceDeploymentConfigUpdatesRequest */ -func (a *DeploymentConfigUpdateServiceAPIService) DeploymentConfigUpdateServiceListDeploymentConfigUpdates(ctx context.Context) ApiDeploymentConfigUpdateServiceListDeploymentConfigUpdatesRequest { - return ApiDeploymentConfigUpdateServiceListDeploymentConfigUpdatesRequest{ +func (a *DataServiceDeploymentConfigUpdateServiceAPIService) DataServiceDeploymentConfigUpdateServiceListDataServiceDeploymentConfigUpdates(ctx context.Context) ApiDataServiceDeploymentConfigUpdateServiceListDataServiceDeploymentConfigUpdatesRequest { + return ApiDataServiceDeploymentConfigUpdateServiceListDataServiceDeploymentConfigUpdatesRequest{ ApiService: a, ctx: ctx, } } // Execute executes the request -// @return V1ListDeploymentConfigUpdatesResponse -func (a *DeploymentConfigUpdateServiceAPIService) DeploymentConfigUpdateServiceListDeploymentConfigUpdatesExecute(r ApiDeploymentConfigUpdateServiceListDeploymentConfigUpdatesRequest) (*V1ListDeploymentConfigUpdatesResponse, *http.Response, error) { +// @return V1ListDataServiceDeploymentConfigUpdatesResponse +func (a *DataServiceDeploymentConfigUpdateServiceAPIService) DataServiceDeploymentConfigUpdateServiceListDataServiceDeploymentConfigUpdatesExecute(r ApiDataServiceDeploymentConfigUpdateServiceListDataServiceDeploymentConfigUpdatesRequest) (*V1ListDataServiceDeploymentConfigUpdatesResponse, *http.Response, error) { var ( localVarHTTPMethod = http.MethodGet localVarPostBody interface{} formFiles []formFile - localVarReturnValue *V1ListDeploymentConfigUpdatesResponse + localVarReturnValue *V1ListDataServiceDeploymentConfigUpdatesResponse ) - localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DeploymentConfigUpdateServiceAPIService.DeploymentConfigUpdateServiceListDeploymentConfigUpdates") + localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DataServiceDeploymentConfigUpdateServiceAPIService.DataServiceDeploymentConfigUpdateServiceListDataServiceDeploymentConfigUpdates") if err != nil { return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()} } - localVarPath := localBasePath + "/pds/v1/deploymentConfigUpdates" + localVarPath := localBasePath + "/pds/v1/dataServiceDeploymentConfigUpdates" localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if r.deploymentId != nil { - parameterAddToHeaderOrQuery(localVarQueryParams, "deploymentId", r.deploymentId, "") + if r.dataServiceDeploymentId != nil { + parameterAddToHeaderOrQuery(localVarQueryParams, "dataServiceDeploymentId", r.dataServiceDeploymentId, "") } if r.sortSortBy != nil { parameterAddToHeaderOrQuery(localVarQueryParams, "sort.sortBy", r.sortSortBy, "") @@ -414,31 +414,31 @@ func (a *DeploymentConfigUpdateServiceAPIService) DeploymentConfigUpdateServiceL return localVarReturnValue, localVarHTTPResponse, nil } -type ApiDeploymentConfigUpdateServiceRetryDeploymentConfigUpdateRequest struct { +type ApiDataServiceDeploymentConfigUpdateServiceRetryDataServiceDeploymentConfigUpdateRequest struct { ctx context.Context - ApiService *DeploymentConfigUpdateServiceAPIService + ApiService *DataServiceDeploymentConfigUpdateServiceAPIService id string body *map[string]interface{} } -func (r ApiDeploymentConfigUpdateServiceRetryDeploymentConfigUpdateRequest) Body(body map[string]interface{}) ApiDeploymentConfigUpdateServiceRetryDeploymentConfigUpdateRequest { +func (r ApiDataServiceDeploymentConfigUpdateServiceRetryDataServiceDeploymentConfigUpdateRequest) Body(body map[string]interface{}) ApiDataServiceDeploymentConfigUpdateServiceRetryDataServiceDeploymentConfigUpdateRequest { r.body = &body return r } -func (r ApiDeploymentConfigUpdateServiceRetryDeploymentConfigUpdateRequest) Execute() (*V1DeploymentConfigUpdate, *http.Response, error) { - return r.ApiService.DeploymentConfigUpdateServiceRetryDeploymentConfigUpdateExecute(r) +func (r ApiDataServiceDeploymentConfigUpdateServiceRetryDataServiceDeploymentConfigUpdateRequest) Execute() (*V1DataServiceDeploymentConfigUpdate, *http.Response, error) { + return r.ApiService.DataServiceDeploymentConfigUpdateServiceRetryDataServiceDeploymentConfigUpdateExecute(r) } /* -DeploymentConfigUpdateServiceRetryDeploymentConfigUpdate RetryDeploymentConfigUpdate API retries a deployment config update. +DataServiceDeploymentConfigUpdateServiceRetryDataServiceDeploymentConfigUpdate RetryDataServiceDeploymentConfigUpdate API retries a data service deployment config update. @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param id UID of the deployment config update. - @return ApiDeploymentConfigUpdateServiceRetryDeploymentConfigUpdateRequest + @param id UID of the DataService deployment config update. + @return ApiDataServiceDeploymentConfigUpdateServiceRetryDataServiceDeploymentConfigUpdateRequest */ -func (a *DeploymentConfigUpdateServiceAPIService) DeploymentConfigUpdateServiceRetryDeploymentConfigUpdate(ctx context.Context, id string) ApiDeploymentConfigUpdateServiceRetryDeploymentConfigUpdateRequest { - return ApiDeploymentConfigUpdateServiceRetryDeploymentConfigUpdateRequest{ +func (a *DataServiceDeploymentConfigUpdateServiceAPIService) DataServiceDeploymentConfigUpdateServiceRetryDataServiceDeploymentConfigUpdate(ctx context.Context, id string) ApiDataServiceDeploymentConfigUpdateServiceRetryDataServiceDeploymentConfigUpdateRequest { + return ApiDataServiceDeploymentConfigUpdateServiceRetryDataServiceDeploymentConfigUpdateRequest{ ApiService: a, ctx: ctx, id: id, @@ -446,21 +446,21 @@ func (a *DeploymentConfigUpdateServiceAPIService) DeploymentConfigUpdateServiceR } // Execute executes the request -// @return V1DeploymentConfigUpdate -func (a *DeploymentConfigUpdateServiceAPIService) DeploymentConfigUpdateServiceRetryDeploymentConfigUpdateExecute(r ApiDeploymentConfigUpdateServiceRetryDeploymentConfigUpdateRequest) (*V1DeploymentConfigUpdate, *http.Response, error) { +// @return V1DataServiceDeploymentConfigUpdate +func (a *DataServiceDeploymentConfigUpdateServiceAPIService) DataServiceDeploymentConfigUpdateServiceRetryDataServiceDeploymentConfigUpdateExecute(r ApiDataServiceDeploymentConfigUpdateServiceRetryDataServiceDeploymentConfigUpdateRequest) (*V1DataServiceDeploymentConfigUpdate, *http.Response, error) { var ( localVarHTTPMethod = http.MethodPost localVarPostBody interface{} formFiles []formFile - localVarReturnValue *V1DeploymentConfigUpdate + localVarReturnValue *V1DataServiceDeploymentConfigUpdate ) - localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DeploymentConfigUpdateServiceAPIService.DeploymentConfigUpdateServiceRetryDeploymentConfigUpdate") + localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DataServiceDeploymentConfigUpdateServiceAPIService.DataServiceDeploymentConfigUpdateServiceRetryDataServiceDeploymentConfigUpdate") if err != nil { return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()} } - localVarPath := localBasePath + "/pds/v1/deploymentConfigUpdates/{id}:retry" + localVarPath := localBasePath + "/pds/v1/dataServiceDeploymentConfigUpdates/{id}:retry" localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", url.PathEscape(parameterValueToString(r.id, "id")), -1) localVarHeaderParams := make(map[string]string) diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/client.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/client.go similarity index 97% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/client.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/client.go index 0a7383668..e4df18969 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/client.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/client.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deploymentconfigupdate +package dataservicedeploymentconfigupdate import ( "bytes" @@ -41,7 +41,7 @@ var ( queryDescape = strings.NewReplacer( "%5B", "[", "%5D", "]" ) ) -// APIClient manages communication with the public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto API vversion not set +// APIClient manages communication with the public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto API vversion not set // In most cases there should be only one, shared, APIClient. type APIClient struct { cfg *Configuration @@ -49,7 +49,7 @@ type APIClient struct { // API Services - DeploymentConfigUpdateServiceAPI *DeploymentConfigUpdateServiceAPIService + DataServiceDeploymentConfigUpdateServiceAPI *DataServiceDeploymentConfigUpdateServiceAPIService } type service struct { @@ -68,7 +68,7 @@ func NewAPIClient(cfg *Configuration) *APIClient { c.common.client = c // API Services - c.DeploymentConfigUpdateServiceAPI = (*DeploymentConfigUpdateServiceAPIService)(&c.common) + c.DataServiceDeploymentConfigUpdateServiceAPI = (*DataServiceDeploymentConfigUpdateServiceAPIService)(&c.common) return c } @@ -162,7 +162,7 @@ func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix stri return } if t, ok := obj.(time.Time); ok { - parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339), collectionType) + parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339Nano), collectionType) return } value = v.Type().String() + " value" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/configuration.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/configuration.go similarity index 97% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/configuration.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/configuration.go index 843c617fc..771045afa 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/configuration.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/configuration.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deploymentconfigupdate +package dataservicedeploymentconfigupdate import ( "context" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_config_of_the_data_service_deployment_for_which_config_update_is_requested_.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_config_of_the_data_service_deployment_for_which_config_update_is_requested_.go new file mode 100644 index 000000000..6a852d74a --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_config_of_the_data_service_deployment_for_which_config_update_is_requested_.go @@ -0,0 +1,162 @@ +/* +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeploymentconfigupdate + +import ( + "encoding/json" +) + +// checks if the ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested{} + +// ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested Config of the DataService deployment for which config update is requested. +type ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested struct { + DataServiceDeploymentMeta *MetadataOfTheDataServiceDeploymentResource `json:"dataServiceDeploymentMeta,omitempty"` + DataServiceDeploymentConfig *Pdsdataservicedeploymentv1Config `json:"dataServiceDeploymentConfig,omitempty"` +} + +// NewConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested instantiates a new ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested() *ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested { + this := ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested{} + return &this +} + +// NewConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequestedWithDefaults instantiates a new ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequestedWithDefaults() *ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested { + this := ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested{} + return &this +} + +// GetDataServiceDeploymentMeta returns the DataServiceDeploymentMeta field value if set, zero value otherwise. +func (o *ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested) GetDataServiceDeploymentMeta() MetadataOfTheDataServiceDeploymentResource { + if o == nil || IsNil(o.DataServiceDeploymentMeta) { + var ret MetadataOfTheDataServiceDeploymentResource + return ret + } + return *o.DataServiceDeploymentMeta +} + +// GetDataServiceDeploymentMetaOk returns a tuple with the DataServiceDeploymentMeta field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested) GetDataServiceDeploymentMetaOk() (*MetadataOfTheDataServiceDeploymentResource, bool) { + if o == nil || IsNil(o.DataServiceDeploymentMeta) { + return nil, false + } + return o.DataServiceDeploymentMeta, true +} + +// HasDataServiceDeploymentMeta returns a boolean if a field has been set. +func (o *ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested) HasDataServiceDeploymentMeta() bool { + if o != nil && !IsNil(o.DataServiceDeploymentMeta) { + return true + } + + return false +} + +// SetDataServiceDeploymentMeta gets a reference to the given MetadataOfTheDataServiceDeploymentResource and assigns it to the DataServiceDeploymentMeta field. +func (o *ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested) SetDataServiceDeploymentMeta(v MetadataOfTheDataServiceDeploymentResource) { + o.DataServiceDeploymentMeta = &v +} + +// GetDataServiceDeploymentConfig returns the DataServiceDeploymentConfig field value if set, zero value otherwise. +func (o *ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested) GetDataServiceDeploymentConfig() Pdsdataservicedeploymentv1Config { + if o == nil || IsNil(o.DataServiceDeploymentConfig) { + var ret Pdsdataservicedeploymentv1Config + return ret + } + return *o.DataServiceDeploymentConfig +} + +// GetDataServiceDeploymentConfigOk returns a tuple with the DataServiceDeploymentConfig field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested) GetDataServiceDeploymentConfigOk() (*Pdsdataservicedeploymentv1Config, bool) { + if o == nil || IsNil(o.DataServiceDeploymentConfig) { + return nil, false + } + return o.DataServiceDeploymentConfig, true +} + +// HasDataServiceDeploymentConfig returns a boolean if a field has been set. +func (o *ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested) HasDataServiceDeploymentConfig() bool { + if o != nil && !IsNil(o.DataServiceDeploymentConfig) { + return true + } + + return false +} + +// SetDataServiceDeploymentConfig gets a reference to the given Pdsdataservicedeploymentv1Config and assigns it to the DataServiceDeploymentConfig field. +func (o *ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested) SetDataServiceDeploymentConfig(v Pdsdataservicedeploymentv1Config) { + o.DataServiceDeploymentConfig = &v +} + +func (o ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.DataServiceDeploymentMeta) { + toSerialize["dataServiceDeploymentMeta"] = o.DataServiceDeploymentMeta + } + if !IsNil(o.DataServiceDeploymentConfig) { + toSerialize["dataServiceDeploymentConfig"] = o.DataServiceDeploymentConfig + } + return toSerialize, nil +} + +type NullableConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested struct { + value *ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested + isSet bool +} + +func (v NullableConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested) Get() *ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested { + return v.value +} + +func (v *NullableConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested) Set(val *ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested) { + v.value = val + v.isSet = true +} + +func (v NullableConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested) IsSet() bool { + return v.isSet +} + +func (v *NullableConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested(val *ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested) *NullableConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested { + return &NullableConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested{value: val, isSet: true} +} + +func (v NullableConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_data_service_deployment_config_update_of_the_data_service_config_deployment_update_request_.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_data_service_deployment_config_update_of_the_data_service_config_deployment_update_request_.go new file mode 100644 index 000000000..1d4ddda91 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_data_service_deployment_config_update_of_the_data_service_config_deployment_update_request_.go @@ -0,0 +1,198 @@ +/* +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeploymentconfigupdate + +import ( + "encoding/json" +) + +// checks if the DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest{} + +// DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest struct for DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest +type DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest struct { + Meta *V1Meta `json:"meta,omitempty"` + Config *ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested `json:"config,omitempty"` + Status *Pdsdataservicedeploymentconfigupdatev1Status `json:"status,omitempty"` +} + +// NewDataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest instantiates a new DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewDataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest() *DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest { + this := DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest{} + return &this +} + +// NewDataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequestWithDefaults instantiates a new DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewDataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequestWithDefaults() *DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest { + this := DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest{} + return &this +} + +// GetMeta returns the Meta field value if set, zero value otherwise. +func (o *DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) GetMeta() V1Meta { + if o == nil || IsNil(o.Meta) { + var ret V1Meta + return ret + } + return *o.Meta +} + +// GetMetaOk returns a tuple with the Meta field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) GetMetaOk() (*V1Meta, bool) { + if o == nil || IsNil(o.Meta) { + return nil, false + } + return o.Meta, true +} + +// HasMeta returns a boolean if a field has been set. +func (o *DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) HasMeta() bool { + if o != nil && !IsNil(o.Meta) { + return true + } + + return false +} + +// SetMeta gets a reference to the given V1Meta and assigns it to the Meta field. +func (o *DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) SetMeta(v V1Meta) { + o.Meta = &v +} + +// GetConfig returns the Config field value if set, zero value otherwise. +func (o *DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) GetConfig() ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested { + if o == nil || IsNil(o.Config) { + var ret ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested + return ret + } + return *o.Config +} + +// GetConfigOk returns a tuple with the Config field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) GetConfigOk() (*ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested, bool) { + if o == nil || IsNil(o.Config) { + return nil, false + } + return o.Config, true +} + +// HasConfig returns a boolean if a field has been set. +func (o *DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) HasConfig() bool { + if o != nil && !IsNil(o.Config) { + return true + } + + return false +} + +// SetConfig gets a reference to the given ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested and assigns it to the Config field. +func (o *DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) SetConfig(v ConfigOfTheDataServiceDeploymentForWhichConfigUpdateIsRequested) { + o.Config = &v +} + +// GetStatus returns the Status field value if set, zero value otherwise. +func (o *DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) GetStatus() Pdsdataservicedeploymentconfigupdatev1Status { + if o == nil || IsNil(o.Status) { + var ret Pdsdataservicedeploymentconfigupdatev1Status + return ret + } + return *o.Status +} + +// GetStatusOk returns a tuple with the Status field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) GetStatusOk() (*Pdsdataservicedeploymentconfigupdatev1Status, bool) { + if o == nil || IsNil(o.Status) { + return nil, false + } + return o.Status, true +} + +// HasStatus returns a boolean if a field has been set. +func (o *DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) HasStatus() bool { + if o != nil && !IsNil(o.Status) { + return true + } + + return false +} + +// SetStatus gets a reference to the given Pdsdataservicedeploymentconfigupdatev1Status and assigns it to the Status field. +func (o *DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) SetStatus(v Pdsdataservicedeploymentconfigupdatev1Status) { + o.Status = &v +} + +func (o DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.Meta) { + toSerialize["meta"] = o.Meta + } + if !IsNil(o.Config) { + toSerialize["config"] = o.Config + } + if !IsNil(o.Status) { + toSerialize["status"] = o.Status + } + return toSerialize, nil +} + +type NullableDataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest struct { + value *DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest + isSet bool +} + +func (v NullableDataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) Get() *DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest { + return v.value +} + +func (v *NullableDataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) Set(val *DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) { + v.value = val + v.isSet = true +} + +func (v NullableDataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) IsSet() bool { + return v.isSet +} + +func (v *NullableDataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableDataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest(val *DataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) *NullableDataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest { + return &NullableDataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest{value: val, isSet: true} +} + +func (v NullableDataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableDataServiceDeploymentConfigUpdateOfTheDataServiceConfigDeploymentUpdateRequest) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_googlerpc_status.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_googlerpc_status.go similarity index 97% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_googlerpc_status.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_googlerpc_status.go index 34efbf67d..23c4188fb 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_googlerpc_status.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_googlerpc_status.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deploymentconfigupdate +package dataservicedeploymentconfigupdate import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_metadata_of_the_data_service_deployment_resource_.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_metadata_of_the_data_service_deployment_resource_.go new file mode 100644 index 000000000..18cebb395 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_metadata_of_the_data_service_deployment_resource_.go @@ -0,0 +1,423 @@ +/* +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeploymentconfigupdate + +import ( + "encoding/json" + "time" +) + +// checks if the MetadataOfTheDataServiceDeploymentResource type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &MetadataOfTheDataServiceDeploymentResource{} + +// MetadataOfTheDataServiceDeploymentResource Metadata of the DataService deployment resource. +type MetadataOfTheDataServiceDeploymentResource struct { + // Name of the resource. + Name *string `json:"name,omitempty"` + // Description of the resource. + Description *string `json:"description,omitempty"` + // A string that identifies the version of this object that can be used by clients to determine when objects have changed. This value must be passed unmodified back to the server by the client. + ResourceVersion *string `json:"resourceVersion,omitempty"` + // Creation time of the object. + CreateTime *time.Time `json:"createTime,omitempty"` + // Update time of the object. + UpdateTime *time.Time `json:"updateTime,omitempty"` + // Labels to apply to the object. + Labels *map[string]string `json:"labels,omitempty"` + // Annotations for the object. + Annotations *map[string]string `json:"annotations,omitempty"` + ParentReference *V1Reference `json:"parentReference,omitempty"` + // Resource names holds the mapping between the resource IDs and its display name which will be consumed by the frontend. + ResourceNames *map[string]string `json:"resourceNames,omitempty"` +} + +// NewMetadataOfTheDataServiceDeploymentResource instantiates a new MetadataOfTheDataServiceDeploymentResource object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewMetadataOfTheDataServiceDeploymentResource() *MetadataOfTheDataServiceDeploymentResource { + this := MetadataOfTheDataServiceDeploymentResource{} + return &this +} + +// NewMetadataOfTheDataServiceDeploymentResourceWithDefaults instantiates a new MetadataOfTheDataServiceDeploymentResource object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewMetadataOfTheDataServiceDeploymentResourceWithDefaults() *MetadataOfTheDataServiceDeploymentResource { + this := MetadataOfTheDataServiceDeploymentResource{} + return &this +} + +// GetName returns the Name field value if set, zero value otherwise. +func (o *MetadataOfTheDataServiceDeploymentResource) GetName() string { + if o == nil || IsNil(o.Name) { + var ret string + return ret + } + return *o.Name +} + +// GetNameOk returns a tuple with the Name field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *MetadataOfTheDataServiceDeploymentResource) GetNameOk() (*string, bool) { + if o == nil || IsNil(o.Name) { + return nil, false + } + return o.Name, true +} + +// HasName returns a boolean if a field has been set. +func (o *MetadataOfTheDataServiceDeploymentResource) HasName() bool { + if o != nil && !IsNil(o.Name) { + return true + } + + return false +} + +// SetName gets a reference to the given string and assigns it to the Name field. +func (o *MetadataOfTheDataServiceDeploymentResource) SetName(v string) { + o.Name = &v +} + +// GetDescription returns the Description field value if set, zero value otherwise. +func (o *MetadataOfTheDataServiceDeploymentResource) GetDescription() string { + if o == nil || IsNil(o.Description) { + var ret string + return ret + } + return *o.Description +} + +// GetDescriptionOk returns a tuple with the Description field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *MetadataOfTheDataServiceDeploymentResource) GetDescriptionOk() (*string, bool) { + if o == nil || IsNil(o.Description) { + return nil, false + } + return o.Description, true +} + +// HasDescription returns a boolean if a field has been set. +func (o *MetadataOfTheDataServiceDeploymentResource) HasDescription() bool { + if o != nil && !IsNil(o.Description) { + return true + } + + return false +} + +// SetDescription gets a reference to the given string and assigns it to the Description field. +func (o *MetadataOfTheDataServiceDeploymentResource) SetDescription(v string) { + o.Description = &v +} + +// GetResourceVersion returns the ResourceVersion field value if set, zero value otherwise. +func (o *MetadataOfTheDataServiceDeploymentResource) GetResourceVersion() string { + if o == nil || IsNil(o.ResourceVersion) { + var ret string + return ret + } + return *o.ResourceVersion +} + +// GetResourceVersionOk returns a tuple with the ResourceVersion field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *MetadataOfTheDataServiceDeploymentResource) GetResourceVersionOk() (*string, bool) { + if o == nil || IsNil(o.ResourceVersion) { + return nil, false + } + return o.ResourceVersion, true +} + +// HasResourceVersion returns a boolean if a field has been set. +func (o *MetadataOfTheDataServiceDeploymentResource) HasResourceVersion() bool { + if o != nil && !IsNil(o.ResourceVersion) { + return true + } + + return false +} + +// SetResourceVersion gets a reference to the given string and assigns it to the ResourceVersion field. +func (o *MetadataOfTheDataServiceDeploymentResource) SetResourceVersion(v string) { + o.ResourceVersion = &v +} + +// GetCreateTime returns the CreateTime field value if set, zero value otherwise. +func (o *MetadataOfTheDataServiceDeploymentResource) GetCreateTime() time.Time { + if o == nil || IsNil(o.CreateTime) { + var ret time.Time + return ret + } + return *o.CreateTime +} + +// GetCreateTimeOk returns a tuple with the CreateTime field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *MetadataOfTheDataServiceDeploymentResource) GetCreateTimeOk() (*time.Time, bool) { + if o == nil || IsNil(o.CreateTime) { + return nil, false + } + return o.CreateTime, true +} + +// HasCreateTime returns a boolean if a field has been set. +func (o *MetadataOfTheDataServiceDeploymentResource) HasCreateTime() bool { + if o != nil && !IsNil(o.CreateTime) { + return true + } + + return false +} + +// SetCreateTime gets a reference to the given time.Time and assigns it to the CreateTime field. +func (o *MetadataOfTheDataServiceDeploymentResource) SetCreateTime(v time.Time) { + o.CreateTime = &v +} + +// GetUpdateTime returns the UpdateTime field value if set, zero value otherwise. +func (o *MetadataOfTheDataServiceDeploymentResource) GetUpdateTime() time.Time { + if o == nil || IsNil(o.UpdateTime) { + var ret time.Time + return ret + } + return *o.UpdateTime +} + +// GetUpdateTimeOk returns a tuple with the UpdateTime field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *MetadataOfTheDataServiceDeploymentResource) GetUpdateTimeOk() (*time.Time, bool) { + if o == nil || IsNil(o.UpdateTime) { + return nil, false + } + return o.UpdateTime, true +} + +// HasUpdateTime returns a boolean if a field has been set. +func (o *MetadataOfTheDataServiceDeploymentResource) HasUpdateTime() bool { + if o != nil && !IsNil(o.UpdateTime) { + return true + } + + return false +} + +// SetUpdateTime gets a reference to the given time.Time and assigns it to the UpdateTime field. +func (o *MetadataOfTheDataServiceDeploymentResource) SetUpdateTime(v time.Time) { + o.UpdateTime = &v +} + +// GetLabels returns the Labels field value if set, zero value otherwise. +func (o *MetadataOfTheDataServiceDeploymentResource) GetLabels() map[string]string { + if o == nil || IsNil(o.Labels) { + var ret map[string]string + return ret + } + return *o.Labels +} + +// GetLabelsOk returns a tuple with the Labels field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *MetadataOfTheDataServiceDeploymentResource) GetLabelsOk() (*map[string]string, bool) { + if o == nil || IsNil(o.Labels) { + return nil, false + } + return o.Labels, true +} + +// HasLabels returns a boolean if a field has been set. +func (o *MetadataOfTheDataServiceDeploymentResource) HasLabels() bool { + if o != nil && !IsNil(o.Labels) { + return true + } + + return false +} + +// SetLabels gets a reference to the given map[string]string and assigns it to the Labels field. +func (o *MetadataOfTheDataServiceDeploymentResource) SetLabels(v map[string]string) { + o.Labels = &v +} + +// GetAnnotations returns the Annotations field value if set, zero value otherwise. +func (o *MetadataOfTheDataServiceDeploymentResource) GetAnnotations() map[string]string { + if o == nil || IsNil(o.Annotations) { + var ret map[string]string + return ret + } + return *o.Annotations +} + +// GetAnnotationsOk returns a tuple with the Annotations field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *MetadataOfTheDataServiceDeploymentResource) GetAnnotationsOk() (*map[string]string, bool) { + if o == nil || IsNil(o.Annotations) { + return nil, false + } + return o.Annotations, true +} + +// HasAnnotations returns a boolean if a field has been set. +func (o *MetadataOfTheDataServiceDeploymentResource) HasAnnotations() bool { + if o != nil && !IsNil(o.Annotations) { + return true + } + + return false +} + +// SetAnnotations gets a reference to the given map[string]string and assigns it to the Annotations field. +func (o *MetadataOfTheDataServiceDeploymentResource) SetAnnotations(v map[string]string) { + o.Annotations = &v +} + +// GetParentReference returns the ParentReference field value if set, zero value otherwise. +func (o *MetadataOfTheDataServiceDeploymentResource) GetParentReference() V1Reference { + if o == nil || IsNil(o.ParentReference) { + var ret V1Reference + return ret + } + return *o.ParentReference +} + +// GetParentReferenceOk returns a tuple with the ParentReference field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *MetadataOfTheDataServiceDeploymentResource) GetParentReferenceOk() (*V1Reference, bool) { + if o == nil || IsNil(o.ParentReference) { + return nil, false + } + return o.ParentReference, true +} + +// HasParentReference returns a boolean if a field has been set. +func (o *MetadataOfTheDataServiceDeploymentResource) HasParentReference() bool { + if o != nil && !IsNil(o.ParentReference) { + return true + } + + return false +} + +// SetParentReference gets a reference to the given V1Reference and assigns it to the ParentReference field. +func (o *MetadataOfTheDataServiceDeploymentResource) SetParentReference(v V1Reference) { + o.ParentReference = &v +} + +// GetResourceNames returns the ResourceNames field value if set, zero value otherwise. +func (o *MetadataOfTheDataServiceDeploymentResource) GetResourceNames() map[string]string { + if o == nil || IsNil(o.ResourceNames) { + var ret map[string]string + return ret + } + return *o.ResourceNames +} + +// GetResourceNamesOk returns a tuple with the ResourceNames field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *MetadataOfTheDataServiceDeploymentResource) GetResourceNamesOk() (*map[string]string, bool) { + if o == nil || IsNil(o.ResourceNames) { + return nil, false + } + return o.ResourceNames, true +} + +// HasResourceNames returns a boolean if a field has been set. +func (o *MetadataOfTheDataServiceDeploymentResource) HasResourceNames() bool { + if o != nil && !IsNil(o.ResourceNames) { + return true + } + + return false +} + +// SetResourceNames gets a reference to the given map[string]string and assigns it to the ResourceNames field. +func (o *MetadataOfTheDataServiceDeploymentResource) SetResourceNames(v map[string]string) { + o.ResourceNames = &v +} + +func (o MetadataOfTheDataServiceDeploymentResource) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o MetadataOfTheDataServiceDeploymentResource) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.Name) { + toSerialize["name"] = o.Name + } + if !IsNil(o.Description) { + toSerialize["description"] = o.Description + } + if !IsNil(o.ResourceVersion) { + toSerialize["resourceVersion"] = o.ResourceVersion + } + if !IsNil(o.CreateTime) { + toSerialize["createTime"] = o.CreateTime + } + if !IsNil(o.UpdateTime) { + toSerialize["updateTime"] = o.UpdateTime + } + if !IsNil(o.Labels) { + toSerialize["labels"] = o.Labels + } + if !IsNil(o.Annotations) { + toSerialize["annotations"] = o.Annotations + } + if !IsNil(o.ParentReference) { + toSerialize["parentReference"] = o.ParentReference + } + if !IsNil(o.ResourceNames) { + toSerialize["resourceNames"] = o.ResourceNames + } + return toSerialize, nil +} + +type NullableMetadataOfTheDataServiceDeploymentResource struct { + value *MetadataOfTheDataServiceDeploymentResource + isSet bool +} + +func (v NullableMetadataOfTheDataServiceDeploymentResource) Get() *MetadataOfTheDataServiceDeploymentResource { + return v.value +} + +func (v *NullableMetadataOfTheDataServiceDeploymentResource) Set(val *MetadataOfTheDataServiceDeploymentResource) { + v.value = val + v.isSet = true +} + +func (v NullableMetadataOfTheDataServiceDeploymentResource) IsSet() bool { + return v.isSet +} + +func (v *NullableMetadataOfTheDataServiceDeploymentResource) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableMetadataOfTheDataServiceDeploymentResource(val *MetadataOfTheDataServiceDeploymentResource) *NullableMetadataOfTheDataServiceDeploymentResource { + return &NullableMetadataOfTheDataServiceDeploymentResource{value: val, isSet: true} +} + +func (v NullableMetadataOfTheDataServiceDeploymentResource) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableMetadataOfTheDataServiceDeploymentResource) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_pdsdataservicedeploymentconfigupdatev1_config.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_pdsdataservicedeploymentconfigupdatev1_config.go new file mode 100644 index 000000000..2cb203c63 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_pdsdataservicedeploymentconfigupdatev1_config.go @@ -0,0 +1,162 @@ +/* +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeploymentconfigupdate + +import ( + "encoding/json" +) + +// checks if the Pdsdataservicedeploymentconfigupdatev1Config type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &Pdsdataservicedeploymentconfigupdatev1Config{} + +// Pdsdataservicedeploymentconfigupdatev1Config Config of the desired DataService deployment configuration. +type Pdsdataservicedeploymentconfigupdatev1Config struct { + DataServiceDeploymentMeta *V1Meta `json:"dataServiceDeploymentMeta,omitempty"` + DataServiceDeploymentConfig *Pdsdataservicedeploymentv1Config `json:"dataServiceDeploymentConfig,omitempty"` +} + +// NewPdsdataservicedeploymentconfigupdatev1Config instantiates a new Pdsdataservicedeploymentconfigupdatev1Config object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewPdsdataservicedeploymentconfigupdatev1Config() *Pdsdataservicedeploymentconfigupdatev1Config { + this := Pdsdataservicedeploymentconfigupdatev1Config{} + return &this +} + +// NewPdsdataservicedeploymentconfigupdatev1ConfigWithDefaults instantiates a new Pdsdataservicedeploymentconfigupdatev1Config object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewPdsdataservicedeploymentconfigupdatev1ConfigWithDefaults() *Pdsdataservicedeploymentconfigupdatev1Config { + this := Pdsdataservicedeploymentconfigupdatev1Config{} + return &this +} + +// GetDataServiceDeploymentMeta returns the DataServiceDeploymentMeta field value if set, zero value otherwise. +func (o *Pdsdataservicedeploymentconfigupdatev1Config) GetDataServiceDeploymentMeta() V1Meta { + if o == nil || IsNil(o.DataServiceDeploymentMeta) { + var ret V1Meta + return ret + } + return *o.DataServiceDeploymentMeta +} + +// GetDataServiceDeploymentMetaOk returns a tuple with the DataServiceDeploymentMeta field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *Pdsdataservicedeploymentconfigupdatev1Config) GetDataServiceDeploymentMetaOk() (*V1Meta, bool) { + if o == nil || IsNil(o.DataServiceDeploymentMeta) { + return nil, false + } + return o.DataServiceDeploymentMeta, true +} + +// HasDataServiceDeploymentMeta returns a boolean if a field has been set. +func (o *Pdsdataservicedeploymentconfigupdatev1Config) HasDataServiceDeploymentMeta() bool { + if o != nil && !IsNil(o.DataServiceDeploymentMeta) { + return true + } + + return false +} + +// SetDataServiceDeploymentMeta gets a reference to the given V1Meta and assigns it to the DataServiceDeploymentMeta field. +func (o *Pdsdataservicedeploymentconfigupdatev1Config) SetDataServiceDeploymentMeta(v V1Meta) { + o.DataServiceDeploymentMeta = &v +} + +// GetDataServiceDeploymentConfig returns the DataServiceDeploymentConfig field value if set, zero value otherwise. +func (o *Pdsdataservicedeploymentconfigupdatev1Config) GetDataServiceDeploymentConfig() Pdsdataservicedeploymentv1Config { + if o == nil || IsNil(o.DataServiceDeploymentConfig) { + var ret Pdsdataservicedeploymentv1Config + return ret + } + return *o.DataServiceDeploymentConfig +} + +// GetDataServiceDeploymentConfigOk returns a tuple with the DataServiceDeploymentConfig field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *Pdsdataservicedeploymentconfigupdatev1Config) GetDataServiceDeploymentConfigOk() (*Pdsdataservicedeploymentv1Config, bool) { + if o == nil || IsNil(o.DataServiceDeploymentConfig) { + return nil, false + } + return o.DataServiceDeploymentConfig, true +} + +// HasDataServiceDeploymentConfig returns a boolean if a field has been set. +func (o *Pdsdataservicedeploymentconfigupdatev1Config) HasDataServiceDeploymentConfig() bool { + if o != nil && !IsNil(o.DataServiceDeploymentConfig) { + return true + } + + return false +} + +// SetDataServiceDeploymentConfig gets a reference to the given Pdsdataservicedeploymentv1Config and assigns it to the DataServiceDeploymentConfig field. +func (o *Pdsdataservicedeploymentconfigupdatev1Config) SetDataServiceDeploymentConfig(v Pdsdataservicedeploymentv1Config) { + o.DataServiceDeploymentConfig = &v +} + +func (o Pdsdataservicedeploymentconfigupdatev1Config) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o Pdsdataservicedeploymentconfigupdatev1Config) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.DataServiceDeploymentMeta) { + toSerialize["dataServiceDeploymentMeta"] = o.DataServiceDeploymentMeta + } + if !IsNil(o.DataServiceDeploymentConfig) { + toSerialize["dataServiceDeploymentConfig"] = o.DataServiceDeploymentConfig + } + return toSerialize, nil +} + +type NullablePdsdataservicedeploymentconfigupdatev1Config struct { + value *Pdsdataservicedeploymentconfigupdatev1Config + isSet bool +} + +func (v NullablePdsdataservicedeploymentconfigupdatev1Config) Get() *Pdsdataservicedeploymentconfigupdatev1Config { + return v.value +} + +func (v *NullablePdsdataservicedeploymentconfigupdatev1Config) Set(val *Pdsdataservicedeploymentconfigupdatev1Config) { + v.value = val + v.isSet = true +} + +func (v NullablePdsdataservicedeploymentconfigupdatev1Config) IsSet() bool { + return v.isSet +} + +func (v *NullablePdsdataservicedeploymentconfigupdatev1Config) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullablePdsdataservicedeploymentconfigupdatev1Config(val *Pdsdataservicedeploymentconfigupdatev1Config) *NullablePdsdataservicedeploymentconfigupdatev1Config { + return &NullablePdsdataservicedeploymentconfigupdatev1Config{value: val, isSet: true} +} + +func (v NullablePdsdataservicedeploymentconfigupdatev1Config) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullablePdsdataservicedeploymentconfigupdatev1Config) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_pdsdataservicedeploymentconfigupdatev1_status.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_pdsdataservicedeploymentconfigupdatev1_status.go new file mode 100644 index 000000000..23850a255 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_pdsdataservicedeploymentconfigupdatev1_status.go @@ -0,0 +1,241 @@ +/* +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeploymentconfigupdate + +import ( + "encoding/json" +) + +// checks if the Pdsdataservicedeploymentconfigupdatev1Status type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &Pdsdataservicedeploymentconfigupdatev1Status{} + +// Pdsdataservicedeploymentconfigupdatev1Status Status of the DataService deployment config update. +type Pdsdataservicedeploymentconfigupdatev1Status struct { + // Error Code is a short string that represents the error. + ErrorCode *string `json:"errorCode,omitempty"` + // Error Message is a description of the error. + ErrorMessage *string `json:"errorMessage,omitempty"` + // Number of times the DataService config update has been retried. + RetryCount *int32 `json:"retryCount,omitempty"` + Phase *Pdsdataservicedeploymentconfigupdatev1StatusPhase `json:"phase,omitempty"` +} + +// NewPdsdataservicedeploymentconfigupdatev1Status instantiates a new Pdsdataservicedeploymentconfigupdatev1Status object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewPdsdataservicedeploymentconfigupdatev1Status() *Pdsdataservicedeploymentconfigupdatev1Status { + this := Pdsdataservicedeploymentconfigupdatev1Status{} + var phase Pdsdataservicedeploymentconfigupdatev1StatusPhase = PDSDATASERVICEDEPLOYMENTCONFIGUPDATEV1STATUSPHASE_PHASE_UNSPECIFIED + this.Phase = &phase + return &this +} + +// NewPdsdataservicedeploymentconfigupdatev1StatusWithDefaults instantiates a new Pdsdataservicedeploymentconfigupdatev1Status object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewPdsdataservicedeploymentconfigupdatev1StatusWithDefaults() *Pdsdataservicedeploymentconfigupdatev1Status { + this := Pdsdataservicedeploymentconfigupdatev1Status{} + var phase Pdsdataservicedeploymentconfigupdatev1StatusPhase = PDSDATASERVICEDEPLOYMENTCONFIGUPDATEV1STATUSPHASE_PHASE_UNSPECIFIED + this.Phase = &phase + return &this +} + +// GetErrorCode returns the ErrorCode field value if set, zero value otherwise. +func (o *Pdsdataservicedeploymentconfigupdatev1Status) GetErrorCode() string { + if o == nil || IsNil(o.ErrorCode) { + var ret string + return ret + } + return *o.ErrorCode +} + +// GetErrorCodeOk returns a tuple with the ErrorCode field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *Pdsdataservicedeploymentconfigupdatev1Status) GetErrorCodeOk() (*string, bool) { + if o == nil || IsNil(o.ErrorCode) { + return nil, false + } + return o.ErrorCode, true +} + +// HasErrorCode returns a boolean if a field has been set. +func (o *Pdsdataservicedeploymentconfigupdatev1Status) HasErrorCode() bool { + if o != nil && !IsNil(o.ErrorCode) { + return true + } + + return false +} + +// SetErrorCode gets a reference to the given string and assigns it to the ErrorCode field. +func (o *Pdsdataservicedeploymentconfigupdatev1Status) SetErrorCode(v string) { + o.ErrorCode = &v +} + +// GetErrorMessage returns the ErrorMessage field value if set, zero value otherwise. +func (o *Pdsdataservicedeploymentconfigupdatev1Status) GetErrorMessage() string { + if o == nil || IsNil(o.ErrorMessage) { + var ret string + return ret + } + return *o.ErrorMessage +} + +// GetErrorMessageOk returns a tuple with the ErrorMessage field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *Pdsdataservicedeploymentconfigupdatev1Status) GetErrorMessageOk() (*string, bool) { + if o == nil || IsNil(o.ErrorMessage) { + return nil, false + } + return o.ErrorMessage, true +} + +// HasErrorMessage returns a boolean if a field has been set. +func (o *Pdsdataservicedeploymentconfigupdatev1Status) HasErrorMessage() bool { + if o != nil && !IsNil(o.ErrorMessage) { + return true + } + + return false +} + +// SetErrorMessage gets a reference to the given string and assigns it to the ErrorMessage field. +func (o *Pdsdataservicedeploymentconfigupdatev1Status) SetErrorMessage(v string) { + o.ErrorMessage = &v +} + +// GetRetryCount returns the RetryCount field value if set, zero value otherwise. +func (o *Pdsdataservicedeploymentconfigupdatev1Status) GetRetryCount() int32 { + if o == nil || IsNil(o.RetryCount) { + var ret int32 + return ret + } + return *o.RetryCount +} + +// GetRetryCountOk returns a tuple with the RetryCount field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *Pdsdataservicedeploymentconfigupdatev1Status) GetRetryCountOk() (*int32, bool) { + if o == nil || IsNil(o.RetryCount) { + return nil, false + } + return o.RetryCount, true +} + +// HasRetryCount returns a boolean if a field has been set. +func (o *Pdsdataservicedeploymentconfigupdatev1Status) HasRetryCount() bool { + if o != nil && !IsNil(o.RetryCount) { + return true + } + + return false +} + +// SetRetryCount gets a reference to the given int32 and assigns it to the RetryCount field. +func (o *Pdsdataservicedeploymentconfigupdatev1Status) SetRetryCount(v int32) { + o.RetryCount = &v +} + +// GetPhase returns the Phase field value if set, zero value otherwise. +func (o *Pdsdataservicedeploymentconfigupdatev1Status) GetPhase() Pdsdataservicedeploymentconfigupdatev1StatusPhase { + if o == nil || IsNil(o.Phase) { + var ret Pdsdataservicedeploymentconfigupdatev1StatusPhase + return ret + } + return *o.Phase +} + +// GetPhaseOk returns a tuple with the Phase field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *Pdsdataservicedeploymentconfigupdatev1Status) GetPhaseOk() (*Pdsdataservicedeploymentconfigupdatev1StatusPhase, bool) { + if o == nil || IsNil(o.Phase) { + return nil, false + } + return o.Phase, true +} + +// HasPhase returns a boolean if a field has been set. +func (o *Pdsdataservicedeploymentconfigupdatev1Status) HasPhase() bool { + if o != nil && !IsNil(o.Phase) { + return true + } + + return false +} + +// SetPhase gets a reference to the given Pdsdataservicedeploymentconfigupdatev1StatusPhase and assigns it to the Phase field. +func (o *Pdsdataservicedeploymentconfigupdatev1Status) SetPhase(v Pdsdataservicedeploymentconfigupdatev1StatusPhase) { + o.Phase = &v +} + +func (o Pdsdataservicedeploymentconfigupdatev1Status) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o Pdsdataservicedeploymentconfigupdatev1Status) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.ErrorCode) { + toSerialize["errorCode"] = o.ErrorCode + } + if !IsNil(o.ErrorMessage) { + toSerialize["errorMessage"] = o.ErrorMessage + } + if !IsNil(o.RetryCount) { + toSerialize["retryCount"] = o.RetryCount + } + if !IsNil(o.Phase) { + toSerialize["phase"] = o.Phase + } + return toSerialize, nil +} + +type NullablePdsdataservicedeploymentconfigupdatev1Status struct { + value *Pdsdataservicedeploymentconfigupdatev1Status + isSet bool +} + +func (v NullablePdsdataservicedeploymentconfigupdatev1Status) Get() *Pdsdataservicedeploymentconfigupdatev1Status { + return v.value +} + +func (v *NullablePdsdataservicedeploymentconfigupdatev1Status) Set(val *Pdsdataservicedeploymentconfigupdatev1Status) { + v.value = val + v.isSet = true +} + +func (v NullablePdsdataservicedeploymentconfigupdatev1Status) IsSet() bool { + return v.isSet +} + +func (v *NullablePdsdataservicedeploymentconfigupdatev1Status) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullablePdsdataservicedeploymentconfigupdatev1Status(val *Pdsdataservicedeploymentconfigupdatev1Status) *NullablePdsdataservicedeploymentconfigupdatev1Status { + return &NullablePdsdataservicedeploymentconfigupdatev1Status{value: val, isSet: true} +} + +func (v NullablePdsdataservicedeploymentconfigupdatev1Status) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullablePdsdataservicedeploymentconfigupdatev1Status) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_pdsdataservicedeploymentconfigupdatev1_status_phase.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_pdsdataservicedeploymentconfigupdatev1_status_phase.go new file mode 100644 index 000000000..ed605ca0f --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_pdsdataservicedeploymentconfigupdatev1_status_phase.go @@ -0,0 +1,119 @@ +/* +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeploymentconfigupdate + +import ( + "encoding/json" + "fmt" +) + +// Pdsdataservicedeploymentconfigupdatev1StatusPhase Enum for Phase of the DataService deployment config update. - PHASE_UNSPECIFIED: Phase is unspecified. - FAILED: DataService deployment config update failed. - QUEUED: DataService deployment config update is queued. - IN_PROGRESS: DataService deployment config update is in progress. - COMPLETED: DataService deployment config update is completed. - REQUEUED: DataService config update is requeued. +type Pdsdataservicedeploymentconfigupdatev1StatusPhase string + +// List of pdsdataservicedeploymentconfigupdatev1StatusPhase +const ( + PDSDATASERVICEDEPLOYMENTCONFIGUPDATEV1STATUSPHASE_PHASE_UNSPECIFIED Pdsdataservicedeploymentconfigupdatev1StatusPhase = "PHASE_UNSPECIFIED" + PDSDATASERVICEDEPLOYMENTCONFIGUPDATEV1STATUSPHASE_FAILED Pdsdataservicedeploymentconfigupdatev1StatusPhase = "FAILED" + PDSDATASERVICEDEPLOYMENTCONFIGUPDATEV1STATUSPHASE_QUEUED Pdsdataservicedeploymentconfigupdatev1StatusPhase = "QUEUED" + PDSDATASERVICEDEPLOYMENTCONFIGUPDATEV1STATUSPHASE_IN_PROGRESS Pdsdataservicedeploymentconfigupdatev1StatusPhase = "IN_PROGRESS" + PDSDATASERVICEDEPLOYMENTCONFIGUPDATEV1STATUSPHASE_COMPLETED Pdsdataservicedeploymentconfigupdatev1StatusPhase = "COMPLETED" + PDSDATASERVICEDEPLOYMENTCONFIGUPDATEV1STATUSPHASE_REQUEUED Pdsdataservicedeploymentconfigupdatev1StatusPhase = "REQUEUED" +) + +// All allowed values of Pdsdataservicedeploymentconfigupdatev1StatusPhase enum +var AllowedPdsdataservicedeploymentconfigupdatev1StatusPhaseEnumValues = []Pdsdataservicedeploymentconfigupdatev1StatusPhase{ + "PHASE_UNSPECIFIED", + "FAILED", + "QUEUED", + "IN_PROGRESS", + "COMPLETED", + "REQUEUED", +} + +func (v *Pdsdataservicedeploymentconfigupdatev1StatusPhase) UnmarshalJSON(src []byte) error { + var value string + err := json.Unmarshal(src, &value) + if err != nil { + return err + } + enumTypeValue := Pdsdataservicedeploymentconfigupdatev1StatusPhase(value) + for _, existing := range AllowedPdsdataservicedeploymentconfigupdatev1StatusPhaseEnumValues { + if existing == enumTypeValue { + *v = enumTypeValue + return nil + } + } + + return fmt.Errorf("%+v is not a valid Pdsdataservicedeploymentconfigupdatev1StatusPhase", value) +} + +// NewPdsdataservicedeploymentconfigupdatev1StatusPhaseFromValue returns a pointer to a valid Pdsdataservicedeploymentconfigupdatev1StatusPhase +// for the value passed as argument, or an error if the value passed is not allowed by the enum +func NewPdsdataservicedeploymentconfigupdatev1StatusPhaseFromValue(v string) (*Pdsdataservicedeploymentconfigupdatev1StatusPhase, error) { + ev := Pdsdataservicedeploymentconfigupdatev1StatusPhase(v) + if ev.IsValid() { + return &ev, nil + } else { + return nil, fmt.Errorf("invalid value '%v' for Pdsdataservicedeploymentconfigupdatev1StatusPhase: valid values are %v", v, AllowedPdsdataservicedeploymentconfigupdatev1StatusPhaseEnumValues) + } +} + +// IsValid return true if the value is valid for the enum, false otherwise +func (v Pdsdataservicedeploymentconfigupdatev1StatusPhase) IsValid() bool { + for _, existing := range AllowedPdsdataservicedeploymentconfigupdatev1StatusPhaseEnumValues { + if existing == v { + return true + } + } + return false +} + +// Ptr returns reference to pdsdataservicedeploymentconfigupdatev1StatusPhase value +func (v Pdsdataservicedeploymentconfigupdatev1StatusPhase) Ptr() *Pdsdataservicedeploymentconfigupdatev1StatusPhase { + return &v +} + +type NullablePdsdataservicedeploymentconfigupdatev1StatusPhase struct { + value *Pdsdataservicedeploymentconfigupdatev1StatusPhase + isSet bool +} + +func (v NullablePdsdataservicedeploymentconfigupdatev1StatusPhase) Get() *Pdsdataservicedeploymentconfigupdatev1StatusPhase { + return v.value +} + +func (v *NullablePdsdataservicedeploymentconfigupdatev1StatusPhase) Set(val *Pdsdataservicedeploymentconfigupdatev1StatusPhase) { + v.value = val + v.isSet = true +} + +func (v NullablePdsdataservicedeploymentconfigupdatev1StatusPhase) IsSet() bool { + return v.isSet +} + +func (v *NullablePdsdataservicedeploymentconfigupdatev1StatusPhase) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullablePdsdataservicedeploymentconfigupdatev1StatusPhase(val *Pdsdataservicedeploymentconfigupdatev1StatusPhase) *NullablePdsdataservicedeploymentconfigupdatev1StatusPhase { + return &NullablePdsdataservicedeploymentconfigupdatev1StatusPhase{value: val, isSet: true} +} + +func (v NullablePdsdataservicedeploymentconfigupdatev1StatusPhase) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullablePdsdataservicedeploymentconfigupdatev1StatusPhase) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_pdsdataservicedeploymentv1_config.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_pdsdataservicedeploymentv1_config.go new file mode 100644 index 000000000..eb5a5587f --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_pdsdataservicedeploymentv1_config.go @@ -0,0 +1,199 @@ +/* +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeploymentconfigupdate + +import ( + "encoding/json" +) + +// checks if the Pdsdataservicedeploymentv1Config type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &Pdsdataservicedeploymentv1Config{} + +// Pdsdataservicedeploymentv1Config Desired configuration of the DataService Deployment. +type Pdsdataservicedeploymentv1Config struct { + References *V1References `json:"references,omitempty"` + TlsConfig *V1TLSConfig `json:"tlsConfig,omitempty"` + // A DataService deployment topology contains a number of nodes that have various attributes as a collective group. + DataServiceDeploymentTopologies []V1DataServiceDeploymentTopology `json:"dataServiceDeploymentTopologies,omitempty"` +} + +// NewPdsdataservicedeploymentv1Config instantiates a new Pdsdataservicedeploymentv1Config object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewPdsdataservicedeploymentv1Config() *Pdsdataservicedeploymentv1Config { + this := Pdsdataservicedeploymentv1Config{} + return &this +} + +// NewPdsdataservicedeploymentv1ConfigWithDefaults instantiates a new Pdsdataservicedeploymentv1Config object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewPdsdataservicedeploymentv1ConfigWithDefaults() *Pdsdataservicedeploymentv1Config { + this := Pdsdataservicedeploymentv1Config{} + return &this +} + +// GetReferences returns the References field value if set, zero value otherwise. +func (o *Pdsdataservicedeploymentv1Config) GetReferences() V1References { + if o == nil || IsNil(o.References) { + var ret V1References + return ret + } + return *o.References +} + +// GetReferencesOk returns a tuple with the References field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *Pdsdataservicedeploymentv1Config) GetReferencesOk() (*V1References, bool) { + if o == nil || IsNil(o.References) { + return nil, false + } + return o.References, true +} + +// HasReferences returns a boolean if a field has been set. +func (o *Pdsdataservicedeploymentv1Config) HasReferences() bool { + if o != nil && !IsNil(o.References) { + return true + } + + return false +} + +// SetReferences gets a reference to the given V1References and assigns it to the References field. +func (o *Pdsdataservicedeploymentv1Config) SetReferences(v V1References) { + o.References = &v +} + +// GetTlsConfig returns the TlsConfig field value if set, zero value otherwise. +func (o *Pdsdataservicedeploymentv1Config) GetTlsConfig() V1TLSConfig { + if o == nil || IsNil(o.TlsConfig) { + var ret V1TLSConfig + return ret + } + return *o.TlsConfig +} + +// GetTlsConfigOk returns a tuple with the TlsConfig field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *Pdsdataservicedeploymentv1Config) GetTlsConfigOk() (*V1TLSConfig, bool) { + if o == nil || IsNil(o.TlsConfig) { + return nil, false + } + return o.TlsConfig, true +} + +// HasTlsConfig returns a boolean if a field has been set. +func (o *Pdsdataservicedeploymentv1Config) HasTlsConfig() bool { + if o != nil && !IsNil(o.TlsConfig) { + return true + } + + return false +} + +// SetTlsConfig gets a reference to the given V1TLSConfig and assigns it to the TlsConfig field. +func (o *Pdsdataservicedeploymentv1Config) SetTlsConfig(v V1TLSConfig) { + o.TlsConfig = &v +} + +// GetDataServiceDeploymentTopologies returns the DataServiceDeploymentTopologies field value if set, zero value otherwise. +func (o *Pdsdataservicedeploymentv1Config) GetDataServiceDeploymentTopologies() []V1DataServiceDeploymentTopology { + if o == nil || IsNil(o.DataServiceDeploymentTopologies) { + var ret []V1DataServiceDeploymentTopology + return ret + } + return o.DataServiceDeploymentTopologies +} + +// GetDataServiceDeploymentTopologiesOk returns a tuple with the DataServiceDeploymentTopologies field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *Pdsdataservicedeploymentv1Config) GetDataServiceDeploymentTopologiesOk() ([]V1DataServiceDeploymentTopology, bool) { + if o == nil || IsNil(o.DataServiceDeploymentTopologies) { + return nil, false + } + return o.DataServiceDeploymentTopologies, true +} + +// HasDataServiceDeploymentTopologies returns a boolean if a field has been set. +func (o *Pdsdataservicedeploymentv1Config) HasDataServiceDeploymentTopologies() bool { + if o != nil && !IsNil(o.DataServiceDeploymentTopologies) { + return true + } + + return false +} + +// SetDataServiceDeploymentTopologies gets a reference to the given []V1DataServiceDeploymentTopology and assigns it to the DataServiceDeploymentTopologies field. +func (o *Pdsdataservicedeploymentv1Config) SetDataServiceDeploymentTopologies(v []V1DataServiceDeploymentTopology) { + o.DataServiceDeploymentTopologies = v +} + +func (o Pdsdataservicedeploymentv1Config) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o Pdsdataservicedeploymentv1Config) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.References) { + toSerialize["references"] = o.References + } + if !IsNil(o.TlsConfig) { + toSerialize["tlsConfig"] = o.TlsConfig + } + if !IsNil(o.DataServiceDeploymentTopologies) { + toSerialize["dataServiceDeploymentTopologies"] = o.DataServiceDeploymentTopologies + } + return toSerialize, nil +} + +type NullablePdsdataservicedeploymentv1Config struct { + value *Pdsdataservicedeploymentv1Config + isSet bool +} + +func (v NullablePdsdataservicedeploymentv1Config) Get() *Pdsdataservicedeploymentv1Config { + return v.value +} + +func (v *NullablePdsdataservicedeploymentv1Config) Set(val *Pdsdataservicedeploymentv1Config) { + v.value = val + v.isSet = true +} + +func (v NullablePdsdataservicedeploymentv1Config) IsSet() bool { + return v.isSet +} + +func (v *NullablePdsdataservicedeploymentv1Config) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullablePdsdataservicedeploymentv1Config(val *Pdsdataservicedeploymentv1Config) *NullablePdsdataservicedeploymentv1Config { + return &NullablePdsdataservicedeploymentv1Config{value: val, isSet: true} +} + +func (v NullablePdsdataservicedeploymentv1Config) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullablePdsdataservicedeploymentv1Config) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_protobuf_any.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_protobuf_any.go similarity index 96% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_protobuf_any.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_protobuf_any.go index 24c6d164f..d48d02941 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_protobuf_any.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_protobuf_any.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deploymentconfigupdate +package dataservicedeploymentconfigupdate import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_sort_by_field.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_sort_by_field.go similarity index 95% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_sort_by_field.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_sort_by_field.go index 0e696dbd9..85f5ce2a2 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_sort_by_field.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_sort_by_field.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deploymentconfigupdate +package dataservicedeploymentconfigupdate import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_data_service_deployment_config_update.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_data_service_deployment_config_update.go new file mode 100644 index 000000000..46261e72d --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_data_service_deployment_config_update.go @@ -0,0 +1,198 @@ +/* +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeploymentconfigupdate + +import ( + "encoding/json" +) + +// checks if the V1DataServiceDeploymentConfigUpdate type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &V1DataServiceDeploymentConfigUpdate{} + +// V1DataServiceDeploymentConfigUpdate DataServiceDeploymentConfigUpdate represents a DataService deployment config update resource. +type V1DataServiceDeploymentConfigUpdate struct { + Meta *V1Meta `json:"meta,omitempty"` + Config *Pdsdataservicedeploymentconfigupdatev1Config `json:"config,omitempty"` + Status *Pdsdataservicedeploymentconfigupdatev1Status `json:"status,omitempty"` +} + +// NewV1DataServiceDeploymentConfigUpdate instantiates a new V1DataServiceDeploymentConfigUpdate object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewV1DataServiceDeploymentConfigUpdate() *V1DataServiceDeploymentConfigUpdate { + this := V1DataServiceDeploymentConfigUpdate{} + return &this +} + +// NewV1DataServiceDeploymentConfigUpdateWithDefaults instantiates a new V1DataServiceDeploymentConfigUpdate object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewV1DataServiceDeploymentConfigUpdateWithDefaults() *V1DataServiceDeploymentConfigUpdate { + this := V1DataServiceDeploymentConfigUpdate{} + return &this +} + +// GetMeta returns the Meta field value if set, zero value otherwise. +func (o *V1DataServiceDeploymentConfigUpdate) GetMeta() V1Meta { + if o == nil || IsNil(o.Meta) { + var ret V1Meta + return ret + } + return *o.Meta +} + +// GetMetaOk returns a tuple with the Meta field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1DataServiceDeploymentConfigUpdate) GetMetaOk() (*V1Meta, bool) { + if o == nil || IsNil(o.Meta) { + return nil, false + } + return o.Meta, true +} + +// HasMeta returns a boolean if a field has been set. +func (o *V1DataServiceDeploymentConfigUpdate) HasMeta() bool { + if o != nil && !IsNil(o.Meta) { + return true + } + + return false +} + +// SetMeta gets a reference to the given V1Meta and assigns it to the Meta field. +func (o *V1DataServiceDeploymentConfigUpdate) SetMeta(v V1Meta) { + o.Meta = &v +} + +// GetConfig returns the Config field value if set, zero value otherwise. +func (o *V1DataServiceDeploymentConfigUpdate) GetConfig() Pdsdataservicedeploymentconfigupdatev1Config { + if o == nil || IsNil(o.Config) { + var ret Pdsdataservicedeploymentconfigupdatev1Config + return ret + } + return *o.Config +} + +// GetConfigOk returns a tuple with the Config field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1DataServiceDeploymentConfigUpdate) GetConfigOk() (*Pdsdataservicedeploymentconfigupdatev1Config, bool) { + if o == nil || IsNil(o.Config) { + return nil, false + } + return o.Config, true +} + +// HasConfig returns a boolean if a field has been set. +func (o *V1DataServiceDeploymentConfigUpdate) HasConfig() bool { + if o != nil && !IsNil(o.Config) { + return true + } + + return false +} + +// SetConfig gets a reference to the given Pdsdataservicedeploymentconfigupdatev1Config and assigns it to the Config field. +func (o *V1DataServiceDeploymentConfigUpdate) SetConfig(v Pdsdataservicedeploymentconfigupdatev1Config) { + o.Config = &v +} + +// GetStatus returns the Status field value if set, zero value otherwise. +func (o *V1DataServiceDeploymentConfigUpdate) GetStatus() Pdsdataservicedeploymentconfigupdatev1Status { + if o == nil || IsNil(o.Status) { + var ret Pdsdataservicedeploymentconfigupdatev1Status + return ret + } + return *o.Status +} + +// GetStatusOk returns a tuple with the Status field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1DataServiceDeploymentConfigUpdate) GetStatusOk() (*Pdsdataservicedeploymentconfigupdatev1Status, bool) { + if o == nil || IsNil(o.Status) { + return nil, false + } + return o.Status, true +} + +// HasStatus returns a boolean if a field has been set. +func (o *V1DataServiceDeploymentConfigUpdate) HasStatus() bool { + if o != nil && !IsNil(o.Status) { + return true + } + + return false +} + +// SetStatus gets a reference to the given Pdsdataservicedeploymentconfigupdatev1Status and assigns it to the Status field. +func (o *V1DataServiceDeploymentConfigUpdate) SetStatus(v Pdsdataservicedeploymentconfigupdatev1Status) { + o.Status = &v +} + +func (o V1DataServiceDeploymentConfigUpdate) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o V1DataServiceDeploymentConfigUpdate) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.Meta) { + toSerialize["meta"] = o.Meta + } + if !IsNil(o.Config) { + toSerialize["config"] = o.Config + } + if !IsNil(o.Status) { + toSerialize["status"] = o.Status + } + return toSerialize, nil +} + +type NullableV1DataServiceDeploymentConfigUpdate struct { + value *V1DataServiceDeploymentConfigUpdate + isSet bool +} + +func (v NullableV1DataServiceDeploymentConfigUpdate) Get() *V1DataServiceDeploymentConfigUpdate { + return v.value +} + +func (v *NullableV1DataServiceDeploymentConfigUpdate) Set(val *V1DataServiceDeploymentConfigUpdate) { + v.value = val + v.isSet = true +} + +func (v NullableV1DataServiceDeploymentConfigUpdate) IsSet() bool { + return v.isSet +} + +func (v *NullableV1DataServiceDeploymentConfigUpdate) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableV1DataServiceDeploymentConfigUpdate(val *V1DataServiceDeploymentConfigUpdate) *NullableV1DataServiceDeploymentConfigUpdate { + return &NullableV1DataServiceDeploymentConfigUpdate{value: val, isSet: true} +} + +func (v NullableV1DataServiceDeploymentConfigUpdate) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableV1DataServiceDeploymentConfigUpdate) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_deployment_topology.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_data_service_deployment_topology.go similarity index 60% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_deployment_topology.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_data_service_deployment_topology.go index a0ac056f1..4ff289b67 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_deployment_topology.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_data_service_deployment_topology.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,23 +8,23 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeploymentconfigupdate import ( "encoding/json" ) -// checks if the V1DeploymentTopology type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &V1DeploymentTopology{} +// checks if the V1DataServiceDeploymentTopology type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &V1DataServiceDeploymentTopology{} -// V1DeploymentTopology A deployment topology contains a number of nodes that have various attributes as a collective group. This is consumed in a deployment and the functionality is being controlled by the CRUD APIs of deployment. -type V1DeploymentTopology struct { - // Name of the deployment topology. +// V1DataServiceDeploymentTopology A DataService topology contains a number of nodes that have various attributes as a collective group. This is consumed in a DataService Deployment and the functionality is being controlled by the CRUD APIs of DataService Deployment. +type V1DataServiceDeploymentTopology struct { + // Name of the DataServiceDeployment topology. Name *string `json:"name,omitempty"` - // Description of the deployment topology. + // Description of the DataServiceDeployment topology. Description *string `json:"description,omitempty"` - // Number of replicas of data services. - Replicas *string `json:"replicas,omitempty"` + // Number of instances of data services. + Instances *string `json:"instances,omitempty"` // Service type are standard Kubernetes service types such as clusterIP, NodePort, load balancers, etc. ServiceType *string `json:"serviceType,omitempty"` // Service name is the name of service as provided by user. @@ -36,25 +36,25 @@ type V1DeploymentTopology struct { StorageOptions *V1Template `json:"storageOptions,omitempty"` } -// NewV1DeploymentTopology instantiates a new V1DeploymentTopology object +// NewV1DataServiceDeploymentTopology instantiates a new V1DataServiceDeploymentTopology object // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewV1DeploymentTopology() *V1DeploymentTopology { - this := V1DeploymentTopology{} +func NewV1DataServiceDeploymentTopology() *V1DataServiceDeploymentTopology { + this := V1DataServiceDeploymentTopology{} return &this } -// NewV1DeploymentTopologyWithDefaults instantiates a new V1DeploymentTopology object +// NewV1DataServiceDeploymentTopologyWithDefaults instantiates a new V1DataServiceDeploymentTopology object // This constructor will only assign default values to properties that have it defined, // but it doesn't guarantee that properties required by API are set -func NewV1DeploymentTopologyWithDefaults() *V1DeploymentTopology { - this := V1DeploymentTopology{} +func NewV1DataServiceDeploymentTopologyWithDefaults() *V1DataServiceDeploymentTopology { + this := V1DataServiceDeploymentTopology{} return &this } // GetName returns the Name field value if set, zero value otherwise. -func (o *V1DeploymentTopology) GetName() string { +func (o *V1DataServiceDeploymentTopology) GetName() string { if o == nil || IsNil(o.Name) { var ret string return ret @@ -64,7 +64,7 @@ func (o *V1DeploymentTopology) GetName() string { // GetNameOk returns a tuple with the Name field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentTopology) GetNameOk() (*string, bool) { +func (o *V1DataServiceDeploymentTopology) GetNameOk() (*string, bool) { if o == nil || IsNil(o.Name) { return nil, false } @@ -72,7 +72,7 @@ func (o *V1DeploymentTopology) GetNameOk() (*string, bool) { } // HasName returns a boolean if a field has been set. -func (o *V1DeploymentTopology) HasName() bool { +func (o *V1DataServiceDeploymentTopology) HasName() bool { if o != nil && !IsNil(o.Name) { return true } @@ -81,12 +81,12 @@ func (o *V1DeploymentTopology) HasName() bool { } // SetName gets a reference to the given string and assigns it to the Name field. -func (o *V1DeploymentTopology) SetName(v string) { +func (o *V1DataServiceDeploymentTopology) SetName(v string) { o.Name = &v } // GetDescription returns the Description field value if set, zero value otherwise. -func (o *V1DeploymentTopology) GetDescription() string { +func (o *V1DataServiceDeploymentTopology) GetDescription() string { if o == nil || IsNil(o.Description) { var ret string return ret @@ -96,7 +96,7 @@ func (o *V1DeploymentTopology) GetDescription() string { // GetDescriptionOk returns a tuple with the Description field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentTopology) GetDescriptionOk() (*string, bool) { +func (o *V1DataServiceDeploymentTopology) GetDescriptionOk() (*string, bool) { if o == nil || IsNil(o.Description) { return nil, false } @@ -104,7 +104,7 @@ func (o *V1DeploymentTopology) GetDescriptionOk() (*string, bool) { } // HasDescription returns a boolean if a field has been set. -func (o *V1DeploymentTopology) HasDescription() bool { +func (o *V1DataServiceDeploymentTopology) HasDescription() bool { if o != nil && !IsNil(o.Description) { return true } @@ -113,44 +113,44 @@ func (o *V1DeploymentTopology) HasDescription() bool { } // SetDescription gets a reference to the given string and assigns it to the Description field. -func (o *V1DeploymentTopology) SetDescription(v string) { +func (o *V1DataServiceDeploymentTopology) SetDescription(v string) { o.Description = &v } -// GetReplicas returns the Replicas field value if set, zero value otherwise. -func (o *V1DeploymentTopology) GetReplicas() string { - if o == nil || IsNil(o.Replicas) { +// GetInstances returns the Instances field value if set, zero value otherwise. +func (o *V1DataServiceDeploymentTopology) GetInstances() string { + if o == nil || IsNil(o.Instances) { var ret string return ret } - return *o.Replicas + return *o.Instances } -// GetReplicasOk returns a tuple with the Replicas field value if set, nil otherwise +// GetInstancesOk returns a tuple with the Instances field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentTopology) GetReplicasOk() (*string, bool) { - if o == nil || IsNil(o.Replicas) { +func (o *V1DataServiceDeploymentTopology) GetInstancesOk() (*string, bool) { + if o == nil || IsNil(o.Instances) { return nil, false } - return o.Replicas, true + return o.Instances, true } -// HasReplicas returns a boolean if a field has been set. -func (o *V1DeploymentTopology) HasReplicas() bool { - if o != nil && !IsNil(o.Replicas) { +// HasInstances returns a boolean if a field has been set. +func (o *V1DataServiceDeploymentTopology) HasInstances() bool { + if o != nil && !IsNil(o.Instances) { return true } return false } -// SetReplicas gets a reference to the given string and assigns it to the Replicas field. -func (o *V1DeploymentTopology) SetReplicas(v string) { - o.Replicas = &v +// SetInstances gets a reference to the given string and assigns it to the Instances field. +func (o *V1DataServiceDeploymentTopology) SetInstances(v string) { + o.Instances = &v } // GetServiceType returns the ServiceType field value if set, zero value otherwise. -func (o *V1DeploymentTopology) GetServiceType() string { +func (o *V1DataServiceDeploymentTopology) GetServiceType() string { if o == nil || IsNil(o.ServiceType) { var ret string return ret @@ -160,7 +160,7 @@ func (o *V1DeploymentTopology) GetServiceType() string { // GetServiceTypeOk returns a tuple with the ServiceType field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentTopology) GetServiceTypeOk() (*string, bool) { +func (o *V1DataServiceDeploymentTopology) GetServiceTypeOk() (*string, bool) { if o == nil || IsNil(o.ServiceType) { return nil, false } @@ -168,7 +168,7 @@ func (o *V1DeploymentTopology) GetServiceTypeOk() (*string, bool) { } // HasServiceType returns a boolean if a field has been set. -func (o *V1DeploymentTopology) HasServiceType() bool { +func (o *V1DataServiceDeploymentTopology) HasServiceType() bool { if o != nil && !IsNil(o.ServiceType) { return true } @@ -177,12 +177,12 @@ func (o *V1DeploymentTopology) HasServiceType() bool { } // SetServiceType gets a reference to the given string and assigns it to the ServiceType field. -func (o *V1DeploymentTopology) SetServiceType(v string) { +func (o *V1DataServiceDeploymentTopology) SetServiceType(v string) { o.ServiceType = &v } // GetServiceName returns the ServiceName field value if set, zero value otherwise. -func (o *V1DeploymentTopology) GetServiceName() string { +func (o *V1DataServiceDeploymentTopology) GetServiceName() string { if o == nil || IsNil(o.ServiceName) { var ret string return ret @@ -192,7 +192,7 @@ func (o *V1DeploymentTopology) GetServiceName() string { // GetServiceNameOk returns a tuple with the ServiceName field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentTopology) GetServiceNameOk() (*string, bool) { +func (o *V1DataServiceDeploymentTopology) GetServiceNameOk() (*string, bool) { if o == nil || IsNil(o.ServiceName) { return nil, false } @@ -200,7 +200,7 @@ func (o *V1DeploymentTopology) GetServiceNameOk() (*string, bool) { } // HasServiceName returns a boolean if a field has been set. -func (o *V1DeploymentTopology) HasServiceName() bool { +func (o *V1DataServiceDeploymentTopology) HasServiceName() bool { if o != nil && !IsNil(o.ServiceName) { return true } @@ -209,12 +209,12 @@ func (o *V1DeploymentTopology) HasServiceName() bool { } // SetServiceName gets a reference to the given string and assigns it to the ServiceName field. -func (o *V1DeploymentTopology) SetServiceName(v string) { +func (o *V1DataServiceDeploymentTopology) SetServiceName(v string) { o.ServiceName = &v } // GetLoadBalancerSourceRanges returns the LoadBalancerSourceRanges field value if set, zero value otherwise. -func (o *V1DeploymentTopology) GetLoadBalancerSourceRanges() []string { +func (o *V1DataServiceDeploymentTopology) GetLoadBalancerSourceRanges() []string { if o == nil || IsNil(o.LoadBalancerSourceRanges) { var ret []string return ret @@ -224,7 +224,7 @@ func (o *V1DeploymentTopology) GetLoadBalancerSourceRanges() []string { // GetLoadBalancerSourceRangesOk returns a tuple with the LoadBalancerSourceRanges field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentTopology) GetLoadBalancerSourceRangesOk() ([]string, bool) { +func (o *V1DataServiceDeploymentTopology) GetLoadBalancerSourceRangesOk() ([]string, bool) { if o == nil || IsNil(o.LoadBalancerSourceRanges) { return nil, false } @@ -232,7 +232,7 @@ func (o *V1DeploymentTopology) GetLoadBalancerSourceRangesOk() ([]string, bool) } // HasLoadBalancerSourceRanges returns a boolean if a field has been set. -func (o *V1DeploymentTopology) HasLoadBalancerSourceRanges() bool { +func (o *V1DataServiceDeploymentTopology) HasLoadBalancerSourceRanges() bool { if o != nil && !IsNil(o.LoadBalancerSourceRanges) { return true } @@ -241,12 +241,12 @@ func (o *V1DeploymentTopology) HasLoadBalancerSourceRanges() bool { } // SetLoadBalancerSourceRanges gets a reference to the given []string and assigns it to the LoadBalancerSourceRanges field. -func (o *V1DeploymentTopology) SetLoadBalancerSourceRanges(v []string) { +func (o *V1DataServiceDeploymentTopology) SetLoadBalancerSourceRanges(v []string) { o.LoadBalancerSourceRanges = v } // GetResourceSettings returns the ResourceSettings field value if set, zero value otherwise. -func (o *V1DeploymentTopology) GetResourceSettings() V1Template { +func (o *V1DataServiceDeploymentTopology) GetResourceSettings() V1Template { if o == nil || IsNil(o.ResourceSettings) { var ret V1Template return ret @@ -256,7 +256,7 @@ func (o *V1DeploymentTopology) GetResourceSettings() V1Template { // GetResourceSettingsOk returns a tuple with the ResourceSettings field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentTopology) GetResourceSettingsOk() (*V1Template, bool) { +func (o *V1DataServiceDeploymentTopology) GetResourceSettingsOk() (*V1Template, bool) { if o == nil || IsNil(o.ResourceSettings) { return nil, false } @@ -264,7 +264,7 @@ func (o *V1DeploymentTopology) GetResourceSettingsOk() (*V1Template, bool) { } // HasResourceSettings returns a boolean if a field has been set. -func (o *V1DeploymentTopology) HasResourceSettings() bool { +func (o *V1DataServiceDeploymentTopology) HasResourceSettings() bool { if o != nil && !IsNil(o.ResourceSettings) { return true } @@ -273,12 +273,12 @@ func (o *V1DeploymentTopology) HasResourceSettings() bool { } // SetResourceSettings gets a reference to the given V1Template and assigns it to the ResourceSettings field. -func (o *V1DeploymentTopology) SetResourceSettings(v V1Template) { +func (o *V1DataServiceDeploymentTopology) SetResourceSettings(v V1Template) { o.ResourceSettings = &v } // GetServiceConfigurations returns the ServiceConfigurations field value if set, zero value otherwise. -func (o *V1DeploymentTopology) GetServiceConfigurations() V1Template { +func (o *V1DataServiceDeploymentTopology) GetServiceConfigurations() V1Template { if o == nil || IsNil(o.ServiceConfigurations) { var ret V1Template return ret @@ -288,7 +288,7 @@ func (o *V1DeploymentTopology) GetServiceConfigurations() V1Template { // GetServiceConfigurationsOk returns a tuple with the ServiceConfigurations field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentTopology) GetServiceConfigurationsOk() (*V1Template, bool) { +func (o *V1DataServiceDeploymentTopology) GetServiceConfigurationsOk() (*V1Template, bool) { if o == nil || IsNil(o.ServiceConfigurations) { return nil, false } @@ -296,7 +296,7 @@ func (o *V1DeploymentTopology) GetServiceConfigurationsOk() (*V1Template, bool) } // HasServiceConfigurations returns a boolean if a field has been set. -func (o *V1DeploymentTopology) HasServiceConfigurations() bool { +func (o *V1DataServiceDeploymentTopology) HasServiceConfigurations() bool { if o != nil && !IsNil(o.ServiceConfigurations) { return true } @@ -305,12 +305,12 @@ func (o *V1DeploymentTopology) HasServiceConfigurations() bool { } // SetServiceConfigurations gets a reference to the given V1Template and assigns it to the ServiceConfigurations field. -func (o *V1DeploymentTopology) SetServiceConfigurations(v V1Template) { +func (o *V1DataServiceDeploymentTopology) SetServiceConfigurations(v V1Template) { o.ServiceConfigurations = &v } // GetStorageOptions returns the StorageOptions field value if set, zero value otherwise. -func (o *V1DeploymentTopology) GetStorageOptions() V1Template { +func (o *V1DataServiceDeploymentTopology) GetStorageOptions() V1Template { if o == nil || IsNil(o.StorageOptions) { var ret V1Template return ret @@ -320,7 +320,7 @@ func (o *V1DeploymentTopology) GetStorageOptions() V1Template { // GetStorageOptionsOk returns a tuple with the StorageOptions field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DeploymentTopology) GetStorageOptionsOk() (*V1Template, bool) { +func (o *V1DataServiceDeploymentTopology) GetStorageOptionsOk() (*V1Template, bool) { if o == nil || IsNil(o.StorageOptions) { return nil, false } @@ -328,7 +328,7 @@ func (o *V1DeploymentTopology) GetStorageOptionsOk() (*V1Template, bool) { } // HasStorageOptions returns a boolean if a field has been set. -func (o *V1DeploymentTopology) HasStorageOptions() bool { +func (o *V1DataServiceDeploymentTopology) HasStorageOptions() bool { if o != nil && !IsNil(o.StorageOptions) { return true } @@ -337,11 +337,11 @@ func (o *V1DeploymentTopology) HasStorageOptions() bool { } // SetStorageOptions gets a reference to the given V1Template and assigns it to the StorageOptions field. -func (o *V1DeploymentTopology) SetStorageOptions(v V1Template) { +func (o *V1DataServiceDeploymentTopology) SetStorageOptions(v V1Template) { o.StorageOptions = &v } -func (o V1DeploymentTopology) MarshalJSON() ([]byte, error) { +func (o V1DataServiceDeploymentTopology) MarshalJSON() ([]byte, error) { toSerialize,err := o.ToMap() if err != nil { return []byte{}, err @@ -349,7 +349,7 @@ func (o V1DeploymentTopology) MarshalJSON() ([]byte, error) { return json.Marshal(toSerialize) } -func (o V1DeploymentTopology) ToMap() (map[string]interface{}, error) { +func (o V1DataServiceDeploymentTopology) ToMap() (map[string]interface{}, error) { toSerialize := map[string]interface{}{} if !IsNil(o.Name) { toSerialize["name"] = o.Name @@ -357,8 +357,8 @@ func (o V1DeploymentTopology) ToMap() (map[string]interface{}, error) { if !IsNil(o.Description) { toSerialize["description"] = o.Description } - if !IsNil(o.Replicas) { - toSerialize["replicas"] = o.Replicas + if !IsNil(o.Instances) { + toSerialize["instances"] = o.Instances } if !IsNil(o.ServiceType) { toSerialize["serviceType"] = o.ServiceType @@ -381,38 +381,38 @@ func (o V1DeploymentTopology) ToMap() (map[string]interface{}, error) { return toSerialize, nil } -type NullableV1DeploymentTopology struct { - value *V1DeploymentTopology +type NullableV1DataServiceDeploymentTopology struct { + value *V1DataServiceDeploymentTopology isSet bool } -func (v NullableV1DeploymentTopology) Get() *V1DeploymentTopology { +func (v NullableV1DataServiceDeploymentTopology) Get() *V1DataServiceDeploymentTopology { return v.value } -func (v *NullableV1DeploymentTopology) Set(val *V1DeploymentTopology) { +func (v *NullableV1DataServiceDeploymentTopology) Set(val *V1DataServiceDeploymentTopology) { v.value = val v.isSet = true } -func (v NullableV1DeploymentTopology) IsSet() bool { +func (v NullableV1DataServiceDeploymentTopology) IsSet() bool { return v.isSet } -func (v *NullableV1DeploymentTopology) Unset() { +func (v *NullableV1DataServiceDeploymentTopology) Unset() { v.value = nil v.isSet = false } -func NewNullableV1DeploymentTopology(val *V1DeploymentTopology) *NullableV1DeploymentTopology { - return &NullableV1DeploymentTopology{value: val, isSet: true} +func NewNullableV1DataServiceDeploymentTopology(val *V1DataServiceDeploymentTopology) *NullableV1DataServiceDeploymentTopology { + return &NullableV1DataServiceDeploymentTopology{value: val, isSet: true} } -func (v NullableV1DeploymentTopology) MarshalJSON() ([]byte, error) { +func (v NullableV1DataServiceDeploymentTopology) MarshalJSON() ([]byte, error) { return json.Marshal(v.value) } -func (v *NullableV1DeploymentTopology) UnmarshalJSON(src []byte) error { +func (v *NullableV1DataServiceDeploymentTopology) UnmarshalJSON(src []byte) error { v.isSet = true return json.Unmarshal(src, &v.value) } diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_list_data_service_deployment_config_updates_response.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_list_data_service_deployment_config_updates_response.go new file mode 100644 index 000000000..010f2444e --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_list_data_service_deployment_config_updates_response.go @@ -0,0 +1,163 @@ +/* +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package dataservicedeploymentconfigupdate + +import ( + "encoding/json" +) + +// checks if the V1ListDataServiceDeploymentConfigUpdatesResponse type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &V1ListDataServiceDeploymentConfigUpdatesResponse{} + +// V1ListDataServiceDeploymentConfigUpdatesResponse ListDataServiceDeploymentConfigUpdatesResponse is the response for ListDataServiceDeploymentConfigUpdates. +type V1ListDataServiceDeploymentConfigUpdatesResponse struct { + // List of DataService deployment config updates. + DataServiceDeploymentConfigUpdates []V1DataServiceDeploymentConfigUpdate `json:"dataServiceDeploymentConfigUpdates,omitempty"` + Pagination *V1PageBasedPaginationResponse `json:"pagination,omitempty"` +} + +// NewV1ListDataServiceDeploymentConfigUpdatesResponse instantiates a new V1ListDataServiceDeploymentConfigUpdatesResponse object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewV1ListDataServiceDeploymentConfigUpdatesResponse() *V1ListDataServiceDeploymentConfigUpdatesResponse { + this := V1ListDataServiceDeploymentConfigUpdatesResponse{} + return &this +} + +// NewV1ListDataServiceDeploymentConfigUpdatesResponseWithDefaults instantiates a new V1ListDataServiceDeploymentConfigUpdatesResponse object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewV1ListDataServiceDeploymentConfigUpdatesResponseWithDefaults() *V1ListDataServiceDeploymentConfigUpdatesResponse { + this := V1ListDataServiceDeploymentConfigUpdatesResponse{} + return &this +} + +// GetDataServiceDeploymentConfigUpdates returns the DataServiceDeploymentConfigUpdates field value if set, zero value otherwise. +func (o *V1ListDataServiceDeploymentConfigUpdatesResponse) GetDataServiceDeploymentConfigUpdates() []V1DataServiceDeploymentConfigUpdate { + if o == nil || IsNil(o.DataServiceDeploymentConfigUpdates) { + var ret []V1DataServiceDeploymentConfigUpdate + return ret + } + return o.DataServiceDeploymentConfigUpdates +} + +// GetDataServiceDeploymentConfigUpdatesOk returns a tuple with the DataServiceDeploymentConfigUpdates field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1ListDataServiceDeploymentConfigUpdatesResponse) GetDataServiceDeploymentConfigUpdatesOk() ([]V1DataServiceDeploymentConfigUpdate, bool) { + if o == nil || IsNil(o.DataServiceDeploymentConfigUpdates) { + return nil, false + } + return o.DataServiceDeploymentConfigUpdates, true +} + +// HasDataServiceDeploymentConfigUpdates returns a boolean if a field has been set. +func (o *V1ListDataServiceDeploymentConfigUpdatesResponse) HasDataServiceDeploymentConfigUpdates() bool { + if o != nil && !IsNil(o.DataServiceDeploymentConfigUpdates) { + return true + } + + return false +} + +// SetDataServiceDeploymentConfigUpdates gets a reference to the given []V1DataServiceDeploymentConfigUpdate and assigns it to the DataServiceDeploymentConfigUpdates field. +func (o *V1ListDataServiceDeploymentConfigUpdatesResponse) SetDataServiceDeploymentConfigUpdates(v []V1DataServiceDeploymentConfigUpdate) { + o.DataServiceDeploymentConfigUpdates = v +} + +// GetPagination returns the Pagination field value if set, zero value otherwise. +func (o *V1ListDataServiceDeploymentConfigUpdatesResponse) GetPagination() V1PageBasedPaginationResponse { + if o == nil || IsNil(o.Pagination) { + var ret V1PageBasedPaginationResponse + return ret + } + return *o.Pagination +} + +// GetPaginationOk returns a tuple with the Pagination field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1ListDataServiceDeploymentConfigUpdatesResponse) GetPaginationOk() (*V1PageBasedPaginationResponse, bool) { + if o == nil || IsNil(o.Pagination) { + return nil, false + } + return o.Pagination, true +} + +// HasPagination returns a boolean if a field has been set. +func (o *V1ListDataServiceDeploymentConfigUpdatesResponse) HasPagination() bool { + if o != nil && !IsNil(o.Pagination) { + return true + } + + return false +} + +// SetPagination gets a reference to the given V1PageBasedPaginationResponse and assigns it to the Pagination field. +func (o *V1ListDataServiceDeploymentConfigUpdatesResponse) SetPagination(v V1PageBasedPaginationResponse) { + o.Pagination = &v +} + +func (o V1ListDataServiceDeploymentConfigUpdatesResponse) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o V1ListDataServiceDeploymentConfigUpdatesResponse) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.DataServiceDeploymentConfigUpdates) { + toSerialize["dataServiceDeploymentConfigUpdates"] = o.DataServiceDeploymentConfigUpdates + } + if !IsNil(o.Pagination) { + toSerialize["pagination"] = o.Pagination + } + return toSerialize, nil +} + +type NullableV1ListDataServiceDeploymentConfigUpdatesResponse struct { + value *V1ListDataServiceDeploymentConfigUpdatesResponse + isSet bool +} + +func (v NullableV1ListDataServiceDeploymentConfigUpdatesResponse) Get() *V1ListDataServiceDeploymentConfigUpdatesResponse { + return v.value +} + +func (v *NullableV1ListDataServiceDeploymentConfigUpdatesResponse) Set(val *V1ListDataServiceDeploymentConfigUpdatesResponse) { + v.value = val + v.isSet = true +} + +func (v NullableV1ListDataServiceDeploymentConfigUpdatesResponse) IsSet() bool { + return v.isSet +} + +func (v *NullableV1ListDataServiceDeploymentConfigUpdatesResponse) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableV1ListDataServiceDeploymentConfigUpdatesResponse(val *V1ListDataServiceDeploymentConfigUpdatesResponse) *NullableV1ListDataServiceDeploymentConfigUpdatesResponse { + return &NullableV1ListDataServiceDeploymentConfigUpdatesResponse{value: val, isSet: true} +} + +func (v NullableV1ListDataServiceDeploymentConfigUpdatesResponse) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableV1ListDataServiceDeploymentConfigUpdatesResponse) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_meta.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_meta.go similarity index 98% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_meta.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_meta.go index 12f5e034b..25cefd1c3 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_meta.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_meta.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deploymentconfigupdate +package dataservicedeploymentconfigupdate import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_page_based_pagination_request.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_page_based_pagination_request.go similarity index 97% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_page_based_pagination_request.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_page_based_pagination_request.go index 6602e6809..4fd70a8eb 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_page_based_pagination_request.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_page_based_pagination_request.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deploymentconfigupdate +package dataservicedeploymentconfigupdate import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_page_based_pagination_response.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_page_based_pagination_response.go similarity index 98% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_page_based_pagination_response.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_page_based_pagination_response.go index 8374fd23c..6b2d16687 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_page_based_pagination_response.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_page_based_pagination_response.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deploymentconfigupdate +package dataservicedeploymentconfigupdate import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_reference.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_reference.go similarity index 97% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_reference.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_reference.go index 478a90965..87a8ec36b 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_reference.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_reference.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deploymentconfigupdate +package dataservicedeploymentconfigupdate import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_references.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_references.go similarity index 97% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_references.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_references.go index 3cbddbb1d..08db137e1 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_references.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_references.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deployment/apiv1/deployment.proto +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deployment +package dataservicedeploymentconfigupdate import ( "encoding/json" @@ -25,7 +25,7 @@ type V1References struct { ImageId *string `json:"imageId,omitempty"` // UID of the project to which DataService Deployment associated. ProjectId *string `json:"projectId,omitempty"` - // UID of the restore id for the Deployment. + // UID of the restore id for the data service Deployment. RestoreId *string `json:"restoreId,omitempty"` DataServiceId *string `json:"dataServiceId,omitempty"` } diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_sort.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_sort.go similarity index 96% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_sort.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_sort.go index 31a2f7a5e..843f4fa73 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_sort.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_sort.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deploymentconfigupdate +package dataservicedeploymentconfigupdate import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_sort_order_value.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_sort_order_value.go similarity index 95% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_sort_order_value.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_sort_order_value.go index e9ff22734..296044cc7 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_sort_order_value.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_sort_order_value.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deploymentconfigupdate +package dataservicedeploymentconfigupdate import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_template.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_template.go similarity index 97% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_template.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_template.go index c4c179a15..8cf2fd291 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_template.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_template.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deploymentconfigupdate +package dataservicedeploymentconfigupdate import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_tls_config.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_tls_config.go similarity index 96% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_tls_config.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_tls_config.go index bdc219a85..c3f621749 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_tls_config.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/model_v1_tls_config.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deploymentconfigupdate +package dataservicedeploymentconfigupdate import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/response.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/response.go similarity index 91% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/response.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/response.go index 14e8bd675..25622fc88 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/response.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/response.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deploymentconfigupdate +package dataservicedeploymentconfigupdate import ( "net/http" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/utils.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/utils.go similarity index 97% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/utils.go rename to vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/utils.go index 0732083ca..43c12b0d0 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/utils.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate/utils.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto +public/portworx/pds/dataservicedeploymentconfigupdate/apiv1/dataservicedeploymentconfigupdate.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,7 +8,7 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deploymentconfigupdate +package dataservicedeploymentconfigupdate import ( "encoding/json" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/README.md b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/README.md deleted file mode 100644 index df3a7441a..000000000 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/README.md +++ /dev/null @@ -1,144 +0,0 @@ -# Go API client for deployment - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -## Overview -This API client was generated by the [OpenAPI Generator](https://openapi-generator.tech) project. By using the [OpenAPI-spec](https://www.openapis.org/) from a remote server, you can easily generate an API client. - -- API version: version not set -- Package version: 1.0.0 -- Generator version: 7.6.0-SNAPSHOT -- Build package: org.openapitools.codegen.languages.GoClientCodegen - -## Installation - -Install the following dependencies: - -```sh -go get github.com/stretchr/testify/assert -go get golang.org/x/net/context -``` - -Put the package under your project folder and add the following in import: - -```go -import deployment "github.com/GIT_USER_ID/GIT_REPO_ID" -``` - -To use a proxy, set the environment variable `HTTP_PROXY`: - -```go -os.Setenv("HTTP_PROXY", "http://proxy_name:proxy_port") -``` - -## Configuration of Server URL - -Default configuration comes with `Servers` field that contains server objects as defined in the OpenAPI specification. - -### Select Server Configuration - -For using other server than the one defined on index 0 set context value `deployment.ContextServerIndex` of type `int`. - -```go -ctx := context.WithValue(context.Background(), deployment.ContextServerIndex, 1) -``` - -### Templated Server URL - -Templated server URL is formatted using default variables from configuration or from context value `deployment.ContextServerVariables` of type `map[string]string`. - -```go -ctx := context.WithValue(context.Background(), deployment.ContextServerVariables, map[string]string{ - "basePath": "v2", -}) -``` - -Note, enum values are always validated and all unused variables are silently ignored. - -### URLs Configuration per Operation - -Each operation can use different server URL defined using `OperationServers` map in the `Configuration`. -An operation is uniquely identified by `"{classname}Service.{nickname}"` string. -Similar rules for overriding default operation server index and variables applies by using `deployment.ContextOperationServerIndices` and `deployment.ContextOperationServerVariables` context maps. - -```go -ctx := context.WithValue(context.Background(), deployment.ContextOperationServerIndices, map[string]int{ - "{classname}Service.{nickname}": 2, -}) -ctx = context.WithValue(context.Background(), deployment.ContextOperationServerVariables, map[string]map[string]string{ - "{classname}Service.{nickname}": { - "port": "8443", - }, -}) -``` - -## Documentation for API Endpoints - -All URIs are relative to *http://localhost* - -Class | Method | HTTP request | Description ------------- | ------------- | ------------- | ------------- -*DeploymentServiceAPI* | [**DeploymentServiceCreateDeployment**](docs/DeploymentServiceAPI.md#deploymentservicecreatedeployment) | **Post** /pds/v1/namespace/{namespaceId}/deployment | CreateDeployment API creates the Deployment resource. -*DeploymentServiceAPI* | [**DeploymentServiceDeleteDeployment**](docs/DeploymentServiceAPI.md#deploymentservicedeletedeployment) | **Delete** /pds/v1/deployments/{id} | DeleteDeployment API deletes the Deployment resource. -*DeploymentServiceAPI* | [**DeploymentServiceGetDeployment**](docs/DeploymentServiceAPI.md#deploymentservicegetdeployment) | **Get** /pds/v1/deployments/{id} | GetDeployment API returns the Deployment resource. -*DeploymentServiceAPI* | [**DeploymentServiceGetDeploymentCredentials**](docs/DeploymentServiceAPI.md#deploymentservicegetdeploymentcredentials) | **Get** /pds/v1/deployments/{id}:credentials | GetDeploymentCredentials API returns the Credentials to be used to access the Deployment. -*DeploymentServiceAPI* | [**DeploymentServiceListDeployments**](docs/DeploymentServiceAPI.md#deploymentservicelistdeployments) | **Get** /pds/v1/deployments | ListDeployments API lists the Deployment resources. - - -## Documentation For Models - - - [DeploymentServiceCreateDeploymentBody](docs/DeploymentServiceCreateDeploymentBody.md) - - [Deploymentv1Status](docs/Deploymentv1Status.md) - - [GooglerpcStatus](docs/GooglerpcStatus.md) - - [ProtobufAny](docs/ProtobufAny.md) - - [ProtobufNullValue](docs/ProtobufNullValue.md) - - [SortByField](docs/SortByField.md) - - [V1Config](docs/V1Config.md) - - [V1ConnectionDetails](docs/V1ConnectionDetails.md) - - [V1ConnectionInfo](docs/V1ConnectionInfo.md) - - [V1Deployment](docs/V1Deployment.md) - - [V1DeploymentCredentials](docs/V1DeploymentCredentials.md) - - [V1DeploymentTopology](docs/V1DeploymentTopology.md) - - [V1DeploymentTopologyStatus](docs/V1DeploymentTopologyStatus.md) - - [V1DeploymentTopologyStatusHealth](docs/V1DeploymentTopologyStatusHealth.md) - - [V1DeploymentTopologyStatusPhase](docs/V1DeploymentTopologyStatusPhase.md) - - [V1ListDeploymentsResponse](docs/V1ListDeploymentsResponse.md) - - [V1Meta](docs/V1Meta.md) - - [V1PageBasedPaginationRequest](docs/V1PageBasedPaginationRequest.md) - - [V1PageBasedPaginationResponse](docs/V1PageBasedPaginationResponse.md) - - [V1PodInfo](docs/V1PodInfo.md) - - [V1Reference](docs/V1Reference.md) - - [V1References](docs/V1References.md) - - [V1Sort](docs/V1Sort.md) - - [V1SortOrderValue](docs/V1SortOrderValue.md) - - [V1StatusHealth](docs/V1StatusHealth.md) - - [V1StatusPhase](docs/V1StatusPhase.md) - - [V1TLSConfig](docs/V1TLSConfig.md) - - [V1Template](docs/V1Template.md) - - -## Documentation For Authorization - -Endpoints do not require authorization. - - -## Documentation for Utility Methods - -Due to the fact that model structure members are all pointers, this package contains -a number of utility functions to easily obtain pointers to values of basic types. -Each of these functions takes a value of the given basic type and returns a pointer to it: - -* `PtrBool` -* `PtrInt` -* `PtrInt32` -* `PtrInt64` -* `PtrFloat` -* `PtrFloat32` -* `PtrFloat64` -* `PtrString` -* `PtrTime` - -## Author - - - diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_deployment_service_create_deployment_body.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_deployment_service_create_deployment_body.go deleted file mode 100644 index 056fe9d02..000000000 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_deployment_service_create_deployment_body.go +++ /dev/null @@ -1,163 +0,0 @@ -/* -public/portworx/pds/deployment/apiv1/deployment.proto - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: version not set -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package deployment - -import ( - "encoding/json" -) - -// checks if the DeploymentServiceCreateDeploymentBody type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &DeploymentServiceCreateDeploymentBody{} - -// DeploymentServiceCreateDeploymentBody Request to create the Deployment resource. -type DeploymentServiceCreateDeploymentBody struct { - // UID of the project. - ProjectId *string `json:"projectId,omitempty"` - Deployment *V1Deployment `json:"deployment,omitempty"` -} - -// NewDeploymentServiceCreateDeploymentBody instantiates a new DeploymentServiceCreateDeploymentBody object -// This constructor will assign default values to properties that have it defined, -// and makes sure properties required by API are set, but the set of arguments -// will change when the set of required properties is changed -func NewDeploymentServiceCreateDeploymentBody() *DeploymentServiceCreateDeploymentBody { - this := DeploymentServiceCreateDeploymentBody{} - return &this -} - -// NewDeploymentServiceCreateDeploymentBodyWithDefaults instantiates a new DeploymentServiceCreateDeploymentBody object -// This constructor will only assign default values to properties that have it defined, -// but it doesn't guarantee that properties required by API are set -func NewDeploymentServiceCreateDeploymentBodyWithDefaults() *DeploymentServiceCreateDeploymentBody { - this := DeploymentServiceCreateDeploymentBody{} - return &this -} - -// GetProjectId returns the ProjectId field value if set, zero value otherwise. -func (o *DeploymentServiceCreateDeploymentBody) GetProjectId() string { - if o == nil || IsNil(o.ProjectId) { - var ret string - return ret - } - return *o.ProjectId -} - -// GetProjectIdOk returns a tuple with the ProjectId field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *DeploymentServiceCreateDeploymentBody) GetProjectIdOk() (*string, bool) { - if o == nil || IsNil(o.ProjectId) { - return nil, false - } - return o.ProjectId, true -} - -// HasProjectId returns a boolean if a field has been set. -func (o *DeploymentServiceCreateDeploymentBody) HasProjectId() bool { - if o != nil && !IsNil(o.ProjectId) { - return true - } - - return false -} - -// SetProjectId gets a reference to the given string and assigns it to the ProjectId field. -func (o *DeploymentServiceCreateDeploymentBody) SetProjectId(v string) { - o.ProjectId = &v -} - -// GetDeployment returns the Deployment field value if set, zero value otherwise. -func (o *DeploymentServiceCreateDeploymentBody) GetDeployment() V1Deployment { - if o == nil || IsNil(o.Deployment) { - var ret V1Deployment - return ret - } - return *o.Deployment -} - -// GetDeploymentOk returns a tuple with the Deployment field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *DeploymentServiceCreateDeploymentBody) GetDeploymentOk() (*V1Deployment, bool) { - if o == nil || IsNil(o.Deployment) { - return nil, false - } - return o.Deployment, true -} - -// HasDeployment returns a boolean if a field has been set. -func (o *DeploymentServiceCreateDeploymentBody) HasDeployment() bool { - if o != nil && !IsNil(o.Deployment) { - return true - } - - return false -} - -// SetDeployment gets a reference to the given V1Deployment and assigns it to the Deployment field. -func (o *DeploymentServiceCreateDeploymentBody) SetDeployment(v V1Deployment) { - o.Deployment = &v -} - -func (o DeploymentServiceCreateDeploymentBody) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() - if err != nil { - return []byte{}, err - } - return json.Marshal(toSerialize) -} - -func (o DeploymentServiceCreateDeploymentBody) ToMap() (map[string]interface{}, error) { - toSerialize := map[string]interface{}{} - if !IsNil(o.ProjectId) { - toSerialize["projectId"] = o.ProjectId - } - if !IsNil(o.Deployment) { - toSerialize["deployment"] = o.Deployment - } - return toSerialize, nil -} - -type NullableDeploymentServiceCreateDeploymentBody struct { - value *DeploymentServiceCreateDeploymentBody - isSet bool -} - -func (v NullableDeploymentServiceCreateDeploymentBody) Get() *DeploymentServiceCreateDeploymentBody { - return v.value -} - -func (v *NullableDeploymentServiceCreateDeploymentBody) Set(val *DeploymentServiceCreateDeploymentBody) { - v.value = val - v.isSet = true -} - -func (v NullableDeploymentServiceCreateDeploymentBody) IsSet() bool { - return v.isSet -} - -func (v *NullableDeploymentServiceCreateDeploymentBody) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullableDeploymentServiceCreateDeploymentBody(val *DeploymentServiceCreateDeploymentBody) *NullableDeploymentServiceCreateDeploymentBody { - return &NullableDeploymentServiceCreateDeploymentBody{value: val, isSet: true} -} - -func (v NullableDeploymentServiceCreateDeploymentBody) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullableDeploymentServiceCreateDeploymentBody) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - - diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_deployment_credentials.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_deployment_credentials.go deleted file mode 100644 index 4c5ae404e..000000000 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_deployment_credentials.go +++ /dev/null @@ -1,127 +0,0 @@ -/* -public/portworx/pds/deployment/apiv1/deployment.proto - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: version not set -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package deployment - -import ( - "encoding/json" -) - -// checks if the V1DeploymentCredentials type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &V1DeploymentCredentials{} - -// V1DeploymentCredentials Credentials to access a Data Service Deployment. -type V1DeploymentCredentials struct { - // secret to access the resource. - Secret *string `json:"secret,omitempty"` -} - -// NewV1DeploymentCredentials instantiates a new V1DeploymentCredentials object -// This constructor will assign default values to properties that have it defined, -// and makes sure properties required by API are set, but the set of arguments -// will change when the set of required properties is changed -func NewV1DeploymentCredentials() *V1DeploymentCredentials { - this := V1DeploymentCredentials{} - return &this -} - -// NewV1DeploymentCredentialsWithDefaults instantiates a new V1DeploymentCredentials object -// This constructor will only assign default values to properties that have it defined, -// but it doesn't guarantee that properties required by API are set -func NewV1DeploymentCredentialsWithDefaults() *V1DeploymentCredentials { - this := V1DeploymentCredentials{} - return &this -} - -// GetSecret returns the Secret field value if set, zero value otherwise. -func (o *V1DeploymentCredentials) GetSecret() string { - if o == nil || IsNil(o.Secret) { - var ret string - return ret - } - return *o.Secret -} - -// GetSecretOk returns a tuple with the Secret field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *V1DeploymentCredentials) GetSecretOk() (*string, bool) { - if o == nil || IsNil(o.Secret) { - return nil, false - } - return o.Secret, true -} - -// HasSecret returns a boolean if a field has been set. -func (o *V1DeploymentCredentials) HasSecret() bool { - if o != nil && !IsNil(o.Secret) { - return true - } - - return false -} - -// SetSecret gets a reference to the given string and assigns it to the Secret field. -func (o *V1DeploymentCredentials) SetSecret(v string) { - o.Secret = &v -} - -func (o V1DeploymentCredentials) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() - if err != nil { - return []byte{}, err - } - return json.Marshal(toSerialize) -} - -func (o V1DeploymentCredentials) ToMap() (map[string]interface{}, error) { - toSerialize := map[string]interface{}{} - if !IsNil(o.Secret) { - toSerialize["secret"] = o.Secret - } - return toSerialize, nil -} - -type NullableV1DeploymentCredentials struct { - value *V1DeploymentCredentials - isSet bool -} - -func (v NullableV1DeploymentCredentials) Get() *V1DeploymentCredentials { - return v.value -} - -func (v *NullableV1DeploymentCredentials) Set(val *V1DeploymentCredentials) { - v.value = val - v.isSet = true -} - -func (v NullableV1DeploymentCredentials) IsSet() bool { - return v.isSet -} - -func (v *NullableV1DeploymentCredentials) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullableV1DeploymentCredentials(val *V1DeploymentCredentials) *NullableV1DeploymentCredentials { - return &NullableV1DeploymentCredentials{value: val, isSet: true} -} - -func (v NullableV1DeploymentCredentials) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullableV1DeploymentCredentials) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - - diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_deployment_topology_status.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_deployment_topology_status.go deleted file mode 100644 index acdb0bbdf..000000000 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_deployment_topology_status.go +++ /dev/null @@ -1,243 +0,0 @@ -/* -public/portworx/pds/deployment/apiv1/deployment.proto - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: version not set -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package deployment - -import ( - "encoding/json" -) - -// checks if the V1DeploymentTopologyStatus type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &V1DeploymentTopologyStatus{} - -// V1DeploymentTopologyStatus Status of the deployment topology. It is consumed in Deployment. -type V1DeploymentTopologyStatus struct { - Health *V1DeploymentTopologyStatusHealth `json:"health,omitempty"` - Phase *V1DeploymentTopologyStatusPhase `json:"phase,omitempty"` - // Number of replicas reported by Target Cluster that are up and running. - ReadyReplicas *string `json:"readyReplicas,omitempty"` - ConnectionInfo *V1ConnectionInfo `json:"connectionInfo,omitempty"` -} - -// NewV1DeploymentTopologyStatus instantiates a new V1DeploymentTopologyStatus object -// This constructor will assign default values to properties that have it defined, -// and makes sure properties required by API are set, but the set of arguments -// will change when the set of required properties is changed -func NewV1DeploymentTopologyStatus() *V1DeploymentTopologyStatus { - this := V1DeploymentTopologyStatus{} - var health V1DeploymentTopologyStatusHealth = V1DEPLOYMENTTOPOLOGYSTATUSHEALTH_UNKNOWN - this.Health = &health - var phase V1DeploymentTopologyStatusPhase = V1DEPLOYMENTTOPOLOGYSTATUSPHASE_PHASE_UNSPECIFIED - this.Phase = &phase - return &this -} - -// NewV1DeploymentTopologyStatusWithDefaults instantiates a new V1DeploymentTopologyStatus object -// This constructor will only assign default values to properties that have it defined, -// but it doesn't guarantee that properties required by API are set -func NewV1DeploymentTopologyStatusWithDefaults() *V1DeploymentTopologyStatus { - this := V1DeploymentTopologyStatus{} - var health V1DeploymentTopologyStatusHealth = V1DEPLOYMENTTOPOLOGYSTATUSHEALTH_UNKNOWN - this.Health = &health - var phase V1DeploymentTopologyStatusPhase = V1DEPLOYMENTTOPOLOGYSTATUSPHASE_PHASE_UNSPECIFIED - this.Phase = &phase - return &this -} - -// GetHealth returns the Health field value if set, zero value otherwise. -func (o *V1DeploymentTopologyStatus) GetHealth() V1DeploymentTopologyStatusHealth { - if o == nil || IsNil(o.Health) { - var ret V1DeploymentTopologyStatusHealth - return ret - } - return *o.Health -} - -// GetHealthOk returns a tuple with the Health field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *V1DeploymentTopologyStatus) GetHealthOk() (*V1DeploymentTopologyStatusHealth, bool) { - if o == nil || IsNil(o.Health) { - return nil, false - } - return o.Health, true -} - -// HasHealth returns a boolean if a field has been set. -func (o *V1DeploymentTopologyStatus) HasHealth() bool { - if o != nil && !IsNil(o.Health) { - return true - } - - return false -} - -// SetHealth gets a reference to the given V1DeploymentTopologyStatusHealth and assigns it to the Health field. -func (o *V1DeploymentTopologyStatus) SetHealth(v V1DeploymentTopologyStatusHealth) { - o.Health = &v -} - -// GetPhase returns the Phase field value if set, zero value otherwise. -func (o *V1DeploymentTopologyStatus) GetPhase() V1DeploymentTopologyStatusPhase { - if o == nil || IsNil(o.Phase) { - var ret V1DeploymentTopologyStatusPhase - return ret - } - return *o.Phase -} - -// GetPhaseOk returns a tuple with the Phase field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *V1DeploymentTopologyStatus) GetPhaseOk() (*V1DeploymentTopologyStatusPhase, bool) { - if o == nil || IsNil(o.Phase) { - return nil, false - } - return o.Phase, true -} - -// HasPhase returns a boolean if a field has been set. -func (o *V1DeploymentTopologyStatus) HasPhase() bool { - if o != nil && !IsNil(o.Phase) { - return true - } - - return false -} - -// SetPhase gets a reference to the given V1DeploymentTopologyStatusPhase and assigns it to the Phase field. -func (o *V1DeploymentTopologyStatus) SetPhase(v V1DeploymentTopologyStatusPhase) { - o.Phase = &v -} - -// GetReadyReplicas returns the ReadyReplicas field value if set, zero value otherwise. -func (o *V1DeploymentTopologyStatus) GetReadyReplicas() string { - if o == nil || IsNil(o.ReadyReplicas) { - var ret string - return ret - } - return *o.ReadyReplicas -} - -// GetReadyReplicasOk returns a tuple with the ReadyReplicas field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *V1DeploymentTopologyStatus) GetReadyReplicasOk() (*string, bool) { - if o == nil || IsNil(o.ReadyReplicas) { - return nil, false - } - return o.ReadyReplicas, true -} - -// HasReadyReplicas returns a boolean if a field has been set. -func (o *V1DeploymentTopologyStatus) HasReadyReplicas() bool { - if o != nil && !IsNil(o.ReadyReplicas) { - return true - } - - return false -} - -// SetReadyReplicas gets a reference to the given string and assigns it to the ReadyReplicas field. -func (o *V1DeploymentTopologyStatus) SetReadyReplicas(v string) { - o.ReadyReplicas = &v -} - -// GetConnectionInfo returns the ConnectionInfo field value if set, zero value otherwise. -func (o *V1DeploymentTopologyStatus) GetConnectionInfo() V1ConnectionInfo { - if o == nil || IsNil(o.ConnectionInfo) { - var ret V1ConnectionInfo - return ret - } - return *o.ConnectionInfo -} - -// GetConnectionInfoOk returns a tuple with the ConnectionInfo field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *V1DeploymentTopologyStatus) GetConnectionInfoOk() (*V1ConnectionInfo, bool) { - if o == nil || IsNil(o.ConnectionInfo) { - return nil, false - } - return o.ConnectionInfo, true -} - -// HasConnectionInfo returns a boolean if a field has been set. -func (o *V1DeploymentTopologyStatus) HasConnectionInfo() bool { - if o != nil && !IsNil(o.ConnectionInfo) { - return true - } - - return false -} - -// SetConnectionInfo gets a reference to the given V1ConnectionInfo and assigns it to the ConnectionInfo field. -func (o *V1DeploymentTopologyStatus) SetConnectionInfo(v V1ConnectionInfo) { - o.ConnectionInfo = &v -} - -func (o V1DeploymentTopologyStatus) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() - if err != nil { - return []byte{}, err - } - return json.Marshal(toSerialize) -} - -func (o V1DeploymentTopologyStatus) ToMap() (map[string]interface{}, error) { - toSerialize := map[string]interface{}{} - if !IsNil(o.Health) { - toSerialize["health"] = o.Health - } - if !IsNil(o.Phase) { - toSerialize["phase"] = o.Phase - } - if !IsNil(o.ReadyReplicas) { - toSerialize["readyReplicas"] = o.ReadyReplicas - } - if !IsNil(o.ConnectionInfo) { - toSerialize["connectionInfo"] = o.ConnectionInfo - } - return toSerialize, nil -} - -type NullableV1DeploymentTopologyStatus struct { - value *V1DeploymentTopologyStatus - isSet bool -} - -func (v NullableV1DeploymentTopologyStatus) Get() *V1DeploymentTopologyStatus { - return v.value -} - -func (v *NullableV1DeploymentTopologyStatus) Set(val *V1DeploymentTopologyStatus) { - v.value = val - v.isSet = true -} - -func (v NullableV1DeploymentTopologyStatus) IsSet() bool { - return v.isSet -} - -func (v *NullableV1DeploymentTopologyStatus) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullableV1DeploymentTopologyStatus(val *V1DeploymentTopologyStatus) *NullableV1DeploymentTopologyStatus { - return &NullableV1DeploymentTopologyStatus{value: val, isSet: true} -} - -func (v NullableV1DeploymentTopologyStatus) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullableV1DeploymentTopologyStatus) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - - diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_deployment_topology_status_health.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_deployment_topology_status_health.go deleted file mode 100644 index a696d1a9a..000000000 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_deployment_topology_status_health.go +++ /dev/null @@ -1,115 +0,0 @@ -/* -public/portworx/pds/deployment/apiv1/deployment.proto - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: version not set -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package deployment - -import ( - "encoding/json" - "fmt" -) - -// V1DeploymentTopologyStatusHealth Enum for Health of the deployment topology. - UNKNOWN: Health is unknown. - UNAVAILABLE: Deployment Topology is Unavailable. - PARTIALLY_AVAILABLE: Deployment Topology is Partially available. - AVAILABLE: Deployment Topology is available. -type V1DeploymentTopologyStatusHealth string - -// List of v1DeploymentTopologyStatusHealth -const ( - V1DEPLOYMENTTOPOLOGYSTATUSHEALTH_UNKNOWN V1DeploymentTopologyStatusHealth = "UNKNOWN" - V1DEPLOYMENTTOPOLOGYSTATUSHEALTH_UNAVAILABLE V1DeploymentTopologyStatusHealth = "UNAVAILABLE" - V1DEPLOYMENTTOPOLOGYSTATUSHEALTH_PARTIALLY_AVAILABLE V1DeploymentTopologyStatusHealth = "PARTIALLY_AVAILABLE" - V1DEPLOYMENTTOPOLOGYSTATUSHEALTH_AVAILABLE V1DeploymentTopologyStatusHealth = "AVAILABLE" -) - -// All allowed values of V1DeploymentTopologyStatusHealth enum -var AllowedV1DeploymentTopologyStatusHealthEnumValues = []V1DeploymentTopologyStatusHealth{ - "UNKNOWN", - "UNAVAILABLE", - "PARTIALLY_AVAILABLE", - "AVAILABLE", -} - -func (v *V1DeploymentTopologyStatusHealth) UnmarshalJSON(src []byte) error { - var value string - err := json.Unmarshal(src, &value) - if err != nil { - return err - } - enumTypeValue := V1DeploymentTopologyStatusHealth(value) - for _, existing := range AllowedV1DeploymentTopologyStatusHealthEnumValues { - if existing == enumTypeValue { - *v = enumTypeValue - return nil - } - } - - return fmt.Errorf("%+v is not a valid V1DeploymentTopologyStatusHealth", value) -} - -// NewV1DeploymentTopologyStatusHealthFromValue returns a pointer to a valid V1DeploymentTopologyStatusHealth -// for the value passed as argument, or an error if the value passed is not allowed by the enum -func NewV1DeploymentTopologyStatusHealthFromValue(v string) (*V1DeploymentTopologyStatusHealth, error) { - ev := V1DeploymentTopologyStatusHealth(v) - if ev.IsValid() { - return &ev, nil - } else { - return nil, fmt.Errorf("invalid value '%v' for V1DeploymentTopologyStatusHealth: valid values are %v", v, AllowedV1DeploymentTopologyStatusHealthEnumValues) - } -} - -// IsValid return true if the value is valid for the enum, false otherwise -func (v V1DeploymentTopologyStatusHealth) IsValid() bool { - for _, existing := range AllowedV1DeploymentTopologyStatusHealthEnumValues { - if existing == v { - return true - } - } - return false -} - -// Ptr returns reference to v1DeploymentTopologyStatusHealth value -func (v V1DeploymentTopologyStatusHealth) Ptr() *V1DeploymentTopologyStatusHealth { - return &v -} - -type NullableV1DeploymentTopologyStatusHealth struct { - value *V1DeploymentTopologyStatusHealth - isSet bool -} - -func (v NullableV1DeploymentTopologyStatusHealth) Get() *V1DeploymentTopologyStatusHealth { - return v.value -} - -func (v *NullableV1DeploymentTopologyStatusHealth) Set(val *V1DeploymentTopologyStatusHealth) { - v.value = val - v.isSet = true -} - -func (v NullableV1DeploymentTopologyStatusHealth) IsSet() bool { - return v.isSet -} - -func (v *NullableV1DeploymentTopologyStatusHealth) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullableV1DeploymentTopologyStatusHealth(val *V1DeploymentTopologyStatusHealth) *NullableV1DeploymentTopologyStatusHealth { - return &NullableV1DeploymentTopologyStatusHealth{value: val, isSet: true} -} - -func (v NullableV1DeploymentTopologyStatusHealth) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullableV1DeploymentTopologyStatusHealth) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_deployment_topology_status_phase.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_deployment_topology_status_phase.go deleted file mode 100644 index 366252d14..000000000 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_deployment_topology_status_phase.go +++ /dev/null @@ -1,123 +0,0 @@ -/* -public/portworx/pds/deployment/apiv1/deployment.proto - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: version not set -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package deployment - -import ( - "encoding/json" - "fmt" -) - -// V1DeploymentTopologyStatusPhase Enum for Phase of the Deployment Topology. - PHASE_UNSPECIFIED: Unspecified status. - IN_PROGRESS: In progress Status. - PARTIAL_SUCCESS: Partial Success Status. - SUCCESS: Successful Status. - DELETE_PENDING: Delete is pending Status. - DELETING: Delete in progress Status. - FAILED: Failed Status. - TIMED_OUT: Timed Out Status. -type V1DeploymentTopologyStatusPhase string - -// List of v1DeploymentTopologyStatusPhase -const ( - V1DEPLOYMENTTOPOLOGYSTATUSPHASE_PHASE_UNSPECIFIED V1DeploymentTopologyStatusPhase = "PHASE_UNSPECIFIED" - V1DEPLOYMENTTOPOLOGYSTATUSPHASE_IN_PROGRESS V1DeploymentTopologyStatusPhase = "IN_PROGRESS" - V1DEPLOYMENTTOPOLOGYSTATUSPHASE_PARTIAL_SUCCESS V1DeploymentTopologyStatusPhase = "PARTIAL_SUCCESS" - V1DEPLOYMENTTOPOLOGYSTATUSPHASE_SUCCESS V1DeploymentTopologyStatusPhase = "SUCCESS" - V1DEPLOYMENTTOPOLOGYSTATUSPHASE_DELETE_PENDING V1DeploymentTopologyStatusPhase = "DELETE_PENDING" - V1DEPLOYMENTTOPOLOGYSTATUSPHASE_DELETING V1DeploymentTopologyStatusPhase = "DELETING" - V1DEPLOYMENTTOPOLOGYSTATUSPHASE_FAILED V1DeploymentTopologyStatusPhase = "FAILED" - V1DEPLOYMENTTOPOLOGYSTATUSPHASE_TIMED_OUT V1DeploymentTopologyStatusPhase = "TIMED_OUT" -) - -// All allowed values of V1DeploymentTopologyStatusPhase enum -var AllowedV1DeploymentTopologyStatusPhaseEnumValues = []V1DeploymentTopologyStatusPhase{ - "PHASE_UNSPECIFIED", - "IN_PROGRESS", - "PARTIAL_SUCCESS", - "SUCCESS", - "DELETE_PENDING", - "DELETING", - "FAILED", - "TIMED_OUT", -} - -func (v *V1DeploymentTopologyStatusPhase) UnmarshalJSON(src []byte) error { - var value string - err := json.Unmarshal(src, &value) - if err != nil { - return err - } - enumTypeValue := V1DeploymentTopologyStatusPhase(value) - for _, existing := range AllowedV1DeploymentTopologyStatusPhaseEnumValues { - if existing == enumTypeValue { - *v = enumTypeValue - return nil - } - } - - return fmt.Errorf("%+v is not a valid V1DeploymentTopologyStatusPhase", value) -} - -// NewV1DeploymentTopologyStatusPhaseFromValue returns a pointer to a valid V1DeploymentTopologyStatusPhase -// for the value passed as argument, or an error if the value passed is not allowed by the enum -func NewV1DeploymentTopologyStatusPhaseFromValue(v string) (*V1DeploymentTopologyStatusPhase, error) { - ev := V1DeploymentTopologyStatusPhase(v) - if ev.IsValid() { - return &ev, nil - } else { - return nil, fmt.Errorf("invalid value '%v' for V1DeploymentTopologyStatusPhase: valid values are %v", v, AllowedV1DeploymentTopologyStatusPhaseEnumValues) - } -} - -// IsValid return true if the value is valid for the enum, false otherwise -func (v V1DeploymentTopologyStatusPhase) IsValid() bool { - for _, existing := range AllowedV1DeploymentTopologyStatusPhaseEnumValues { - if existing == v { - return true - } - } - return false -} - -// Ptr returns reference to v1DeploymentTopologyStatusPhase value -func (v V1DeploymentTopologyStatusPhase) Ptr() *V1DeploymentTopologyStatusPhase { - return &v -} - -type NullableV1DeploymentTopologyStatusPhase struct { - value *V1DeploymentTopologyStatusPhase - isSet bool -} - -func (v NullableV1DeploymentTopologyStatusPhase) Get() *V1DeploymentTopologyStatusPhase { - return v.value -} - -func (v *NullableV1DeploymentTopologyStatusPhase) Set(val *V1DeploymentTopologyStatusPhase) { - v.value = val - v.isSet = true -} - -func (v NullableV1DeploymentTopologyStatusPhase) IsSet() bool { - return v.isSet -} - -func (v *NullableV1DeploymentTopologyStatusPhase) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullableV1DeploymentTopologyStatusPhase(val *V1DeploymentTopologyStatusPhase) *NullableV1DeploymentTopologyStatusPhase { - return &NullableV1DeploymentTopologyStatusPhase{value: val, isSet: true} -} - -func (v NullableV1DeploymentTopologyStatusPhase) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullableV1DeploymentTopologyStatusPhase) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_list_deployments_response.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_list_deployments_response.go deleted file mode 100644 index 0205bffb1..000000000 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deployment/model_v1_list_deployments_response.go +++ /dev/null @@ -1,163 +0,0 @@ -/* -public/portworx/pds/deployment/apiv1/deployment.proto - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: version not set -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package deployment - -import ( - "encoding/json" -) - -// checks if the V1ListDeploymentsResponse type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &V1ListDeploymentsResponse{} - -// V1ListDeploymentsResponse Response to list Deployment request. -type V1ListDeploymentsResponse struct { - // List of deployment resources. - Deployments []V1Deployment `json:"deployments,omitempty"` - Pagination *V1PageBasedPaginationResponse `json:"pagination,omitempty"` -} - -// NewV1ListDeploymentsResponse instantiates a new V1ListDeploymentsResponse object -// This constructor will assign default values to properties that have it defined, -// and makes sure properties required by API are set, but the set of arguments -// will change when the set of required properties is changed -func NewV1ListDeploymentsResponse() *V1ListDeploymentsResponse { - this := V1ListDeploymentsResponse{} - return &this -} - -// NewV1ListDeploymentsResponseWithDefaults instantiates a new V1ListDeploymentsResponse object -// This constructor will only assign default values to properties that have it defined, -// but it doesn't guarantee that properties required by API are set -func NewV1ListDeploymentsResponseWithDefaults() *V1ListDeploymentsResponse { - this := V1ListDeploymentsResponse{} - return &this -} - -// GetDeployments returns the Deployments field value if set, zero value otherwise. -func (o *V1ListDeploymentsResponse) GetDeployments() []V1Deployment { - if o == nil || IsNil(o.Deployments) { - var ret []V1Deployment - return ret - } - return o.Deployments -} - -// GetDeploymentsOk returns a tuple with the Deployments field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *V1ListDeploymentsResponse) GetDeploymentsOk() ([]V1Deployment, bool) { - if o == nil || IsNil(o.Deployments) { - return nil, false - } - return o.Deployments, true -} - -// HasDeployments returns a boolean if a field has been set. -func (o *V1ListDeploymentsResponse) HasDeployments() bool { - if o != nil && !IsNil(o.Deployments) { - return true - } - - return false -} - -// SetDeployments gets a reference to the given []V1Deployment and assigns it to the Deployments field. -func (o *V1ListDeploymentsResponse) SetDeployments(v []V1Deployment) { - o.Deployments = v -} - -// GetPagination returns the Pagination field value if set, zero value otherwise. -func (o *V1ListDeploymentsResponse) GetPagination() V1PageBasedPaginationResponse { - if o == nil || IsNil(o.Pagination) { - var ret V1PageBasedPaginationResponse - return ret - } - return *o.Pagination -} - -// GetPaginationOk returns a tuple with the Pagination field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *V1ListDeploymentsResponse) GetPaginationOk() (*V1PageBasedPaginationResponse, bool) { - if o == nil || IsNil(o.Pagination) { - return nil, false - } - return o.Pagination, true -} - -// HasPagination returns a boolean if a field has been set. -func (o *V1ListDeploymentsResponse) HasPagination() bool { - if o != nil && !IsNil(o.Pagination) { - return true - } - - return false -} - -// SetPagination gets a reference to the given V1PageBasedPaginationResponse and assigns it to the Pagination field. -func (o *V1ListDeploymentsResponse) SetPagination(v V1PageBasedPaginationResponse) { - o.Pagination = &v -} - -func (o V1ListDeploymentsResponse) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() - if err != nil { - return []byte{}, err - } - return json.Marshal(toSerialize) -} - -func (o V1ListDeploymentsResponse) ToMap() (map[string]interface{}, error) { - toSerialize := map[string]interface{}{} - if !IsNil(o.Deployments) { - toSerialize["deployments"] = o.Deployments - } - if !IsNil(o.Pagination) { - toSerialize["pagination"] = o.Pagination - } - return toSerialize, nil -} - -type NullableV1ListDeploymentsResponse struct { - value *V1ListDeploymentsResponse - isSet bool -} - -func (v NullableV1ListDeploymentsResponse) Get() *V1ListDeploymentsResponse { - return v.value -} - -func (v *NullableV1ListDeploymentsResponse) Set(val *V1ListDeploymentsResponse) { - v.value = val - v.isSet = true -} - -func (v NullableV1ListDeploymentsResponse) IsSet() bool { - return v.isSet -} - -func (v *NullableV1ListDeploymentsResponse) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullableV1ListDeploymentsResponse(val *V1ListDeploymentsResponse) *NullableV1ListDeploymentsResponse { - return &NullableV1ListDeploymentsResponse{value: val, isSet: true} -} - -func (v NullableV1ListDeploymentsResponse) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullableV1ListDeploymentsResponse) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - - diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/README.md b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/README.md deleted file mode 100644 index 9e7cee1aa..000000000 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/README.md +++ /dev/null @@ -1,137 +0,0 @@ -# Go API client for deploymentconfigupdate - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -## Overview -This API client was generated by the [OpenAPI Generator](https://openapi-generator.tech) project. By using the [OpenAPI-spec](https://www.openapis.org/) from a remote server, you can easily generate an API client. - -- API version: version not set -- Package version: 1.0.0 -- Generator version: 7.6.0-SNAPSHOT -- Build package: org.openapitools.codegen.languages.GoClientCodegen - -## Installation - -Install the following dependencies: - -```sh -go get github.com/stretchr/testify/assert -go get golang.org/x/net/context -``` - -Put the package under your project folder and add the following in import: - -```go -import deploymentconfigupdate "github.com/GIT_USER_ID/GIT_REPO_ID" -``` - -To use a proxy, set the environment variable `HTTP_PROXY`: - -```go -os.Setenv("HTTP_PROXY", "http://proxy_name:proxy_port") -``` - -## Configuration of Server URL - -Default configuration comes with `Servers` field that contains server objects as defined in the OpenAPI specification. - -### Select Server Configuration - -For using other server than the one defined on index 0 set context value `deploymentconfigupdate.ContextServerIndex` of type `int`. - -```go -ctx := context.WithValue(context.Background(), deploymentconfigupdate.ContextServerIndex, 1) -``` - -### Templated Server URL - -Templated server URL is formatted using default variables from configuration or from context value `deploymentconfigupdate.ContextServerVariables` of type `map[string]string`. - -```go -ctx := context.WithValue(context.Background(), deploymentconfigupdate.ContextServerVariables, map[string]string{ - "basePath": "v2", -}) -``` - -Note, enum values are always validated and all unused variables are silently ignored. - -### URLs Configuration per Operation - -Each operation can use different server URL defined using `OperationServers` map in the `Configuration`. -An operation is uniquely identified by `"{classname}Service.{nickname}"` string. -Similar rules for overriding default operation server index and variables applies by using `deploymentconfigupdate.ContextOperationServerIndices` and `deploymentconfigupdate.ContextOperationServerVariables` context maps. - -```go -ctx := context.WithValue(context.Background(), deploymentconfigupdate.ContextOperationServerIndices, map[string]int{ - "{classname}Service.{nickname}": 2, -}) -ctx = context.WithValue(context.Background(), deploymentconfigupdate.ContextOperationServerVariables, map[string]map[string]string{ - "{classname}Service.{nickname}": { - "port": "8443", - }, -}) -``` - -## Documentation for API Endpoints - -All URIs are relative to *http://localhost* - -Class | Method | HTTP request | Description ------------- | ------------- | ------------- | ------------- -*DeploymentConfigUpdateServiceAPI* | [**DeploymentConfigUpdateServiceCreateDeploymentConfigUpdate**](docs/DeploymentConfigUpdateServiceAPI.md#deploymentconfigupdateservicecreatedeploymentconfigupdate) | **Put** /pds/v1/deployments/{deploymentConfigUpdate.config.deploymentMeta.uid}/deploymentConfigUpdates | CreateDeploymentConfigUpdate API creates a deployment config update. -*DeploymentConfigUpdateServiceAPI* | [**DeploymentConfigUpdateServiceGetDeploymentConfigUpdate**](docs/DeploymentConfigUpdateServiceAPI.md#deploymentconfigupdateservicegetdeploymentconfigupdate) | **Get** /pds/v1/deploymentConfigUpdates/{id} | GetDeploymentConfigUpdate API returns a deployment config update by id. -*DeploymentConfigUpdateServiceAPI* | [**DeploymentConfigUpdateServiceListDeploymentConfigUpdates**](docs/DeploymentConfigUpdateServiceAPI.md#deploymentconfigupdateservicelistdeploymentconfigupdates) | **Get** /pds/v1/deploymentConfigUpdates | ListDeploymentConfigUpdates API returns a list of deployment config updates. -*DeploymentConfigUpdateServiceAPI* | [**DeploymentConfigUpdateServiceRetryDeploymentConfigUpdate**](docs/DeploymentConfigUpdateServiceAPI.md#deploymentconfigupdateserviceretrydeploymentconfigupdate) | **Post** /pds/v1/deploymentConfigUpdates/{id}:retry | RetryDeploymentConfigUpdate API retries a deployment config update. - - -## Documentation For Models - - - [ConfigOfTheDeploymentForWhichConfigUpdateIsRequested](docs/ConfigOfTheDeploymentForWhichConfigUpdateIsRequested.md) - - [DeploymentConfigUpdateOfTheDeploymentUpdateRequest](docs/DeploymentConfigUpdateOfTheDeploymentUpdateRequest.md) - - [GooglerpcStatus](docs/GooglerpcStatus.md) - - [MetadataOfTheDeploymentResource](docs/MetadataOfTheDeploymentResource.md) - - [Pdsdeploymentconfigupdatev1Config](docs/Pdsdeploymentconfigupdatev1Config.md) - - [Pdsdeploymentconfigupdatev1Status](docs/Pdsdeploymentconfigupdatev1Status.md) - - [Pdsdeploymentconfigupdatev1StatusPhase](docs/Pdsdeploymentconfigupdatev1StatusPhase.md) - - [Pdsdeploymentv1Config](docs/Pdsdeploymentv1Config.md) - - [ProtobufAny](docs/ProtobufAny.md) - - [SortByField](docs/SortByField.md) - - [V1DeploymentConfigUpdate](docs/V1DeploymentConfigUpdate.md) - - [V1DeploymentTopology](docs/V1DeploymentTopology.md) - - [V1ListDeploymentConfigUpdatesResponse](docs/V1ListDeploymentConfigUpdatesResponse.md) - - [V1Meta](docs/V1Meta.md) - - [V1PageBasedPaginationRequest](docs/V1PageBasedPaginationRequest.md) - - [V1PageBasedPaginationResponse](docs/V1PageBasedPaginationResponse.md) - - [V1Reference](docs/V1Reference.md) - - [V1References](docs/V1References.md) - - [V1Sort](docs/V1Sort.md) - - [V1SortOrderValue](docs/V1SortOrderValue.md) - - [V1TLSConfig](docs/V1TLSConfig.md) - - [V1Template](docs/V1Template.md) - - -## Documentation For Authorization - -Endpoints do not require authorization. - - -## Documentation for Utility Methods - -Due to the fact that model structure members are all pointers, this package contains -a number of utility functions to easily obtain pointers to values of basic types. -Each of these functions takes a value of the given basic type and returns a pointer to it: - -* `PtrBool` -* `PtrInt` -* `PtrInt32` -* `PtrInt64` -* `PtrFloat` -* `PtrFloat32` -* `PtrFloat64` -* `PtrString` -* `PtrTime` - -## Author - - - diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_config_of_the_deployment_for_which_config_update_is_requested_.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_config_of_the_deployment_for_which_config_update_is_requested_.go deleted file mode 100644 index 30f6d3d60..000000000 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_config_of_the_deployment_for_which_config_update_is_requested_.go +++ /dev/null @@ -1,162 +0,0 @@ -/* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: version not set -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package deploymentconfigupdate - -import ( - "encoding/json" -) - -// checks if the ConfigOfTheDeploymentForWhichConfigUpdateIsRequested type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &ConfigOfTheDeploymentForWhichConfigUpdateIsRequested{} - -// ConfigOfTheDeploymentForWhichConfigUpdateIsRequested Config of the deployment for which config update is requested. -type ConfigOfTheDeploymentForWhichConfigUpdateIsRequested struct { - DeploymentMeta *MetadataOfTheDeploymentResource `json:"deploymentMeta,omitempty"` - DeploymentConfig *Pdsdeploymentv1Config `json:"deploymentConfig,omitempty"` -} - -// NewConfigOfTheDeploymentForWhichConfigUpdateIsRequested instantiates a new ConfigOfTheDeploymentForWhichConfigUpdateIsRequested object -// This constructor will assign default values to properties that have it defined, -// and makes sure properties required by API are set, but the set of arguments -// will change when the set of required properties is changed -func NewConfigOfTheDeploymentForWhichConfigUpdateIsRequested() *ConfigOfTheDeploymentForWhichConfigUpdateIsRequested { - this := ConfigOfTheDeploymentForWhichConfigUpdateIsRequested{} - return &this -} - -// NewConfigOfTheDeploymentForWhichConfigUpdateIsRequestedWithDefaults instantiates a new ConfigOfTheDeploymentForWhichConfigUpdateIsRequested object -// This constructor will only assign default values to properties that have it defined, -// but it doesn't guarantee that properties required by API are set -func NewConfigOfTheDeploymentForWhichConfigUpdateIsRequestedWithDefaults() *ConfigOfTheDeploymentForWhichConfigUpdateIsRequested { - this := ConfigOfTheDeploymentForWhichConfigUpdateIsRequested{} - return &this -} - -// GetDeploymentMeta returns the DeploymentMeta field value if set, zero value otherwise. -func (o *ConfigOfTheDeploymentForWhichConfigUpdateIsRequested) GetDeploymentMeta() MetadataOfTheDeploymentResource { - if o == nil || IsNil(o.DeploymentMeta) { - var ret MetadataOfTheDeploymentResource - return ret - } - return *o.DeploymentMeta -} - -// GetDeploymentMetaOk returns a tuple with the DeploymentMeta field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *ConfigOfTheDeploymentForWhichConfigUpdateIsRequested) GetDeploymentMetaOk() (*MetadataOfTheDeploymentResource, bool) { - if o == nil || IsNil(o.DeploymentMeta) { - return nil, false - } - return o.DeploymentMeta, true -} - -// HasDeploymentMeta returns a boolean if a field has been set. -func (o *ConfigOfTheDeploymentForWhichConfigUpdateIsRequested) HasDeploymentMeta() bool { - if o != nil && !IsNil(o.DeploymentMeta) { - return true - } - - return false -} - -// SetDeploymentMeta gets a reference to the given MetadataOfTheDeploymentResource and assigns it to the DeploymentMeta field. -func (o *ConfigOfTheDeploymentForWhichConfigUpdateIsRequested) SetDeploymentMeta(v MetadataOfTheDeploymentResource) { - o.DeploymentMeta = &v -} - -// GetDeploymentConfig returns the DeploymentConfig field value if set, zero value otherwise. -func (o *ConfigOfTheDeploymentForWhichConfigUpdateIsRequested) GetDeploymentConfig() Pdsdeploymentv1Config { - if o == nil || IsNil(o.DeploymentConfig) { - var ret Pdsdeploymentv1Config - return ret - } - return *o.DeploymentConfig -} - -// GetDeploymentConfigOk returns a tuple with the DeploymentConfig field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *ConfigOfTheDeploymentForWhichConfigUpdateIsRequested) GetDeploymentConfigOk() (*Pdsdeploymentv1Config, bool) { - if o == nil || IsNil(o.DeploymentConfig) { - return nil, false - } - return o.DeploymentConfig, true -} - -// HasDeploymentConfig returns a boolean if a field has been set. -func (o *ConfigOfTheDeploymentForWhichConfigUpdateIsRequested) HasDeploymentConfig() bool { - if o != nil && !IsNil(o.DeploymentConfig) { - return true - } - - return false -} - -// SetDeploymentConfig gets a reference to the given Pdsdeploymentv1Config and assigns it to the DeploymentConfig field. -func (o *ConfigOfTheDeploymentForWhichConfigUpdateIsRequested) SetDeploymentConfig(v Pdsdeploymentv1Config) { - o.DeploymentConfig = &v -} - -func (o ConfigOfTheDeploymentForWhichConfigUpdateIsRequested) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() - if err != nil { - return []byte{}, err - } - return json.Marshal(toSerialize) -} - -func (o ConfigOfTheDeploymentForWhichConfigUpdateIsRequested) ToMap() (map[string]interface{}, error) { - toSerialize := map[string]interface{}{} - if !IsNil(o.DeploymentMeta) { - toSerialize["deploymentMeta"] = o.DeploymentMeta - } - if !IsNil(o.DeploymentConfig) { - toSerialize["deploymentConfig"] = o.DeploymentConfig - } - return toSerialize, nil -} - -type NullableConfigOfTheDeploymentForWhichConfigUpdateIsRequested struct { - value *ConfigOfTheDeploymentForWhichConfigUpdateIsRequested - isSet bool -} - -func (v NullableConfigOfTheDeploymentForWhichConfigUpdateIsRequested) Get() *ConfigOfTheDeploymentForWhichConfigUpdateIsRequested { - return v.value -} - -func (v *NullableConfigOfTheDeploymentForWhichConfigUpdateIsRequested) Set(val *ConfigOfTheDeploymentForWhichConfigUpdateIsRequested) { - v.value = val - v.isSet = true -} - -func (v NullableConfigOfTheDeploymentForWhichConfigUpdateIsRequested) IsSet() bool { - return v.isSet -} - -func (v *NullableConfigOfTheDeploymentForWhichConfigUpdateIsRequested) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullableConfigOfTheDeploymentForWhichConfigUpdateIsRequested(val *ConfigOfTheDeploymentForWhichConfigUpdateIsRequested) *NullableConfigOfTheDeploymentForWhichConfigUpdateIsRequested { - return &NullableConfigOfTheDeploymentForWhichConfigUpdateIsRequested{value: val, isSet: true} -} - -func (v NullableConfigOfTheDeploymentForWhichConfigUpdateIsRequested) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullableConfigOfTheDeploymentForWhichConfigUpdateIsRequested) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - - diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_deployment_config_update_of_the_deployment_update_request_.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_deployment_config_update_of_the_deployment_update_request_.go deleted file mode 100644 index 1dfaf75da..000000000 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_deployment_config_update_of_the_deployment_update_request_.go +++ /dev/null @@ -1,198 +0,0 @@ -/* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: version not set -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package deploymentconfigupdate - -import ( - "encoding/json" -) - -// checks if the DeploymentConfigUpdateOfTheDeploymentUpdateRequest type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &DeploymentConfigUpdateOfTheDeploymentUpdateRequest{} - -// DeploymentConfigUpdateOfTheDeploymentUpdateRequest struct for DeploymentConfigUpdateOfTheDeploymentUpdateRequest -type DeploymentConfigUpdateOfTheDeploymentUpdateRequest struct { - Meta *V1Meta `json:"meta,omitempty"` - Config *ConfigOfTheDeploymentForWhichConfigUpdateIsRequested `json:"config,omitempty"` - Status *Pdsdeploymentconfigupdatev1Status `json:"status,omitempty"` -} - -// NewDeploymentConfigUpdateOfTheDeploymentUpdateRequest instantiates a new DeploymentConfigUpdateOfTheDeploymentUpdateRequest object -// This constructor will assign default values to properties that have it defined, -// and makes sure properties required by API are set, but the set of arguments -// will change when the set of required properties is changed -func NewDeploymentConfigUpdateOfTheDeploymentUpdateRequest() *DeploymentConfigUpdateOfTheDeploymentUpdateRequest { - this := DeploymentConfigUpdateOfTheDeploymentUpdateRequest{} - return &this -} - -// NewDeploymentConfigUpdateOfTheDeploymentUpdateRequestWithDefaults instantiates a new DeploymentConfigUpdateOfTheDeploymentUpdateRequest object -// This constructor will only assign default values to properties that have it defined, -// but it doesn't guarantee that properties required by API are set -func NewDeploymentConfigUpdateOfTheDeploymentUpdateRequestWithDefaults() *DeploymentConfigUpdateOfTheDeploymentUpdateRequest { - this := DeploymentConfigUpdateOfTheDeploymentUpdateRequest{} - return &this -} - -// GetMeta returns the Meta field value if set, zero value otherwise. -func (o *DeploymentConfigUpdateOfTheDeploymentUpdateRequest) GetMeta() V1Meta { - if o == nil || IsNil(o.Meta) { - var ret V1Meta - return ret - } - return *o.Meta -} - -// GetMetaOk returns a tuple with the Meta field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *DeploymentConfigUpdateOfTheDeploymentUpdateRequest) GetMetaOk() (*V1Meta, bool) { - if o == nil || IsNil(o.Meta) { - return nil, false - } - return o.Meta, true -} - -// HasMeta returns a boolean if a field has been set. -func (o *DeploymentConfigUpdateOfTheDeploymentUpdateRequest) HasMeta() bool { - if o != nil && !IsNil(o.Meta) { - return true - } - - return false -} - -// SetMeta gets a reference to the given V1Meta and assigns it to the Meta field. -func (o *DeploymentConfigUpdateOfTheDeploymentUpdateRequest) SetMeta(v V1Meta) { - o.Meta = &v -} - -// GetConfig returns the Config field value if set, zero value otherwise. -func (o *DeploymentConfigUpdateOfTheDeploymentUpdateRequest) GetConfig() ConfigOfTheDeploymentForWhichConfigUpdateIsRequested { - if o == nil || IsNil(o.Config) { - var ret ConfigOfTheDeploymentForWhichConfigUpdateIsRequested - return ret - } - return *o.Config -} - -// GetConfigOk returns a tuple with the Config field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *DeploymentConfigUpdateOfTheDeploymentUpdateRequest) GetConfigOk() (*ConfigOfTheDeploymentForWhichConfigUpdateIsRequested, bool) { - if o == nil || IsNil(o.Config) { - return nil, false - } - return o.Config, true -} - -// HasConfig returns a boolean if a field has been set. -func (o *DeploymentConfigUpdateOfTheDeploymentUpdateRequest) HasConfig() bool { - if o != nil && !IsNil(o.Config) { - return true - } - - return false -} - -// SetConfig gets a reference to the given ConfigOfTheDeploymentForWhichConfigUpdateIsRequested and assigns it to the Config field. -func (o *DeploymentConfigUpdateOfTheDeploymentUpdateRequest) SetConfig(v ConfigOfTheDeploymentForWhichConfigUpdateIsRequested) { - o.Config = &v -} - -// GetStatus returns the Status field value if set, zero value otherwise. -func (o *DeploymentConfigUpdateOfTheDeploymentUpdateRequest) GetStatus() Pdsdeploymentconfigupdatev1Status { - if o == nil || IsNil(o.Status) { - var ret Pdsdeploymentconfigupdatev1Status - return ret - } - return *o.Status -} - -// GetStatusOk returns a tuple with the Status field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *DeploymentConfigUpdateOfTheDeploymentUpdateRequest) GetStatusOk() (*Pdsdeploymentconfigupdatev1Status, bool) { - if o == nil || IsNil(o.Status) { - return nil, false - } - return o.Status, true -} - -// HasStatus returns a boolean if a field has been set. -func (o *DeploymentConfigUpdateOfTheDeploymentUpdateRequest) HasStatus() bool { - if o != nil && !IsNil(o.Status) { - return true - } - - return false -} - -// SetStatus gets a reference to the given Pdsdeploymentconfigupdatev1Status and assigns it to the Status field. -func (o *DeploymentConfigUpdateOfTheDeploymentUpdateRequest) SetStatus(v Pdsdeploymentconfigupdatev1Status) { - o.Status = &v -} - -func (o DeploymentConfigUpdateOfTheDeploymentUpdateRequest) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() - if err != nil { - return []byte{}, err - } - return json.Marshal(toSerialize) -} - -func (o DeploymentConfigUpdateOfTheDeploymentUpdateRequest) ToMap() (map[string]interface{}, error) { - toSerialize := map[string]interface{}{} - if !IsNil(o.Meta) { - toSerialize["meta"] = o.Meta - } - if !IsNil(o.Config) { - toSerialize["config"] = o.Config - } - if !IsNil(o.Status) { - toSerialize["status"] = o.Status - } - return toSerialize, nil -} - -type NullableDeploymentConfigUpdateOfTheDeploymentUpdateRequest struct { - value *DeploymentConfigUpdateOfTheDeploymentUpdateRequest - isSet bool -} - -func (v NullableDeploymentConfigUpdateOfTheDeploymentUpdateRequest) Get() *DeploymentConfigUpdateOfTheDeploymentUpdateRequest { - return v.value -} - -func (v *NullableDeploymentConfigUpdateOfTheDeploymentUpdateRequest) Set(val *DeploymentConfigUpdateOfTheDeploymentUpdateRequest) { - v.value = val - v.isSet = true -} - -func (v NullableDeploymentConfigUpdateOfTheDeploymentUpdateRequest) IsSet() bool { - return v.isSet -} - -func (v *NullableDeploymentConfigUpdateOfTheDeploymentUpdateRequest) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullableDeploymentConfigUpdateOfTheDeploymentUpdateRequest(val *DeploymentConfigUpdateOfTheDeploymentUpdateRequest) *NullableDeploymentConfigUpdateOfTheDeploymentUpdateRequest { - return &NullableDeploymentConfigUpdateOfTheDeploymentUpdateRequest{value: val, isSet: true} -} - -func (v NullableDeploymentConfigUpdateOfTheDeploymentUpdateRequest) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullableDeploymentConfigUpdateOfTheDeploymentUpdateRequest) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - - diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_pdsdeploymentconfigupdatev1_config.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_pdsdeploymentconfigupdatev1_config.go deleted file mode 100644 index 718bfbd22..000000000 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_pdsdeploymentconfigupdatev1_config.go +++ /dev/null @@ -1,162 +0,0 @@ -/* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: version not set -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package deploymentconfigupdate - -import ( - "encoding/json" -) - -// checks if the Pdsdeploymentconfigupdatev1Config type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &Pdsdeploymentconfigupdatev1Config{} - -// Pdsdeploymentconfigupdatev1Config Config of the desired deployment configuration. -type Pdsdeploymentconfigupdatev1Config struct { - DeploymentMeta *V1Meta `json:"deploymentMeta,omitempty"` - DeploymentConfig *Pdsdeploymentv1Config `json:"deploymentConfig,omitempty"` -} - -// NewPdsdeploymentconfigupdatev1Config instantiates a new Pdsdeploymentconfigupdatev1Config object -// This constructor will assign default values to properties that have it defined, -// and makes sure properties required by API are set, but the set of arguments -// will change when the set of required properties is changed -func NewPdsdeploymentconfigupdatev1Config() *Pdsdeploymentconfigupdatev1Config { - this := Pdsdeploymentconfigupdatev1Config{} - return &this -} - -// NewPdsdeploymentconfigupdatev1ConfigWithDefaults instantiates a new Pdsdeploymentconfigupdatev1Config object -// This constructor will only assign default values to properties that have it defined, -// but it doesn't guarantee that properties required by API are set -func NewPdsdeploymentconfigupdatev1ConfigWithDefaults() *Pdsdeploymentconfigupdatev1Config { - this := Pdsdeploymentconfigupdatev1Config{} - return &this -} - -// GetDeploymentMeta returns the DeploymentMeta field value if set, zero value otherwise. -func (o *Pdsdeploymentconfigupdatev1Config) GetDeploymentMeta() V1Meta { - if o == nil || IsNil(o.DeploymentMeta) { - var ret V1Meta - return ret - } - return *o.DeploymentMeta -} - -// GetDeploymentMetaOk returns a tuple with the DeploymentMeta field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *Pdsdeploymentconfigupdatev1Config) GetDeploymentMetaOk() (*V1Meta, bool) { - if o == nil || IsNil(o.DeploymentMeta) { - return nil, false - } - return o.DeploymentMeta, true -} - -// HasDeploymentMeta returns a boolean if a field has been set. -func (o *Pdsdeploymentconfigupdatev1Config) HasDeploymentMeta() bool { - if o != nil && !IsNil(o.DeploymentMeta) { - return true - } - - return false -} - -// SetDeploymentMeta gets a reference to the given V1Meta and assigns it to the DeploymentMeta field. -func (o *Pdsdeploymentconfigupdatev1Config) SetDeploymentMeta(v V1Meta) { - o.DeploymentMeta = &v -} - -// GetDeploymentConfig returns the DeploymentConfig field value if set, zero value otherwise. -func (o *Pdsdeploymentconfigupdatev1Config) GetDeploymentConfig() Pdsdeploymentv1Config { - if o == nil || IsNil(o.DeploymentConfig) { - var ret Pdsdeploymentv1Config - return ret - } - return *o.DeploymentConfig -} - -// GetDeploymentConfigOk returns a tuple with the DeploymentConfig field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *Pdsdeploymentconfigupdatev1Config) GetDeploymentConfigOk() (*Pdsdeploymentv1Config, bool) { - if o == nil || IsNil(o.DeploymentConfig) { - return nil, false - } - return o.DeploymentConfig, true -} - -// HasDeploymentConfig returns a boolean if a field has been set. -func (o *Pdsdeploymentconfigupdatev1Config) HasDeploymentConfig() bool { - if o != nil && !IsNil(o.DeploymentConfig) { - return true - } - - return false -} - -// SetDeploymentConfig gets a reference to the given Pdsdeploymentv1Config and assigns it to the DeploymentConfig field. -func (o *Pdsdeploymentconfigupdatev1Config) SetDeploymentConfig(v Pdsdeploymentv1Config) { - o.DeploymentConfig = &v -} - -func (o Pdsdeploymentconfigupdatev1Config) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() - if err != nil { - return []byte{}, err - } - return json.Marshal(toSerialize) -} - -func (o Pdsdeploymentconfigupdatev1Config) ToMap() (map[string]interface{}, error) { - toSerialize := map[string]interface{}{} - if !IsNil(o.DeploymentMeta) { - toSerialize["deploymentMeta"] = o.DeploymentMeta - } - if !IsNil(o.DeploymentConfig) { - toSerialize["deploymentConfig"] = o.DeploymentConfig - } - return toSerialize, nil -} - -type NullablePdsdeploymentconfigupdatev1Config struct { - value *Pdsdeploymentconfigupdatev1Config - isSet bool -} - -func (v NullablePdsdeploymentconfigupdatev1Config) Get() *Pdsdeploymentconfigupdatev1Config { - return v.value -} - -func (v *NullablePdsdeploymentconfigupdatev1Config) Set(val *Pdsdeploymentconfigupdatev1Config) { - v.value = val - v.isSet = true -} - -func (v NullablePdsdeploymentconfigupdatev1Config) IsSet() bool { - return v.isSet -} - -func (v *NullablePdsdeploymentconfigupdatev1Config) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullablePdsdeploymentconfigupdatev1Config(val *Pdsdeploymentconfigupdatev1Config) *NullablePdsdeploymentconfigupdatev1Config { - return &NullablePdsdeploymentconfigupdatev1Config{value: val, isSet: true} -} - -func (v NullablePdsdeploymentconfigupdatev1Config) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullablePdsdeploymentconfigupdatev1Config) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - - diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_pdsdeploymentconfigupdatev1_status.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_pdsdeploymentconfigupdatev1_status.go deleted file mode 100644 index d30538d15..000000000 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_pdsdeploymentconfigupdatev1_status.go +++ /dev/null @@ -1,241 +0,0 @@ -/* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: version not set -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package deploymentconfigupdate - -import ( - "encoding/json" -) - -// checks if the Pdsdeploymentconfigupdatev1Status type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &Pdsdeploymentconfigupdatev1Status{} - -// Pdsdeploymentconfigupdatev1Status Status of the deployment config update. -type Pdsdeploymentconfigupdatev1Status struct { - // Error Code is a short string that represents the error. - ErrorCode *string `json:"errorCode,omitempty"` - // Error Message is a description of the error. - ErrorMessage *string `json:"errorMessage,omitempty"` - // Number of times the deployment config update has been retried. - RetryCount *int32 `json:"retryCount,omitempty"` - Phase *Pdsdeploymentconfigupdatev1StatusPhase `json:"phase,omitempty"` -} - -// NewPdsdeploymentconfigupdatev1Status instantiates a new Pdsdeploymentconfigupdatev1Status object -// This constructor will assign default values to properties that have it defined, -// and makes sure properties required by API are set, but the set of arguments -// will change when the set of required properties is changed -func NewPdsdeploymentconfigupdatev1Status() *Pdsdeploymentconfigupdatev1Status { - this := Pdsdeploymentconfigupdatev1Status{} - var phase Pdsdeploymentconfigupdatev1StatusPhase = PDSDEPLOYMENTCONFIGUPDATEV1STATUSPHASE_PHASE_UNSPECIFIED - this.Phase = &phase - return &this -} - -// NewPdsdeploymentconfigupdatev1StatusWithDefaults instantiates a new Pdsdeploymentconfigupdatev1Status object -// This constructor will only assign default values to properties that have it defined, -// but it doesn't guarantee that properties required by API are set -func NewPdsdeploymentconfigupdatev1StatusWithDefaults() *Pdsdeploymentconfigupdatev1Status { - this := Pdsdeploymentconfigupdatev1Status{} - var phase Pdsdeploymentconfigupdatev1StatusPhase = PDSDEPLOYMENTCONFIGUPDATEV1STATUSPHASE_PHASE_UNSPECIFIED - this.Phase = &phase - return &this -} - -// GetErrorCode returns the ErrorCode field value if set, zero value otherwise. -func (o *Pdsdeploymentconfigupdatev1Status) GetErrorCode() string { - if o == nil || IsNil(o.ErrorCode) { - var ret string - return ret - } - return *o.ErrorCode -} - -// GetErrorCodeOk returns a tuple with the ErrorCode field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *Pdsdeploymentconfigupdatev1Status) GetErrorCodeOk() (*string, bool) { - if o == nil || IsNil(o.ErrorCode) { - return nil, false - } - return o.ErrorCode, true -} - -// HasErrorCode returns a boolean if a field has been set. -func (o *Pdsdeploymentconfigupdatev1Status) HasErrorCode() bool { - if o != nil && !IsNil(o.ErrorCode) { - return true - } - - return false -} - -// SetErrorCode gets a reference to the given string and assigns it to the ErrorCode field. -func (o *Pdsdeploymentconfigupdatev1Status) SetErrorCode(v string) { - o.ErrorCode = &v -} - -// GetErrorMessage returns the ErrorMessage field value if set, zero value otherwise. -func (o *Pdsdeploymentconfigupdatev1Status) GetErrorMessage() string { - if o == nil || IsNil(o.ErrorMessage) { - var ret string - return ret - } - return *o.ErrorMessage -} - -// GetErrorMessageOk returns a tuple with the ErrorMessage field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *Pdsdeploymentconfigupdatev1Status) GetErrorMessageOk() (*string, bool) { - if o == nil || IsNil(o.ErrorMessage) { - return nil, false - } - return o.ErrorMessage, true -} - -// HasErrorMessage returns a boolean if a field has been set. -func (o *Pdsdeploymentconfigupdatev1Status) HasErrorMessage() bool { - if o != nil && !IsNil(o.ErrorMessage) { - return true - } - - return false -} - -// SetErrorMessage gets a reference to the given string and assigns it to the ErrorMessage field. -func (o *Pdsdeploymentconfigupdatev1Status) SetErrorMessage(v string) { - o.ErrorMessage = &v -} - -// GetRetryCount returns the RetryCount field value if set, zero value otherwise. -func (o *Pdsdeploymentconfigupdatev1Status) GetRetryCount() int32 { - if o == nil || IsNil(o.RetryCount) { - var ret int32 - return ret - } - return *o.RetryCount -} - -// GetRetryCountOk returns a tuple with the RetryCount field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *Pdsdeploymentconfigupdatev1Status) GetRetryCountOk() (*int32, bool) { - if o == nil || IsNil(o.RetryCount) { - return nil, false - } - return o.RetryCount, true -} - -// HasRetryCount returns a boolean if a field has been set. -func (o *Pdsdeploymentconfigupdatev1Status) HasRetryCount() bool { - if o != nil && !IsNil(o.RetryCount) { - return true - } - - return false -} - -// SetRetryCount gets a reference to the given int32 and assigns it to the RetryCount field. -func (o *Pdsdeploymentconfigupdatev1Status) SetRetryCount(v int32) { - o.RetryCount = &v -} - -// GetPhase returns the Phase field value if set, zero value otherwise. -func (o *Pdsdeploymentconfigupdatev1Status) GetPhase() Pdsdeploymentconfigupdatev1StatusPhase { - if o == nil || IsNil(o.Phase) { - var ret Pdsdeploymentconfigupdatev1StatusPhase - return ret - } - return *o.Phase -} - -// GetPhaseOk returns a tuple with the Phase field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *Pdsdeploymentconfigupdatev1Status) GetPhaseOk() (*Pdsdeploymentconfigupdatev1StatusPhase, bool) { - if o == nil || IsNil(o.Phase) { - return nil, false - } - return o.Phase, true -} - -// HasPhase returns a boolean if a field has been set. -func (o *Pdsdeploymentconfigupdatev1Status) HasPhase() bool { - if o != nil && !IsNil(o.Phase) { - return true - } - - return false -} - -// SetPhase gets a reference to the given Pdsdeploymentconfigupdatev1StatusPhase and assigns it to the Phase field. -func (o *Pdsdeploymentconfigupdatev1Status) SetPhase(v Pdsdeploymentconfigupdatev1StatusPhase) { - o.Phase = &v -} - -func (o Pdsdeploymentconfigupdatev1Status) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() - if err != nil { - return []byte{}, err - } - return json.Marshal(toSerialize) -} - -func (o Pdsdeploymentconfigupdatev1Status) ToMap() (map[string]interface{}, error) { - toSerialize := map[string]interface{}{} - if !IsNil(o.ErrorCode) { - toSerialize["errorCode"] = o.ErrorCode - } - if !IsNil(o.ErrorMessage) { - toSerialize["errorMessage"] = o.ErrorMessage - } - if !IsNil(o.RetryCount) { - toSerialize["retryCount"] = o.RetryCount - } - if !IsNil(o.Phase) { - toSerialize["phase"] = o.Phase - } - return toSerialize, nil -} - -type NullablePdsdeploymentconfigupdatev1Status struct { - value *Pdsdeploymentconfigupdatev1Status - isSet bool -} - -func (v NullablePdsdeploymentconfigupdatev1Status) Get() *Pdsdeploymentconfigupdatev1Status { - return v.value -} - -func (v *NullablePdsdeploymentconfigupdatev1Status) Set(val *Pdsdeploymentconfigupdatev1Status) { - v.value = val - v.isSet = true -} - -func (v NullablePdsdeploymentconfigupdatev1Status) IsSet() bool { - return v.isSet -} - -func (v *NullablePdsdeploymentconfigupdatev1Status) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullablePdsdeploymentconfigupdatev1Status(val *Pdsdeploymentconfigupdatev1Status) *NullablePdsdeploymentconfigupdatev1Status { - return &NullablePdsdeploymentconfigupdatev1Status{value: val, isSet: true} -} - -func (v NullablePdsdeploymentconfigupdatev1Status) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullablePdsdeploymentconfigupdatev1Status) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - - diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_pdsdeploymentconfigupdatev1_status_phase.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_pdsdeploymentconfigupdatev1_status_phase.go deleted file mode 100644 index 7f27cc9c2..000000000 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_pdsdeploymentconfigupdatev1_status_phase.go +++ /dev/null @@ -1,119 +0,0 @@ -/* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: version not set -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package deploymentconfigupdate - -import ( - "encoding/json" - "fmt" -) - -// Pdsdeploymentconfigupdatev1StatusPhase Enum for Phase of the Deployment config update. - PHASE_UNSPECIFIED: Phase is unspecified. - FAILED: Deployment config update failed. - QUEUED: Deployment config update is queued. - IN_PROGRESS: Deployment config update is in progress. - COMPLETED: Deployment config update is completed. - REQUEUED: Deployment config update is requeued. -type Pdsdeploymentconfigupdatev1StatusPhase string - -// List of pdsdeploymentconfigupdatev1StatusPhase -const ( - PDSDEPLOYMENTCONFIGUPDATEV1STATUSPHASE_PHASE_UNSPECIFIED Pdsdeploymentconfigupdatev1StatusPhase = "PHASE_UNSPECIFIED" - PDSDEPLOYMENTCONFIGUPDATEV1STATUSPHASE_FAILED Pdsdeploymentconfigupdatev1StatusPhase = "FAILED" - PDSDEPLOYMENTCONFIGUPDATEV1STATUSPHASE_QUEUED Pdsdeploymentconfigupdatev1StatusPhase = "QUEUED" - PDSDEPLOYMENTCONFIGUPDATEV1STATUSPHASE_IN_PROGRESS Pdsdeploymentconfigupdatev1StatusPhase = "IN_PROGRESS" - PDSDEPLOYMENTCONFIGUPDATEV1STATUSPHASE_COMPLETED Pdsdeploymentconfigupdatev1StatusPhase = "COMPLETED" - PDSDEPLOYMENTCONFIGUPDATEV1STATUSPHASE_REQUEUED Pdsdeploymentconfigupdatev1StatusPhase = "REQUEUED" -) - -// All allowed values of Pdsdeploymentconfigupdatev1StatusPhase enum -var AllowedPdsdeploymentconfigupdatev1StatusPhaseEnumValues = []Pdsdeploymentconfigupdatev1StatusPhase{ - "PHASE_UNSPECIFIED", - "FAILED", - "QUEUED", - "IN_PROGRESS", - "COMPLETED", - "REQUEUED", -} - -func (v *Pdsdeploymentconfigupdatev1StatusPhase) UnmarshalJSON(src []byte) error { - var value string - err := json.Unmarshal(src, &value) - if err != nil { - return err - } - enumTypeValue := Pdsdeploymentconfigupdatev1StatusPhase(value) - for _, existing := range AllowedPdsdeploymentconfigupdatev1StatusPhaseEnumValues { - if existing == enumTypeValue { - *v = enumTypeValue - return nil - } - } - - return fmt.Errorf("%+v is not a valid Pdsdeploymentconfigupdatev1StatusPhase", value) -} - -// NewPdsdeploymentconfigupdatev1StatusPhaseFromValue returns a pointer to a valid Pdsdeploymentconfigupdatev1StatusPhase -// for the value passed as argument, or an error if the value passed is not allowed by the enum -func NewPdsdeploymentconfigupdatev1StatusPhaseFromValue(v string) (*Pdsdeploymentconfigupdatev1StatusPhase, error) { - ev := Pdsdeploymentconfigupdatev1StatusPhase(v) - if ev.IsValid() { - return &ev, nil - } else { - return nil, fmt.Errorf("invalid value '%v' for Pdsdeploymentconfigupdatev1StatusPhase: valid values are %v", v, AllowedPdsdeploymentconfigupdatev1StatusPhaseEnumValues) - } -} - -// IsValid return true if the value is valid for the enum, false otherwise -func (v Pdsdeploymentconfigupdatev1StatusPhase) IsValid() bool { - for _, existing := range AllowedPdsdeploymentconfigupdatev1StatusPhaseEnumValues { - if existing == v { - return true - } - } - return false -} - -// Ptr returns reference to pdsdeploymentconfigupdatev1StatusPhase value -func (v Pdsdeploymentconfigupdatev1StatusPhase) Ptr() *Pdsdeploymentconfigupdatev1StatusPhase { - return &v -} - -type NullablePdsdeploymentconfigupdatev1StatusPhase struct { - value *Pdsdeploymentconfigupdatev1StatusPhase - isSet bool -} - -func (v NullablePdsdeploymentconfigupdatev1StatusPhase) Get() *Pdsdeploymentconfigupdatev1StatusPhase { - return v.value -} - -func (v *NullablePdsdeploymentconfigupdatev1StatusPhase) Set(val *Pdsdeploymentconfigupdatev1StatusPhase) { - v.value = val - v.isSet = true -} - -func (v NullablePdsdeploymentconfigupdatev1StatusPhase) IsSet() bool { - return v.isSet -} - -func (v *NullablePdsdeploymentconfigupdatev1StatusPhase) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullablePdsdeploymentconfigupdatev1StatusPhase(val *Pdsdeploymentconfigupdatev1StatusPhase) *NullablePdsdeploymentconfigupdatev1StatusPhase { - return &NullablePdsdeploymentconfigupdatev1StatusPhase{value: val, isSet: true} -} - -func (v NullablePdsdeploymentconfigupdatev1StatusPhase) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullablePdsdeploymentconfigupdatev1StatusPhase) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_pdsdeploymentv1_config.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_pdsdeploymentv1_config.go deleted file mode 100644 index 6b63bb350..000000000 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_pdsdeploymentv1_config.go +++ /dev/null @@ -1,199 +0,0 @@ -/* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: version not set -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package deploymentconfigupdate - -import ( - "encoding/json" -) - -// checks if the Pdsdeploymentv1Config type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &Pdsdeploymentv1Config{} - -// Pdsdeploymentv1Config Desired configuration of the Deployment. -type Pdsdeploymentv1Config struct { - References *V1References `json:"references,omitempty"` - TlsConfig *V1TLSConfig `json:"tlsConfig,omitempty"` - // A deployment topology contains a number of nodes that have various attributes as a collective group. - DeploymentTopologies []V1DeploymentTopology `json:"deploymentTopologies,omitempty"` -} - -// NewPdsdeploymentv1Config instantiates a new Pdsdeploymentv1Config object -// This constructor will assign default values to properties that have it defined, -// and makes sure properties required by API are set, but the set of arguments -// will change when the set of required properties is changed -func NewPdsdeploymentv1Config() *Pdsdeploymentv1Config { - this := Pdsdeploymentv1Config{} - return &this -} - -// NewPdsdeploymentv1ConfigWithDefaults instantiates a new Pdsdeploymentv1Config object -// This constructor will only assign default values to properties that have it defined, -// but it doesn't guarantee that properties required by API are set -func NewPdsdeploymentv1ConfigWithDefaults() *Pdsdeploymentv1Config { - this := Pdsdeploymentv1Config{} - return &this -} - -// GetReferences returns the References field value if set, zero value otherwise. -func (o *Pdsdeploymentv1Config) GetReferences() V1References { - if o == nil || IsNil(o.References) { - var ret V1References - return ret - } - return *o.References -} - -// GetReferencesOk returns a tuple with the References field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *Pdsdeploymentv1Config) GetReferencesOk() (*V1References, bool) { - if o == nil || IsNil(o.References) { - return nil, false - } - return o.References, true -} - -// HasReferences returns a boolean if a field has been set. -func (o *Pdsdeploymentv1Config) HasReferences() bool { - if o != nil && !IsNil(o.References) { - return true - } - - return false -} - -// SetReferences gets a reference to the given V1References and assigns it to the References field. -func (o *Pdsdeploymentv1Config) SetReferences(v V1References) { - o.References = &v -} - -// GetTlsConfig returns the TlsConfig field value if set, zero value otherwise. -func (o *Pdsdeploymentv1Config) GetTlsConfig() V1TLSConfig { - if o == nil || IsNil(o.TlsConfig) { - var ret V1TLSConfig - return ret - } - return *o.TlsConfig -} - -// GetTlsConfigOk returns a tuple with the TlsConfig field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *Pdsdeploymentv1Config) GetTlsConfigOk() (*V1TLSConfig, bool) { - if o == nil || IsNil(o.TlsConfig) { - return nil, false - } - return o.TlsConfig, true -} - -// HasTlsConfig returns a boolean if a field has been set. -func (o *Pdsdeploymentv1Config) HasTlsConfig() bool { - if o != nil && !IsNil(o.TlsConfig) { - return true - } - - return false -} - -// SetTlsConfig gets a reference to the given V1TLSConfig and assigns it to the TlsConfig field. -func (o *Pdsdeploymentv1Config) SetTlsConfig(v V1TLSConfig) { - o.TlsConfig = &v -} - -// GetDeploymentTopologies returns the DeploymentTopologies field value if set, zero value otherwise. -func (o *Pdsdeploymentv1Config) GetDeploymentTopologies() []V1DeploymentTopology { - if o == nil || IsNil(o.DeploymentTopologies) { - var ret []V1DeploymentTopology - return ret - } - return o.DeploymentTopologies -} - -// GetDeploymentTopologiesOk returns a tuple with the DeploymentTopologies field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *Pdsdeploymentv1Config) GetDeploymentTopologiesOk() ([]V1DeploymentTopology, bool) { - if o == nil || IsNil(o.DeploymentTopologies) { - return nil, false - } - return o.DeploymentTopologies, true -} - -// HasDeploymentTopologies returns a boolean if a field has been set. -func (o *Pdsdeploymentv1Config) HasDeploymentTopologies() bool { - if o != nil && !IsNil(o.DeploymentTopologies) { - return true - } - - return false -} - -// SetDeploymentTopologies gets a reference to the given []V1DeploymentTopology and assigns it to the DeploymentTopologies field. -func (o *Pdsdeploymentv1Config) SetDeploymentTopologies(v []V1DeploymentTopology) { - o.DeploymentTopologies = v -} - -func (o Pdsdeploymentv1Config) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() - if err != nil { - return []byte{}, err - } - return json.Marshal(toSerialize) -} - -func (o Pdsdeploymentv1Config) ToMap() (map[string]interface{}, error) { - toSerialize := map[string]interface{}{} - if !IsNil(o.References) { - toSerialize["references"] = o.References - } - if !IsNil(o.TlsConfig) { - toSerialize["tlsConfig"] = o.TlsConfig - } - if !IsNil(o.DeploymentTopologies) { - toSerialize["deploymentTopologies"] = o.DeploymentTopologies - } - return toSerialize, nil -} - -type NullablePdsdeploymentv1Config struct { - value *Pdsdeploymentv1Config - isSet bool -} - -func (v NullablePdsdeploymentv1Config) Get() *Pdsdeploymentv1Config { - return v.value -} - -func (v *NullablePdsdeploymentv1Config) Set(val *Pdsdeploymentv1Config) { - v.value = val - v.isSet = true -} - -func (v NullablePdsdeploymentv1Config) IsSet() bool { - return v.isSet -} - -func (v *NullablePdsdeploymentv1Config) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullablePdsdeploymentv1Config(val *Pdsdeploymentv1Config) *NullablePdsdeploymentv1Config { - return &NullablePdsdeploymentv1Config{value: val, isSet: true} -} - -func (v NullablePdsdeploymentv1Config) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullablePdsdeploymentv1Config) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - - diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_deployment_config_update.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_deployment_config_update.go deleted file mode 100644 index abe11dea4..000000000 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_deployment_config_update.go +++ /dev/null @@ -1,198 +0,0 @@ -/* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: version not set -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package deploymentconfigupdate - -import ( - "encoding/json" -) - -// checks if the V1DeploymentConfigUpdate type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &V1DeploymentConfigUpdate{} - -// V1DeploymentConfigUpdate DeploymentConfigUpdate represents a deployment config update resource. -type V1DeploymentConfigUpdate struct { - Meta *V1Meta `json:"meta,omitempty"` - Config *Pdsdeploymentconfigupdatev1Config `json:"config,omitempty"` - Status *Pdsdeploymentconfigupdatev1Status `json:"status,omitempty"` -} - -// NewV1DeploymentConfigUpdate instantiates a new V1DeploymentConfigUpdate object -// This constructor will assign default values to properties that have it defined, -// and makes sure properties required by API are set, but the set of arguments -// will change when the set of required properties is changed -func NewV1DeploymentConfigUpdate() *V1DeploymentConfigUpdate { - this := V1DeploymentConfigUpdate{} - return &this -} - -// NewV1DeploymentConfigUpdateWithDefaults instantiates a new V1DeploymentConfigUpdate object -// This constructor will only assign default values to properties that have it defined, -// but it doesn't guarantee that properties required by API are set -func NewV1DeploymentConfigUpdateWithDefaults() *V1DeploymentConfigUpdate { - this := V1DeploymentConfigUpdate{} - return &this -} - -// GetMeta returns the Meta field value if set, zero value otherwise. -func (o *V1DeploymentConfigUpdate) GetMeta() V1Meta { - if o == nil || IsNil(o.Meta) { - var ret V1Meta - return ret - } - return *o.Meta -} - -// GetMetaOk returns a tuple with the Meta field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *V1DeploymentConfigUpdate) GetMetaOk() (*V1Meta, bool) { - if o == nil || IsNil(o.Meta) { - return nil, false - } - return o.Meta, true -} - -// HasMeta returns a boolean if a field has been set. -func (o *V1DeploymentConfigUpdate) HasMeta() bool { - if o != nil && !IsNil(o.Meta) { - return true - } - - return false -} - -// SetMeta gets a reference to the given V1Meta and assigns it to the Meta field. -func (o *V1DeploymentConfigUpdate) SetMeta(v V1Meta) { - o.Meta = &v -} - -// GetConfig returns the Config field value if set, zero value otherwise. -func (o *V1DeploymentConfigUpdate) GetConfig() Pdsdeploymentconfigupdatev1Config { - if o == nil || IsNil(o.Config) { - var ret Pdsdeploymentconfigupdatev1Config - return ret - } - return *o.Config -} - -// GetConfigOk returns a tuple with the Config field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *V1DeploymentConfigUpdate) GetConfigOk() (*Pdsdeploymentconfigupdatev1Config, bool) { - if o == nil || IsNil(o.Config) { - return nil, false - } - return o.Config, true -} - -// HasConfig returns a boolean if a field has been set. -func (o *V1DeploymentConfigUpdate) HasConfig() bool { - if o != nil && !IsNil(o.Config) { - return true - } - - return false -} - -// SetConfig gets a reference to the given Pdsdeploymentconfigupdatev1Config and assigns it to the Config field. -func (o *V1DeploymentConfigUpdate) SetConfig(v Pdsdeploymentconfigupdatev1Config) { - o.Config = &v -} - -// GetStatus returns the Status field value if set, zero value otherwise. -func (o *V1DeploymentConfigUpdate) GetStatus() Pdsdeploymentconfigupdatev1Status { - if o == nil || IsNil(o.Status) { - var ret Pdsdeploymentconfigupdatev1Status - return ret - } - return *o.Status -} - -// GetStatusOk returns a tuple with the Status field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *V1DeploymentConfigUpdate) GetStatusOk() (*Pdsdeploymentconfigupdatev1Status, bool) { - if o == nil || IsNil(o.Status) { - return nil, false - } - return o.Status, true -} - -// HasStatus returns a boolean if a field has been set. -func (o *V1DeploymentConfigUpdate) HasStatus() bool { - if o != nil && !IsNil(o.Status) { - return true - } - - return false -} - -// SetStatus gets a reference to the given Pdsdeploymentconfigupdatev1Status and assigns it to the Status field. -func (o *V1DeploymentConfigUpdate) SetStatus(v Pdsdeploymentconfigupdatev1Status) { - o.Status = &v -} - -func (o V1DeploymentConfigUpdate) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() - if err != nil { - return []byte{}, err - } - return json.Marshal(toSerialize) -} - -func (o V1DeploymentConfigUpdate) ToMap() (map[string]interface{}, error) { - toSerialize := map[string]interface{}{} - if !IsNil(o.Meta) { - toSerialize["meta"] = o.Meta - } - if !IsNil(o.Config) { - toSerialize["config"] = o.Config - } - if !IsNil(o.Status) { - toSerialize["status"] = o.Status - } - return toSerialize, nil -} - -type NullableV1DeploymentConfigUpdate struct { - value *V1DeploymentConfigUpdate - isSet bool -} - -func (v NullableV1DeploymentConfigUpdate) Get() *V1DeploymentConfigUpdate { - return v.value -} - -func (v *NullableV1DeploymentConfigUpdate) Set(val *V1DeploymentConfigUpdate) { - v.value = val - v.isSet = true -} - -func (v NullableV1DeploymentConfigUpdate) IsSet() bool { - return v.isSet -} - -func (v *NullableV1DeploymentConfigUpdate) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullableV1DeploymentConfigUpdate(val *V1DeploymentConfigUpdate) *NullableV1DeploymentConfigUpdate { - return &NullableV1DeploymentConfigUpdate{value: val, isSet: true} -} - -func (v NullableV1DeploymentConfigUpdate) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullableV1DeploymentConfigUpdate) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - - diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_list_deployment_config_updates_response.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_list_deployment_config_updates_response.go deleted file mode 100644 index 27006c18c..000000000 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_v1_list_deployment_config_updates_response.go +++ /dev/null @@ -1,163 +0,0 @@ -/* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: version not set -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package deploymentconfigupdate - -import ( - "encoding/json" -) - -// checks if the V1ListDeploymentConfigUpdatesResponse type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &V1ListDeploymentConfigUpdatesResponse{} - -// V1ListDeploymentConfigUpdatesResponse ListDeploymentConfigUpdatesResponse is the response for ListDeploymentConfigUpdates. -type V1ListDeploymentConfigUpdatesResponse struct { - // List of deployment config updates. - DeploymentConfigUpdates []V1DeploymentConfigUpdate `json:"deploymentConfigUpdates,omitempty"` - Pagination *V1PageBasedPaginationResponse `json:"pagination,omitempty"` -} - -// NewV1ListDeploymentConfigUpdatesResponse instantiates a new V1ListDeploymentConfigUpdatesResponse object -// This constructor will assign default values to properties that have it defined, -// and makes sure properties required by API are set, but the set of arguments -// will change when the set of required properties is changed -func NewV1ListDeploymentConfigUpdatesResponse() *V1ListDeploymentConfigUpdatesResponse { - this := V1ListDeploymentConfigUpdatesResponse{} - return &this -} - -// NewV1ListDeploymentConfigUpdatesResponseWithDefaults instantiates a new V1ListDeploymentConfigUpdatesResponse object -// This constructor will only assign default values to properties that have it defined, -// but it doesn't guarantee that properties required by API are set -func NewV1ListDeploymentConfigUpdatesResponseWithDefaults() *V1ListDeploymentConfigUpdatesResponse { - this := V1ListDeploymentConfigUpdatesResponse{} - return &this -} - -// GetDeploymentConfigUpdates returns the DeploymentConfigUpdates field value if set, zero value otherwise. -func (o *V1ListDeploymentConfigUpdatesResponse) GetDeploymentConfigUpdates() []V1DeploymentConfigUpdate { - if o == nil || IsNil(o.DeploymentConfigUpdates) { - var ret []V1DeploymentConfigUpdate - return ret - } - return o.DeploymentConfigUpdates -} - -// GetDeploymentConfigUpdatesOk returns a tuple with the DeploymentConfigUpdates field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *V1ListDeploymentConfigUpdatesResponse) GetDeploymentConfigUpdatesOk() ([]V1DeploymentConfigUpdate, bool) { - if o == nil || IsNil(o.DeploymentConfigUpdates) { - return nil, false - } - return o.DeploymentConfigUpdates, true -} - -// HasDeploymentConfigUpdates returns a boolean if a field has been set. -func (o *V1ListDeploymentConfigUpdatesResponse) HasDeploymentConfigUpdates() bool { - if o != nil && !IsNil(o.DeploymentConfigUpdates) { - return true - } - - return false -} - -// SetDeploymentConfigUpdates gets a reference to the given []V1DeploymentConfigUpdate and assigns it to the DeploymentConfigUpdates field. -func (o *V1ListDeploymentConfigUpdatesResponse) SetDeploymentConfigUpdates(v []V1DeploymentConfigUpdate) { - o.DeploymentConfigUpdates = v -} - -// GetPagination returns the Pagination field value if set, zero value otherwise. -func (o *V1ListDeploymentConfigUpdatesResponse) GetPagination() V1PageBasedPaginationResponse { - if o == nil || IsNil(o.Pagination) { - var ret V1PageBasedPaginationResponse - return ret - } - return *o.Pagination -} - -// GetPaginationOk returns a tuple with the Pagination field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *V1ListDeploymentConfigUpdatesResponse) GetPaginationOk() (*V1PageBasedPaginationResponse, bool) { - if o == nil || IsNil(o.Pagination) { - return nil, false - } - return o.Pagination, true -} - -// HasPagination returns a boolean if a field has been set. -func (o *V1ListDeploymentConfigUpdatesResponse) HasPagination() bool { - if o != nil && !IsNil(o.Pagination) { - return true - } - - return false -} - -// SetPagination gets a reference to the given V1PageBasedPaginationResponse and assigns it to the Pagination field. -func (o *V1ListDeploymentConfigUpdatesResponse) SetPagination(v V1PageBasedPaginationResponse) { - o.Pagination = &v -} - -func (o V1ListDeploymentConfigUpdatesResponse) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() - if err != nil { - return []byte{}, err - } - return json.Marshal(toSerialize) -} - -func (o V1ListDeploymentConfigUpdatesResponse) ToMap() (map[string]interface{}, error) { - toSerialize := map[string]interface{}{} - if !IsNil(o.DeploymentConfigUpdates) { - toSerialize["deploymentConfigUpdates"] = o.DeploymentConfigUpdates - } - if !IsNil(o.Pagination) { - toSerialize["pagination"] = o.Pagination - } - return toSerialize, nil -} - -type NullableV1ListDeploymentConfigUpdatesResponse struct { - value *V1ListDeploymentConfigUpdatesResponse - isSet bool -} - -func (v NullableV1ListDeploymentConfigUpdatesResponse) Get() *V1ListDeploymentConfigUpdatesResponse { - return v.value -} - -func (v *NullableV1ListDeploymentConfigUpdatesResponse) Set(val *V1ListDeploymentConfigUpdatesResponse) { - v.value = val - v.isSet = true -} - -func (v NullableV1ListDeploymentConfigUpdatesResponse) IsSet() bool { - return v.isSet -} - -func (v *NullableV1ListDeploymentConfigUpdatesResponse) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullableV1ListDeploymentConfigUpdatesResponse(val *V1ListDeploymentConfigUpdatesResponse) *NullableV1ListDeploymentConfigUpdatesResponse { - return &NullableV1ListDeploymentConfigUpdatesResponse{value: val, isSet: true} -} - -func (v NullableV1ListDeploymentConfigUpdatesResponse) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullableV1ListDeploymentConfigUpdatesResponse) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - - diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/README.md b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/README.md index ab357b8e0..7f80aa5ea 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/README.md +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/README.md @@ -7,7 +7,7 @@ This API client was generated by the [OpenAPI Generator](https://openapi-generat - API version: version not set - Package version: 1.0.0 -- Generator version: 7.6.0-SNAPSHOT +- Generator version: 7.7.0-SNAPSHOT - Build package: org.openapitools.codegen.languages.GoClientCodegen ## Installation @@ -79,7 +79,6 @@ All URIs are relative to *http://localhost* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- *RestoreServiceAPI* | [**RestoreServiceCreateRestore**](docs/RestoreServiceAPI.md#restoreservicecreaterestore) | **Post** /pds/v1/namespaces/{namespaceId}/restores | CreateRestore API creates the Restore resource. -*RestoreServiceAPI* | [**RestoreServiceGetRestorabilityMatrix**](docs/RestoreServiceAPI.md#restoreservicegetrestorabilitymatrix) | **Get** /pds/v1/restores:restorabilityMatrix | GetRestorabilityMatrix API returns the compatibility matrix for restore. *RestoreServiceAPI* | [**RestoreServiceGetRestore**](docs/RestoreServiceAPI.md#restoreservicegetrestore) | **Get** /pds/v1/restores/{id} | GetRestore API returns the Restore resource. *RestoreServiceAPI* | [**RestoreServiceListRestores**](docs/RestoreServiceAPI.md#restoreservicelistrestores) | **Get** /pds/v1/restores | ListRestore API lists the Restore resources. *RestoreServiceAPI* | [**RestoreServiceRecreateRestore**](docs/RestoreServiceAPI.md#restoreservicerecreaterestore) | **Post** /pds/v1/restores/{id}:recreate | RecreateRestore API recreates a already failed restore. @@ -103,10 +102,7 @@ Class | Method | HTTP request | Description - [V1PageBasedPaginationResponse](docs/V1PageBasedPaginationResponse.md) - [V1Phase](docs/V1Phase.md) - [V1Reference](docs/V1Reference.md) - - [V1RestorabilityMatrix](docs/V1RestorabilityMatrix.md) - [V1Restore](docs/V1Restore.md) - - [V1RestoreCompatibilityCondition](docs/V1RestoreCompatibilityCondition.md) - - [V1RestoreCompatibilityConditionList](docs/V1RestoreCompatibilityConditionList.md) - [V1Sort](docs/V1Sort.md) - [V1SourceReferences](docs/V1SourceReferences.md) diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/api_restore_service.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/api_restore_service.go index b312948d0..93ba14808 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/api_restore_service.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/api_restore_service.go @@ -143,111 +143,6 @@ func (a *RestoreServiceAPIService) RestoreServiceCreateRestoreExecute(r ApiResto return localVarReturnValue, localVarHTTPResponse, nil } -type ApiRestoreServiceGetRestorabilityMatrixRequest struct { - ctx context.Context - ApiService *RestoreServiceAPIService -} - -func (r ApiRestoreServiceGetRestorabilityMatrixRequest) Execute() (*V1RestorabilityMatrix, *http.Response, error) { - return r.ApiService.RestoreServiceGetRestorabilityMatrixExecute(r) -} - -/* -RestoreServiceGetRestorabilityMatrix GetRestorabilityMatrix API returns the compatibility matrix for restore. - - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiRestoreServiceGetRestorabilityMatrixRequest -*/ -func (a *RestoreServiceAPIService) RestoreServiceGetRestorabilityMatrix(ctx context.Context) ApiRestoreServiceGetRestorabilityMatrixRequest { - return ApiRestoreServiceGetRestorabilityMatrixRequest{ - ApiService: a, - ctx: ctx, - } -} - -// Execute executes the request -// @return V1RestorabilityMatrix -func (a *RestoreServiceAPIService) RestoreServiceGetRestorabilityMatrixExecute(r ApiRestoreServiceGetRestorabilityMatrixRequest) (*V1RestorabilityMatrix, *http.Response, error) { - var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *V1RestorabilityMatrix - ) - - localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "RestoreServiceAPIService.RestoreServiceGetRestorabilityMatrix") - if err != nil { - return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()} - } - - localVarPath := localBasePath + "/pds/v1/restores:restorabilityMatrix" - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := url.Values{} - - // to determine the Content-Type header - localVarHTTPContentTypes := []string{} - - // set Content-Type header - localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes) - if localVarHTTPContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHTTPContentType - } - - // to determine the Accept header - localVarHTTPHeaderAccepts := []string{"application/json"} - - // set Accept header - localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts) - if localVarHTTPHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept - } - req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles) - if err != nil { - return localVarReturnValue, nil, err - } - - localVarHTTPResponse, err := a.client.callAPI(req) - if err != nil || localVarHTTPResponse == nil { - return localVarReturnValue, localVarHTTPResponse, err - } - - localVarBody, err := io.ReadAll(localVarHTTPResponse.Body) - localVarHTTPResponse.Body.Close() - localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody)) - if err != nil { - return localVarReturnValue, localVarHTTPResponse, err - } - - if localVarHTTPResponse.StatusCode >= 300 { - newErr := &GenericOpenAPIError{ - body: localVarBody, - error: localVarHTTPResponse.Status, - } - var v GooglerpcStatus - err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) - if err != nil { - newErr.error = err.Error() - return localVarReturnValue, localVarHTTPResponse, newErr - } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v - return localVarReturnValue, localVarHTTPResponse, newErr - } - - err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) - if err != nil { - newErr := &GenericOpenAPIError{ - body: localVarBody, - error: err.Error(), - } - return localVarReturnValue, localVarHTTPResponse, newErr - } - - return localVarReturnValue, localVarHTTPResponse, nil -} - type ApiRestoreServiceGetRestoreRequest struct { ctx context.Context ApiService *RestoreServiceAPIService @@ -362,7 +257,7 @@ type ApiRestoreServiceListRestoresRequest struct { ApiService *RestoreServiceAPIService tenantId *string projectId *string - deploymentId *string + dataServiceDeploymentId *string backupId *string sortSortBy *string sortSortOrder *string @@ -383,8 +278,8 @@ func (r ApiRestoreServiceListRestoresRequest) ProjectId(projectId string) ApiRes } // Deployment ID for which the restore will be listed. -func (r ApiRestoreServiceListRestoresRequest) DeploymentId(deploymentId string) ApiRestoreServiceListRestoresRequest { - r.deploymentId = &deploymentId +func (r ApiRestoreServiceListRestoresRequest) DataServiceDeploymentId(dataServiceDeploymentId string) ApiRestoreServiceListRestoresRequest { + r.dataServiceDeploymentId = &dataServiceDeploymentId return r } @@ -462,8 +357,8 @@ func (a *RestoreServiceAPIService) RestoreServiceListRestoresExecute(r ApiRestor if r.projectId != nil { parameterAddToHeaderOrQuery(localVarQueryParams, "projectId", r.projectId, "") } - if r.deploymentId != nil { - parameterAddToHeaderOrQuery(localVarQueryParams, "deploymentId", r.deploymentId, "") + if r.dataServiceDeploymentId != nil { + parameterAddToHeaderOrQuery(localVarQueryParams, "dataServiceDeploymentId", r.dataServiceDeploymentId, "") } if r.backupId != nil { parameterAddToHeaderOrQuery(localVarQueryParams, "backupId", r.backupId, "") diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/client.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/client.go index c3b7852ff..003a219a6 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/client.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/client.go @@ -162,7 +162,7 @@ func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix stri return } if t, ok := obj.(time.Time); ok { - parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339), collectionType) + parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339Nano), collectionType) return } value = v.Type().String() + " value" diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_destination_references.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_destination_references.go index b1e833203..ca0bee41e 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_destination_references.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_destination_references.go @@ -22,7 +22,7 @@ type V1DestinationReferences struct { // UID of the target cluster where restore will be created. TargetClusterId *string `json:"targetClusterId,omitempty"` // UID of the deployment created by the restore. - DeploymentId *string `json:"deploymentId,omitempty"` + DataServiceDeploymentId *string `json:"dataServiceDeploymentId,omitempty"` // UID of the project. ProjectId *string `json:"projectId,omitempty"` } @@ -76,36 +76,36 @@ func (o *V1DestinationReferences) SetTargetClusterId(v string) { o.TargetClusterId = &v } -// GetDeploymentId returns the DeploymentId field value if set, zero value otherwise. -func (o *V1DestinationReferences) GetDeploymentId() string { - if o == nil || IsNil(o.DeploymentId) { +// GetDataServiceDeploymentId returns the DataServiceDeploymentId field value if set, zero value otherwise. +func (o *V1DestinationReferences) GetDataServiceDeploymentId() string { + if o == nil || IsNil(o.DataServiceDeploymentId) { var ret string return ret } - return *o.DeploymentId + return *o.DataServiceDeploymentId } -// GetDeploymentIdOk returns a tuple with the DeploymentId field value if set, nil otherwise +// GetDataServiceDeploymentIdOk returns a tuple with the DataServiceDeploymentId field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1DestinationReferences) GetDeploymentIdOk() (*string, bool) { - if o == nil || IsNil(o.DeploymentId) { +func (o *V1DestinationReferences) GetDataServiceDeploymentIdOk() (*string, bool) { + if o == nil || IsNil(o.DataServiceDeploymentId) { return nil, false } - return o.DeploymentId, true + return o.DataServiceDeploymentId, true } -// HasDeploymentId returns a boolean if a field has been set. -func (o *V1DestinationReferences) HasDeploymentId() bool { - if o != nil && !IsNil(o.DeploymentId) { +// HasDataServiceDeploymentId returns a boolean if a field has been set. +func (o *V1DestinationReferences) HasDataServiceDeploymentId() bool { + if o != nil && !IsNil(o.DataServiceDeploymentId) { return true } return false } -// SetDeploymentId gets a reference to the given string and assigns it to the DeploymentId field. -func (o *V1DestinationReferences) SetDeploymentId(v string) { - o.DeploymentId = &v +// SetDataServiceDeploymentId gets a reference to the given string and assigns it to the DataServiceDeploymentId field. +func (o *V1DestinationReferences) SetDataServiceDeploymentId(v string) { + o.DataServiceDeploymentId = &v } // GetProjectId returns the ProjectId field value if set, zero value otherwise. @@ -153,8 +153,8 @@ func (o V1DestinationReferences) ToMap() (map[string]interface{}, error) { if !IsNil(o.TargetClusterId) { toSerialize["targetClusterId"] = o.TargetClusterId } - if !IsNil(o.DeploymentId) { - toSerialize["deploymentId"] = o.DeploymentId + if !IsNil(o.DataServiceDeploymentId) { + toSerialize["dataServiceDeploymentId"] = o.DataServiceDeploymentId } if !IsNil(o.ProjectId) { toSerialize["projectId"] = o.ProjectId diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_error_code.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_error_code.go index 6c8467aaa..7a944b1aa 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_error_code.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_error_code.go @@ -15,37 +15,23 @@ import ( "fmt" ) -// V1ErrorCode Enums for error codes for restore on the target cluster. - ERROR_CODE_UNSPECIFIED: Error code not specified. - PX_CLOUD_CREDENTIALS_NOT_FOUND: Cloud credentials specified in Restore spec were not found by Portworx. - PX_CLOUD_SNAP_RESTORE_TRIGGER_FAILED: Problem triggering the cloudsnap restore in PX. - PX_CLOUD_SNAP_RESTORE_FAILED: Problem with finishing the cloudsnap restore in PX. - PX_GET_CLOUD_SNAP_STATUS_FAILED: Problem with getting the cloudsnap restore status from PX. - PX_GET_VOLUME_FAILED: Problem with getting the volume from PX. - READ_DATA_SERVICE_MANIFEST_FAILED: Problem with reading the data service manifest from the busybox pod. - UNMARSHAL_DATA_SERVICE_JSON: Problem with unmarshalling the JSON with data service manifest. - DEPLOYMENT_NAME_ALREADY_EXIST: Deployment name already used in the namespace. - TIMEOUT_BUSYBOX_POD_RUNNING: Timeout while waiting for the BusyBox pod to enter the running state. - BUSYBOX_POD_FAILED: Busybox pod has failed. +// V1ErrorCode Enums for error codes for restore on the target cluster. - ERROR_CODE_UNSPECIFIED: Error code not specified. - DATA_SERVICE_DEPLOYMENT_NAME_ALREADY_EXIST: Deployment name already used in the namespace. - FAILED_BACKUP_CREDENTIAL_SYNC: Failed to sync backup credentials on the target cluster. - RESTORE_INTERNAL_ERROR: Restore Internal error. type V1ErrorCode string // List of v1ErrorCode const ( V1ERRORCODE_ERROR_CODE_UNSPECIFIED V1ErrorCode = "ERROR_CODE_UNSPECIFIED" - V1ERRORCODE_PX_CLOUD_CREDENTIALS_NOT_FOUND V1ErrorCode = "PX_CLOUD_CREDENTIALS_NOT_FOUND" - V1ERRORCODE_PX_CLOUD_SNAP_RESTORE_TRIGGER_FAILED V1ErrorCode = "PX_CLOUD_SNAP_RESTORE_TRIGGER_FAILED" - V1ERRORCODE_PX_CLOUD_SNAP_RESTORE_FAILED V1ErrorCode = "PX_CLOUD_SNAP_RESTORE_FAILED" - V1ERRORCODE_PX_GET_CLOUD_SNAP_STATUS_FAILED V1ErrorCode = "PX_GET_CLOUD_SNAP_STATUS_FAILED" - V1ERRORCODE_PX_GET_VOLUME_FAILED V1ErrorCode = "PX_GET_VOLUME_FAILED" - V1ERRORCODE_READ_DATA_SERVICE_MANIFEST_FAILED V1ErrorCode = "READ_DATA_SERVICE_MANIFEST_FAILED" - V1ERRORCODE_UNMARSHAL_DATA_SERVICE_JSON V1ErrorCode = "UNMARSHAL_DATA_SERVICE_JSON" - V1ERRORCODE_DEPLOYMENT_NAME_ALREADY_EXIST V1ErrorCode = "DEPLOYMENT_NAME_ALREADY_EXIST" - V1ERRORCODE_TIMEOUT_BUSYBOX_POD_RUNNING V1ErrorCode = "TIMEOUT_BUSYBOX_POD_RUNNING" - V1ERRORCODE_BUSYBOX_POD_FAILED V1ErrorCode = "BUSYBOX_POD_FAILED" + V1ERRORCODE_DATA_SERVICE_DEPLOYMENT_NAME_ALREADY_EXIST V1ErrorCode = "DATA_SERVICE_DEPLOYMENT_NAME_ALREADY_EXIST" + V1ERRORCODE_FAILED_BACKUP_CREDENTIAL_SYNC V1ErrorCode = "FAILED_BACKUP_CREDENTIAL_SYNC" + V1ERRORCODE_RESTORE_INTERNAL_ERROR V1ErrorCode = "RESTORE_INTERNAL_ERROR" ) // All allowed values of V1ErrorCode enum var AllowedV1ErrorCodeEnumValues = []V1ErrorCode{ "ERROR_CODE_UNSPECIFIED", - "PX_CLOUD_CREDENTIALS_NOT_FOUND", - "PX_CLOUD_SNAP_RESTORE_TRIGGER_FAILED", - "PX_CLOUD_SNAP_RESTORE_FAILED", - "PX_GET_CLOUD_SNAP_STATUS_FAILED", - "PX_GET_VOLUME_FAILED", - "READ_DATA_SERVICE_MANIFEST_FAILED", - "UNMARSHAL_DATA_SERVICE_JSON", - "DEPLOYMENT_NAME_ALREADY_EXIST", - "TIMEOUT_BUSYBOX_POD_RUNNING", - "BUSYBOX_POD_FAILED", + "DATA_SERVICE_DEPLOYMENT_NAME_ALREADY_EXIST", + "FAILED_BACKUP_CREDENTIAL_SYNC", + "RESTORE_INTERNAL_ERROR", } func (v *V1ErrorCode) UnmarshalJSON(src []byte) error { diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_phase.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_phase.go index d3ef840be..9bfed5ba0 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_phase.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_phase.go @@ -15,7 +15,7 @@ import ( "fmt" ) -// V1Phase Enum for phase of the restore. - PHASE_UNSPECIFIED: Phase is unspecified. - INITIALIZING: Restore is initializing. - PENDING: Restore has not yet started. - RESTORING_CLOUDSNAP: Waiting for the cloud snap restore to complete. - RESTORING_DATA_SERVICE_CR: PV and PVC resources are ready and we're waiting to get the data service manifest from the backup. - RESTORING_DEPLOYMENT: New data service has been created and we're waiting for the restore process to complete. - DEPLOYMENT_ENTERING_NORMAL_MODE: Restore process in data service has succeeded and we're waiting until it becomes healthy in normal mode. - SUCCESSFUL: Restore successful. - FAILED: Restore failed. +// V1Phase Enum for phase of the restore. - PHASE_UNSPECIFIED: Phase is unspecified. - INITIALIZING: Restore is initializing. - PENDING: Restore has not yet started. - RESTORING_CLOUDSNAP: Waiting for the cloud snap restore to complete. - RESTORING_DATA_SERVICE_DEPLOYMENT_CR: PV and PVC resources are ready and we're waiting to get the data service deployment manifest from the backup. - RESTORING_DATA_SERVICE_DEPLOYMENT: New data service deployment has been created and we're waiting for the restore process to complete. - DATA_SERVICE_DEPLOYMENT_ENTERING_NORMAL_MODE: Restore process in data service deployment has succeeded and we're waiting until it becomes healthy in normal mode. - SUCCESSFUL: Restore successful. - FAILED: Restore failed. type V1Phase string // List of v1Phase @@ -24,9 +24,9 @@ const ( V1PHASE_INITIALIZING V1Phase = "INITIALIZING" V1PHASE_PENDING V1Phase = "PENDING" V1PHASE_RESTORING_CLOUDSNAP V1Phase = "RESTORING_CLOUDSNAP" - V1PHASE_RESTORING_DATA_SERVICE_CR V1Phase = "RESTORING_DATA_SERVICE_CR" - V1PHASE_RESTORING_DEPLOYMENT V1Phase = "RESTORING_DEPLOYMENT" - V1PHASE_DEPLOYMENT_ENTERING_NORMAL_MODE V1Phase = "DEPLOYMENT_ENTERING_NORMAL_MODE" + V1PHASE_RESTORING_DATA_SERVICE_DEPLOYMENT_CR V1Phase = "RESTORING_DATA_SERVICE_DEPLOYMENT_CR" + V1PHASE_RESTORING_DATA_SERVICE_DEPLOYMENT V1Phase = "RESTORING_DATA_SERVICE_DEPLOYMENT" + V1PHASE_DATA_SERVICE_DEPLOYMENT_ENTERING_NORMAL_MODE V1Phase = "DATA_SERVICE_DEPLOYMENT_ENTERING_NORMAL_MODE" V1PHASE_SUCCESSFUL V1Phase = "SUCCESSFUL" V1PHASE_FAILED V1Phase = "FAILED" ) @@ -37,9 +37,9 @@ var AllowedV1PhaseEnumValues = []V1Phase{ "INITIALIZING", "PENDING", "RESTORING_CLOUDSNAP", - "RESTORING_DATA_SERVICE_CR", - "RESTORING_DEPLOYMENT", - "DEPLOYMENT_ENTERING_NORMAL_MODE", + "RESTORING_DATA_SERVICE_DEPLOYMENT_CR", + "RESTORING_DATA_SERVICE_DEPLOYMENT", + "DATA_SERVICE_DEPLOYMENT_ENTERING_NORMAL_MODE", "SUCCESSFUL", "FAILED", } diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_restorability_matrix.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_restorability_matrix.go deleted file mode 100644 index 2d487a635..000000000 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_restorability_matrix.go +++ /dev/null @@ -1,127 +0,0 @@ -/* -public/portworx/pds/restore/apiv1/restore.proto - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: version not set -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package restore - -import ( - "encoding/json" -) - -// checks if the V1RestorabilityMatrix type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &V1RestorabilityMatrix{} - -// V1RestorabilityMatrix RestorabilityMatrix represents the compatibility matrix for restore. -type V1RestorabilityMatrix struct { - // Restore compatibility conditions for each dataservice. - Conditions *map[string]V1RestoreCompatibilityConditionList `json:"conditions,omitempty"` -} - -// NewV1RestorabilityMatrix instantiates a new V1RestorabilityMatrix object -// This constructor will assign default values to properties that have it defined, -// and makes sure properties required by API are set, but the set of arguments -// will change when the set of required properties is changed -func NewV1RestorabilityMatrix() *V1RestorabilityMatrix { - this := V1RestorabilityMatrix{} - return &this -} - -// NewV1RestorabilityMatrixWithDefaults instantiates a new V1RestorabilityMatrix object -// This constructor will only assign default values to properties that have it defined, -// but it doesn't guarantee that properties required by API are set -func NewV1RestorabilityMatrixWithDefaults() *V1RestorabilityMatrix { - this := V1RestorabilityMatrix{} - return &this -} - -// GetConditions returns the Conditions field value if set, zero value otherwise. -func (o *V1RestorabilityMatrix) GetConditions() map[string]V1RestoreCompatibilityConditionList { - if o == nil || IsNil(o.Conditions) { - var ret map[string]V1RestoreCompatibilityConditionList - return ret - } - return *o.Conditions -} - -// GetConditionsOk returns a tuple with the Conditions field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *V1RestorabilityMatrix) GetConditionsOk() (*map[string]V1RestoreCompatibilityConditionList, bool) { - if o == nil || IsNil(o.Conditions) { - return nil, false - } - return o.Conditions, true -} - -// HasConditions returns a boolean if a field has been set. -func (o *V1RestorabilityMatrix) HasConditions() bool { - if o != nil && !IsNil(o.Conditions) { - return true - } - - return false -} - -// SetConditions gets a reference to the given map[string]V1RestoreCompatibilityConditionList and assigns it to the Conditions field. -func (o *V1RestorabilityMatrix) SetConditions(v map[string]V1RestoreCompatibilityConditionList) { - o.Conditions = &v -} - -func (o V1RestorabilityMatrix) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() - if err != nil { - return []byte{}, err - } - return json.Marshal(toSerialize) -} - -func (o V1RestorabilityMatrix) ToMap() (map[string]interface{}, error) { - toSerialize := map[string]interface{}{} - if !IsNil(o.Conditions) { - toSerialize["conditions"] = o.Conditions - } - return toSerialize, nil -} - -type NullableV1RestorabilityMatrix struct { - value *V1RestorabilityMatrix - isSet bool -} - -func (v NullableV1RestorabilityMatrix) Get() *V1RestorabilityMatrix { - return v.value -} - -func (v *NullableV1RestorabilityMatrix) Set(val *V1RestorabilityMatrix) { - v.value = val - v.isSet = true -} - -func (v NullableV1RestorabilityMatrix) IsSet() bool { - return v.isSet -} - -func (v *NullableV1RestorabilityMatrix) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullableV1RestorabilityMatrix(val *V1RestorabilityMatrix) *NullableV1RestorabilityMatrix { - return &NullableV1RestorabilityMatrix{value: val, isSet: true} -} - -func (v NullableV1RestorabilityMatrix) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullableV1RestorabilityMatrix) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - - diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_restore_compatibility_condition.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_restore_compatibility_condition.go deleted file mode 100644 index eab62a2d7..000000000 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_restore_compatibility_condition.go +++ /dev/null @@ -1,162 +0,0 @@ -/* -public/portworx/pds/restore/apiv1/restore.proto - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: version not set -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package restore - -import ( - "encoding/json" -) - -// checks if the V1RestoreCompatibilityCondition type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &V1RestoreCompatibilityCondition{} - -// V1RestoreCompatibilityCondition Restore compatibility condition. -type V1RestoreCompatibilityCondition struct { - Backup *map[string]string `json:"backup,omitempty"` - Image *map[string]string `json:"image,omitempty"` -} - -// NewV1RestoreCompatibilityCondition instantiates a new V1RestoreCompatibilityCondition object -// This constructor will assign default values to properties that have it defined, -// and makes sure properties required by API are set, but the set of arguments -// will change when the set of required properties is changed -func NewV1RestoreCompatibilityCondition() *V1RestoreCompatibilityCondition { - this := V1RestoreCompatibilityCondition{} - return &this -} - -// NewV1RestoreCompatibilityConditionWithDefaults instantiates a new V1RestoreCompatibilityCondition object -// This constructor will only assign default values to properties that have it defined, -// but it doesn't guarantee that properties required by API are set -func NewV1RestoreCompatibilityConditionWithDefaults() *V1RestoreCompatibilityCondition { - this := V1RestoreCompatibilityCondition{} - return &this -} - -// GetBackup returns the Backup field value if set, zero value otherwise. -func (o *V1RestoreCompatibilityCondition) GetBackup() map[string]string { - if o == nil || IsNil(o.Backup) { - var ret map[string]string - return ret - } - return *o.Backup -} - -// GetBackupOk returns a tuple with the Backup field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *V1RestoreCompatibilityCondition) GetBackupOk() (*map[string]string, bool) { - if o == nil || IsNil(o.Backup) { - return nil, false - } - return o.Backup, true -} - -// HasBackup returns a boolean if a field has been set. -func (o *V1RestoreCompatibilityCondition) HasBackup() bool { - if o != nil && !IsNil(o.Backup) { - return true - } - - return false -} - -// SetBackup gets a reference to the given map[string]string and assigns it to the Backup field. -func (o *V1RestoreCompatibilityCondition) SetBackup(v map[string]string) { - o.Backup = &v -} - -// GetImage returns the Image field value if set, zero value otherwise. -func (o *V1RestoreCompatibilityCondition) GetImage() map[string]string { - if o == nil || IsNil(o.Image) { - var ret map[string]string - return ret - } - return *o.Image -} - -// GetImageOk returns a tuple with the Image field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *V1RestoreCompatibilityCondition) GetImageOk() (*map[string]string, bool) { - if o == nil || IsNil(o.Image) { - return nil, false - } - return o.Image, true -} - -// HasImage returns a boolean if a field has been set. -func (o *V1RestoreCompatibilityCondition) HasImage() bool { - if o != nil && !IsNil(o.Image) { - return true - } - - return false -} - -// SetImage gets a reference to the given map[string]string and assigns it to the Image field. -func (o *V1RestoreCompatibilityCondition) SetImage(v map[string]string) { - o.Image = &v -} - -func (o V1RestoreCompatibilityCondition) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() - if err != nil { - return []byte{}, err - } - return json.Marshal(toSerialize) -} - -func (o V1RestoreCompatibilityCondition) ToMap() (map[string]interface{}, error) { - toSerialize := map[string]interface{}{} - if !IsNil(o.Backup) { - toSerialize["backup"] = o.Backup - } - if !IsNil(o.Image) { - toSerialize["image"] = o.Image - } - return toSerialize, nil -} - -type NullableV1RestoreCompatibilityCondition struct { - value *V1RestoreCompatibilityCondition - isSet bool -} - -func (v NullableV1RestoreCompatibilityCondition) Get() *V1RestoreCompatibilityCondition { - return v.value -} - -func (v *NullableV1RestoreCompatibilityCondition) Set(val *V1RestoreCompatibilityCondition) { - v.value = val - v.isSet = true -} - -func (v NullableV1RestoreCompatibilityCondition) IsSet() bool { - return v.isSet -} - -func (v *NullableV1RestoreCompatibilityCondition) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullableV1RestoreCompatibilityCondition(val *V1RestoreCompatibilityCondition) *NullableV1RestoreCompatibilityCondition { - return &NullableV1RestoreCompatibilityCondition{value: val, isSet: true} -} - -func (v NullableV1RestoreCompatibilityCondition) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullableV1RestoreCompatibilityCondition) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - - diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_restore_compatibility_condition_list.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_restore_compatibility_condition_list.go deleted file mode 100644 index 08d5478bc..000000000 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_restore_compatibility_condition_list.go +++ /dev/null @@ -1,127 +0,0 @@ -/* -public/portworx/pds/restore/apiv1/restore.proto - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: version not set -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package restore - -import ( - "encoding/json" -) - -// checks if the V1RestoreCompatibilityConditionList type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &V1RestoreCompatibilityConditionList{} - -// V1RestoreCompatibilityConditionList List of restore compatibility conditions. -type V1RestoreCompatibilityConditionList struct { - // List of restore compatibility conditions. - Conditions []V1RestoreCompatibilityCondition `json:"conditions,omitempty"` -} - -// NewV1RestoreCompatibilityConditionList instantiates a new V1RestoreCompatibilityConditionList object -// This constructor will assign default values to properties that have it defined, -// and makes sure properties required by API are set, but the set of arguments -// will change when the set of required properties is changed -func NewV1RestoreCompatibilityConditionList() *V1RestoreCompatibilityConditionList { - this := V1RestoreCompatibilityConditionList{} - return &this -} - -// NewV1RestoreCompatibilityConditionListWithDefaults instantiates a new V1RestoreCompatibilityConditionList object -// This constructor will only assign default values to properties that have it defined, -// but it doesn't guarantee that properties required by API are set -func NewV1RestoreCompatibilityConditionListWithDefaults() *V1RestoreCompatibilityConditionList { - this := V1RestoreCompatibilityConditionList{} - return &this -} - -// GetConditions returns the Conditions field value if set, zero value otherwise. -func (o *V1RestoreCompatibilityConditionList) GetConditions() []V1RestoreCompatibilityCondition { - if o == nil || IsNil(o.Conditions) { - var ret []V1RestoreCompatibilityCondition - return ret - } - return o.Conditions -} - -// GetConditionsOk returns a tuple with the Conditions field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *V1RestoreCompatibilityConditionList) GetConditionsOk() ([]V1RestoreCompatibilityCondition, bool) { - if o == nil || IsNil(o.Conditions) { - return nil, false - } - return o.Conditions, true -} - -// HasConditions returns a boolean if a field has been set. -func (o *V1RestoreCompatibilityConditionList) HasConditions() bool { - if o != nil && !IsNil(o.Conditions) { - return true - } - - return false -} - -// SetConditions gets a reference to the given []V1RestoreCompatibilityCondition and assigns it to the Conditions field. -func (o *V1RestoreCompatibilityConditionList) SetConditions(v []V1RestoreCompatibilityCondition) { - o.Conditions = v -} - -func (o V1RestoreCompatibilityConditionList) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() - if err != nil { - return []byte{}, err - } - return json.Marshal(toSerialize) -} - -func (o V1RestoreCompatibilityConditionList) ToMap() (map[string]interface{}, error) { - toSerialize := map[string]interface{}{} - if !IsNil(o.Conditions) { - toSerialize["conditions"] = o.Conditions - } - return toSerialize, nil -} - -type NullableV1RestoreCompatibilityConditionList struct { - value *V1RestoreCompatibilityConditionList - isSet bool -} - -func (v NullableV1RestoreCompatibilityConditionList) Get() *V1RestoreCompatibilityConditionList { - return v.value -} - -func (v *NullableV1RestoreCompatibilityConditionList) Set(val *V1RestoreCompatibilityConditionList) { - v.value = val - v.isSet = true -} - -func (v NullableV1RestoreCompatibilityConditionList) IsSet() bool { - return v.isSet -} - -func (v *NullableV1RestoreCompatibilityConditionList) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullableV1RestoreCompatibilityConditionList(val *V1RestoreCompatibilityConditionList) *NullableV1RestoreCompatibilityConditionList { - return &NullableV1RestoreCompatibilityConditionList{value: val, isSet: true} -} - -func (v NullableV1RestoreCompatibilityConditionList) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullableV1RestoreCompatibilityConditionList) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - - diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_source_references.go b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_source_references.go index a09bab5cd..1dcbda611 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_source_references.go +++ b/vendor/github.com/pure-px/platform-api-go-client/pds/v1/restore/model_v1_source_references.go @@ -22,7 +22,7 @@ var _ MappedNullable = &V1SourceReferences{} // V1SourceReferences SourceReferences for the restore. type V1SourceReferences struct { // UID of the deployment which was backed up. - DeploymentId *string `json:"deploymentId,omitempty"` + DataServiceDeploymentId *string `json:"dataServiceDeploymentId,omitempty"` // UID of the backup. BackupId string `json:"backupId"` // UID of the backup location. @@ -51,36 +51,36 @@ func NewV1SourceReferencesWithDefaults() *V1SourceReferences { return &this } -// GetDeploymentId returns the DeploymentId field value if set, zero value otherwise. -func (o *V1SourceReferences) GetDeploymentId() string { - if o == nil || IsNil(o.DeploymentId) { +// GetDataServiceDeploymentId returns the DataServiceDeploymentId field value if set, zero value otherwise. +func (o *V1SourceReferences) GetDataServiceDeploymentId() string { + if o == nil || IsNil(o.DataServiceDeploymentId) { var ret string return ret } - return *o.DeploymentId + return *o.DataServiceDeploymentId } -// GetDeploymentIdOk returns a tuple with the DeploymentId field value if set, nil otherwise +// GetDataServiceDeploymentIdOk returns a tuple with the DataServiceDeploymentId field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1SourceReferences) GetDeploymentIdOk() (*string, bool) { - if o == nil || IsNil(o.DeploymentId) { +func (o *V1SourceReferences) GetDataServiceDeploymentIdOk() (*string, bool) { + if o == nil || IsNil(o.DataServiceDeploymentId) { return nil, false } - return o.DeploymentId, true + return o.DataServiceDeploymentId, true } -// HasDeploymentId returns a boolean if a field has been set. -func (o *V1SourceReferences) HasDeploymentId() bool { - if o != nil && !IsNil(o.DeploymentId) { +// HasDataServiceDeploymentId returns a boolean if a field has been set. +func (o *V1SourceReferences) HasDataServiceDeploymentId() bool { + if o != nil && !IsNil(o.DataServiceDeploymentId) { return true } return false } -// SetDeploymentId gets a reference to the given string and assigns it to the DeploymentId field. -func (o *V1SourceReferences) SetDeploymentId(v string) { - o.DeploymentId = &v +// SetDataServiceDeploymentId gets a reference to the given string and assigns it to the DataServiceDeploymentId field. +func (o *V1SourceReferences) SetDataServiceDeploymentId(v string) { + o.DataServiceDeploymentId = &v } // GetBackupId returns the BackupId field value @@ -181,8 +181,8 @@ func (o V1SourceReferences) MarshalJSON() ([]byte, error) { func (o V1SourceReferences) ToMap() (map[string]interface{}, error) { toSerialize := map[string]interface{}{} - if !IsNil(o.DeploymentId) { - toSerialize["deploymentId"] = o.DeploymentId + if !IsNil(o.DataServiceDeploymentId) { + toSerialize["dataServiceDeploymentId"] = o.DataServiceDeploymentId } toSerialize["backupId"] = o.BackupId if !IsNil(o.BackupLocationId) { diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/account/README.md b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/account/README.md index e6c1475af..787072c41 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/account/README.md +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/account/README.md @@ -7,7 +7,7 @@ This API client was generated by the [OpenAPI Generator](https://openapi-generat - API version: version not set - Package version: 1.0.0 -- Generator version: 7.6.0-SNAPSHOT +- Generator version: 7.7.0-SNAPSHOT - Build package: org.openapitools.codegen.languages.GoClientCodegen ## Installation diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/account/client.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/account/client.go index 03f22e68a..593c28bca 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/account/client.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/account/client.go @@ -162,7 +162,7 @@ func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix stri return } if t, ok := obj.(time.Time); ok { - parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339), collectionType) + parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339Nano), collectionType) return } value = v.Type().String() + " value" diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/backuplocation/README.md b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/backuplocation/README.md index 0ddfd8583..d18e889ff 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/backuplocation/README.md +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/backuplocation/README.md @@ -7,7 +7,7 @@ This API client was generated by the [OpenAPI Generator](https://openapi-generat - API version: version not set - Package version: 1.0.0 -- Generator version: 7.6.0-SNAPSHOT +- Generator version: 7.7.0-SNAPSHOT - Build package: org.openapitools.codegen.languages.GoClientCodegen ## Installation diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/backuplocation/client.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/backuplocation/client.go index a7c06ea9f..24fbfd87c 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/backuplocation/client.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/backuplocation/client.go @@ -162,7 +162,7 @@ func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix stri return } if t, ok := obj.(time.Time); ok { - parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339), collectionType) + parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339Nano), collectionType) return } value = v.Type().String() + " value" diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/backuplocation/model_selector_operator.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/backuplocation/model_selector_operator.go index 5283d94bc..1d4e623ae 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/backuplocation/model_selector_operator.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/backuplocation/model_selector_operator.go @@ -15,7 +15,7 @@ import ( "fmt" ) -// SelectorOperator Operator specifies the relationship between the provided (key,value) pairs in the response. - OPERATOR_UNSPECIFIED: Unspecified, do not use. - IN: IN specifies that the key should be associated with atleast 1 of the element in value list. - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list. +// SelectorOperator Operator specifies the relationship between the provided (key,value) pairs in the response. - OPERATOR_UNSPECIFIED: Unspecified, do not use. - IN: IN specifies that the key should be associated with atleast 1 of the element in value list. - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list. - LIKE: LIKE specified that the key should be of a specified pattern type SelectorOperator string // List of SelectorOperator @@ -23,6 +23,7 @@ const ( SELECTOROPERATOR_OPERATOR_UNSPECIFIED SelectorOperator = "OPERATOR_UNSPECIFIED" SELECTOROPERATOR_IN SelectorOperator = "IN" SELECTOROPERATOR_NOT_IN SelectorOperator = "NOT_IN" + SELECTOROPERATOR_LIKE SelectorOperator = "LIKE" ) // All allowed values of SelectorOperator enum @@ -30,6 +31,7 @@ var AllowedSelectorOperatorEnumValues = []SelectorOperator{ "OPERATOR_UNSPECIFIED", "IN", "NOT_IN", + "LIKE", } func (v *SelectorOperator) UnmarshalJSON(src []byte) error { diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/cloudcredential/README.md b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/cloudcredential/README.md index 285f6bb50..0def3b105 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/cloudcredential/README.md +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/cloudcredential/README.md @@ -7,7 +7,7 @@ This API client was generated by the [OpenAPI Generator](https://openapi-generat - API version: version not set - Package version: 1.0.0 -- Generator version: 7.6.0-SNAPSHOT +- Generator version: 7.7.0-SNAPSHOT - Build package: org.openapitools.codegen.languages.GoClientCodegen ## Installation diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/cloudcredential/client.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/cloudcredential/client.go index 0061b58fc..209e50b2d 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/cloudcredential/client.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/cloudcredential/client.go @@ -162,7 +162,7 @@ func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix stri return } if t, ok := obj.(time.Time); ok { - parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339), collectionType) + parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339Nano), collectionType) return } value = v.Type().String() + " value" diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/cloudcredential/model_selector_operator.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/cloudcredential/model_selector_operator.go index 74876b5d7..f75cf3739 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/cloudcredential/model_selector_operator.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/cloudcredential/model_selector_operator.go @@ -15,7 +15,7 @@ import ( "fmt" ) -// SelectorOperator Operator specifies the relationship between the provided (key,value) pairs in the response. - OPERATOR_UNSPECIFIED: Unspecified, do not use. - IN: IN specifies that the key should be associated with atleast 1 of the element in value list. - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list. +// SelectorOperator Operator specifies the relationship between the provided (key,value) pairs in the response. - OPERATOR_UNSPECIFIED: Unspecified, do not use. - IN: IN specifies that the key should be associated with atleast 1 of the element in value list. - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list. - LIKE: LIKE specified that the key should be of a specified pattern type SelectorOperator string // List of SelectorOperator @@ -23,6 +23,7 @@ const ( SELECTOROPERATOR_OPERATOR_UNSPECIFIED SelectorOperator = "OPERATOR_UNSPECIFIED" SELECTOROPERATOR_IN SelectorOperator = "IN" SELECTOROPERATOR_NOT_IN SelectorOperator = "NOT_IN" + SELECTOROPERATOR_LIKE SelectorOperator = "LIKE" ) // All allowed values of SelectorOperator enum @@ -30,6 +31,7 @@ var AllowedSelectorOperatorEnumValues = []SelectorOperator{ "OPERATOR_UNSPECIFIED", "IN", "NOT_IN", + "LIKE", } func (v *SelectorOperator) UnmarshalJSON(src []byte) error { diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/iam/README.md b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/iam/README.md index 9bebd922e..1092a3fd4 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/iam/README.md +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/iam/README.md @@ -7,7 +7,7 @@ This API client was generated by the [OpenAPI Generator](https://openapi-generat - API version: version not set - Package version: 1.0.0 -- Generator version: 7.6.0-SNAPSHOT +- Generator version: 7.7.0-SNAPSHOT - Build package: org.openapitools.codegen.languages.GoClientCodegen ## Installation diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/iam/client.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/iam/client.go index 70ffa8541..b02146c41 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/iam/client.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/iam/client.go @@ -162,7 +162,7 @@ func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix stri return } if t, ok := obj.(time.Time); ok { - parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339), collectionType) + parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339Nano), collectionType) return } value = v.Type().String() + " value" diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/namespace/README.md b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/namespace/README.md index b5d766163..ac1a33faf 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/namespace/README.md +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/namespace/README.md @@ -7,7 +7,7 @@ This API client was generated by the [OpenAPI Generator](https://openapi-generat - API version: version not set - Package version: 1.0.0 -- Generator version: 7.6.0-SNAPSHOT +- Generator version: 7.7.0-SNAPSHOT - Build package: org.openapitools.codegen.languages.GoClientCodegen ## Installation diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/namespace/client.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/namespace/client.go index ed2fc5344..733593f08 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/namespace/client.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/namespace/client.go @@ -162,7 +162,7 @@ func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix stri return } if t, ok := obj.(time.Time); ok { - parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339), collectionType) + parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339Nano), collectionType) return } value = v.Type().String() + " value" diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/namespace/model_selector_operator.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/namespace/model_selector_operator.go index f9540ef58..892dfd8b4 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/namespace/model_selector_operator.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/namespace/model_selector_operator.go @@ -15,7 +15,7 @@ import ( "fmt" ) -// SelectorOperator Operator specifies the relationship between the provided (key,value) pairs in the response. - OPERATOR_UNSPECIFIED: Unspecified, do not use. - IN: IN specifies that the key should be associated with atleast 1 of the element in value list. - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list. +// SelectorOperator Operator specifies the relationship between the provided (key,value) pairs in the response. - OPERATOR_UNSPECIFIED: Unspecified, do not use. - IN: IN specifies that the key should be associated with atleast 1 of the element in value list. - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list. - LIKE: LIKE specified that the key should be of a specified pattern type SelectorOperator string // List of SelectorOperator @@ -23,6 +23,7 @@ const ( SELECTOROPERATOR_OPERATOR_UNSPECIFIED SelectorOperator = "OPERATOR_UNSPECIFIED" SELECTOROPERATOR_IN SelectorOperator = "IN" SELECTOROPERATOR_NOT_IN SelectorOperator = "NOT_IN" + SELECTOROPERATOR_LIKE SelectorOperator = "LIKE" ) // All allowed values of SelectorOperator enum @@ -30,6 +31,7 @@ var AllowedSelectorOperatorEnumValues = []SelectorOperator{ "OPERATOR_UNSPECIFIED", "IN", "NOT_IN", + "LIKE", } func (v *SelectorOperator) UnmarshalJSON(src []byte) error { diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/onboard/README.md b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/onboard/README.md index 2add933af..cf77b830b 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/onboard/README.md +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/onboard/README.md @@ -7,7 +7,7 @@ This API client was generated by the [OpenAPI Generator](https://openapi-generat - API version: version not set - Package version: 1.0.0 -- Generator version: 7.6.0-SNAPSHOT +- Generator version: 7.7.0-SNAPSHOT - Build package: org.openapitools.codegen.languages.GoClientCodegen ## Installation diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/onboard/client.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/onboard/client.go index 8eaedabe1..2e6b97e75 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/onboard/client.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/onboard/client.go @@ -162,7 +162,7 @@ func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix stri return } if t, ok := obj.(time.Time); ok { - parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339), collectionType) + parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339Nano), collectionType) return } value = v.Type().String() + " value" diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/project/README.md b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/project/README.md index 66140ab53..53c8bbea0 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/project/README.md +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/project/README.md @@ -7,7 +7,7 @@ This API client was generated by the [OpenAPI Generator](https://openapi-generat - API version: version not set - Package version: 1.0.0 -- Generator version: 7.6.0-SNAPSHOT +- Generator version: 7.7.0-SNAPSHOT - Build package: org.openapitools.codegen.languages.GoClientCodegen ## Installation diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/project/client.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/project/client.go index cdc084e34..58f861192 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/project/client.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/project/client.go @@ -162,7 +162,7 @@ func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix stri return } if t, ok := obj.(time.Time); ok { - parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339), collectionType) + parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339Nano), collectionType) return } value = v.Type().String() + " value" diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/project/model_selector_operator.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/project/model_selector_operator.go index f5df64b2b..8e9a5f9b3 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/project/model_selector_operator.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/project/model_selector_operator.go @@ -15,7 +15,7 @@ import ( "fmt" ) -// SelectorOperator Operator specifies the relationship between the provided (key,value) pairs in the response. - OPERATOR_UNSPECIFIED: Unspecified, do not use. - IN: IN specifies that the key should be associated with atleast 1 of the element in value list. - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list. +// SelectorOperator Operator specifies the relationship between the provided (key,value) pairs in the response. - OPERATOR_UNSPECIFIED: Unspecified, do not use. - IN: IN specifies that the key should be associated with atleast 1 of the element in value list. - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list. - LIKE: LIKE specified that the key should be of a specified pattern type SelectorOperator string // List of SelectorOperator @@ -23,6 +23,7 @@ const ( SELECTOROPERATOR_OPERATOR_UNSPECIFIED SelectorOperator = "OPERATOR_UNSPECIFIED" SELECTOROPERATOR_IN SelectorOperator = "IN" SELECTOROPERATOR_NOT_IN SelectorOperator = "NOT_IN" + SELECTOROPERATOR_LIKE SelectorOperator = "LIKE" ) // All allowed values of SelectorOperator enum @@ -30,6 +31,7 @@ var AllowedSelectorOperatorEnumValues = []SelectorOperator{ "OPERATOR_UNSPECIFIED", "IN", "NOT_IN", + "LIKE", } func (v *SelectorOperator) UnmarshalJSON(src []byte) error { diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/project/model_v1_pds_resources.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/project/model_v1_pds_resources.go index 32db76441..c8d37d4a9 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/project/model_v1_pds_resources.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/project/model_v1_pds_resources.go @@ -20,7 +20,7 @@ var _ MappedNullable = &V1PDSResources{} // V1PDSResources PDSResource clubs resources generated by pds application. type V1PDSResources struct { // Resource ids of deployments. - Deployments []string `json:"deployments,omitempty"` + DataServiceDeployments []string `json:"dataServiceDeployments,omitempty"` // Resource ids of backup configs. BackupConfigs []string `json:"backupConfigs,omitempty"` // Resource ids of restores. @@ -44,36 +44,36 @@ func NewV1PDSResourcesWithDefaults() *V1PDSResources { return &this } -// GetDeployments returns the Deployments field value if set, zero value otherwise. -func (o *V1PDSResources) GetDeployments() []string { - if o == nil || IsNil(o.Deployments) { +// GetDataServiceDeployments returns the DataServiceDeployments field value if set, zero value otherwise. +func (o *V1PDSResources) GetDataServiceDeployments() []string { + if o == nil || IsNil(o.DataServiceDeployments) { var ret []string return ret } - return o.Deployments + return o.DataServiceDeployments } -// GetDeploymentsOk returns a tuple with the Deployments field value if set, nil otherwise +// GetDataServiceDeploymentsOk returns a tuple with the DataServiceDeployments field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *V1PDSResources) GetDeploymentsOk() ([]string, bool) { - if o == nil || IsNil(o.Deployments) { +func (o *V1PDSResources) GetDataServiceDeploymentsOk() ([]string, bool) { + if o == nil || IsNil(o.DataServiceDeployments) { return nil, false } - return o.Deployments, true + return o.DataServiceDeployments, true } -// HasDeployments returns a boolean if a field has been set. -func (o *V1PDSResources) HasDeployments() bool { - if o != nil && !IsNil(o.Deployments) { +// HasDataServiceDeployments returns a boolean if a field has been set. +func (o *V1PDSResources) HasDataServiceDeployments() bool { + if o != nil && !IsNil(o.DataServiceDeployments) { return true } return false } -// SetDeployments gets a reference to the given []string and assigns it to the Deployments field. -func (o *V1PDSResources) SetDeployments(v []string) { - o.Deployments = v +// SetDataServiceDeployments gets a reference to the given []string and assigns it to the DataServiceDeployments field. +func (o *V1PDSResources) SetDataServiceDeployments(v []string) { + o.DataServiceDeployments = v } // GetBackupConfigs returns the BackupConfigs field value if set, zero value otherwise. @@ -150,8 +150,8 @@ func (o V1PDSResources) MarshalJSON() ([]byte, error) { func (o V1PDSResources) ToMap() (map[string]interface{}, error) { toSerialize := map[string]interface{}{} - if !IsNil(o.Deployments) { - toSerialize["deployments"] = o.Deployments + if !IsNil(o.DataServiceDeployments) { + toSerialize["dataServiceDeployments"] = o.DataServiceDeployments } if !IsNil(o.BackupConfigs) { toSerialize["backupConfigs"] = o.BackupConfigs diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/serviceaccount/README.md b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/serviceaccount/README.md index 7a2dd0250..97a8df1ae 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/serviceaccount/README.md +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/serviceaccount/README.md @@ -7,7 +7,7 @@ This API client was generated by the [OpenAPI Generator](https://openapi-generat - API version: version not set - Package version: 1.0.0 -- Generator version: 7.6.0-SNAPSHOT +- Generator version: 7.7.0-SNAPSHOT - Build package: org.openapitools.codegen.languages.GoClientCodegen ## Installation diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/serviceaccount/client.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/serviceaccount/client.go index 37e223ed0..1800b9b14 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/serviceaccount/client.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/serviceaccount/client.go @@ -162,7 +162,7 @@ func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix stri return } if t, ok := obj.(time.Time); ok { - parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339), collectionType) + parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339Nano), collectionType) return } value = v.Type().String() + " value" diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/README.md b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/README.md index 34b49a5df..9c8aee257 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/README.md +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/README.md @@ -7,7 +7,7 @@ This API client was generated by the [OpenAPI Generator](https://openapi-generat - API version: version not set - Package version: 1.0.0 -- Generator version: 7.6.0-SNAPSHOT +- Generator version: 7.7.0-SNAPSHOT - Build package: org.openapitools.codegen.languages.GoClientCodegen ## Installation @@ -84,6 +84,7 @@ Class | Method | HTTP request | Description *ApplicationServiceAPI* | [**ApplicationServiceListApplications**](docs/ApplicationServiceAPI.md#applicationservicelistapplications) | **Get** /core/v1/clusters/{clusterId}/applications | ListApplications API lists the applications installed on the target cluster. *ApplicationServiceAPI* | [**ApplicationServiceUninstallApplication**](docs/ApplicationServiceAPI.md#applicationserviceuninstallapplication) | **Delete** /core/v1/applications/{id} | UninstallApplication API uninstalls the specified application on the target cluster. *ApplicationServiceAPI* | [**ApplicationServiceUninstallApplication2**](docs/ApplicationServiceAPI.md#applicationserviceuninstallapplication2) | **Delete** /core/v1/clusters/{clusterId}/applications/{id} | UninstallApplication API uninstalls the specified application on the target cluster. +*ApplicationServiceAPI* | [**ApplicationServiceUpdateApplication**](docs/ApplicationServiceAPI.md#applicationserviceupdateapplication) | **Put** /core/v1/applications/{application.meta.uid} | UpdateApplication API updates specified application on the target cluster. *TargetClusterServiceAPI* | [**TargetClusterServiceDeleteTargetCluster**](docs/TargetClusterServiceAPI.md#targetclusterservicedeletetargetcluster) | **Delete** /core/v1/clusters/{id} | DeleteTargetCluster API deletes the specified TargetCluster. *TargetClusterServiceAPI* | [**TargetClusterServiceGetTargetCluster**](docs/TargetClusterServiceAPI.md#targetclusterservicegettargetcluster) | **Get** /core/v1/clusters/{id} | GetTargetCluster API returns the info about the TargetCluster for given name. *TargetClusterServiceAPI* | [**TargetClusterServiceListTargetClusters**](docs/TargetClusterServiceAPI.md#targetclusterservicelisttargetclusters) | **Get** /core/v1/clusters | List API lists all the target clusters for a tenant @@ -93,10 +94,14 @@ Class | Method | HTTP request | Description ## Documentation For Models + - [ApplicationHealthHealth](docs/ApplicationHealthHealth.md) - [ApplicationPhasePhase](docs/ApplicationPhasePhase.md) + - [ApplicationToBeUpdated](docs/ApplicationToBeUpdated.md) - [Applicationv1Status](docs/Applicationv1Status.md) - [GooglerpcStatus](docs/GooglerpcStatus.md) + - [MetadataOfTheApplicationResourceMeta](docs/MetadataOfTheApplicationResourceMeta.md) - [MetadataOfTheTargetClusterResourceMeta](docs/MetadataOfTheTargetClusterResourceMeta.md) + - [PDSPropertiesGlobal](docs/PDSPropertiesGlobal.md) - [PlatformTargetClusterv1Status](docs/PlatformTargetClusterv1Status.md) - [ProtobufAny](docs/ProtobufAny.md) - [ResourceSelectorResourceFilter](docs/ResourceSelectorResourceFilter.md) @@ -114,6 +119,7 @@ Class | Method | HTTP request | Description - [V1ListTargetClustersResponse](docs/V1ListTargetClustersResponse.md) - [V1Meta](docs/V1Meta.md) - [V1Metadata](docs/V1Metadata.md) + - [V1PDSProperties](docs/V1PDSProperties.md) - [V1PXEMetadata](docs/V1PXEMetadata.md) - [V1PageBasedPaginationRequest](docs/V1PageBasedPaginationRequest.md) - [V1PageBasedPaginationResponse](docs/V1PageBasedPaginationResponse.md) @@ -124,6 +130,7 @@ Class | Method | HTTP request | Description - [V1Sort](docs/V1Sort.md) - [V1SortOrderValue](docs/V1SortOrderValue.md) - [V1TargetCluster](docs/V1TargetCluster.md) + - [V1TargetClusterApplicationStatus](docs/V1TargetClusterApplicationStatus.md) - [V1TargetClusterPhasePhase](docs/V1TargetClusterPhasePhase.md) diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/api_application_service.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/api_application_service.go index 4a7e2f231..fcd742aba 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/api_application_service.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/api_application_service.go @@ -736,3 +736,124 @@ func (a *ApplicationServiceAPIService) ApplicationServiceUninstallApplication2Ex return localVarReturnValue, localVarHTTPResponse, nil } + +type ApiApplicationServiceUpdateApplicationRequest struct { + ctx context.Context + ApiService *ApplicationServiceAPIService + applicationMetaUid string + applicationToBeUpdated *ApplicationToBeUpdated +} + +// application to be updated. +func (r ApiApplicationServiceUpdateApplicationRequest) ApplicationToBeUpdated(applicationToBeUpdated ApplicationToBeUpdated) ApiApplicationServiceUpdateApplicationRequest { + r.applicationToBeUpdated = &applicationToBeUpdated + return r +} + +func (r ApiApplicationServiceUpdateApplicationRequest) Execute() (*V1Application, *http.Response, error) { + return r.ApiService.ApplicationServiceUpdateApplicationExecute(r) +} + +/* +ApplicationServiceUpdateApplication UpdateApplication API updates specified application on the target cluster. + + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param applicationMetaUid UID of the resource of the format -. + @return ApiApplicationServiceUpdateApplicationRequest +*/ +func (a *ApplicationServiceAPIService) ApplicationServiceUpdateApplication(ctx context.Context, applicationMetaUid string) ApiApplicationServiceUpdateApplicationRequest { + return ApiApplicationServiceUpdateApplicationRequest{ + ApiService: a, + ctx: ctx, + applicationMetaUid: applicationMetaUid, + } +} + +// Execute executes the request +// @return V1Application +func (a *ApplicationServiceAPIService) ApplicationServiceUpdateApplicationExecute(r ApiApplicationServiceUpdateApplicationRequest) (*V1Application, *http.Response, error) { + var ( + localVarHTTPMethod = http.MethodPut + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *V1Application + ) + + localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ApplicationServiceAPIService.ApplicationServiceUpdateApplication") + if err != nil { + return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()} + } + + localVarPath := localBasePath + "/core/v1/applications/{application.meta.uid}" + localVarPath = strings.Replace(localVarPath, "{"+"application.meta.uid"+"}", url.PathEscape(parameterValueToString(r.applicationMetaUid, "applicationMetaUid")), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + if r.applicationToBeUpdated == nil { + return localVarReturnValue, nil, reportError("applicationToBeUpdated is required and must be specified") + } + + // to determine the Content-Type header + localVarHTTPContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes) + if localVarHTTPContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHTTPContentType + } + + // to determine the Accept header + localVarHTTPHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts) + if localVarHTTPHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept + } + // body params + localVarPostBody = r.applicationToBeUpdated + req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHTTPResponse, err := a.client.callAPI(req) + if err != nil || localVarHTTPResponse == nil { + return localVarReturnValue, localVarHTTPResponse, err + } + + localVarBody, err := io.ReadAll(localVarHTTPResponse.Body) + localVarHTTPResponse.Body.Close() + localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody)) + if err != nil { + return localVarReturnValue, localVarHTTPResponse, err + } + + if localVarHTTPResponse.StatusCode >= 300 { + newErr := &GenericOpenAPIError{ + body: localVarBody, + error: localVarHTTPResponse.Status, + } + var v GooglerpcStatus + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHTTPResponse, newErr + } + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v + return localVarReturnValue, localVarHTTPResponse, newErr + } + + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr := &GenericOpenAPIError{ + body: localVarBody, + error: err.Error(), + } + return localVarReturnValue, localVarHTTPResponse, newErr + } + + return localVarReturnValue, localVarHTTPResponse, nil +} diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/client.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/client.go index b58ac9671..e5e18130b 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/client.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/client.go @@ -165,7 +165,7 @@ func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix stri return } if t, ok := obj.(time.Time); ok { - parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339), collectionType) + parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339Nano), collectionType) return } value = v.Type().String() + " value" diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_application_health_health.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_application_health_health.go new file mode 100644 index 000000000..0084552bb --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_application_health_health.go @@ -0,0 +1,115 @@ +/* +public/portworx/platform/targetcluster/application/apiv1/application.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package targetcluster + +import ( + "encoding/json" + "fmt" +) + +// ApplicationHealthHealth Health determines health of an application. - HEALTH_UNSPECIFIED: Must be set in the proto file; ignore. - UNKNOWN: Application health is unknown. - HEALTHY: Application is healthy. - UNHEALTHY: Application is unhealthy. +type ApplicationHealthHealth string + +// List of ApplicationHealthHealth +const ( + APPLICATIONHEALTHHEALTH_HEALTH_UNSPECIFIED ApplicationHealthHealth = "HEALTH_UNSPECIFIED" + APPLICATIONHEALTHHEALTH_UNKNOWN ApplicationHealthHealth = "UNKNOWN" + APPLICATIONHEALTHHEALTH_HEALTHY ApplicationHealthHealth = "HEALTHY" + APPLICATIONHEALTHHEALTH_UNHEALTHY ApplicationHealthHealth = "UNHEALTHY" +) + +// All allowed values of ApplicationHealthHealth enum +var AllowedApplicationHealthHealthEnumValues = []ApplicationHealthHealth{ + "HEALTH_UNSPECIFIED", + "UNKNOWN", + "HEALTHY", + "UNHEALTHY", +} + +func (v *ApplicationHealthHealth) UnmarshalJSON(src []byte) error { + var value string + err := json.Unmarshal(src, &value) + if err != nil { + return err + } + enumTypeValue := ApplicationHealthHealth(value) + for _, existing := range AllowedApplicationHealthHealthEnumValues { + if existing == enumTypeValue { + *v = enumTypeValue + return nil + } + } + + return fmt.Errorf("%+v is not a valid ApplicationHealthHealth", value) +} + +// NewApplicationHealthHealthFromValue returns a pointer to a valid ApplicationHealthHealth +// for the value passed as argument, or an error if the value passed is not allowed by the enum +func NewApplicationHealthHealthFromValue(v string) (*ApplicationHealthHealth, error) { + ev := ApplicationHealthHealth(v) + if ev.IsValid() { + return &ev, nil + } else { + return nil, fmt.Errorf("invalid value '%v' for ApplicationHealthHealth: valid values are %v", v, AllowedApplicationHealthHealthEnumValues) + } +} + +// IsValid return true if the value is valid for the enum, false otherwise +func (v ApplicationHealthHealth) IsValid() bool { + for _, existing := range AllowedApplicationHealthHealthEnumValues { + if existing == v { + return true + } + } + return false +} + +// Ptr returns reference to ApplicationHealthHealth value +func (v ApplicationHealthHealth) Ptr() *ApplicationHealthHealth { + return &v +} + +type NullableApplicationHealthHealth struct { + value *ApplicationHealthHealth + isSet bool +} + +func (v NullableApplicationHealthHealth) Get() *ApplicationHealthHealth { + return v.value +} + +func (v *NullableApplicationHealthHealth) Set(val *ApplicationHealthHealth) { + v.value = val + v.isSet = true +} + +func (v NullableApplicationHealthHealth) IsSet() bool { + return v.isSet +} + +func (v *NullableApplicationHealthHealth) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableApplicationHealthHealth(val *ApplicationHealthHealth) *NullableApplicationHealthHealth { + return &NullableApplicationHealthHealth{value: val, isSet: true} +} + +func (v NullableApplicationHealthHealth) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableApplicationHealthHealth) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_application_to_be_updated_.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_application_to_be_updated_.go new file mode 100644 index 000000000..214246e58 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_application_to_be_updated_.go @@ -0,0 +1,198 @@ +/* +public/portworx/platform/targetcluster/application/apiv1/application.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package targetcluster + +import ( + "encoding/json" +) + +// checks if the ApplicationToBeUpdated type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &ApplicationToBeUpdated{} + +// ApplicationToBeUpdated struct for ApplicationToBeUpdated +type ApplicationToBeUpdated struct { + Meta *MetadataOfTheApplicationResourceMeta `json:"meta,omitempty"` + Config *V1Config `json:"config,omitempty"` + Status *Applicationv1Status `json:"status,omitempty"` +} + +// NewApplicationToBeUpdated instantiates a new ApplicationToBeUpdated object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewApplicationToBeUpdated() *ApplicationToBeUpdated { + this := ApplicationToBeUpdated{} + return &this +} + +// NewApplicationToBeUpdatedWithDefaults instantiates a new ApplicationToBeUpdated object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewApplicationToBeUpdatedWithDefaults() *ApplicationToBeUpdated { + this := ApplicationToBeUpdated{} + return &this +} + +// GetMeta returns the Meta field value if set, zero value otherwise. +func (o *ApplicationToBeUpdated) GetMeta() MetadataOfTheApplicationResourceMeta { + if o == nil || IsNil(o.Meta) { + var ret MetadataOfTheApplicationResourceMeta + return ret + } + return *o.Meta +} + +// GetMetaOk returns a tuple with the Meta field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ApplicationToBeUpdated) GetMetaOk() (*MetadataOfTheApplicationResourceMeta, bool) { + if o == nil || IsNil(o.Meta) { + return nil, false + } + return o.Meta, true +} + +// HasMeta returns a boolean if a field has been set. +func (o *ApplicationToBeUpdated) HasMeta() bool { + if o != nil && !IsNil(o.Meta) { + return true + } + + return false +} + +// SetMeta gets a reference to the given MetadataOfTheApplicationResourceMeta and assigns it to the Meta field. +func (o *ApplicationToBeUpdated) SetMeta(v MetadataOfTheApplicationResourceMeta) { + o.Meta = &v +} + +// GetConfig returns the Config field value if set, zero value otherwise. +func (o *ApplicationToBeUpdated) GetConfig() V1Config { + if o == nil || IsNil(o.Config) { + var ret V1Config + return ret + } + return *o.Config +} + +// GetConfigOk returns a tuple with the Config field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ApplicationToBeUpdated) GetConfigOk() (*V1Config, bool) { + if o == nil || IsNil(o.Config) { + return nil, false + } + return o.Config, true +} + +// HasConfig returns a boolean if a field has been set. +func (o *ApplicationToBeUpdated) HasConfig() bool { + if o != nil && !IsNil(o.Config) { + return true + } + + return false +} + +// SetConfig gets a reference to the given V1Config and assigns it to the Config field. +func (o *ApplicationToBeUpdated) SetConfig(v V1Config) { + o.Config = &v +} + +// GetStatus returns the Status field value if set, zero value otherwise. +func (o *ApplicationToBeUpdated) GetStatus() Applicationv1Status { + if o == nil || IsNil(o.Status) { + var ret Applicationv1Status + return ret + } + return *o.Status +} + +// GetStatusOk returns a tuple with the Status field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ApplicationToBeUpdated) GetStatusOk() (*Applicationv1Status, bool) { + if o == nil || IsNil(o.Status) { + return nil, false + } + return o.Status, true +} + +// HasStatus returns a boolean if a field has been set. +func (o *ApplicationToBeUpdated) HasStatus() bool { + if o != nil && !IsNil(o.Status) { + return true + } + + return false +} + +// SetStatus gets a reference to the given Applicationv1Status and assigns it to the Status field. +func (o *ApplicationToBeUpdated) SetStatus(v Applicationv1Status) { + o.Status = &v +} + +func (o ApplicationToBeUpdated) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o ApplicationToBeUpdated) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.Meta) { + toSerialize["meta"] = o.Meta + } + if !IsNil(o.Config) { + toSerialize["config"] = o.Config + } + if !IsNil(o.Status) { + toSerialize["status"] = o.Status + } + return toSerialize, nil +} + +type NullableApplicationToBeUpdated struct { + value *ApplicationToBeUpdated + isSet bool +} + +func (v NullableApplicationToBeUpdated) Get() *ApplicationToBeUpdated { + return v.value +} + +func (v *NullableApplicationToBeUpdated) Set(val *ApplicationToBeUpdated) { + v.value = val + v.isSet = true +} + +func (v NullableApplicationToBeUpdated) IsSet() bool { + return v.isSet +} + +func (v *NullableApplicationToBeUpdated) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableApplicationToBeUpdated(val *ApplicationToBeUpdated) *NullableApplicationToBeUpdated { + return &NullableApplicationToBeUpdated{value: val, isSet: true} +} + +func (v NullableApplicationToBeUpdated) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableApplicationToBeUpdated) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_applicationv1_status.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_applicationv1_status.go index 6f9ff12ad..60a81678c 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_applicationv1_status.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_applicationv1_status.go @@ -22,6 +22,9 @@ type Applicationv1Status struct { // current application chart version. Version *string `json:"version,omitempty"` Phase *ApplicationPhasePhase `json:"phase,omitempty"` + Health *ApplicationHealthHealth `json:"health,omitempty"` + // conditions of the application. + Conditions *map[string]string `json:"conditions,omitempty"` } // NewApplicationv1Status instantiates a new Applicationv1Status object @@ -32,6 +35,8 @@ func NewApplicationv1Status() *Applicationv1Status { this := Applicationv1Status{} var phase ApplicationPhasePhase = APPLICATIONPHASEPHASE_PHASE_UNSPECIFIED this.Phase = &phase + var health ApplicationHealthHealth = APPLICATIONHEALTHHEALTH_HEALTH_UNSPECIFIED + this.Health = &health return &this } @@ -42,6 +47,8 @@ func NewApplicationv1StatusWithDefaults() *Applicationv1Status { this := Applicationv1Status{} var phase ApplicationPhasePhase = APPLICATIONPHASEPHASE_PHASE_UNSPECIFIED this.Phase = &phase + var health ApplicationHealthHealth = APPLICATIONHEALTHHEALTH_HEALTH_UNSPECIFIED + this.Health = &health return &this } @@ -109,6 +116,70 @@ func (o *Applicationv1Status) SetPhase(v ApplicationPhasePhase) { o.Phase = &v } +// GetHealth returns the Health field value if set, zero value otherwise. +func (o *Applicationv1Status) GetHealth() ApplicationHealthHealth { + if o == nil || IsNil(o.Health) { + var ret ApplicationHealthHealth + return ret + } + return *o.Health +} + +// GetHealthOk returns a tuple with the Health field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *Applicationv1Status) GetHealthOk() (*ApplicationHealthHealth, bool) { + if o == nil || IsNil(o.Health) { + return nil, false + } + return o.Health, true +} + +// HasHealth returns a boolean if a field has been set. +func (o *Applicationv1Status) HasHealth() bool { + if o != nil && !IsNil(o.Health) { + return true + } + + return false +} + +// SetHealth gets a reference to the given ApplicationHealthHealth and assigns it to the Health field. +func (o *Applicationv1Status) SetHealth(v ApplicationHealthHealth) { + o.Health = &v +} + +// GetConditions returns the Conditions field value if set, zero value otherwise. +func (o *Applicationv1Status) GetConditions() map[string]string { + if o == nil || IsNil(o.Conditions) { + var ret map[string]string + return ret + } + return *o.Conditions +} + +// GetConditionsOk returns a tuple with the Conditions field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *Applicationv1Status) GetConditionsOk() (*map[string]string, bool) { + if o == nil || IsNil(o.Conditions) { + return nil, false + } + return o.Conditions, true +} + +// HasConditions returns a boolean if a field has been set. +func (o *Applicationv1Status) HasConditions() bool { + if o != nil && !IsNil(o.Conditions) { + return true + } + + return false +} + +// SetConditions gets a reference to the given map[string]string and assigns it to the Conditions field. +func (o *Applicationv1Status) SetConditions(v map[string]string) { + o.Conditions = &v +} + func (o Applicationv1Status) MarshalJSON() ([]byte, error) { toSerialize,err := o.ToMap() if err != nil { @@ -125,6 +196,12 @@ func (o Applicationv1Status) ToMap() (map[string]interface{}, error) { if !IsNil(o.Phase) { toSerialize["phase"] = o.Phase } + if !IsNil(o.Health) { + toSerialize["health"] = o.Health + } + if !IsNil(o.Conditions) { + toSerialize["conditions"] = o.Conditions + } return toSerialize, nil } diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_metadata_of_the_application_resource_meta__.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_metadata_of_the_application_resource_meta__.go new file mode 100644 index 000000000..80b7d5495 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_metadata_of_the_application_resource_meta__.go @@ -0,0 +1,423 @@ +/* +public/portworx/platform/targetcluster/application/apiv1/application.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package targetcluster + +import ( + "encoding/json" + "time" +) + +// checks if the MetadataOfTheApplicationResourceMeta type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &MetadataOfTheApplicationResourceMeta{} + +// MetadataOfTheApplicationResourceMeta Metadata of the application(Resource Meta). +type MetadataOfTheApplicationResourceMeta struct { + // Name of the resource. + Name *string `json:"name,omitempty"` + // Description of the resource. + Description *string `json:"description,omitempty"` + // A string that identifies the version of this object that can be used by clients to determine when objects have changed. This value must be passed unmodified back to the server by the client. + ResourceVersion *string `json:"resourceVersion,omitempty"` + // Creation time of the object. + CreateTime *time.Time `json:"createTime,omitempty"` + // Update time of the object. + UpdateTime *time.Time `json:"updateTime,omitempty"` + // Labels to apply to the object. + Labels *map[string]string `json:"labels,omitempty"` + // Annotations for the object. + Annotations *map[string]string `json:"annotations,omitempty"` + ParentReference *V1Reference `json:"parentReference,omitempty"` + // Resource names holds the mapping between the resource IDs and its display name which will be consumed by the frontend. + ResourceNames *map[string]string `json:"resourceNames,omitempty"` +} + +// NewMetadataOfTheApplicationResourceMeta instantiates a new MetadataOfTheApplicationResourceMeta object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewMetadataOfTheApplicationResourceMeta() *MetadataOfTheApplicationResourceMeta { + this := MetadataOfTheApplicationResourceMeta{} + return &this +} + +// NewMetadataOfTheApplicationResourceMetaWithDefaults instantiates a new MetadataOfTheApplicationResourceMeta object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewMetadataOfTheApplicationResourceMetaWithDefaults() *MetadataOfTheApplicationResourceMeta { + this := MetadataOfTheApplicationResourceMeta{} + return &this +} + +// GetName returns the Name field value if set, zero value otherwise. +func (o *MetadataOfTheApplicationResourceMeta) GetName() string { + if o == nil || IsNil(o.Name) { + var ret string + return ret + } + return *o.Name +} + +// GetNameOk returns a tuple with the Name field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *MetadataOfTheApplicationResourceMeta) GetNameOk() (*string, bool) { + if o == nil || IsNil(o.Name) { + return nil, false + } + return o.Name, true +} + +// HasName returns a boolean if a field has been set. +func (o *MetadataOfTheApplicationResourceMeta) HasName() bool { + if o != nil && !IsNil(o.Name) { + return true + } + + return false +} + +// SetName gets a reference to the given string and assigns it to the Name field. +func (o *MetadataOfTheApplicationResourceMeta) SetName(v string) { + o.Name = &v +} + +// GetDescription returns the Description field value if set, zero value otherwise. +func (o *MetadataOfTheApplicationResourceMeta) GetDescription() string { + if o == nil || IsNil(o.Description) { + var ret string + return ret + } + return *o.Description +} + +// GetDescriptionOk returns a tuple with the Description field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *MetadataOfTheApplicationResourceMeta) GetDescriptionOk() (*string, bool) { + if o == nil || IsNil(o.Description) { + return nil, false + } + return o.Description, true +} + +// HasDescription returns a boolean if a field has been set. +func (o *MetadataOfTheApplicationResourceMeta) HasDescription() bool { + if o != nil && !IsNil(o.Description) { + return true + } + + return false +} + +// SetDescription gets a reference to the given string and assigns it to the Description field. +func (o *MetadataOfTheApplicationResourceMeta) SetDescription(v string) { + o.Description = &v +} + +// GetResourceVersion returns the ResourceVersion field value if set, zero value otherwise. +func (o *MetadataOfTheApplicationResourceMeta) GetResourceVersion() string { + if o == nil || IsNil(o.ResourceVersion) { + var ret string + return ret + } + return *o.ResourceVersion +} + +// GetResourceVersionOk returns a tuple with the ResourceVersion field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *MetadataOfTheApplicationResourceMeta) GetResourceVersionOk() (*string, bool) { + if o == nil || IsNil(o.ResourceVersion) { + return nil, false + } + return o.ResourceVersion, true +} + +// HasResourceVersion returns a boolean if a field has been set. +func (o *MetadataOfTheApplicationResourceMeta) HasResourceVersion() bool { + if o != nil && !IsNil(o.ResourceVersion) { + return true + } + + return false +} + +// SetResourceVersion gets a reference to the given string and assigns it to the ResourceVersion field. +func (o *MetadataOfTheApplicationResourceMeta) SetResourceVersion(v string) { + o.ResourceVersion = &v +} + +// GetCreateTime returns the CreateTime field value if set, zero value otherwise. +func (o *MetadataOfTheApplicationResourceMeta) GetCreateTime() time.Time { + if o == nil || IsNil(o.CreateTime) { + var ret time.Time + return ret + } + return *o.CreateTime +} + +// GetCreateTimeOk returns a tuple with the CreateTime field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *MetadataOfTheApplicationResourceMeta) GetCreateTimeOk() (*time.Time, bool) { + if o == nil || IsNil(o.CreateTime) { + return nil, false + } + return o.CreateTime, true +} + +// HasCreateTime returns a boolean if a field has been set. +func (o *MetadataOfTheApplicationResourceMeta) HasCreateTime() bool { + if o != nil && !IsNil(o.CreateTime) { + return true + } + + return false +} + +// SetCreateTime gets a reference to the given time.Time and assigns it to the CreateTime field. +func (o *MetadataOfTheApplicationResourceMeta) SetCreateTime(v time.Time) { + o.CreateTime = &v +} + +// GetUpdateTime returns the UpdateTime field value if set, zero value otherwise. +func (o *MetadataOfTheApplicationResourceMeta) GetUpdateTime() time.Time { + if o == nil || IsNil(o.UpdateTime) { + var ret time.Time + return ret + } + return *o.UpdateTime +} + +// GetUpdateTimeOk returns a tuple with the UpdateTime field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *MetadataOfTheApplicationResourceMeta) GetUpdateTimeOk() (*time.Time, bool) { + if o == nil || IsNil(o.UpdateTime) { + return nil, false + } + return o.UpdateTime, true +} + +// HasUpdateTime returns a boolean if a field has been set. +func (o *MetadataOfTheApplicationResourceMeta) HasUpdateTime() bool { + if o != nil && !IsNil(o.UpdateTime) { + return true + } + + return false +} + +// SetUpdateTime gets a reference to the given time.Time and assigns it to the UpdateTime field. +func (o *MetadataOfTheApplicationResourceMeta) SetUpdateTime(v time.Time) { + o.UpdateTime = &v +} + +// GetLabels returns the Labels field value if set, zero value otherwise. +func (o *MetadataOfTheApplicationResourceMeta) GetLabels() map[string]string { + if o == nil || IsNil(o.Labels) { + var ret map[string]string + return ret + } + return *o.Labels +} + +// GetLabelsOk returns a tuple with the Labels field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *MetadataOfTheApplicationResourceMeta) GetLabelsOk() (*map[string]string, bool) { + if o == nil || IsNil(o.Labels) { + return nil, false + } + return o.Labels, true +} + +// HasLabels returns a boolean if a field has been set. +func (o *MetadataOfTheApplicationResourceMeta) HasLabels() bool { + if o != nil && !IsNil(o.Labels) { + return true + } + + return false +} + +// SetLabels gets a reference to the given map[string]string and assigns it to the Labels field. +func (o *MetadataOfTheApplicationResourceMeta) SetLabels(v map[string]string) { + o.Labels = &v +} + +// GetAnnotations returns the Annotations field value if set, zero value otherwise. +func (o *MetadataOfTheApplicationResourceMeta) GetAnnotations() map[string]string { + if o == nil || IsNil(o.Annotations) { + var ret map[string]string + return ret + } + return *o.Annotations +} + +// GetAnnotationsOk returns a tuple with the Annotations field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *MetadataOfTheApplicationResourceMeta) GetAnnotationsOk() (*map[string]string, bool) { + if o == nil || IsNil(o.Annotations) { + return nil, false + } + return o.Annotations, true +} + +// HasAnnotations returns a boolean if a field has been set. +func (o *MetadataOfTheApplicationResourceMeta) HasAnnotations() bool { + if o != nil && !IsNil(o.Annotations) { + return true + } + + return false +} + +// SetAnnotations gets a reference to the given map[string]string and assigns it to the Annotations field. +func (o *MetadataOfTheApplicationResourceMeta) SetAnnotations(v map[string]string) { + o.Annotations = &v +} + +// GetParentReference returns the ParentReference field value if set, zero value otherwise. +func (o *MetadataOfTheApplicationResourceMeta) GetParentReference() V1Reference { + if o == nil || IsNil(o.ParentReference) { + var ret V1Reference + return ret + } + return *o.ParentReference +} + +// GetParentReferenceOk returns a tuple with the ParentReference field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *MetadataOfTheApplicationResourceMeta) GetParentReferenceOk() (*V1Reference, bool) { + if o == nil || IsNil(o.ParentReference) { + return nil, false + } + return o.ParentReference, true +} + +// HasParentReference returns a boolean if a field has been set. +func (o *MetadataOfTheApplicationResourceMeta) HasParentReference() bool { + if o != nil && !IsNil(o.ParentReference) { + return true + } + + return false +} + +// SetParentReference gets a reference to the given V1Reference and assigns it to the ParentReference field. +func (o *MetadataOfTheApplicationResourceMeta) SetParentReference(v V1Reference) { + o.ParentReference = &v +} + +// GetResourceNames returns the ResourceNames field value if set, zero value otherwise. +func (o *MetadataOfTheApplicationResourceMeta) GetResourceNames() map[string]string { + if o == nil || IsNil(o.ResourceNames) { + var ret map[string]string + return ret + } + return *o.ResourceNames +} + +// GetResourceNamesOk returns a tuple with the ResourceNames field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *MetadataOfTheApplicationResourceMeta) GetResourceNamesOk() (*map[string]string, bool) { + if o == nil || IsNil(o.ResourceNames) { + return nil, false + } + return o.ResourceNames, true +} + +// HasResourceNames returns a boolean if a field has been set. +func (o *MetadataOfTheApplicationResourceMeta) HasResourceNames() bool { + if o != nil && !IsNil(o.ResourceNames) { + return true + } + + return false +} + +// SetResourceNames gets a reference to the given map[string]string and assigns it to the ResourceNames field. +func (o *MetadataOfTheApplicationResourceMeta) SetResourceNames(v map[string]string) { + o.ResourceNames = &v +} + +func (o MetadataOfTheApplicationResourceMeta) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o MetadataOfTheApplicationResourceMeta) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.Name) { + toSerialize["name"] = o.Name + } + if !IsNil(o.Description) { + toSerialize["description"] = o.Description + } + if !IsNil(o.ResourceVersion) { + toSerialize["resourceVersion"] = o.ResourceVersion + } + if !IsNil(o.CreateTime) { + toSerialize["createTime"] = o.CreateTime + } + if !IsNil(o.UpdateTime) { + toSerialize["updateTime"] = o.UpdateTime + } + if !IsNil(o.Labels) { + toSerialize["labels"] = o.Labels + } + if !IsNil(o.Annotations) { + toSerialize["annotations"] = o.Annotations + } + if !IsNil(o.ParentReference) { + toSerialize["parentReference"] = o.ParentReference + } + if !IsNil(o.ResourceNames) { + toSerialize["resourceNames"] = o.ResourceNames + } + return toSerialize, nil +} + +type NullableMetadataOfTheApplicationResourceMeta struct { + value *MetadataOfTheApplicationResourceMeta + isSet bool +} + +func (v NullableMetadataOfTheApplicationResourceMeta) Get() *MetadataOfTheApplicationResourceMeta { + return v.value +} + +func (v *NullableMetadataOfTheApplicationResourceMeta) Set(val *MetadataOfTheApplicationResourceMeta) { + v.value = val + v.isSet = true +} + +func (v NullableMetadataOfTheApplicationResourceMeta) IsSet() bool { + return v.isSet +} + +func (v *NullableMetadataOfTheApplicationResourceMeta) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableMetadataOfTheApplicationResourceMeta(val *MetadataOfTheApplicationResourceMeta) *NullableMetadataOfTheApplicationResourceMeta { + return &NullableMetadataOfTheApplicationResourceMeta{value: val, isSet: true} +} + +func (v NullableMetadataOfTheApplicationResourceMeta) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableMetadataOfTheApplicationResourceMeta) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_pds_properties_global.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_pds_properties_global.go new file mode 100644 index 000000000..18064561e --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_pds_properties_global.go @@ -0,0 +1,127 @@ +/* +public/portworx/platform/targetcluster/application/apiv1/application.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package targetcluster + +import ( + "encoding/json" +) + +// checks if the PDSPropertiesGlobal type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &PDSPropertiesGlobal{} + +// PDSPropertiesGlobal Global is the global property block for PDS. +type PDSPropertiesGlobal struct { + // data_service_tls_enabled enables TLS for dataservices. This requires cert-manager to be pre-installed. + DataServiceTlsEnabled *bool `json:"dataServiceTlsEnabled,omitempty"` +} + +// NewPDSPropertiesGlobal instantiates a new PDSPropertiesGlobal object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewPDSPropertiesGlobal() *PDSPropertiesGlobal { + this := PDSPropertiesGlobal{} + return &this +} + +// NewPDSPropertiesGlobalWithDefaults instantiates a new PDSPropertiesGlobal object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewPDSPropertiesGlobalWithDefaults() *PDSPropertiesGlobal { + this := PDSPropertiesGlobal{} + return &this +} + +// GetDataServiceTlsEnabled returns the DataServiceTlsEnabled field value if set, zero value otherwise. +func (o *PDSPropertiesGlobal) GetDataServiceTlsEnabled() bool { + if o == nil || IsNil(o.DataServiceTlsEnabled) { + var ret bool + return ret + } + return *o.DataServiceTlsEnabled +} + +// GetDataServiceTlsEnabledOk returns a tuple with the DataServiceTlsEnabled field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *PDSPropertiesGlobal) GetDataServiceTlsEnabledOk() (*bool, bool) { + if o == nil || IsNil(o.DataServiceTlsEnabled) { + return nil, false + } + return o.DataServiceTlsEnabled, true +} + +// HasDataServiceTlsEnabled returns a boolean if a field has been set. +func (o *PDSPropertiesGlobal) HasDataServiceTlsEnabled() bool { + if o != nil && !IsNil(o.DataServiceTlsEnabled) { + return true + } + + return false +} + +// SetDataServiceTlsEnabled gets a reference to the given bool and assigns it to the DataServiceTlsEnabled field. +func (o *PDSPropertiesGlobal) SetDataServiceTlsEnabled(v bool) { + o.DataServiceTlsEnabled = &v +} + +func (o PDSPropertiesGlobal) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o PDSPropertiesGlobal) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.DataServiceTlsEnabled) { + toSerialize["dataServiceTlsEnabled"] = o.DataServiceTlsEnabled + } + return toSerialize, nil +} + +type NullablePDSPropertiesGlobal struct { + value *PDSPropertiesGlobal + isSet bool +} + +func (v NullablePDSPropertiesGlobal) Get() *PDSPropertiesGlobal { + return v.value +} + +func (v *NullablePDSPropertiesGlobal) Set(val *PDSPropertiesGlobal) { + v.value = val + v.isSet = true +} + +func (v NullablePDSPropertiesGlobal) IsSet() bool { + return v.isSet +} + +func (v *NullablePDSPropertiesGlobal) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullablePDSPropertiesGlobal(val *PDSPropertiesGlobal) *NullablePDSPropertiesGlobal { + return &NullablePDSPropertiesGlobal{value: val, isSet: true} +} + +func (v NullablePDSPropertiesGlobal) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullablePDSPropertiesGlobal) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_platform_target_clusterv1_status.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_platform_target_clusterv1_status.go index 22ef60e07..82f87d988 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_platform_target_clusterv1_status.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_platform_target_clusterv1_status.go @@ -24,9 +24,9 @@ type PlatformTargetClusterv1Status struct { Phase *V1TargetClusterPhasePhase `json:"phase,omitempty"` // Timestamp of cluster's last status update to control plane. LastStatusUpdateTime *time.Time `json:"lastStatusUpdateTime,omitempty"` - PlatformAgent *V1ApplicationPhasePhase `json:"platformAgent,omitempty"` + PlatformAgent *V1TargetClusterApplicationStatus `json:"platformAgent,omitempty"` // Status of applications running in the target cluster eg: BAAS, PDS, MPXE. - Applications *map[string]V1ApplicationPhasePhase `json:"applications,omitempty"` + Applications *map[string]V1TargetClusterApplicationStatus `json:"applications,omitempty"` } // NewPlatformTargetClusterv1Status instantiates a new PlatformTargetClusterv1Status object @@ -37,8 +37,6 @@ func NewPlatformTargetClusterv1Status() *PlatformTargetClusterv1Status { this := PlatformTargetClusterv1Status{} var phase V1TargetClusterPhasePhase = V1TARGETCLUSTERPHASEPHASE_PHASE_UNSPECIFIED this.Phase = &phase - var platformAgent V1ApplicationPhasePhase = V1APPLICATIONPHASEPHASE_PHASE_UNSPECIFIED - this.PlatformAgent = &platformAgent return &this } @@ -49,8 +47,6 @@ func NewPlatformTargetClusterv1StatusWithDefaults() *PlatformTargetClusterv1Stat this := PlatformTargetClusterv1Status{} var phase V1TargetClusterPhasePhase = V1TARGETCLUSTERPHASEPHASE_PHASE_UNSPECIFIED this.Phase = &phase - var platformAgent V1ApplicationPhasePhase = V1APPLICATIONPHASEPHASE_PHASE_UNSPECIFIED - this.PlatformAgent = &platformAgent return &this } @@ -151,9 +147,9 @@ func (o *PlatformTargetClusterv1Status) SetLastStatusUpdateTime(v time.Time) { } // GetPlatformAgent returns the PlatformAgent field value if set, zero value otherwise. -func (o *PlatformTargetClusterv1Status) GetPlatformAgent() V1ApplicationPhasePhase { +func (o *PlatformTargetClusterv1Status) GetPlatformAgent() V1TargetClusterApplicationStatus { if o == nil || IsNil(o.PlatformAgent) { - var ret V1ApplicationPhasePhase + var ret V1TargetClusterApplicationStatus return ret } return *o.PlatformAgent @@ -161,7 +157,7 @@ func (o *PlatformTargetClusterv1Status) GetPlatformAgent() V1ApplicationPhasePha // GetPlatformAgentOk returns a tuple with the PlatformAgent field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *PlatformTargetClusterv1Status) GetPlatformAgentOk() (*V1ApplicationPhasePhase, bool) { +func (o *PlatformTargetClusterv1Status) GetPlatformAgentOk() (*V1TargetClusterApplicationStatus, bool) { if o == nil || IsNil(o.PlatformAgent) { return nil, false } @@ -177,15 +173,15 @@ func (o *PlatformTargetClusterv1Status) HasPlatformAgent() bool { return false } -// SetPlatformAgent gets a reference to the given V1ApplicationPhasePhase and assigns it to the PlatformAgent field. -func (o *PlatformTargetClusterv1Status) SetPlatformAgent(v V1ApplicationPhasePhase) { +// SetPlatformAgent gets a reference to the given V1TargetClusterApplicationStatus and assigns it to the PlatformAgent field. +func (o *PlatformTargetClusterv1Status) SetPlatformAgent(v V1TargetClusterApplicationStatus) { o.PlatformAgent = &v } // GetApplications returns the Applications field value if set, zero value otherwise. -func (o *PlatformTargetClusterv1Status) GetApplications() map[string]V1ApplicationPhasePhase { +func (o *PlatformTargetClusterv1Status) GetApplications() map[string]V1TargetClusterApplicationStatus { if o == nil || IsNil(o.Applications) { - var ret map[string]V1ApplicationPhasePhase + var ret map[string]V1TargetClusterApplicationStatus return ret } return *o.Applications @@ -193,7 +189,7 @@ func (o *PlatformTargetClusterv1Status) GetApplications() map[string]V1Applicati // GetApplicationsOk returns a tuple with the Applications field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *PlatformTargetClusterv1Status) GetApplicationsOk() (*map[string]V1ApplicationPhasePhase, bool) { +func (o *PlatformTargetClusterv1Status) GetApplicationsOk() (*map[string]V1TargetClusterApplicationStatus, bool) { if o == nil || IsNil(o.Applications) { return nil, false } @@ -209,8 +205,8 @@ func (o *PlatformTargetClusterv1Status) HasApplications() bool { return false } -// SetApplications gets a reference to the given map[string]V1ApplicationPhasePhase and assigns it to the Applications field. -func (o *PlatformTargetClusterv1Status) SetApplications(v map[string]V1ApplicationPhasePhase) { +// SetApplications gets a reference to the given map[string]V1TargetClusterApplicationStatus and assigns it to the Applications field. +func (o *PlatformTargetClusterv1Status) SetApplications(v map[string]V1TargetClusterApplicationStatus) { o.Applications = &v } diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_selector_operator.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_selector_operator.go index 1f65599d2..43c380fff 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_selector_operator.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_selector_operator.go @@ -15,7 +15,7 @@ import ( "fmt" ) -// SelectorOperator Operator specifies the relationship between the provided (key,value) pairs in the response. - OPERATOR_UNSPECIFIED: Unspecified, do not use. - IN: IN specifies that the key should be associated with atleast 1 of the element in value list. - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list. +// SelectorOperator Operator specifies the relationship between the provided (key,value) pairs in the response. - OPERATOR_UNSPECIFIED: Unspecified, do not use. - IN: IN specifies that the key should be associated with atleast 1 of the element in value list. - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list. - LIKE: LIKE specified that the key should be of a specified pattern type SelectorOperator string // List of SelectorOperator @@ -23,6 +23,7 @@ const ( SELECTOROPERATOR_OPERATOR_UNSPECIFIED SelectorOperator = "OPERATOR_UNSPECIFIED" SELECTOROPERATOR_IN SelectorOperator = "IN" SELECTOROPERATOR_NOT_IN SelectorOperator = "NOT_IN" + SELECTOROPERATOR_LIKE SelectorOperator = "LIKE" ) // All allowed values of SelectorOperator enum @@ -30,6 +31,7 @@ var AllowedSelectorOperatorEnumValues = []SelectorOperator{ "OPERATOR_UNSPECIFIED", "IN", "NOT_IN", + "LIKE", } func (v *SelectorOperator) UnmarshalJSON(src []byte) error { diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_v1_config.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_v1_config.go index 458394039..aa0e4f6ba 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_v1_config.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_v1_config.go @@ -23,6 +23,7 @@ type V1Config struct { Namespace *string `json:"namespace,omitempty"` // desired application chart version. Version *string `json:"version,omitempty"` + Pds *V1PDSProperties `json:"pds,omitempty"` } // NewV1Config instantiates a new V1Config object @@ -106,6 +107,38 @@ func (o *V1Config) SetVersion(v string) { o.Version = &v } +// GetPds returns the Pds field value if set, zero value otherwise. +func (o *V1Config) GetPds() V1PDSProperties { + if o == nil || IsNil(o.Pds) { + var ret V1PDSProperties + return ret + } + return *o.Pds +} + +// GetPdsOk returns a tuple with the Pds field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1Config) GetPdsOk() (*V1PDSProperties, bool) { + if o == nil || IsNil(o.Pds) { + return nil, false + } + return o.Pds, true +} + +// HasPds returns a boolean if a field has been set. +func (o *V1Config) HasPds() bool { + if o != nil && !IsNil(o.Pds) { + return true + } + + return false +} + +// SetPds gets a reference to the given V1PDSProperties and assigns it to the Pds field. +func (o *V1Config) SetPds(v V1PDSProperties) { + o.Pds = &v +} + func (o V1Config) MarshalJSON() ([]byte, error) { toSerialize,err := o.ToMap() if err != nil { @@ -122,6 +155,9 @@ func (o V1Config) ToMap() (map[string]interface{}, error) { if !IsNil(o.Version) { toSerialize["version"] = o.Version } + if !IsNil(o.Pds) { + toSerialize["pds"] = o.Pds + } return toSerialize, nil } diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_v1_pds_properties.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_v1_pds_properties.go new file mode 100644 index 000000000..4f41bad26 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_v1_pds_properties.go @@ -0,0 +1,126 @@ +/* +public/portworx/platform/targetcluster/application/apiv1/application.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package targetcluster + +import ( + "encoding/json" +) + +// checks if the V1PDSProperties type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &V1PDSProperties{} + +// V1PDSProperties PDSProperties are the properties available for PDS. +type V1PDSProperties struct { + Global *PDSPropertiesGlobal `json:"global,omitempty"` +} + +// NewV1PDSProperties instantiates a new V1PDSProperties object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewV1PDSProperties() *V1PDSProperties { + this := V1PDSProperties{} + return &this +} + +// NewV1PDSPropertiesWithDefaults instantiates a new V1PDSProperties object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewV1PDSPropertiesWithDefaults() *V1PDSProperties { + this := V1PDSProperties{} + return &this +} + +// GetGlobal returns the Global field value if set, zero value otherwise. +func (o *V1PDSProperties) GetGlobal() PDSPropertiesGlobal { + if o == nil || IsNil(o.Global) { + var ret PDSPropertiesGlobal + return ret + } + return *o.Global +} + +// GetGlobalOk returns a tuple with the Global field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1PDSProperties) GetGlobalOk() (*PDSPropertiesGlobal, bool) { + if o == nil || IsNil(o.Global) { + return nil, false + } + return o.Global, true +} + +// HasGlobal returns a boolean if a field has been set. +func (o *V1PDSProperties) HasGlobal() bool { + if o != nil && !IsNil(o.Global) { + return true + } + + return false +} + +// SetGlobal gets a reference to the given PDSPropertiesGlobal and assigns it to the Global field. +func (o *V1PDSProperties) SetGlobal(v PDSPropertiesGlobal) { + o.Global = &v +} + +func (o V1PDSProperties) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o V1PDSProperties) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.Global) { + toSerialize["global"] = o.Global + } + return toSerialize, nil +} + +type NullableV1PDSProperties struct { + value *V1PDSProperties + isSet bool +} + +func (v NullableV1PDSProperties) Get() *V1PDSProperties { + return v.value +} + +func (v *NullableV1PDSProperties) Set(val *V1PDSProperties) { + v.value = val + v.isSet = true +} + +func (v NullableV1PDSProperties) IsSet() bool { + return v.isSet +} + +func (v *NullableV1PDSProperties) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableV1PDSProperties(val *V1PDSProperties) *NullableV1PDSProperties { + return &NullableV1PDSProperties{value: val, isSet: true} +} + +func (v NullableV1PDSProperties) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableV1PDSProperties) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_v1_pxe_metadata.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_v1_pxe_metadata.go index 8135f413f..64815ac30 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_v1_pxe_metadata.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_v1_pxe_metadata.go @@ -27,6 +27,8 @@ type V1PXEMetadata struct { ServiceNamespace *string `json:"serviceNamespace,omitempty"` // Version of PXE installed on the target cluster. Version *string `json:"version,omitempty"` + // SecurityEnabled flag depicts if px security is enabled on the target cluster. + SecurityEnabled *bool `json:"securityEnabled,omitempty"` } // NewV1PXEMetadata instantiates a new V1PXEMetadata object @@ -174,6 +176,38 @@ func (o *V1PXEMetadata) SetVersion(v string) { o.Version = &v } +// GetSecurityEnabled returns the SecurityEnabled field value if set, zero value otherwise. +func (o *V1PXEMetadata) GetSecurityEnabled() bool { + if o == nil || IsNil(o.SecurityEnabled) { + var ret bool + return ret + } + return *o.SecurityEnabled +} + +// GetSecurityEnabledOk returns a tuple with the SecurityEnabled field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1PXEMetadata) GetSecurityEnabledOk() (*bool, bool) { + if o == nil || IsNil(o.SecurityEnabled) { + return nil, false + } + return o.SecurityEnabled, true +} + +// HasSecurityEnabled returns a boolean if a field has been set. +func (o *V1PXEMetadata) HasSecurityEnabled() bool { + if o != nil && !IsNil(o.SecurityEnabled) { + return true + } + + return false +} + +// SetSecurityEnabled gets a reference to the given bool and assigns it to the SecurityEnabled field. +func (o *V1PXEMetadata) SetSecurityEnabled(v bool) { + o.SecurityEnabled = &v +} + func (o V1PXEMetadata) MarshalJSON() ([]byte, error) { toSerialize,err := o.ToMap() if err != nil { @@ -196,6 +230,9 @@ func (o V1PXEMetadata) ToMap() (map[string]interface{}, error) { if !IsNil(o.Version) { toSerialize["version"] = o.Version } + if !IsNil(o.SecurityEnabled) { + toSerialize["securityEnabled"] = o.SecurityEnabled + } return toSerialize, nil } diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_v1_target_cluster_application_status.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_v1_target_cluster_application_status.go new file mode 100644 index 000000000..5722bcb03 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetcluster/model_v1_target_cluster_application_status.go @@ -0,0 +1,207 @@ +/* +public/portworx/platform/targetcluster/application/apiv1/application.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package targetcluster + +import ( + "encoding/json" +) + +// checks if the V1TargetClusterApplicationStatus type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &V1TargetClusterApplicationStatus{} + +// V1TargetClusterApplicationStatus Status of the Application. +type V1TargetClusterApplicationStatus struct { + // current installed version. + Version *string `json:"version,omitempty"` + Phase *V1ApplicationPhasePhase `json:"phase,omitempty"` + Health *ApplicationHealthHealth `json:"health,omitempty"` +} + +// NewV1TargetClusterApplicationStatus instantiates a new V1TargetClusterApplicationStatus object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewV1TargetClusterApplicationStatus() *V1TargetClusterApplicationStatus { + this := V1TargetClusterApplicationStatus{} + var phase V1ApplicationPhasePhase = V1APPLICATIONPHASEPHASE_PHASE_UNSPECIFIED + this.Phase = &phase + var health ApplicationHealthHealth = APPLICATIONHEALTHHEALTH_HEALTH_UNSPECIFIED + this.Health = &health + return &this +} + +// NewV1TargetClusterApplicationStatusWithDefaults instantiates a new V1TargetClusterApplicationStatus object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewV1TargetClusterApplicationStatusWithDefaults() *V1TargetClusterApplicationStatus { + this := V1TargetClusterApplicationStatus{} + var phase V1ApplicationPhasePhase = V1APPLICATIONPHASEPHASE_PHASE_UNSPECIFIED + this.Phase = &phase + var health ApplicationHealthHealth = APPLICATIONHEALTHHEALTH_HEALTH_UNSPECIFIED + this.Health = &health + return &this +} + +// GetVersion returns the Version field value if set, zero value otherwise. +func (o *V1TargetClusterApplicationStatus) GetVersion() string { + if o == nil || IsNil(o.Version) { + var ret string + return ret + } + return *o.Version +} + +// GetVersionOk returns a tuple with the Version field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1TargetClusterApplicationStatus) GetVersionOk() (*string, bool) { + if o == nil || IsNil(o.Version) { + return nil, false + } + return o.Version, true +} + +// HasVersion returns a boolean if a field has been set. +func (o *V1TargetClusterApplicationStatus) HasVersion() bool { + if o != nil && !IsNil(o.Version) { + return true + } + + return false +} + +// SetVersion gets a reference to the given string and assigns it to the Version field. +func (o *V1TargetClusterApplicationStatus) SetVersion(v string) { + o.Version = &v +} + +// GetPhase returns the Phase field value if set, zero value otherwise. +func (o *V1TargetClusterApplicationStatus) GetPhase() V1ApplicationPhasePhase { + if o == nil || IsNil(o.Phase) { + var ret V1ApplicationPhasePhase + return ret + } + return *o.Phase +} + +// GetPhaseOk returns a tuple with the Phase field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1TargetClusterApplicationStatus) GetPhaseOk() (*V1ApplicationPhasePhase, bool) { + if o == nil || IsNil(o.Phase) { + return nil, false + } + return o.Phase, true +} + +// HasPhase returns a boolean if a field has been set. +func (o *V1TargetClusterApplicationStatus) HasPhase() bool { + if o != nil && !IsNil(o.Phase) { + return true + } + + return false +} + +// SetPhase gets a reference to the given V1ApplicationPhasePhase and assigns it to the Phase field. +func (o *V1TargetClusterApplicationStatus) SetPhase(v V1ApplicationPhasePhase) { + o.Phase = &v +} + +// GetHealth returns the Health field value if set, zero value otherwise. +func (o *V1TargetClusterApplicationStatus) GetHealth() ApplicationHealthHealth { + if o == nil || IsNil(o.Health) { + var ret ApplicationHealthHealth + return ret + } + return *o.Health +} + +// GetHealthOk returns a tuple with the Health field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *V1TargetClusterApplicationStatus) GetHealthOk() (*ApplicationHealthHealth, bool) { + if o == nil || IsNil(o.Health) { + return nil, false + } + return o.Health, true +} + +// HasHealth returns a boolean if a field has been set. +func (o *V1TargetClusterApplicationStatus) HasHealth() bool { + if o != nil && !IsNil(o.Health) { + return true + } + + return false +} + +// SetHealth gets a reference to the given ApplicationHealthHealth and assigns it to the Health field. +func (o *V1TargetClusterApplicationStatus) SetHealth(v ApplicationHealthHealth) { + o.Health = &v +} + +func (o V1TargetClusterApplicationStatus) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o V1TargetClusterApplicationStatus) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.Version) { + toSerialize["version"] = o.Version + } + if !IsNil(o.Phase) { + toSerialize["phase"] = o.Phase + } + if !IsNil(o.Health) { + toSerialize["health"] = o.Health + } + return toSerialize, nil +} + +type NullableV1TargetClusterApplicationStatus struct { + value *V1TargetClusterApplicationStatus + isSet bool +} + +func (v NullableV1TargetClusterApplicationStatus) Get() *V1TargetClusterApplicationStatus { + return v.value +} + +func (v *NullableV1TargetClusterApplicationStatus) Set(val *V1TargetClusterApplicationStatus) { + v.value = val + v.isSet = true +} + +func (v NullableV1TargetClusterApplicationStatus) IsSet() bool { + return v.isSet +} + +func (v *NullableV1TargetClusterApplicationStatus) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableV1TargetClusterApplicationStatus(val *V1TargetClusterApplicationStatus) *NullableV1TargetClusterApplicationStatus { + return &NullableV1TargetClusterApplicationStatus{value: val, isSet: true} +} + +func (v NullableV1TargetClusterApplicationStatus) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableV1TargetClusterApplicationStatus) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetclusterregistrationmanifest/README.md b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetclusterregistrationmanifest/README.md index fec19c8dd..0670a1861 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetclusterregistrationmanifest/README.md +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetclusterregistrationmanifest/README.md @@ -7,7 +7,7 @@ This API client was generated by the [OpenAPI Generator](https://openapi-generat - API version: version not set - Package version: 1.0.0 -- Generator version: 7.6.0-SNAPSHOT +- Generator version: 7.7.0-SNAPSHOT - Build package: org.openapitools.codegen.languages.GoClientCodegen ## Installation diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetclusterregistrationmanifest/client.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetclusterregistrationmanifest/client.go index bdac54632..a0ca29e64 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetclusterregistrationmanifest/client.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/targetclusterregistrationmanifest/client.go @@ -162,7 +162,7 @@ func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix stri return } if t, ok := obj.(time.Time); ok { - parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339), collectionType) + parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339Nano), collectionType) return } value = v.Type().String() + " value" diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/README.md b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/README.md index 03413a78f..290fb4cf0 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/README.md +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/README.md @@ -7,7 +7,7 @@ This API client was generated by the [OpenAPI Generator](https://openapi-generat - API version: version not set - Package version: 1.0.0 -- Generator version: 7.6.0-SNAPSHOT +- Generator version: 7.7.0-SNAPSHOT - Build package: org.openapitools.codegen.languages.GoClientCodegen ## Installation @@ -83,12 +83,14 @@ Class | Method | HTTP request | Description *TemplateServiceAPI* | [**TemplateServiceGetTemplate**](docs/TemplateServiceAPI.md#templateservicegettemplate) | **Get** /core/v1/templates/{id} | Get API returns the template details sans the actual credentials. *TemplateServiceAPI* | [**TemplateServiceListTemplates**](docs/TemplateServiceAPI.md#templateservicelisttemplates) | **Get** /core/v1/templates | List API lists all the templates for a tenant *TemplateServiceAPI* | [**TemplateServiceListTemplates2**](docs/TemplateServiceAPI.md#templateservicelisttemplates2) | **Post** /core/v1/templates:search | List API lists all the templates for a tenant -*TemplateServiceAPI* | [**TemplateServiceUpdateTemplate**](docs/TemplateServiceAPI.md#templateserviceupdatetemplate) | **Put** /core/v1/templates/{id} | Update API updates a template. +*TemplateServiceAPI* | [**TemplateServiceUpdateTemplate**](docs/TemplateServiceAPI.md#templateserviceupdatetemplate) | **Put** /core/v1/templates/{template.meta.uid} | Update API updates a template. ## Documentation For Models + - [DesiredTemplateConfiguration](docs/DesiredTemplateConfiguration.md) - [GooglerpcStatus](docs/GooglerpcStatus.md) + - [MetadataOfTheResource](docs/MetadataOfTheResource.md) - [ProtobufAny](docs/ProtobufAny.md) - [ProtobufNullValue](docs/ProtobufNullValue.md) - [ResourceSelectorResourceFilter](docs/ResourceSelectorResourceFilter.md) @@ -96,6 +98,7 @@ Class | Method | HTTP request | Description - [SelectorOperator](docs/SelectorOperator.md) - [SortByField](docs/SortByField.md) - [StatusPhase](docs/StatusPhase.md) + - [TemplateServiceUpdateTemplateBody](docs/TemplateServiceUpdateTemplateBody.md) - [Templatev1Status](docs/Templatev1Status.md) - [V1Config](docs/V1Config.md) - [V1InfraResourceType](docs/V1InfraResourceType.md) diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/api_template_service.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/api_template_service.go index 0c22551a5..05042a08a 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/api_template_service.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/api_template_service.go @@ -656,13 +656,12 @@ func (a *TemplateServiceAPIService) TemplateServiceListTemplates2Execute(r ApiTe type ApiTemplateServiceUpdateTemplateRequest struct { ctx context.Context ApiService *TemplateServiceAPIService - id string - v1Template *V1Template + templateMetaUid string + templateServiceUpdateTemplateBody *TemplateServiceUpdateTemplateBody } -// Desired template configuration. -func (r ApiTemplateServiceUpdateTemplateRequest) V1Template(v1Template V1Template) ApiTemplateServiceUpdateTemplateRequest { - r.v1Template = &v1Template +func (r ApiTemplateServiceUpdateTemplateRequest) TemplateServiceUpdateTemplateBody(templateServiceUpdateTemplateBody TemplateServiceUpdateTemplateBody) ApiTemplateServiceUpdateTemplateRequest { + r.templateServiceUpdateTemplateBody = &templateServiceUpdateTemplateBody return r } @@ -674,14 +673,14 @@ func (r ApiTemplateServiceUpdateTemplateRequest) Execute() (*V1Template, *http.R TemplateServiceUpdateTemplate Update API updates a template. @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param id ID of the template to be updated. + @param templateMetaUid UID of the resource of the format -. @return ApiTemplateServiceUpdateTemplateRequest */ -func (a *TemplateServiceAPIService) TemplateServiceUpdateTemplate(ctx context.Context, id string) ApiTemplateServiceUpdateTemplateRequest { +func (a *TemplateServiceAPIService) TemplateServiceUpdateTemplate(ctx context.Context, templateMetaUid string) ApiTemplateServiceUpdateTemplateRequest { return ApiTemplateServiceUpdateTemplateRequest{ ApiService: a, ctx: ctx, - id: id, + templateMetaUid: templateMetaUid, } } @@ -700,14 +699,14 @@ func (a *TemplateServiceAPIService) TemplateServiceUpdateTemplateExecute(r ApiTe return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()} } - localVarPath := localBasePath + "/core/v1/templates/{id}" - localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", url.PathEscape(parameterValueToString(r.id, "id")), -1) + localVarPath := localBasePath + "/core/v1/templates/{template.meta.uid}" + localVarPath = strings.Replace(localVarPath, "{"+"template.meta.uid"+"}", url.PathEscape(parameterValueToString(r.templateMetaUid, "templateMetaUid")), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if r.v1Template == nil { - return localVarReturnValue, nil, reportError("v1Template is required and must be specified") + if r.templateServiceUpdateTemplateBody == nil { + return localVarReturnValue, nil, reportError("templateServiceUpdateTemplateBody is required and must be specified") } // to determine the Content-Type header @@ -728,7 +727,7 @@ func (a *TemplateServiceAPIService) TemplateServiceUpdateTemplateExecute(r ApiTe localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept } // body params - localVarPostBody = r.v1Template + localVarPostBody = r.templateServiceUpdateTemplateBody req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles) if err != nil { return localVarReturnValue, nil, err diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/client.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/client.go index 8d8dbb282..92f45c998 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/client.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/client.go @@ -162,7 +162,7 @@ func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix stri return } if t, ok := obj.(time.Time); ok { - parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339), collectionType) + parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339Nano), collectionType) return } value = v.Type().String() + " value" diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/model_desired_template_configuration_.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/model_desired_template_configuration_.go new file mode 100644 index 000000000..3b1c3db07 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/model_desired_template_configuration_.go @@ -0,0 +1,198 @@ +/* +public/portworx/platform/template/apiv1/template.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package template + +import ( + "encoding/json" +) + +// checks if the DesiredTemplateConfiguration type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &DesiredTemplateConfiguration{} + +// DesiredTemplateConfiguration Desired template configuration. +type DesiredTemplateConfiguration struct { + Meta *MetadataOfTheResource `json:"meta,omitempty"` + Config *V1Config `json:"config,omitempty"` + Status *Templatev1Status `json:"status,omitempty"` +} + +// NewDesiredTemplateConfiguration instantiates a new DesiredTemplateConfiguration object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewDesiredTemplateConfiguration() *DesiredTemplateConfiguration { + this := DesiredTemplateConfiguration{} + return &this +} + +// NewDesiredTemplateConfigurationWithDefaults instantiates a new DesiredTemplateConfiguration object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewDesiredTemplateConfigurationWithDefaults() *DesiredTemplateConfiguration { + this := DesiredTemplateConfiguration{} + return &this +} + +// GetMeta returns the Meta field value if set, zero value otherwise. +func (o *DesiredTemplateConfiguration) GetMeta() MetadataOfTheResource { + if o == nil || IsNil(o.Meta) { + var ret MetadataOfTheResource + return ret + } + return *o.Meta +} + +// GetMetaOk returns a tuple with the Meta field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *DesiredTemplateConfiguration) GetMetaOk() (*MetadataOfTheResource, bool) { + if o == nil || IsNil(o.Meta) { + return nil, false + } + return o.Meta, true +} + +// HasMeta returns a boolean if a field has been set. +func (o *DesiredTemplateConfiguration) HasMeta() bool { + if o != nil && !IsNil(o.Meta) { + return true + } + + return false +} + +// SetMeta gets a reference to the given MetadataOfTheResource and assigns it to the Meta field. +func (o *DesiredTemplateConfiguration) SetMeta(v MetadataOfTheResource) { + o.Meta = &v +} + +// GetConfig returns the Config field value if set, zero value otherwise. +func (o *DesiredTemplateConfiguration) GetConfig() V1Config { + if o == nil || IsNil(o.Config) { + var ret V1Config + return ret + } + return *o.Config +} + +// GetConfigOk returns a tuple with the Config field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *DesiredTemplateConfiguration) GetConfigOk() (*V1Config, bool) { + if o == nil || IsNil(o.Config) { + return nil, false + } + return o.Config, true +} + +// HasConfig returns a boolean if a field has been set. +func (o *DesiredTemplateConfiguration) HasConfig() bool { + if o != nil && !IsNil(o.Config) { + return true + } + + return false +} + +// SetConfig gets a reference to the given V1Config and assigns it to the Config field. +func (o *DesiredTemplateConfiguration) SetConfig(v V1Config) { + o.Config = &v +} + +// GetStatus returns the Status field value if set, zero value otherwise. +func (o *DesiredTemplateConfiguration) GetStatus() Templatev1Status { + if o == nil || IsNil(o.Status) { + var ret Templatev1Status + return ret + } + return *o.Status +} + +// GetStatusOk returns a tuple with the Status field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *DesiredTemplateConfiguration) GetStatusOk() (*Templatev1Status, bool) { + if o == nil || IsNil(o.Status) { + return nil, false + } + return o.Status, true +} + +// HasStatus returns a boolean if a field has been set. +func (o *DesiredTemplateConfiguration) HasStatus() bool { + if o != nil && !IsNil(o.Status) { + return true + } + + return false +} + +// SetStatus gets a reference to the given Templatev1Status and assigns it to the Status field. +func (o *DesiredTemplateConfiguration) SetStatus(v Templatev1Status) { + o.Status = &v +} + +func (o DesiredTemplateConfiguration) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o DesiredTemplateConfiguration) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.Meta) { + toSerialize["meta"] = o.Meta + } + if !IsNil(o.Config) { + toSerialize["config"] = o.Config + } + if !IsNil(o.Status) { + toSerialize["status"] = o.Status + } + return toSerialize, nil +} + +type NullableDesiredTemplateConfiguration struct { + value *DesiredTemplateConfiguration + isSet bool +} + +func (v NullableDesiredTemplateConfiguration) Get() *DesiredTemplateConfiguration { + return v.value +} + +func (v *NullableDesiredTemplateConfiguration) Set(val *DesiredTemplateConfiguration) { + v.value = val + v.isSet = true +} + +func (v NullableDesiredTemplateConfiguration) IsSet() bool { + return v.isSet +} + +func (v *NullableDesiredTemplateConfiguration) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableDesiredTemplateConfiguration(val *DesiredTemplateConfiguration) *NullableDesiredTemplateConfiguration { + return &NullableDesiredTemplateConfiguration{value: val, isSet: true} +} + +func (v NullableDesiredTemplateConfiguration) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableDesiredTemplateConfiguration) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_metadata_of_the_deployment_resource_.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/model_metadata_of_the_resource_.go similarity index 66% rename from vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_metadata_of_the_deployment_resource_.go rename to vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/model_metadata_of_the_resource_.go index 8d53b8bdf..5820e3b4a 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate/model_metadata_of_the_deployment_resource_.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/model_metadata_of_the_resource_.go @@ -1,5 +1,5 @@ /* -public/portworx/pds/deploymentconfigupdate/apiv1/deploymentconfigupdate.proto +public/portworx/platform/template/apiv1/template.proto No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) @@ -8,18 +8,18 @@ API version: version not set // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. -package deploymentconfigupdate +package template import ( "encoding/json" "time" ) -// checks if the MetadataOfTheDeploymentResource type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &MetadataOfTheDeploymentResource{} +// checks if the MetadataOfTheResource type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &MetadataOfTheResource{} -// MetadataOfTheDeploymentResource Metadata of the deployment resource. -type MetadataOfTheDeploymentResource struct { +// MetadataOfTheResource Metadata of the resource. +type MetadataOfTheResource struct { // Name of the resource. Name *string `json:"name,omitempty"` // Description of the resource. @@ -39,25 +39,25 @@ type MetadataOfTheDeploymentResource struct { ResourceNames *map[string]string `json:"resourceNames,omitempty"` } -// NewMetadataOfTheDeploymentResource instantiates a new MetadataOfTheDeploymentResource object +// NewMetadataOfTheResource instantiates a new MetadataOfTheResource object // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewMetadataOfTheDeploymentResource() *MetadataOfTheDeploymentResource { - this := MetadataOfTheDeploymentResource{} +func NewMetadataOfTheResource() *MetadataOfTheResource { + this := MetadataOfTheResource{} return &this } -// NewMetadataOfTheDeploymentResourceWithDefaults instantiates a new MetadataOfTheDeploymentResource object +// NewMetadataOfTheResourceWithDefaults instantiates a new MetadataOfTheResource object // This constructor will only assign default values to properties that have it defined, // but it doesn't guarantee that properties required by API are set -func NewMetadataOfTheDeploymentResourceWithDefaults() *MetadataOfTheDeploymentResource { - this := MetadataOfTheDeploymentResource{} +func NewMetadataOfTheResourceWithDefaults() *MetadataOfTheResource { + this := MetadataOfTheResource{} return &this } // GetName returns the Name field value if set, zero value otherwise. -func (o *MetadataOfTheDeploymentResource) GetName() string { +func (o *MetadataOfTheResource) GetName() string { if o == nil || IsNil(o.Name) { var ret string return ret @@ -67,7 +67,7 @@ func (o *MetadataOfTheDeploymentResource) GetName() string { // GetNameOk returns a tuple with the Name field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *MetadataOfTheDeploymentResource) GetNameOk() (*string, bool) { +func (o *MetadataOfTheResource) GetNameOk() (*string, bool) { if o == nil || IsNil(o.Name) { return nil, false } @@ -75,7 +75,7 @@ func (o *MetadataOfTheDeploymentResource) GetNameOk() (*string, bool) { } // HasName returns a boolean if a field has been set. -func (o *MetadataOfTheDeploymentResource) HasName() bool { +func (o *MetadataOfTheResource) HasName() bool { if o != nil && !IsNil(o.Name) { return true } @@ -84,12 +84,12 @@ func (o *MetadataOfTheDeploymentResource) HasName() bool { } // SetName gets a reference to the given string and assigns it to the Name field. -func (o *MetadataOfTheDeploymentResource) SetName(v string) { +func (o *MetadataOfTheResource) SetName(v string) { o.Name = &v } // GetDescription returns the Description field value if set, zero value otherwise. -func (o *MetadataOfTheDeploymentResource) GetDescription() string { +func (o *MetadataOfTheResource) GetDescription() string { if o == nil || IsNil(o.Description) { var ret string return ret @@ -99,7 +99,7 @@ func (o *MetadataOfTheDeploymentResource) GetDescription() string { // GetDescriptionOk returns a tuple with the Description field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *MetadataOfTheDeploymentResource) GetDescriptionOk() (*string, bool) { +func (o *MetadataOfTheResource) GetDescriptionOk() (*string, bool) { if o == nil || IsNil(o.Description) { return nil, false } @@ -107,7 +107,7 @@ func (o *MetadataOfTheDeploymentResource) GetDescriptionOk() (*string, bool) { } // HasDescription returns a boolean if a field has been set. -func (o *MetadataOfTheDeploymentResource) HasDescription() bool { +func (o *MetadataOfTheResource) HasDescription() bool { if o != nil && !IsNil(o.Description) { return true } @@ -116,12 +116,12 @@ func (o *MetadataOfTheDeploymentResource) HasDescription() bool { } // SetDescription gets a reference to the given string and assigns it to the Description field. -func (o *MetadataOfTheDeploymentResource) SetDescription(v string) { +func (o *MetadataOfTheResource) SetDescription(v string) { o.Description = &v } // GetResourceVersion returns the ResourceVersion field value if set, zero value otherwise. -func (o *MetadataOfTheDeploymentResource) GetResourceVersion() string { +func (o *MetadataOfTheResource) GetResourceVersion() string { if o == nil || IsNil(o.ResourceVersion) { var ret string return ret @@ -131,7 +131,7 @@ func (o *MetadataOfTheDeploymentResource) GetResourceVersion() string { // GetResourceVersionOk returns a tuple with the ResourceVersion field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *MetadataOfTheDeploymentResource) GetResourceVersionOk() (*string, bool) { +func (o *MetadataOfTheResource) GetResourceVersionOk() (*string, bool) { if o == nil || IsNil(o.ResourceVersion) { return nil, false } @@ -139,7 +139,7 @@ func (o *MetadataOfTheDeploymentResource) GetResourceVersionOk() (*string, bool) } // HasResourceVersion returns a boolean if a field has been set. -func (o *MetadataOfTheDeploymentResource) HasResourceVersion() bool { +func (o *MetadataOfTheResource) HasResourceVersion() bool { if o != nil && !IsNil(o.ResourceVersion) { return true } @@ -148,12 +148,12 @@ func (o *MetadataOfTheDeploymentResource) HasResourceVersion() bool { } // SetResourceVersion gets a reference to the given string and assigns it to the ResourceVersion field. -func (o *MetadataOfTheDeploymentResource) SetResourceVersion(v string) { +func (o *MetadataOfTheResource) SetResourceVersion(v string) { o.ResourceVersion = &v } // GetCreateTime returns the CreateTime field value if set, zero value otherwise. -func (o *MetadataOfTheDeploymentResource) GetCreateTime() time.Time { +func (o *MetadataOfTheResource) GetCreateTime() time.Time { if o == nil || IsNil(o.CreateTime) { var ret time.Time return ret @@ -163,7 +163,7 @@ func (o *MetadataOfTheDeploymentResource) GetCreateTime() time.Time { // GetCreateTimeOk returns a tuple with the CreateTime field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *MetadataOfTheDeploymentResource) GetCreateTimeOk() (*time.Time, bool) { +func (o *MetadataOfTheResource) GetCreateTimeOk() (*time.Time, bool) { if o == nil || IsNil(o.CreateTime) { return nil, false } @@ -171,7 +171,7 @@ func (o *MetadataOfTheDeploymentResource) GetCreateTimeOk() (*time.Time, bool) { } // HasCreateTime returns a boolean if a field has been set. -func (o *MetadataOfTheDeploymentResource) HasCreateTime() bool { +func (o *MetadataOfTheResource) HasCreateTime() bool { if o != nil && !IsNil(o.CreateTime) { return true } @@ -180,12 +180,12 @@ func (o *MetadataOfTheDeploymentResource) HasCreateTime() bool { } // SetCreateTime gets a reference to the given time.Time and assigns it to the CreateTime field. -func (o *MetadataOfTheDeploymentResource) SetCreateTime(v time.Time) { +func (o *MetadataOfTheResource) SetCreateTime(v time.Time) { o.CreateTime = &v } // GetUpdateTime returns the UpdateTime field value if set, zero value otherwise. -func (o *MetadataOfTheDeploymentResource) GetUpdateTime() time.Time { +func (o *MetadataOfTheResource) GetUpdateTime() time.Time { if o == nil || IsNil(o.UpdateTime) { var ret time.Time return ret @@ -195,7 +195,7 @@ func (o *MetadataOfTheDeploymentResource) GetUpdateTime() time.Time { // GetUpdateTimeOk returns a tuple with the UpdateTime field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *MetadataOfTheDeploymentResource) GetUpdateTimeOk() (*time.Time, bool) { +func (o *MetadataOfTheResource) GetUpdateTimeOk() (*time.Time, bool) { if o == nil || IsNil(o.UpdateTime) { return nil, false } @@ -203,7 +203,7 @@ func (o *MetadataOfTheDeploymentResource) GetUpdateTimeOk() (*time.Time, bool) { } // HasUpdateTime returns a boolean if a field has been set. -func (o *MetadataOfTheDeploymentResource) HasUpdateTime() bool { +func (o *MetadataOfTheResource) HasUpdateTime() bool { if o != nil && !IsNil(o.UpdateTime) { return true } @@ -212,12 +212,12 @@ func (o *MetadataOfTheDeploymentResource) HasUpdateTime() bool { } // SetUpdateTime gets a reference to the given time.Time and assigns it to the UpdateTime field. -func (o *MetadataOfTheDeploymentResource) SetUpdateTime(v time.Time) { +func (o *MetadataOfTheResource) SetUpdateTime(v time.Time) { o.UpdateTime = &v } // GetLabels returns the Labels field value if set, zero value otherwise. -func (o *MetadataOfTheDeploymentResource) GetLabels() map[string]string { +func (o *MetadataOfTheResource) GetLabels() map[string]string { if o == nil || IsNil(o.Labels) { var ret map[string]string return ret @@ -227,7 +227,7 @@ func (o *MetadataOfTheDeploymentResource) GetLabels() map[string]string { // GetLabelsOk returns a tuple with the Labels field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *MetadataOfTheDeploymentResource) GetLabelsOk() (*map[string]string, bool) { +func (o *MetadataOfTheResource) GetLabelsOk() (*map[string]string, bool) { if o == nil || IsNil(o.Labels) { return nil, false } @@ -235,7 +235,7 @@ func (o *MetadataOfTheDeploymentResource) GetLabelsOk() (*map[string]string, boo } // HasLabels returns a boolean if a field has been set. -func (o *MetadataOfTheDeploymentResource) HasLabels() bool { +func (o *MetadataOfTheResource) HasLabels() bool { if o != nil && !IsNil(o.Labels) { return true } @@ -244,12 +244,12 @@ func (o *MetadataOfTheDeploymentResource) HasLabels() bool { } // SetLabels gets a reference to the given map[string]string and assigns it to the Labels field. -func (o *MetadataOfTheDeploymentResource) SetLabels(v map[string]string) { +func (o *MetadataOfTheResource) SetLabels(v map[string]string) { o.Labels = &v } // GetAnnotations returns the Annotations field value if set, zero value otherwise. -func (o *MetadataOfTheDeploymentResource) GetAnnotations() map[string]string { +func (o *MetadataOfTheResource) GetAnnotations() map[string]string { if o == nil || IsNil(o.Annotations) { var ret map[string]string return ret @@ -259,7 +259,7 @@ func (o *MetadataOfTheDeploymentResource) GetAnnotations() map[string]string { // GetAnnotationsOk returns a tuple with the Annotations field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *MetadataOfTheDeploymentResource) GetAnnotationsOk() (*map[string]string, bool) { +func (o *MetadataOfTheResource) GetAnnotationsOk() (*map[string]string, bool) { if o == nil || IsNil(o.Annotations) { return nil, false } @@ -267,7 +267,7 @@ func (o *MetadataOfTheDeploymentResource) GetAnnotationsOk() (*map[string]string } // HasAnnotations returns a boolean if a field has been set. -func (o *MetadataOfTheDeploymentResource) HasAnnotations() bool { +func (o *MetadataOfTheResource) HasAnnotations() bool { if o != nil && !IsNil(o.Annotations) { return true } @@ -276,12 +276,12 @@ func (o *MetadataOfTheDeploymentResource) HasAnnotations() bool { } // SetAnnotations gets a reference to the given map[string]string and assigns it to the Annotations field. -func (o *MetadataOfTheDeploymentResource) SetAnnotations(v map[string]string) { +func (o *MetadataOfTheResource) SetAnnotations(v map[string]string) { o.Annotations = &v } // GetParentReference returns the ParentReference field value if set, zero value otherwise. -func (o *MetadataOfTheDeploymentResource) GetParentReference() V1Reference { +func (o *MetadataOfTheResource) GetParentReference() V1Reference { if o == nil || IsNil(o.ParentReference) { var ret V1Reference return ret @@ -291,7 +291,7 @@ func (o *MetadataOfTheDeploymentResource) GetParentReference() V1Reference { // GetParentReferenceOk returns a tuple with the ParentReference field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *MetadataOfTheDeploymentResource) GetParentReferenceOk() (*V1Reference, bool) { +func (o *MetadataOfTheResource) GetParentReferenceOk() (*V1Reference, bool) { if o == nil || IsNil(o.ParentReference) { return nil, false } @@ -299,7 +299,7 @@ func (o *MetadataOfTheDeploymentResource) GetParentReferenceOk() (*V1Reference, } // HasParentReference returns a boolean if a field has been set. -func (o *MetadataOfTheDeploymentResource) HasParentReference() bool { +func (o *MetadataOfTheResource) HasParentReference() bool { if o != nil && !IsNil(o.ParentReference) { return true } @@ -308,12 +308,12 @@ func (o *MetadataOfTheDeploymentResource) HasParentReference() bool { } // SetParentReference gets a reference to the given V1Reference and assigns it to the ParentReference field. -func (o *MetadataOfTheDeploymentResource) SetParentReference(v V1Reference) { +func (o *MetadataOfTheResource) SetParentReference(v V1Reference) { o.ParentReference = &v } // GetResourceNames returns the ResourceNames field value if set, zero value otherwise. -func (o *MetadataOfTheDeploymentResource) GetResourceNames() map[string]string { +func (o *MetadataOfTheResource) GetResourceNames() map[string]string { if o == nil || IsNil(o.ResourceNames) { var ret map[string]string return ret @@ -323,7 +323,7 @@ func (o *MetadataOfTheDeploymentResource) GetResourceNames() map[string]string { // GetResourceNamesOk returns a tuple with the ResourceNames field value if set, nil otherwise // and a boolean to check if the value has been set. -func (o *MetadataOfTheDeploymentResource) GetResourceNamesOk() (*map[string]string, bool) { +func (o *MetadataOfTheResource) GetResourceNamesOk() (*map[string]string, bool) { if o == nil || IsNil(o.ResourceNames) { return nil, false } @@ -331,7 +331,7 @@ func (o *MetadataOfTheDeploymentResource) GetResourceNamesOk() (*map[string]stri } // HasResourceNames returns a boolean if a field has been set. -func (o *MetadataOfTheDeploymentResource) HasResourceNames() bool { +func (o *MetadataOfTheResource) HasResourceNames() bool { if o != nil && !IsNil(o.ResourceNames) { return true } @@ -340,11 +340,11 @@ func (o *MetadataOfTheDeploymentResource) HasResourceNames() bool { } // SetResourceNames gets a reference to the given map[string]string and assigns it to the ResourceNames field. -func (o *MetadataOfTheDeploymentResource) SetResourceNames(v map[string]string) { +func (o *MetadataOfTheResource) SetResourceNames(v map[string]string) { o.ResourceNames = &v } -func (o MetadataOfTheDeploymentResource) MarshalJSON() ([]byte, error) { +func (o MetadataOfTheResource) MarshalJSON() ([]byte, error) { toSerialize,err := o.ToMap() if err != nil { return []byte{}, err @@ -352,7 +352,7 @@ func (o MetadataOfTheDeploymentResource) MarshalJSON() ([]byte, error) { return json.Marshal(toSerialize) } -func (o MetadataOfTheDeploymentResource) ToMap() (map[string]interface{}, error) { +func (o MetadataOfTheResource) ToMap() (map[string]interface{}, error) { toSerialize := map[string]interface{}{} if !IsNil(o.Name) { toSerialize["name"] = o.Name @@ -384,38 +384,38 @@ func (o MetadataOfTheDeploymentResource) ToMap() (map[string]interface{}, error) return toSerialize, nil } -type NullableMetadataOfTheDeploymentResource struct { - value *MetadataOfTheDeploymentResource +type NullableMetadataOfTheResource struct { + value *MetadataOfTheResource isSet bool } -func (v NullableMetadataOfTheDeploymentResource) Get() *MetadataOfTheDeploymentResource { +func (v NullableMetadataOfTheResource) Get() *MetadataOfTheResource { return v.value } -func (v *NullableMetadataOfTheDeploymentResource) Set(val *MetadataOfTheDeploymentResource) { +func (v *NullableMetadataOfTheResource) Set(val *MetadataOfTheResource) { v.value = val v.isSet = true } -func (v NullableMetadataOfTheDeploymentResource) IsSet() bool { +func (v NullableMetadataOfTheResource) IsSet() bool { return v.isSet } -func (v *NullableMetadataOfTheDeploymentResource) Unset() { +func (v *NullableMetadataOfTheResource) Unset() { v.value = nil v.isSet = false } -func NewNullableMetadataOfTheDeploymentResource(val *MetadataOfTheDeploymentResource) *NullableMetadataOfTheDeploymentResource { - return &NullableMetadataOfTheDeploymentResource{value: val, isSet: true} +func NewNullableMetadataOfTheResource(val *MetadataOfTheResource) *NullableMetadataOfTheResource { + return &NullableMetadataOfTheResource{value: val, isSet: true} } -func (v NullableMetadataOfTheDeploymentResource) MarshalJSON() ([]byte, error) { +func (v NullableMetadataOfTheResource) MarshalJSON() ([]byte, error) { return json.Marshal(v.value) } -func (v *NullableMetadataOfTheDeploymentResource) UnmarshalJSON(src []byte) error { +func (v *NullableMetadataOfTheResource) UnmarshalJSON(src []byte) error { v.isSet = true return json.Unmarshal(src, &v.value) } diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/model_selector_operator.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/model_selector_operator.go index 9c0db14a8..caff62457 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/model_selector_operator.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/model_selector_operator.go @@ -15,7 +15,7 @@ import ( "fmt" ) -// SelectorOperator Operator specifies the relationship between the provided (key,value) pairs in the response. - OPERATOR_UNSPECIFIED: Unspecified, do not use. - IN: IN specifies that the key should be associated with atleast 1 of the element in value list. - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list. +// SelectorOperator Operator specifies the relationship between the provided (key,value) pairs in the response. - OPERATOR_UNSPECIFIED: Unspecified, do not use. - IN: IN specifies that the key should be associated with atleast 1 of the element in value list. - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list. - LIKE: LIKE specified that the key should be of a specified pattern type SelectorOperator string // List of SelectorOperator @@ -23,6 +23,7 @@ const ( SELECTOROPERATOR_OPERATOR_UNSPECIFIED SelectorOperator = "OPERATOR_UNSPECIFIED" SELECTOROPERATOR_IN SelectorOperator = "IN" SELECTOROPERATOR_NOT_IN SelectorOperator = "NOT_IN" + SELECTOROPERATOR_LIKE SelectorOperator = "LIKE" ) // All allowed values of SelectorOperator enum @@ -30,6 +31,7 @@ var AllowedSelectorOperatorEnumValues = []SelectorOperator{ "OPERATOR_UNSPECIFIED", "IN", "NOT_IN", + "LIKE", } func (v *SelectorOperator) UnmarshalJSON(src []byte) error { diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/model_template_service_update_template_body.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/model_template_service_update_template_body.go new file mode 100644 index 000000000..c0e14c5b7 --- /dev/null +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/template/model_template_service_update_template_body.go @@ -0,0 +1,126 @@ +/* +public/portworx/platform/template/apiv1/template.proto + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: version not set +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package template + +import ( + "encoding/json" +) + +// checks if the TemplateServiceUpdateTemplateBody type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &TemplateServiceUpdateTemplateBody{} + +// TemplateServiceUpdateTemplateBody Request to update a template instance. +type TemplateServiceUpdateTemplateBody struct { + Template *DesiredTemplateConfiguration `json:"template,omitempty"` +} + +// NewTemplateServiceUpdateTemplateBody instantiates a new TemplateServiceUpdateTemplateBody object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewTemplateServiceUpdateTemplateBody() *TemplateServiceUpdateTemplateBody { + this := TemplateServiceUpdateTemplateBody{} + return &this +} + +// NewTemplateServiceUpdateTemplateBodyWithDefaults instantiates a new TemplateServiceUpdateTemplateBody object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewTemplateServiceUpdateTemplateBodyWithDefaults() *TemplateServiceUpdateTemplateBody { + this := TemplateServiceUpdateTemplateBody{} + return &this +} + +// GetTemplate returns the Template field value if set, zero value otherwise. +func (o *TemplateServiceUpdateTemplateBody) GetTemplate() DesiredTemplateConfiguration { + if o == nil || IsNil(o.Template) { + var ret DesiredTemplateConfiguration + return ret + } + return *o.Template +} + +// GetTemplateOk returns a tuple with the Template field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *TemplateServiceUpdateTemplateBody) GetTemplateOk() (*DesiredTemplateConfiguration, bool) { + if o == nil || IsNil(o.Template) { + return nil, false + } + return o.Template, true +} + +// HasTemplate returns a boolean if a field has been set. +func (o *TemplateServiceUpdateTemplateBody) HasTemplate() bool { + if o != nil && !IsNil(o.Template) { + return true + } + + return false +} + +// SetTemplate gets a reference to the given DesiredTemplateConfiguration and assigns it to the Template field. +func (o *TemplateServiceUpdateTemplateBody) SetTemplate(v DesiredTemplateConfiguration) { + o.Template = &v +} + +func (o TemplateServiceUpdateTemplateBody) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o TemplateServiceUpdateTemplateBody) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.Template) { + toSerialize["template"] = o.Template + } + return toSerialize, nil +} + +type NullableTemplateServiceUpdateTemplateBody struct { + value *TemplateServiceUpdateTemplateBody + isSet bool +} + +func (v NullableTemplateServiceUpdateTemplateBody) Get() *TemplateServiceUpdateTemplateBody { + return v.value +} + +func (v *NullableTemplateServiceUpdateTemplateBody) Set(val *TemplateServiceUpdateTemplateBody) { + v.value = val + v.isSet = true +} + +func (v NullableTemplateServiceUpdateTemplateBody) IsSet() bool { + return v.isSet +} + +func (v *NullableTemplateServiceUpdateTemplateBody) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableTemplateServiceUpdateTemplateBody(val *TemplateServiceUpdateTemplateBody) *NullableTemplateServiceUpdateTemplateBody { + return &NullableTemplateServiceUpdateTemplateBody{value: val, isSet: true} +} + +func (v NullableTemplateServiceUpdateTemplateBody) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableTemplateServiceUpdateTemplateBody) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/tenant/README.md b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/tenant/README.md index dc572238a..c62ace643 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/tenant/README.md +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/tenant/README.md @@ -7,7 +7,7 @@ This API client was generated by the [OpenAPI Generator](https://openapi-generat - API version: version not set - Package version: 1.0.0 -- Generator version: 7.6.0-SNAPSHOT +- Generator version: 7.7.0-SNAPSHOT - Build package: org.openapitools.codegen.languages.GoClientCodegen ## Installation diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/tenant/client.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/tenant/client.go index 929cb3cdc..f3b882d44 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/tenant/client.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/tenant/client.go @@ -165,7 +165,7 @@ func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix stri return } if t, ok := obj.(time.Time); ok { - parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339), collectionType) + parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339Nano), collectionType) return } value = v.Type().String() + " value" diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/tenant/model_selector_operator.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/tenant/model_selector_operator.go index 9e43a6a45..f762b75a0 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/tenant/model_selector_operator.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/tenant/model_selector_operator.go @@ -15,7 +15,7 @@ import ( "fmt" ) -// SelectorOperator Operator specifies the relationship between the provided (key,value) pairs in the response. - OPERATOR_UNSPECIFIED: Unspecified, do not use. - IN: IN specifies that the key should be associated with atleast 1 of the element in value list. - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list. +// SelectorOperator Operator specifies the relationship between the provided (key,value) pairs in the response. - OPERATOR_UNSPECIFIED: Unspecified, do not use. - IN: IN specifies that the key should be associated with atleast 1 of the element in value list. - NOT_IN: NOT_IN specifies that the key should not be associated with any of the element in value list. - LIKE: LIKE specified that the key should be of a specified pattern type SelectorOperator string // List of SelectorOperator @@ -23,6 +23,7 @@ const ( SELECTOROPERATOR_OPERATOR_UNSPECIFIED SelectorOperator = "OPERATOR_UNSPECIFIED" SELECTOROPERATOR_IN SelectorOperator = "IN" SELECTOROPERATOR_NOT_IN SelectorOperator = "NOT_IN" + SELECTOROPERATOR_LIKE SelectorOperator = "LIKE" ) // All allowed values of SelectorOperator enum @@ -30,6 +31,7 @@ var AllowedSelectorOperatorEnumValues = []SelectorOperator{ "OPERATOR_UNSPECIFIED", "IN", "NOT_IN", + "LIKE", } func (v *SelectorOperator) UnmarshalJSON(src []byte) error { diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/whoami/README.md b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/whoami/README.md index 99a88b0ce..c3b1fe706 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/whoami/README.md +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/whoami/README.md @@ -7,7 +7,7 @@ This API client was generated by the [OpenAPI Generator](https://openapi-generat - API version: version not set - Package version: 1.0.0 -- Generator version: 7.6.0-SNAPSHOT +- Generator version: 7.7.0-SNAPSHOT - Build package: org.openapitools.codegen.languages.GoClientCodegen ## Installation @@ -78,6 +78,7 @@ All URIs are relative to *http://localhost* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- +*WhoAmIServiceAPI* | [**WhoAmIServiceInvitationsWhoAmI**](docs/WhoAmIServiceAPI.md#whoamiserviceinvitationswhoami) | **Get** /core/v1/whoami:invitations | InvitationsWhoAmI API returns the current actor pending invitations cross accounts. *WhoAmIServiceAPI* | [**WhoAmIServiceWhoAmI**](docs/WhoAmIServiceAPI.md#whoamiservicewhoami) | **Get** /core/v1/whoami | WhoAmI API returns the current actor accounts. diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/whoami/api_who_am_i_service.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/whoami/api_who_am_i_service.go index 70cac9af0..9a5ee4026 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/whoami/api_who_am_i_service.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/whoami/api_who_am_i_service.go @@ -22,6 +22,111 @@ import ( // WhoAmIServiceAPIService WhoAmIServiceAPI service type WhoAmIServiceAPIService service +type ApiWhoAmIServiceInvitationsWhoAmIRequest struct { + ctx context.Context + ApiService *WhoAmIServiceAPIService +} + +func (r ApiWhoAmIServiceInvitationsWhoAmIRequest) Execute() (*V1WhoAmIResponse, *http.Response, error) { + return r.ApiService.WhoAmIServiceInvitationsWhoAmIExecute(r) +} + +/* +WhoAmIServiceInvitationsWhoAmI InvitationsWhoAmI API returns the current actor pending invitations cross accounts. + + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiWhoAmIServiceInvitationsWhoAmIRequest +*/ +func (a *WhoAmIServiceAPIService) WhoAmIServiceInvitationsWhoAmI(ctx context.Context) ApiWhoAmIServiceInvitationsWhoAmIRequest { + return ApiWhoAmIServiceInvitationsWhoAmIRequest{ + ApiService: a, + ctx: ctx, + } +} + +// Execute executes the request +// @return V1WhoAmIResponse +func (a *WhoAmIServiceAPIService) WhoAmIServiceInvitationsWhoAmIExecute(r ApiWhoAmIServiceInvitationsWhoAmIRequest) (*V1WhoAmIResponse, *http.Response, error) { + var ( + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *V1WhoAmIResponse + ) + + localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "WhoAmIServiceAPIService.WhoAmIServiceInvitationsWhoAmI") + if err != nil { + return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()} + } + + localVarPath := localBasePath + "/core/v1/whoami:invitations" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHTTPContentTypes := []string{} + + // set Content-Type header + localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes) + if localVarHTTPContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHTTPContentType + } + + // to determine the Accept header + localVarHTTPHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts) + if localVarHTTPHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept + } + req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHTTPResponse, err := a.client.callAPI(req) + if err != nil || localVarHTTPResponse == nil { + return localVarReturnValue, localVarHTTPResponse, err + } + + localVarBody, err := io.ReadAll(localVarHTTPResponse.Body) + localVarHTTPResponse.Body.Close() + localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody)) + if err != nil { + return localVarReturnValue, localVarHTTPResponse, err + } + + if localVarHTTPResponse.StatusCode >= 300 { + newErr := &GenericOpenAPIError{ + body: localVarBody, + error: localVarHTTPResponse.Status, + } + var v RpcStatus + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHTTPResponse, newErr + } + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v + return localVarReturnValue, localVarHTTPResponse, newErr + } + + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr := &GenericOpenAPIError{ + body: localVarBody, + error: err.Error(), + } + return localVarReturnValue, localVarHTTPResponse, newErr + } + + return localVarReturnValue, localVarHTTPResponse, nil +} + type ApiWhoAmIServiceWhoAmIRequest struct { ctx context.Context ApiService *WhoAmIServiceAPIService diff --git a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/whoami/client.go b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/whoami/client.go index be92870e6..6434b911d 100644 --- a/vendor/github.com/pure-px/platform-api-go-client/platform/v1/whoami/client.go +++ b/vendor/github.com/pure-px/platform-api-go-client/platform/v1/whoami/client.go @@ -162,7 +162,7 @@ func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix stri return } if t, ok := obj.(time.Time); ok { - parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339), collectionType) + parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339Nano), collectionType) return } value = v.Type().String() + " value" diff --git a/vendor/go.uber.org/multierr/CHANGELOG.md b/vendor/go.uber.org/multierr/CHANGELOG.md index cfd2e6abe..f8177b978 100644 --- a/vendor/go.uber.org/multierr/CHANGELOG.md +++ b/vendor/go.uber.org/multierr/CHANGELOG.md @@ -1,6 +1,13 @@ Releases ======== +v1.11.0 (2023-03-28) +==================== +- `Errors` now supports any error that implements multiple-error + interface. +- Add `Every` function to allow checking if all errors in the chain + satisfies `errors.Is` against the target error. + v1.10.0 (2023-03-08) ==================== diff --git a/vendor/go.uber.org/multierr/error.go b/vendor/go.uber.org/multierr/error.go index 4ee4b9f20..3a828b2df 100644 --- a/vendor/go.uber.org/multierr/error.go +++ b/vendor/go.uber.org/multierr/error.go @@ -142,6 +142,7 @@ package multierr // import "go.uber.org/multierr" import ( "bytes" + "errors" "fmt" "io" "strings" @@ -194,23 +195,7 @@ type errorGroup interface { // // Callers of this function are free to modify the returned slice. func Errors(err error) []error { - if err == nil { - return nil - } - - // Note that we're casting to multiError, not errorGroup. Our contract is - // that returned errors MAY implement errorGroup. Errors, however, only - // has special behavior for multierr-specific error objects. - // - // This behavior can be expanded in the future but I think it's prudent to - // start with as little as possible in terms of contract and possibility - // of misuse. - eg, ok := err.(*multiError) - if !ok { - return []error{err} - } - - return append(([]error)(nil), eg.Errors()...) + return extractErrors(err) } // multiError is an error that holds one or more errors. @@ -225,8 +210,6 @@ type multiError struct { errors []error } -var _ errorGroup = (*multiError)(nil) - // Errors returns the list of underlying errors. // // This slice MUST NOT be modified. @@ -252,6 +235,17 @@ func (merr *multiError) Error() string { return result } +// Every compares every error in the given err against the given target error +// using [errors.Is], and returns true only if every comparison returned true. +func Every(err error, target error) bool { + for _, e := range extractErrors(err) { + if !errors.Is(e, target) { + return false + } + } + return true +} + func (merr *multiError) Format(f fmt.State, c rune) { if c == 'v' && f.Flag('+') { merr.writeMultiline(f) diff --git a/vendor/go.uber.org/multierr/error_post_go120.go b/vendor/go.uber.org/multierr/error_post_go120.go index 0b00becf2..a173f9c25 100644 --- a/vendor/go.uber.org/multierr/error_post_go120.go +++ b/vendor/go.uber.org/multierr/error_post_go120.go @@ -27,3 +27,22 @@ package multierr func (merr *multiError) Unwrap() []error { return merr.Errors() } + +type multipleErrors interface { + Unwrap() []error +} + +func extractErrors(err error) []error { + if err == nil { + return nil + } + + // check if the given err is an Unwrapable error that + // implements multipleErrors interface. + eg, ok := err.(multipleErrors) + if !ok { + return []error{err} + } + + return append(([]error)(nil), eg.Unwrap()...) +} diff --git a/vendor/go.uber.org/multierr/error_pre_go120.go b/vendor/go.uber.org/multierr/error_pre_go120.go index 8da10f1a0..93872a3fc 100644 --- a/vendor/go.uber.org/multierr/error_pre_go120.go +++ b/vendor/go.uber.org/multierr/error_pre_go120.go @@ -57,3 +57,23 @@ func (merr *multiError) Is(target error) bool { } return false } + +func extractErrors(err error) []error { + if err == nil { + return nil + } + + // Note that we're casting to multiError, not errorGroup. Our contract is + // that returned errors MAY implement errorGroup. Errors, however, only + // has special behavior for multierr-specific error objects. + // + // This behavior can be expanded in the future but I think it's prudent to + // start with as little as possible in terms of contract and possibility + // of misuse. + eg, ok := err.(*multiError) + if !ok { + return []error{err} + } + + return append(([]error)(nil), eg.Errors()...) +} diff --git a/vendor/google.golang.org/api/gkeonprem/v1/gkeonprem-api.json b/vendor/google.golang.org/api/gkeonprem/v1/gkeonprem-api.json new file mode 100644 index 000000000..4ffb2da37 --- /dev/null +++ b/vendor/google.golang.org/api/gkeonprem/v1/gkeonprem-api.json @@ -0,0 +1,6733 @@ +{ + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/cloud-platform": { + "description": "See, edit, configure, and delete your Google Cloud data and see the email address for your Google Account." + } + } + } + }, + "basePath": "", + "baseUrl": "https://gkeonprem.googleapis.com/", + "batchPath": "batch", + "canonicalName": "GKE On-Prem", + "description": "", + "discoveryVersion": "v1", + "documentationLink": "https://cloud.google.com/anthos/clusters/docs/on-prem/", + "fullyEncodeReservedExpansion": true, + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "id": "gkeonprem:v1", + "kind": "discovery#restDescription", + "mtlsRootUrl": "https://gkeonprem.mtls.googleapis.com/", + "name": "gkeonprem", + "ownerDomain": "google.com", + "ownerName": "Google", + "parameters": { + "$.xgafv": { + "description": "V1 error format.", + "enum": [ + "1", + "2" + ], + "enumDescriptions": [ + "v1 error format", + "v2 error format" + ], + "location": "query", + "type": "string" + }, + "access_token": { + "description": "OAuth access token.", + "location": "query", + "type": "string" + }, + "alt": { + "default": "json", + "description": "Data format for response.", + "enum": [ + "json", + "media", + "proto" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json", + "Media download with context-dependent Content-Type", + "Responses with Content-Type of application/x-protobuf" + ], + "location": "query", + "type": "string" + }, + "callback": { + "description": "JSONP", + "location": "query", + "type": "string" + }, + "fields": { + "description": "Selector specifying which fields to include in a partial response.", + "location": "query", + "type": "string" + }, + "key": { + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query", + "type": "string" + }, + "oauth_token": { + "description": "OAuth 2.0 token for the current user.", + "location": "query", + "type": "string" + }, + "prettyPrint": { + "default": "true", + "description": "Returns response with indentations and line breaks.", + "location": "query", + "type": "boolean" + }, + "quotaUser": { + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.", + "location": "query", + "type": "string" + }, + "uploadType": { + "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").", + "location": "query", + "type": "string" + }, + "upload_protocol": { + "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").", + "location": "query", + "type": "string" + } + }, + "protocol": "rest", + "resources": { + "projects": { + "resources": { + "locations": { + "methods": { + "get": { + "description": "Gets information about a location.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.get", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "Resource name for the location.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+name}", + "response": { + "$ref": "Location" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "list": { + "description": "Lists information about the supported locations for this service.", + "flatPath": "v1/projects/{projectsId}/locations", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.list", + "parameterOrder": [ + "name" + ], + "parameters": { + "filter": { + "description": "A filter to narrow down results to a preferred subset. The filtering language accepts strings like `\"displayName=tokyo\"`, and is documented in more detail in [AIP-160](https://google.aip.dev/160).", + "location": "query", + "type": "string" + }, + "name": { + "description": "The resource that owns the locations collection, if applicable.", + "location": "path", + "pattern": "^projects/[^/]+$", + "required": true, + "type": "string" + }, + "pageSize": { + "description": "The maximum number of results to return. If not set, the service selects a default.", + "format": "int32", + "location": "query", + "type": "integer" + }, + "pageToken": { + "description": "A page token received from the `next_page_token` field in the response. Send that page token to receive the subsequent page.", + "location": "query", + "type": "string" + } + }, + "path": "v1/{+name}/locations", + "response": { + "$ref": "ListLocationsResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + }, + "resources": { + "bareMetalAdminClusters": { + "methods": { + "create": { + "description": "Creates a new bare metal admin cluster in a given project and location. The API needs to be combined with creating a bootstrap cluster to work. See: https://cloud.google.com/anthos/clusters/docs/bare-metal/latest/installing/creating-clusters/create-admin-cluster-api#prepare_bootstrap_environment", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.bareMetalAdminClusters.create", + "parameterOrder": [ + "parent" + ], + "parameters": { + "bareMetalAdminClusterId": { + "description": "Required. User provided identifier that is used as part of the resource name; must conform to RFC-1034 and additionally restrict to lower-cased letters. This comes out roughly to: /^a-z+[a-z0-9]$/", + "location": "query", + "type": "string" + }, + "parent": { + "description": "Required. The parent of the project and location where the cluster is created in. Format: \"projects/{project}/locations/{location}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+$", + "required": true, + "type": "string" + }, + "validateOnly": { + "description": "Validate the request without actually doing any updates.", + "location": "query", + "type": "boolean" + } + }, + "path": "v1/{+parent}/bareMetalAdminClusters", + "request": { + "$ref": "BareMetalAdminCluster" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "enroll": { + "description": "Enrolls an existing bare metal admin cluster to the Anthos On-Prem API within a given project and location. Through enrollment, an existing admin cluster will become Anthos On-Prem API managed. The corresponding GCP resources will be created and all future modifications to the cluster will be expected to be performed through the API.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters:enroll", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.bareMetalAdminClusters.enroll", + "parameterOrder": [ + "parent" + ], + "parameters": { + "parent": { + "description": "Required. The parent of the project and location where the cluster is enrolled in. Format: \"projects/{project}/locations/{location}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+parent}/bareMetalAdminClusters:enroll", + "request": { + "$ref": "EnrollBareMetalAdminClusterRequest" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "get": { + "description": "Gets details of a single bare metal admin cluster.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters/{bareMetalAdminClustersId}", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.bareMetalAdminClusters.get", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "Required. Name of the bare metal admin cluster to get. Format: \"projects/{project}/locations/{location}/bareMetalAdminClusters/{bare_metal_admin_cluster}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalAdminClusters/[^/]+$", + "required": true, + "type": "string" + }, + "view": { + "description": "View for bare metal admin cluster. When `BASIC` is specified, only the cluster resource name and membership are returned. The default/unset value `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete cluster configuration details.", + "enum": [ + "CLUSTER_VIEW_UNSPECIFIED", + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "If the value is not set, the default `FULL` view is used.", + "Includes basic information of a cluster resource including cluster resource name and membership.", + "Includes the complete configuration for bare metal admin cluster resource. This is the default value for GetBareMetalAdminClusterRequest method." + ], + "location": "query", + "type": "string" + } + }, + "path": "v1/{+name}", + "response": { + "$ref": "BareMetalAdminCluster" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "getIamPolicy": { + "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters/{bareMetalAdminClustersId}:getIamPolicy", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.bareMetalAdminClusters.getIamPolicy", + "parameterOrder": [ + "resource" + ], + "parameters": { + "options.requestedPolicyVersion": { + "description": "Optional. The maximum policy version that will be used to format the policy. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional role bindings must specify version 3. Policies with no conditional role bindings may specify any valid value or leave the field unset. The policy in the response might use the policy version that you specified, or it might use a lower policy version. For example, if you specify version 3, but the policy has no conditional role bindings, the response uses version 1. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).", + "format": "int32", + "location": "query", + "type": "integer" + }, + "resource": { + "description": "REQUIRED: The resource for which the policy is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalAdminClusters/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+resource}:getIamPolicy", + "response": { + "$ref": "Policy" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "list": { + "description": "Lists bare metal admin clusters in a given project and location.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.bareMetalAdminClusters.list", + "parameterOrder": [ + "parent" + ], + "parameters": { + "pageSize": { + "description": "Requested page size. Server may return fewer items than requested. If unspecified, at most 50 clusters will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.", + "format": "int32", + "location": "query", + "type": "integer" + }, + "pageToken": { + "description": "A token identifying a page of results the server should return.", + "location": "query", + "type": "string" + }, + "parent": { + "description": "Required. The parent of the project and location where the clusters are listed in. Format: \"projects/{project}/locations/{location}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+$", + "required": true, + "type": "string" + }, + "view": { + "description": "View for bare metal admin clusters. When `BASIC` is specified, only the admin cluster resource name and membership are returned. The default/unset value `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete admin cluster configuration details.", + "enum": [ + "CLUSTER_VIEW_UNSPECIFIED", + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "If the value is not set, the default `FULL` view is used.", + "Includes basic information of a admin cluster resource including admin cluster resource name and membership.", + "Includes the complete configuration for bare metal admin cluster resource. This is the default value for ListBareMetalAdminClustersRequest method." + ], + "location": "query", + "type": "string" + } + }, + "path": "v1/{+parent}/bareMetalAdminClusters", + "response": { + "$ref": "ListBareMetalAdminClustersResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "patch": { + "description": "Updates the parameters of a single bare metal admin cluster.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters/{bareMetalAdminClustersId}", + "httpMethod": "PATCH", + "id": "gkeonprem.projects.locations.bareMetalAdminClusters.patch", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "Immutable. The bare metal admin cluster resource name.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalAdminClusters/[^/]+$", + "required": true, + "type": "string" + }, + "updateMask": { + "description": "Required. Field mask is used to specify the fields to be overwritten in the BareMetalAdminCluster resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all populated fields in the BareMetalAdminCluster message will be updated. Empty fields will be ignored unless a field mask is used.", + "format": "google-fieldmask", + "location": "query", + "type": "string" + }, + "validateOnly": { + "description": "Validate the request without actually doing any updates.", + "location": "query", + "type": "boolean" + } + }, + "path": "v1/{+name}", + "request": { + "$ref": "BareMetalAdminCluster" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "queryVersionConfig": { + "description": "Queries the bare metal admin cluster version config.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters:queryVersionConfig", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.bareMetalAdminClusters.queryVersionConfig", + "parameterOrder": [ + "parent" + ], + "parameters": { + "parent": { + "description": "Required. The parent of the project and location to query for version config. Format: \"projects/{project}/locations/{location}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+$", + "required": true, + "type": "string" + }, + "upgradeConfig.clusterName": { + "description": "The admin cluster resource name. This is the full resource name of the admin cluster resource. Format: \"projects/{project}/locations/{location}/bareMetalAdminClusters/{bare_metal_admin_cluster}\"", + "location": "query", + "type": "string" + } + }, + "path": "v1/{+parent}/bareMetalAdminClusters:queryVersionConfig", + "response": { + "$ref": "QueryBareMetalAdminVersionConfigResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "setIamPolicy": { + "description": "Sets the access control policy on the specified resource. Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters/{bareMetalAdminClustersId}:setIamPolicy", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.bareMetalAdminClusters.setIamPolicy", + "parameterOrder": [ + "resource" + ], + "parameters": { + "resource": { + "description": "REQUIRED: The resource for which the policy is being specified. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalAdminClusters/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+resource}:setIamPolicy", + "request": { + "$ref": "SetIamPolicyRequest" + }, + "response": { + "$ref": "Policy" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "testIamPermissions": { + "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not for authorization checking. This operation may \"fail open\" without warning.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters/{bareMetalAdminClustersId}:testIamPermissions", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.bareMetalAdminClusters.testIamPermissions", + "parameterOrder": [ + "resource" + ], + "parameters": { + "resource": { + "description": "REQUIRED: The resource for which the policy detail is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalAdminClusters/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+resource}:testIamPermissions", + "request": { + "$ref": "TestIamPermissionsRequest" + }, + "response": { + "$ref": "TestIamPermissionsResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "unenroll": { + "description": "Unenrolls an existing bare metal admin cluster from the Anthos On-Prem API within a given project and location. Unenrollment removes the Cloud reference to the cluster without modifying the underlying OnPrem Resources. Clusters will continue to run; however, they will no longer be accessible through the Anthos On-Prem API or its clients.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters/{bareMetalAdminClustersId}:unenroll", + "httpMethod": "DELETE", + "id": "gkeonprem.projects.locations.bareMetalAdminClusters.unenroll", + "parameterOrder": [ + "name" + ], + "parameters": { + "allowMissing": { + "description": "If set to true, and the bare metal admin cluster is not found, the request will succeed but no action will be taken on the server and return a completed LRO.", + "location": "query", + "type": "boolean" + }, + "etag": { + "description": "The current etag of the bare metal admin cluster. If an etag is provided and does not match the current etag of the cluster, deletion will be blocked and an ABORTED error will be returned.", + "location": "query", + "type": "string" + }, + "ignoreErrors": { + "description": "If set to true, the unenrollment of a bare metal admin cluster resource will succeed even if errors occur during unenrollment. This parameter can be used when you want to unenroll admin cluster resource and the on-prem admin cluster is disconnected / unreachable. WARNING: Using this parameter when your admin cluster still exists may result in a deleted GCP admin cluster but existing resourcelink in on-prem admin cluster and membership.", + "location": "query", + "type": "boolean" + }, + "name": { + "description": "Required. Name of the bare metal admin cluster to be unenrolled. Format: \"projects/{project}/locations/{location}/bareMetalAdminClusters/{cluster}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalAdminClusters/[^/]+$", + "required": true, + "type": "string" + }, + "validateOnly": { + "description": "Validate the request without actually doing any updates.", + "location": "query", + "type": "boolean" + } + }, + "path": "v1/{+name}:unenroll", + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + }, + "resources": { + "operations": { + "methods": { + "get": { + "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters/{bareMetalAdminClustersId}/operations/{operationsId}", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.bareMetalAdminClusters.operations.get", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "The name of the operation resource.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalAdminClusters/[^/]+/operations/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+name}", + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "list": { + "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters/{bareMetalAdminClustersId}/operations", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.bareMetalAdminClusters.operations.list", + "parameterOrder": [ + "name" + ], + "parameters": { + "filter": { + "description": "The standard list filter.", + "location": "query", + "type": "string" + }, + "name": { + "description": "The name of the operation's parent resource.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalAdminClusters/[^/]+$", + "required": true, + "type": "string" + }, + "pageSize": { + "description": "The standard list page size.", + "format": "int32", + "location": "query", + "type": "integer" + }, + "pageToken": { + "description": "The standard list page token.", + "location": "query", + "type": "string" + } + }, + "path": "v1/{+name}/operations", + "response": { + "$ref": "ListOperationsResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + } + } + } + }, + "bareMetalClusters": { + "methods": { + "create": { + "description": "Creates a new bare metal cluster in a given project and location.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.bareMetalClusters.create", + "parameterOrder": [ + "parent" + ], + "parameters": { + "bareMetalClusterId": { + "description": "Required. User provided identifier that is used as part of the resource name; must conform to RFC-1034 and additionally restrict to lower-cased letters. This comes out roughly to: /^a-z+[a-z0-9]$/", + "location": "query", + "type": "string" + }, + "parent": { + "description": "Required. The parent of the project and location where the cluster is created in. Format: \"projects/{project}/locations/{location}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+$", + "required": true, + "type": "string" + }, + "validateOnly": { + "description": "Validate the request without actually doing any updates.", + "location": "query", + "type": "boolean" + } + }, + "path": "v1/{+parent}/bareMetalClusters", + "request": { + "$ref": "BareMetalCluster" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "delete": { + "description": "Deletes a single bare metal Cluster.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}", + "httpMethod": "DELETE", + "id": "gkeonprem.projects.locations.bareMetalClusters.delete", + "parameterOrder": [ + "name" + ], + "parameters": { + "allowMissing": { + "description": "If set to true, and the bare metal cluster is not found, the request will succeed but no action will be taken on the server and return a completed LRO.", + "location": "query", + "type": "boolean" + }, + "etag": { + "description": "The current etag of the bare metal Cluster. If an etag is provided and does not match the current etag of the cluster, deletion will be blocked and an ABORTED error will be returned.", + "location": "query", + "type": "string" + }, + "force": { + "description": "If set to true, any node pools from the cluster will also be deleted.", + "location": "query", + "type": "boolean" + }, + "ignoreErrors": { + "description": "If set to true, the deletion of a bare metal user cluster resource will succeed even if errors occur during deletion. This parameter can be used when you want to delete GCP's cluster resource and the on-prem admin cluster that hosts your user cluster is disconnected / unreachable or deleted. WARNING: Using this parameter when your user cluster still exists may result in a deleted GCP user cluster but an existing on-prem user cluster.", + "location": "query", + "type": "boolean" + }, + "name": { + "description": "Required. Name of the bare metal user cluster to be deleted. Format: \"projects/{project}/locations/{location}/bareMetalClusters/{bare_metal_cluster}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+$", + "required": true, + "type": "string" + }, + "validateOnly": { + "description": "Validate the request without actually doing any updates.", + "location": "query", + "type": "boolean" + } + }, + "path": "v1/{+name}", + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "enroll": { + "description": "Enrolls an existing bare metal user cluster and its node pools to the Anthos On-Prem API within a given project and location. Through enrollment, an existing cluster will become Anthos On-Prem API managed. The corresponding GCP resources will be created and all future modifications to the cluster and/or its node pools will be expected to be performed through the API.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters:enroll", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.bareMetalClusters.enroll", + "parameterOrder": [ + "parent" + ], + "parameters": { + "parent": { + "description": "Required. The parent of the project and location where the cluster is enrolled in. Format: \"projects/{project}/locations/{location}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+parent}/bareMetalClusters:enroll", + "request": { + "$ref": "EnrollBareMetalClusterRequest" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "get": { + "description": "Gets details of a single bare metal Cluster.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.bareMetalClusters.get", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "Required. Name of the bare metal user cluster to get. Format: \"projects/{project}/locations/{location}/bareMetalClusters/{bare_metal_cluster}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+$", + "required": true, + "type": "string" + }, + "view": { + "description": "View for bare metal user cluster. When `BASIC` is specified, only the cluster resource name and admin cluster membership are returned. The default/unset value `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete cluster configuration details.", + "enum": [ + "CLUSTER_VIEW_UNSPECIFIED", + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "If the value is not set, the default `FULL` view is used.", + "Includes basic information of a cluster resource including cluster resource name and admin cluster membership.", + "Includes the complete configuration for bare metal cluster resource. This is the default value for GetBareMetalClusterRequest method." + ], + "location": "query", + "type": "string" + } + }, + "path": "v1/{+name}", + "response": { + "$ref": "BareMetalCluster" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "getIamPolicy": { + "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}:getIamPolicy", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.bareMetalClusters.getIamPolicy", + "parameterOrder": [ + "resource" + ], + "parameters": { + "options.requestedPolicyVersion": { + "description": "Optional. The maximum policy version that will be used to format the policy. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional role bindings must specify version 3. Policies with no conditional role bindings may specify any valid value or leave the field unset. The policy in the response might use the policy version that you specified, or it might use a lower policy version. For example, if you specify version 3, but the policy has no conditional role bindings, the response uses version 1. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).", + "format": "int32", + "location": "query", + "type": "integer" + }, + "resource": { + "description": "REQUIRED: The resource for which the policy is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+resource}:getIamPolicy", + "response": { + "$ref": "Policy" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "list": { + "description": "Lists bare metal clusters in a given project and location.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.bareMetalClusters.list", + "parameterOrder": [ + "parent" + ], + "parameters": { + "filter": { + "description": "A resource filtering expression following https://google.aip.dev/160. When non-empty, only resource's whose attributes field matches the filter are returned.", + "location": "query", + "type": "string" + }, + "pageSize": { + "description": "Requested page size. Server may return fewer items than requested. If unspecified, at most 50 clusters will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.", + "format": "int32", + "location": "query", + "type": "integer" + }, + "pageToken": { + "description": "A token identifying a page of results the server should return.", + "location": "query", + "type": "string" + }, + "parent": { + "description": "Required. The parent of the project and location where the clusters are listed in. Format: \"projects/{project}/locations/{location}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+$", + "required": true, + "type": "string" + }, + "view": { + "description": "View for bare metal Clusters. When `BASIC` is specified, only the cluster resource name and admin cluster membership are returned. The default/unset value `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete cluster configuration details.", + "enum": [ + "CLUSTER_VIEW_UNSPECIFIED", + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "If the value is not set, the default `FULL` view is used.", + "Includes basic information of a cluster resource including cluster resource name and admin cluster membership.", + "Includes the complete configuration for bare metal cluster resource. This is the default value for ListBareMetalClustersRequest method." + ], + "location": "query", + "type": "string" + } + }, + "path": "v1/{+parent}/bareMetalClusters", + "response": { + "$ref": "ListBareMetalClustersResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "patch": { + "description": "Updates the parameters of a single bare metal Cluster.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}", + "httpMethod": "PATCH", + "id": "gkeonprem.projects.locations.bareMetalClusters.patch", + "parameterOrder": [ + "name" + ], + "parameters": { + "allowMissing": { + "description": "If set to true, and the bare metal cluster is not found, the request will create a new bare metal cluster with the provided configuration. The user must have both create and update permission to call Update with allow_missing set to true.", + "location": "query", + "type": "boolean" + }, + "name": { + "description": "Immutable. The bare metal user cluster resource name.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+$", + "required": true, + "type": "string" + }, + "updateMask": { + "description": "Required. Field mask is used to specify the fields to be overwritten in the BareMetalCluster resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all populated fields in the BareMetalCluster message will be updated. Empty fields will be ignored unless a field mask is used.", + "format": "google-fieldmask", + "location": "query", + "type": "string" + }, + "validateOnly": { + "description": "Validate the request without actually doing any updates.", + "location": "query", + "type": "boolean" + } + }, + "path": "v1/{+name}", + "request": { + "$ref": "BareMetalCluster" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "queryVersionConfig": { + "description": "Queries the bare metal user cluster version config.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters:queryVersionConfig", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.bareMetalClusters.queryVersionConfig", + "parameterOrder": [ + "parent" + ], + "parameters": { + "createConfig.adminClusterMembership": { + "description": "The admin cluster membership. This is the full resource name of the admin cluster's fleet membership. Format: \"projects/{project}/locations/{location}/memberships/{membership}\"", + "location": "query", + "type": "string" + }, + "createConfig.adminClusterName": { + "description": "The admin cluster resource name. This is the full resource name of the admin cluster resource. Format: \"projects/{project}/locations/{location}/bareMetalAdminClusters/{bare_metal_admin_cluster}\"", + "location": "query", + "type": "string" + }, + "parent": { + "description": "Required. The parent of the project and location to query for version config. Format: \"projects/{project}/locations/{location}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+$", + "required": true, + "type": "string" + }, + "upgradeConfig.clusterName": { + "description": "The user cluster resource name. This is the full resource name of the user cluster resource. Format: \"projects/{project}/locations/{location}/bareMetalClusters/{bare_metal_cluster}\"", + "location": "query", + "type": "string" + } + }, + "path": "v1/{+parent}/bareMetalClusters:queryVersionConfig", + "response": { + "$ref": "QueryBareMetalVersionConfigResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "setIamPolicy": { + "description": "Sets the access control policy on the specified resource. Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}:setIamPolicy", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.bareMetalClusters.setIamPolicy", + "parameterOrder": [ + "resource" + ], + "parameters": { + "resource": { + "description": "REQUIRED: The resource for which the policy is being specified. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+resource}:setIamPolicy", + "request": { + "$ref": "SetIamPolicyRequest" + }, + "response": { + "$ref": "Policy" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "testIamPermissions": { + "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not for authorization checking. This operation may \"fail open\" without warning.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}:testIamPermissions", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.bareMetalClusters.testIamPermissions", + "parameterOrder": [ + "resource" + ], + "parameters": { + "resource": { + "description": "REQUIRED: The resource for which the policy detail is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+resource}:testIamPermissions", + "request": { + "$ref": "TestIamPermissionsRequest" + }, + "response": { + "$ref": "TestIamPermissionsResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "unenroll": { + "description": "Unenrolls an existing bare metal user cluster and its node pools from the Anthos On-Prem API within a given project and location. Unenrollment removes the Cloud reference to the cluster without modifying the underlying OnPrem Resources. Clusters and node pools will continue to run; however, they will no longer be accessible through the Anthos On-Prem API or its clients.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}:unenroll", + "httpMethod": "DELETE", + "id": "gkeonprem.projects.locations.bareMetalClusters.unenroll", + "parameterOrder": [ + "name" + ], + "parameters": { + "allowMissing": { + "description": "If set to true, and the bare metal cluster is not found, the request will succeed but no action will be taken on the server and return a completed LRO.", + "location": "query", + "type": "boolean" + }, + "etag": { + "description": "The current etag of the bare metal Cluster. If an etag is provided and does not match the current etag of the cluster, deletion will be blocked and an ABORTED error will be returned.", + "location": "query", + "type": "string" + }, + "force": { + "description": "This is required if the cluster has any associated node pools. When set, any child node pools will also be unenrolled.", + "location": "query", + "type": "boolean" + }, + "name": { + "description": "Required. Name of the bare metal user cluster to be unenrolled. Format: \"projects/{project}/locations/{location}/bareMetalClusters/{cluster}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+$", + "required": true, + "type": "string" + }, + "validateOnly": { + "description": "Validate the request without actually doing any updates.", + "location": "query", + "type": "boolean" + } + }, + "path": "v1/{+name}:unenroll", + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + }, + "resources": { + "bareMetalNodePools": { + "methods": { + "create": { + "description": "Creates a new bare metal node pool in a given project, location and Bare Metal cluster.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.create", + "parameterOrder": [ + "parent" + ], + "parameters": { + "bareMetalNodePoolId": { + "description": "The ID to use for the node pool, which will become the final component of the node pool's resource name. This value must be up to 63 characters, and valid characters are /a-z-/. The value must not be permitted to be a UUID (or UUID-like: anything matching /^[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$/i).", + "location": "query", + "type": "string" + }, + "parent": { + "description": "Required. The parent resource where this node pool will be created. projects/{project}/locations/{location}/bareMetalClusters/{cluster}", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+$", + "required": true, + "type": "string" + }, + "validateOnly": { + "description": "If set, only validate the request, but do not actually create the node pool.", + "location": "query", + "type": "boolean" + } + }, + "path": "v1/{+parent}/bareMetalNodePools", + "request": { + "$ref": "BareMetalNodePool" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "delete": { + "description": "Deletes a single bare metal node pool.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools/{bareMetalNodePoolsId}", + "httpMethod": "DELETE", + "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.delete", + "parameterOrder": [ + "name" + ], + "parameters": { + "allowMissing": { + "description": "If set to true, and the bare metal node pool is not found, the request will succeed but no action will be taken on the server and return a completed LRO.", + "location": "query", + "type": "boolean" + }, + "etag": { + "description": "The current etag of the BareMetalNodePool. If an etag is provided and does not match the current etag of the node pool, deletion will be blocked and an ABORTED error will be returned.", + "location": "query", + "type": "string" + }, + "ignoreErrors": { + "description": "If set to true, the deletion of a bare metal node pool resource will succeed even if errors occur during deletion. This parameter can be used when you want to delete GCP's node pool resource and you've already deleted the on-prem admin cluster that hosted your node pool. WARNING: Using this parameter when your user cluster still exists may result in a deleted GCP node pool but an existing on-prem node pool.", + "location": "query", + "type": "boolean" + }, + "name": { + "description": "Required. The name of the node pool to delete. Format: projects/{project}/locations/{location}/bareMetalClusters/{cluster}/bareMetalNodePools/{nodepool}", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+/bareMetalNodePools/[^/]+$", + "required": true, + "type": "string" + }, + "validateOnly": { + "description": "If set, only validate the request, but do not actually delete the node pool.", + "location": "query", + "type": "boolean" + } + }, + "path": "v1/{+name}", + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "enroll": { + "description": "Enrolls an existing bare metal node pool to the Anthos On-Prem API within a given project and location. Through enrollment, an existing node pool will become Anthos On-Prem API managed. The corresponding GCP resources will be created.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools:enroll", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.enroll", + "parameterOrder": [ + "parent" + ], + "parameters": { + "parent": { + "description": "Required. The parent resource where this node pool will be created. projects/{project}/locations/{location}/bareMetalClusters/{cluster}", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+parent}/bareMetalNodePools:enroll", + "request": { + "$ref": "EnrollBareMetalNodePoolRequest" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "get": { + "description": "Gets details of a single bare metal node pool.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools/{bareMetalNodePoolsId}", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.get", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "Required. The name of the node pool to retrieve. projects/{project}/locations/{location}/bareMetalClusters/{cluster}/bareMetalNodePools/{nodepool}", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+/bareMetalNodePools/[^/]+$", + "required": true, + "type": "string" + }, + "view": { + "description": "View for bare metal node pool. When `BASIC` is specified, only the node pool resource name is returned. The default/unset value `NODE_POOL_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete node pool configuration details.", + "enum": [ + "NODE_POOL_VIEW_UNSPECIFIED", + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "If the value is not set, the default `FULL` view is used.", + "Includes basic information of a node pool resource including node pool resource name.", + "Includes the complete configuration for bare metal node pool resource. This is the default value for GetBareMetalNodePoolRequest method." + ], + "location": "query", + "type": "string" + } + }, + "path": "v1/{+name}", + "response": { + "$ref": "BareMetalNodePool" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "getIamPolicy": { + "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools/{bareMetalNodePoolsId}:getIamPolicy", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.getIamPolicy", + "parameterOrder": [ + "resource" + ], + "parameters": { + "options.requestedPolicyVersion": { + "description": "Optional. The maximum policy version that will be used to format the policy. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional role bindings must specify version 3. Policies with no conditional role bindings may specify any valid value or leave the field unset. The policy in the response might use the policy version that you specified, or it might use a lower policy version. For example, if you specify version 3, but the policy has no conditional role bindings, the response uses version 1. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).", + "format": "int32", + "location": "query", + "type": "integer" + }, + "resource": { + "description": "REQUIRED: The resource for which the policy is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+/bareMetalNodePools/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+resource}:getIamPolicy", + "response": { + "$ref": "Policy" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "list": { + "description": "Lists bare metal node pools in a given project, location and bare metal cluster.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.list", + "parameterOrder": [ + "parent" + ], + "parameters": { + "pageSize": { + "description": "The maximum number of node pools to return. The service may return fewer than this value. If unspecified, at most 50 node pools will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.", + "format": "int32", + "location": "query", + "type": "integer" + }, + "pageToken": { + "description": "A page token, received from a previous `ListBareMetalNodePools` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListBareMetalNodePools` must match the call that provided the page token.", + "location": "query", + "type": "string" + }, + "parent": { + "description": "Required. The parent, which owns this collection of node pools. Format: projects/{project}/locations/{location}/bareMetalClusters/{bareMetalCluster}", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+$", + "required": true, + "type": "string" + }, + "view": { + "description": "View for bare metal node pools. When `BASIC` is specified, only the node pool resource name is returned. The default/unset value `NODE_POOL_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete node pool configuration details.", + "enum": [ + "NODE_POOL_VIEW_UNSPECIFIED", + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "If the value is not set, the default `FULL` view is used.", + "Includes basic information of a node pool resource including node pool resource name.", + "Includes the complete configuration for bare metal node pool resource. This is the default value for ListBareMetalNodePoolsRequest method." + ], + "location": "query", + "type": "string" + } + }, + "path": "v1/{+parent}/bareMetalNodePools", + "response": { + "$ref": "ListBareMetalNodePoolsResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "patch": { + "description": "Updates the parameters of a single bare metal node pool.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools/{bareMetalNodePoolsId}", + "httpMethod": "PATCH", + "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.patch", + "parameterOrder": [ + "name" + ], + "parameters": { + "allowMissing": { + "description": "If set to true, and the bare metal node pool is not found, the request will create a new bare metal node pool with the provided configuration. The user must have both create and update permission to call Update with allow_missing set to true.", + "location": "query", + "type": "boolean" + }, + "name": { + "description": "Immutable. The bare metal node pool resource name.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+/bareMetalNodePools/[^/]+$", + "required": true, + "type": "string" + }, + "updateMask": { + "description": "Required. Field mask is used to specify the fields to be overwritten in the BareMetalNodePool resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all populated fields in the BareMetalNodePool message will be updated. Empty fields will be ignored unless a field mask is used.", + "format": "google-fieldmask", + "location": "query", + "type": "string" + }, + "validateOnly": { + "description": "Validate the request without actually doing any updates.", + "location": "query", + "type": "boolean" + } + }, + "path": "v1/{+name}", + "request": { + "$ref": "BareMetalNodePool" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "setIamPolicy": { + "description": "Sets the access control policy on the specified resource. Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools/{bareMetalNodePoolsId}:setIamPolicy", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.setIamPolicy", + "parameterOrder": [ + "resource" + ], + "parameters": { + "resource": { + "description": "REQUIRED: The resource for which the policy is being specified. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+/bareMetalNodePools/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+resource}:setIamPolicy", + "request": { + "$ref": "SetIamPolicyRequest" + }, + "response": { + "$ref": "Policy" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "testIamPermissions": { + "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not for authorization checking. This operation may \"fail open\" without warning.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools/{bareMetalNodePoolsId}:testIamPermissions", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.testIamPermissions", + "parameterOrder": [ + "resource" + ], + "parameters": { + "resource": { + "description": "REQUIRED: The resource for which the policy detail is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+/bareMetalNodePools/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+resource}:testIamPermissions", + "request": { + "$ref": "TestIamPermissionsRequest" + }, + "response": { + "$ref": "TestIamPermissionsResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "unenroll": { + "description": "Unenrolls a bare metal node pool from Anthos On-Prem API.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools/{bareMetalNodePoolsId}:unenroll", + "httpMethod": "DELETE", + "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.unenroll", + "parameterOrder": [ + "name" + ], + "parameters": { + "allowMissing": { + "description": "If set to true, and the bare metal node pool is not found, the request will succeed but no action will be taken on the server and return a completed LRO.", + "location": "query", + "type": "boolean" + }, + "etag": { + "description": "The current etag of the bare metal node pool. If an etag is provided and does not match the current etag of node pool, deletion will be blocked and an ABORTED error will be returned.", + "location": "query", + "type": "string" + }, + "name": { + "description": "Required. The name of the node pool to unenroll. Format: projects/{project}/locations/{location}/bareMetalClusters/{cluster}/bareMetalNodePools/{nodepool}", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+/bareMetalNodePools/[^/]+$", + "required": true, + "type": "string" + }, + "validateOnly": { + "description": "If set, only validate the request, but do not actually unenroll the node pool.", + "location": "query", + "type": "boolean" + } + }, + "path": "v1/{+name}:unenroll", + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + }, + "resources": { + "operations": { + "methods": { + "get": { + "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools/{bareMetalNodePoolsId}/operations/{operationsId}", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.operations.get", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "The name of the operation resource.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+/bareMetalNodePools/[^/]+/operations/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+name}", + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "list": { + "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools/{bareMetalNodePoolsId}/operations", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.operations.list", + "parameterOrder": [ + "name" + ], + "parameters": { + "filter": { + "description": "The standard list filter.", + "location": "query", + "type": "string" + }, + "name": { + "description": "The name of the operation's parent resource.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+/bareMetalNodePools/[^/]+$", + "required": true, + "type": "string" + }, + "pageSize": { + "description": "The standard list page size.", + "format": "int32", + "location": "query", + "type": "integer" + }, + "pageToken": { + "description": "The standard list page token.", + "location": "query", + "type": "string" + } + }, + "path": "v1/{+name}/operations", + "response": { + "$ref": "ListOperationsResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + } + } + } + }, + "operations": { + "methods": { + "get": { + "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/operations/{operationsId}", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.bareMetalClusters.operations.get", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "The name of the operation resource.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+/operations/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+name}", + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "list": { + "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/operations", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.bareMetalClusters.operations.list", + "parameterOrder": [ + "name" + ], + "parameters": { + "filter": { + "description": "The standard list filter.", + "location": "query", + "type": "string" + }, + "name": { + "description": "The name of the operation's parent resource.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+$", + "required": true, + "type": "string" + }, + "pageSize": { + "description": "The standard list page size.", + "format": "int32", + "location": "query", + "type": "integer" + }, + "pageToken": { + "description": "The standard list page token.", + "location": "query", + "type": "string" + } + }, + "path": "v1/{+name}/operations", + "response": { + "$ref": "ListOperationsResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + } + } + } + }, + "operations": { + "methods": { + "cancel": { + "description": "Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an operation with an Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}:cancel", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.operations.cancel", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "The name of the operation resource to be cancelled.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+name}:cancel", + "request": { + "$ref": "CancelOperationRequest" + }, + "response": { + "$ref": "Empty" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "delete": { + "description": "Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}", + "httpMethod": "DELETE", + "id": "gkeonprem.projects.locations.operations.delete", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "The name of the operation resource to be deleted.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+name}", + "response": { + "$ref": "Empty" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "get": { + "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.operations.get", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "The name of the operation resource.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+name}", + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "list": { + "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.operations.list", + "parameterOrder": [ + "name" + ], + "parameters": { + "filter": { + "description": "The standard list filter.", + "location": "query", + "type": "string" + }, + "name": { + "description": "The name of the operation's parent resource.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+$", + "required": true, + "type": "string" + }, + "pageSize": { + "description": "The standard list page size.", + "format": "int32", + "location": "query", + "type": "integer" + }, + "pageToken": { + "description": "The standard list page token.", + "location": "query", + "type": "string" + } + }, + "path": "v1/{+name}/operations", + "response": { + "$ref": "ListOperationsResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + } + }, + "vmwareAdminClusters": { + "methods": { + "enroll": { + "description": "Enrolls an existing VMware admin cluster to the Anthos On-Prem API within a given project and location. Through enrollment, an existing admin cluster will become Anthos On-Prem API managed. The corresponding GCP resources will be created and all future modifications to the cluster will be expected to be performed through the API.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareAdminClusters:enroll", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.vmwareAdminClusters.enroll", + "parameterOrder": [ + "parent" + ], + "parameters": { + "parent": { + "description": "Required. The parent of the project and location where the cluster is enrolled in. Format: \"projects/{project}/locations/{location}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+parent}/vmwareAdminClusters:enroll", + "request": { + "$ref": "EnrollVmwareAdminClusterRequest" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "get": { + "description": "Gets details of a single VMware admin cluster.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareAdminClusters/{vmwareAdminClustersId}", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.vmwareAdminClusters.get", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "Required. Name of the VMware admin cluster to be returned. Format: \"projects/{project}/locations/{location}/vmwareAdminClusters/{vmware_admin_cluster}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareAdminClusters/[^/]+$", + "required": true, + "type": "string" + }, + "view": { + "description": "View for VMware admin cluster. When `BASIC` is specified, only the cluster resource name and membership are returned. The default/unset value `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete cluster configuration details.", + "enum": [ + "CLUSTER_VIEW_UNSPECIFIED", + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "If the value is not set, the default `FULL` view is used.", + "Includes basic information of a cluster resource including cluster resource name and membership.", + "Includes the complete configuration for VMware admin cluster resource. This is the default value for GetVmwareAdminClusterRequest method." + ], + "location": "query", + "type": "string" + } + }, + "path": "v1/{+name}", + "response": { + "$ref": "VmwareAdminCluster" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "getIamPolicy": { + "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareAdminClusters/{vmwareAdminClustersId}:getIamPolicy", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.vmwareAdminClusters.getIamPolicy", + "parameterOrder": [ + "resource" + ], + "parameters": { + "options.requestedPolicyVersion": { + "description": "Optional. The maximum policy version that will be used to format the policy. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional role bindings must specify version 3. Policies with no conditional role bindings may specify any valid value or leave the field unset. The policy in the response might use the policy version that you specified, or it might use a lower policy version. For example, if you specify version 3, but the policy has no conditional role bindings, the response uses version 1. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).", + "format": "int32", + "location": "query", + "type": "integer" + }, + "resource": { + "description": "REQUIRED: The resource for which the policy is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareAdminClusters/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+resource}:getIamPolicy", + "response": { + "$ref": "Policy" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "list": { + "description": "Lists VMware admin clusters in a given project and location.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareAdminClusters", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.vmwareAdminClusters.list", + "parameterOrder": [ + "parent" + ], + "parameters": { + "pageSize": { + "description": "Requested page size. Server may return fewer items than requested. If unspecified, at most 50 clusters will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.", + "format": "int32", + "location": "query", + "type": "integer" + }, + "pageToken": { + "description": "A token identifying a page of results the server should return.", + "location": "query", + "type": "string" + }, + "parent": { + "description": "Required. The parent of the project and location where the clusters are listed in. Format: \"projects/{project}/locations/{location}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+$", + "required": true, + "type": "string" + }, + "view": { + "description": "View for VMware admin clusters. When `BASIC` is specified, only the admin cluster resource name and membership are returned. The default/unset value `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete admin cluster configuration details.", + "enum": [ + "CLUSTER_VIEW_UNSPECIFIED", + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "If the value is not set, the default `FULL` view is used.", + "Includes basic information of a admin cluster resource including admin cluster resource name and membership.", + "Includes the complete configuration for bare metal admin cluster resource. This is the default value for ListVmwareAdminClustersRequest method." + ], + "location": "query", + "type": "string" + } + }, + "path": "v1/{+parent}/vmwareAdminClusters", + "response": { + "$ref": "ListVmwareAdminClustersResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "patch": { + "description": "Updates the parameters of a single VMware admin cluster.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareAdminClusters/{vmwareAdminClustersId}", + "httpMethod": "PATCH", + "id": "gkeonprem.projects.locations.vmwareAdminClusters.patch", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "Immutable. The VMware admin cluster resource name.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareAdminClusters/[^/]+$", + "required": true, + "type": "string" + }, + "updateMask": { + "description": "Required. Field mask is used to specify the fields to be overwritten in the VMwareAdminCluster resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all populated fields in the VmwareAdminCluster message will be updated. Empty fields will be ignored unless a field mask is used.", + "format": "google-fieldmask", + "location": "query", + "type": "string" + }, + "validateOnly": { + "description": "Validate the request without actually doing any updates.", + "location": "query", + "type": "boolean" + } + }, + "path": "v1/{+name}", + "request": { + "$ref": "VmwareAdminCluster" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "setIamPolicy": { + "description": "Sets the access control policy on the specified resource. Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareAdminClusters/{vmwareAdminClustersId}:setIamPolicy", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.vmwareAdminClusters.setIamPolicy", + "parameterOrder": [ + "resource" + ], + "parameters": { + "resource": { + "description": "REQUIRED: The resource for which the policy is being specified. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareAdminClusters/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+resource}:setIamPolicy", + "request": { + "$ref": "SetIamPolicyRequest" + }, + "response": { + "$ref": "Policy" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "testIamPermissions": { + "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not for authorization checking. This operation may \"fail open\" without warning.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareAdminClusters/{vmwareAdminClustersId}:testIamPermissions", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.vmwareAdminClusters.testIamPermissions", + "parameterOrder": [ + "resource" + ], + "parameters": { + "resource": { + "description": "REQUIRED: The resource for which the policy detail is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareAdminClusters/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+resource}:testIamPermissions", + "request": { + "$ref": "TestIamPermissionsRequest" + }, + "response": { + "$ref": "TestIamPermissionsResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "unenroll": { + "description": "Unenrolls an existing VMware admin cluster from the Anthos On-Prem API within a given project and location. Unenrollment removes the Cloud reference to the cluster without modifying the underlying OnPrem Resources. Clusters will continue to run; however, they will no longer be accessible through the Anthos On-Prem API or its clients.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareAdminClusters/{vmwareAdminClustersId}:unenroll", + "httpMethod": "DELETE", + "id": "gkeonprem.projects.locations.vmwareAdminClusters.unenroll", + "parameterOrder": [ + "name" + ], + "parameters": { + "allowMissing": { + "description": "If set to true, and the VMware admin cluster is not found, the request will succeed but no action will be taken on the server and return a completed LRO.", + "location": "query", + "type": "boolean" + }, + "etag": { + "description": "The current etag of the VMware admin cluster. If an etag is provided and does not match the current etag of the cluster, deletion will be blocked and an ABORTED error will be returned.", + "location": "query", + "type": "string" + }, + "name": { + "description": "Required. Name of the VMware admin cluster to be unenrolled. Format: \"projects/{project}/locations/{location}/vmwareAdminClusters/{cluster}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareAdminClusters/[^/]+$", + "required": true, + "type": "string" + }, + "validateOnly": { + "description": "Validate the request without actually doing any updates.", + "location": "query", + "type": "boolean" + } + }, + "path": "v1/{+name}:unenroll", + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + }, + "resources": { + "operations": { + "methods": { + "get": { + "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareAdminClusters/{vmwareAdminClustersId}/operations/{operationsId}", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.vmwareAdminClusters.operations.get", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "The name of the operation resource.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareAdminClusters/[^/]+/operations/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+name}", + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "list": { + "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareAdminClusters/{vmwareAdminClustersId}/operations", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.vmwareAdminClusters.operations.list", + "parameterOrder": [ + "name" + ], + "parameters": { + "filter": { + "description": "The standard list filter.", + "location": "query", + "type": "string" + }, + "name": { + "description": "The name of the operation's parent resource.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareAdminClusters/[^/]+$", + "required": true, + "type": "string" + }, + "pageSize": { + "description": "The standard list page size.", + "format": "int32", + "location": "query", + "type": "integer" + }, + "pageToken": { + "description": "The standard list page token.", + "location": "query", + "type": "string" + } + }, + "path": "v1/{+name}/operations", + "response": { + "$ref": "ListOperationsResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + } + } + } + }, + "vmwareClusters": { + "methods": { + "create": { + "description": "Creates a new VMware user cluster in a given project and location.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.vmwareClusters.create", + "parameterOrder": [ + "parent" + ], + "parameters": { + "parent": { + "description": "Required. The parent of the project and location where this cluster is created in. Format: \"projects/{project}/locations/{location}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+$", + "required": true, + "type": "string" + }, + "validateOnly": { + "description": "Validate the request without actually doing any updates.", + "location": "query", + "type": "boolean" + }, + "vmwareClusterId": { + "description": "User provided identifier that is used as part of the resource name; This value must be up to 40 characters and follow RFC-1123 (https://tools.ietf.org/html/rfc1123) format.", + "location": "query", + "type": "string" + } + }, + "path": "v1/{+parent}/vmwareClusters", + "request": { + "$ref": "VmwareCluster" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "delete": { + "description": "Deletes a single VMware Cluster.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}", + "httpMethod": "DELETE", + "id": "gkeonprem.projects.locations.vmwareClusters.delete", + "parameterOrder": [ + "name" + ], + "parameters": { + "allowMissing": { + "description": "If set to true, and the VMware cluster is not found, the request will succeed but no action will be taken on the server and return a completed LRO.", + "location": "query", + "type": "boolean" + }, + "etag": { + "description": "The current etag of the VMware cluster. If an etag is provided and does not match the current etag of the cluster, deletion will be blocked and an ABORTED error will be returned.", + "location": "query", + "type": "string" + }, + "force": { + "description": "If set to true, any node pools from the cluster will also be deleted.", + "location": "query", + "type": "boolean" + }, + "ignoreErrors": { + "description": "If set to true, the deletion of a VMware user cluster resource will succeed even if errors occur during deletion. This parameter can be used when you want to delete GCP's cluster resource and the on-prem admin cluster that hosts your user cluster is disconnected / unreachable or deleted. WARNING: Using this parameter when your user cluster still exists may result in a deleted GCP user cluster but an existing on-prem user cluster.", + "location": "query", + "type": "boolean" + }, + "name": { + "description": "Required. Name of the VMware user cluster to be deleted. Format: \"projects/{project}/locations/{location}/vmwareClusters/{vmware_cluster}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+$", + "required": true, + "type": "string" + }, + "validateOnly": { + "description": "Validate the request without actually doing any updates.", + "location": "query", + "type": "boolean" + } + }, + "path": "v1/{+name}", + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "enroll": { + "description": "Enrolls an existing VMware user cluster and its node pools to the Anthos On-Prem API within a given project and location. Through enrollment, an existing cluster will become Anthos On-Prem API managed. The corresponding GCP resources will be created and all future modifications to the cluster and/or its node pools will be expected to be performed through the API.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters:enroll", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.vmwareClusters.enroll", + "parameterOrder": [ + "parent" + ], + "parameters": { + "parent": { + "description": "Required. The parent of the project and location where the cluster is Enrolled in. Format: \"projects/{project}/locations/{location}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+parent}/vmwareClusters:enroll", + "request": { + "$ref": "EnrollVmwareClusterRequest" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "get": { + "description": "Gets details of a single VMware Cluster.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.vmwareClusters.get", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "Required. Name of the VMware user cluster to be returned. Format: \"projects/{project}/locations/{location}/vmwareClusters/{vmware_cluster}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+$", + "required": true, + "type": "string" + }, + "view": { + "description": "View for VMware user cluster. When `BASIC` is specified, only the cluster resource name and admin cluster membership are returned. The default/unset value `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete cluster configuration details.", + "enum": [ + "CLUSTER_VIEW_UNSPECIFIED", + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "If the value is not set, the default `FULL` view is used.", + "Includes basic information of a cluster resource including cluster resource name and admin cluster membership.", + "Includes the complete configuration for VMware cluster resource. This is the default value for GetVmwareClusterRequest method." + ], + "location": "query", + "type": "string" + } + }, + "path": "v1/{+name}", + "response": { + "$ref": "VmwareCluster" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "getIamPolicy": { + "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}:getIamPolicy", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.vmwareClusters.getIamPolicy", + "parameterOrder": [ + "resource" + ], + "parameters": { + "options.requestedPolicyVersion": { + "description": "Optional. The maximum policy version that will be used to format the policy. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional role bindings must specify version 3. Policies with no conditional role bindings may specify any valid value or leave the field unset. The policy in the response might use the policy version that you specified, or it might use a lower policy version. For example, if you specify version 3, but the policy has no conditional role bindings, the response uses version 1. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).", + "format": "int32", + "location": "query", + "type": "integer" + }, + "resource": { + "description": "REQUIRED: The resource for which the policy is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+resource}:getIamPolicy", + "response": { + "$ref": "Policy" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "list": { + "description": "Lists VMware Clusters in a given project and location.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.vmwareClusters.list", + "parameterOrder": [ + "parent" + ], + "parameters": { + "filter": { + "description": "A resource filtering expression following https://google.aip.dev/160. When non-empty, only resource's whose attributes field matches the filter are returned.", + "location": "query", + "type": "string" + }, + "pageSize": { + "description": "Requested page size. Server may return fewer items than requested. If unspecified, at most 50 clusters will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.", + "format": "int32", + "location": "query", + "type": "integer" + }, + "pageToken": { + "description": "A token identifying a page of results the server should return.", + "location": "query", + "type": "string" + }, + "parent": { + "description": "Required. The parent of the project and location where the clusters are listed in. Format: \"projects/{project}/locations/{location}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+$", + "required": true, + "type": "string" + }, + "view": { + "description": "View for VMware clusters. When `BASIC` is specified, only the cluster resource name and admin cluster membership are returned. The default/unset value `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete cluster configuration details.", + "enum": [ + "CLUSTER_VIEW_UNSPECIFIED", + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "If the value is not set, the default `FULL` view is used.", + "Includes basic information of a cluster resource including cluster resource name and admin cluster membership.", + "Includes the complete configuration for VMware cluster resource. This is the default value for ListVmwareClustersRequest method." + ], + "location": "query", + "type": "string" + } + }, + "path": "v1/{+parent}/vmwareClusters", + "response": { + "$ref": "ListVmwareClustersResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "patch": { + "description": "Updates the parameters of a single VMware cluster.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}", + "httpMethod": "PATCH", + "id": "gkeonprem.projects.locations.vmwareClusters.patch", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "Immutable. The VMware user cluster resource name.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+$", + "required": true, + "type": "string" + }, + "updateMask": { + "description": "Required. Field mask is used to specify the fields to be overwritten in the VMwareCluster resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all populated fields in the VmwareCluster message will be updated. Empty fields will be ignored unless a field mask is used.", + "format": "google-fieldmask", + "location": "query", + "type": "string" + }, + "validateOnly": { + "description": "Validate the request without actually doing any updates.", + "location": "query", + "type": "boolean" + } + }, + "path": "v1/{+name}", + "request": { + "$ref": "VmwareCluster" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "queryVersionConfig": { + "description": "Queries the VMware user cluster version config.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters:queryVersionConfig", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.vmwareClusters.queryVersionConfig", + "parameterOrder": [ + "parent" + ], + "parameters": { + "createConfig.adminClusterMembership": { + "description": "The admin cluster membership. This is the full resource name of the admin cluster's fleet membership. Format: \"projects/{project}/locations/{location}/memberships/{membership}\"", + "location": "query", + "type": "string" + }, + "createConfig.adminClusterName": { + "description": "The admin cluster resource name. This is the full resource name of the admin cluster resource. Format: \"projects/{project}/locations/{location}/vmwareAdminClusters/{vmware_admin_cluster}\"", + "location": "query", + "type": "string" + }, + "parent": { + "description": "Required. The parent of the project and location to query for version config. Format: \"projects/{project}/locations/{location}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+$", + "required": true, + "type": "string" + }, + "upgradeConfig.clusterName": { + "description": "The user cluster resource name. This is the full resource name of the user cluster resource. Format: \"projects/{project}/locations/{location}/vmwareClusters/{vmware_cluster}\"", + "location": "query", + "type": "string" + } + }, + "path": "v1/{+parent}/vmwareClusters:queryVersionConfig", + "response": { + "$ref": "QueryVmwareVersionConfigResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "setIamPolicy": { + "description": "Sets the access control policy on the specified resource. Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}:setIamPolicy", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.vmwareClusters.setIamPolicy", + "parameterOrder": [ + "resource" + ], + "parameters": { + "resource": { + "description": "REQUIRED: The resource for which the policy is being specified. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+resource}:setIamPolicy", + "request": { + "$ref": "SetIamPolicyRequest" + }, + "response": { + "$ref": "Policy" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "testIamPermissions": { + "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not for authorization checking. This operation may \"fail open\" without warning.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}:testIamPermissions", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.vmwareClusters.testIamPermissions", + "parameterOrder": [ + "resource" + ], + "parameters": { + "resource": { + "description": "REQUIRED: The resource for which the policy detail is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+resource}:testIamPermissions", + "request": { + "$ref": "TestIamPermissionsRequest" + }, + "response": { + "$ref": "TestIamPermissionsResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "unenroll": { + "description": "Unenrolls an existing VMware user cluster and its node pools from the Anthos On-Prem API within a given project and location. Unenrollment removes the Cloud reference to the cluster without modifying the underlying OnPrem Resources. Clusters and node pools will continue to run; however, they will no longer be accessible through the Anthos On-Prem API or UI.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}:unenroll", + "httpMethod": "DELETE", + "id": "gkeonprem.projects.locations.vmwareClusters.unenroll", + "parameterOrder": [ + "name" + ], + "parameters": { + "allowMissing": { + "description": "If set to true, and the VMware cluster is not found, the request will succeed but no action will be taken on the server and return a completed LRO.", + "location": "query", + "type": "boolean" + }, + "etag": { + "description": "The current etag of the VMware Cluster. If an etag is provided and does not match the current etag of the cluster, deletion will be blocked and an ABORTED error will be returned.", + "location": "query", + "type": "string" + }, + "force": { + "description": "This is required if the cluster has any associated node pools. When set, any child node pools will also be unenrolled.", + "location": "query", + "type": "boolean" + }, + "name": { + "description": "Required. Name of the VMware user cluster to be unenrolled. Format: \"projects/{project}/locations/{location}/vmwareClusters/{vmware_cluster}\"", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+$", + "required": true, + "type": "string" + }, + "validateOnly": { + "description": "Validate the request without actually doing any updates.", + "location": "query", + "type": "boolean" + } + }, + "path": "v1/{+name}:unenroll", + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + }, + "resources": { + "operations": { + "methods": { + "get": { + "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/operations/{operationsId}", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.vmwareClusters.operations.get", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "The name of the operation resource.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+/operations/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+name}", + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "list": { + "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/operations", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.vmwareClusters.operations.list", + "parameterOrder": [ + "name" + ], + "parameters": { + "filter": { + "description": "The standard list filter.", + "location": "query", + "type": "string" + }, + "name": { + "description": "The name of the operation's parent resource.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+$", + "required": true, + "type": "string" + }, + "pageSize": { + "description": "The standard list page size.", + "format": "int32", + "location": "query", + "type": "integer" + }, + "pageToken": { + "description": "The standard list page token.", + "location": "query", + "type": "string" + } + }, + "path": "v1/{+name}/operations", + "response": { + "$ref": "ListOperationsResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + } + }, + "vmwareNodePools": { + "methods": { + "create": { + "description": "Creates a new VMware node pool in a given project, location and VMWare cluster.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.create", + "parameterOrder": [ + "parent" + ], + "parameters": { + "parent": { + "description": "Required. The parent resource where this node pool will be created. projects/{project}/locations/{location}/vmwareClusters/{cluster}", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+$", + "required": true, + "type": "string" + }, + "validateOnly": { + "description": "If set, only validate the request, but do not actually create the node pool.", + "location": "query", + "type": "boolean" + }, + "vmwareNodePoolId": { + "description": "The ID to use for the node pool, which will become the final component of the node pool's resource name. This value must be up to 40 characters and follow RFC-1123 (https://tools.ietf.org/html/rfc1123) format. The value must not be permitted to be a UUID (or UUID-like: anything matching /^[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$/i).", + "location": "query", + "type": "string" + } + }, + "path": "v1/{+parent}/vmwareNodePools", + "request": { + "$ref": "VmwareNodePool" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "delete": { + "description": "Deletes a single VMware node pool.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools/{vmwareNodePoolsId}", + "httpMethod": "DELETE", + "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.delete", + "parameterOrder": [ + "name" + ], + "parameters": { + "allowMissing": { + "description": "If set to true, and the VMware node pool is not found, the request will succeed but no action will be taken on the server and return a completed LRO.", + "location": "query", + "type": "boolean" + }, + "etag": { + "description": "The current etag of the VmwareNodePool. If an etag is provided and does not match the current etag of the node pool, deletion will be blocked and an ABORTED error will be returned.", + "location": "query", + "type": "string" + }, + "ignoreErrors": { + "description": "If set to true, the deletion of a VMware node pool resource will succeed even if errors occur during deletion. This parameter can be used when you want to delete GCP's node pool resource and you've already deleted the on-prem admin cluster that hosted your node pool. WARNING: Using this parameter when your user cluster still exists may result in a deleted GCP node pool but an existing on-prem node pool.", + "location": "query", + "type": "boolean" + }, + "name": { + "description": "Required. The name of the node pool to delete. Format: projects/{project}/locations/{location}/vmwareClusters/{cluster}/vmwareNodePools/{nodepool}", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+/vmwareNodePools/[^/]+$", + "required": true, + "type": "string" + }, + "validateOnly": { + "description": "If set, only validate the request, but do not actually delete the node pool.", + "location": "query", + "type": "boolean" + } + }, + "path": "v1/{+name}", + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "enroll": { + "description": "Enrolls a VMware node pool to Anthos On-Prem API", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools:enroll", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.enroll", + "parameterOrder": [ + "parent" + ], + "parameters": { + "parent": { + "description": "Required. The parent resource where the node pool is enrolled in.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+parent}/vmwareNodePools:enroll", + "request": { + "$ref": "EnrollVmwareNodePoolRequest" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "get": { + "description": "Gets details of a single VMware node pool.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools/{vmwareNodePoolsId}", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.get", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "Required. The name of the node pool to retrieve. projects/{project}/locations/{location}/vmwareClusters/{cluster}/vmwareNodePools/{nodepool}", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+/vmwareNodePools/[^/]+$", + "required": true, + "type": "string" + }, + "view": { + "description": "View for VMware node pool. When `BASIC` is specified, only the node pool resource name is returned. The default/unset value `NODE_POOL_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete node pool configuration details.", + "enum": [ + "NODE_POOL_VIEW_UNSPECIFIED", + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "If the value is not set, the default `FULL` view is used.", + "Includes basic information of a node pool resource including node pool resource name.", + "Includes the complete configuration for VMware node pool resource. This is the default value for GetVmwareNodePoolRequest method." + ], + "location": "query", + "type": "string" + } + }, + "path": "v1/{+name}", + "response": { + "$ref": "VmwareNodePool" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "getIamPolicy": { + "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools/{vmwareNodePoolsId}:getIamPolicy", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.getIamPolicy", + "parameterOrder": [ + "resource" + ], + "parameters": { + "options.requestedPolicyVersion": { + "description": "Optional. The maximum policy version that will be used to format the policy. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional role bindings must specify version 3. Policies with no conditional role bindings may specify any valid value or leave the field unset. The policy in the response might use the policy version that you specified, or it might use a lower policy version. For example, if you specify version 3, but the policy has no conditional role bindings, the response uses version 1. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).", + "format": "int32", + "location": "query", + "type": "integer" + }, + "resource": { + "description": "REQUIRED: The resource for which the policy is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+/vmwareNodePools/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+resource}:getIamPolicy", + "response": { + "$ref": "Policy" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "list": { + "description": "Lists VMware node pools in a given project, location and VMWare cluster.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.list", + "parameterOrder": [ + "parent" + ], + "parameters": { + "pageSize": { + "description": "The maximum number of node pools to return. The service may return fewer than this value. If unspecified, at most 50 node pools will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.", + "format": "int32", + "location": "query", + "type": "integer" + }, + "pageToken": { + "description": "A page token, received from a previous `ListVmwareNodePools` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListVmwareNodePools` must match the call that provided the page token.", + "location": "query", + "type": "string" + }, + "parent": { + "description": "Required. The parent, which owns this collection of node pools. Format: projects/{project}/locations/{location}/vmwareClusters/{vmwareCluster}", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+$", + "required": true, + "type": "string" + }, + "view": { + "description": "View for VMware node pools. When `BASIC` is specified, only the node pool resource name is returned. The default/unset value `NODE_POOL_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete node pool configuration details.", + "enum": [ + "NODE_POOL_VIEW_UNSPECIFIED", + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "If the value is not set, the default `FULL` view is used.", + "Includes basic information of a node pool resource including node pool resource name.", + "Includes the complete configuration for VMware node pool resource. This is the default value for ListVmwareNodePoolsRequest method." + ], + "location": "query", + "type": "string" + } + }, + "path": "v1/{+parent}/vmwareNodePools", + "response": { + "$ref": "ListVmwareNodePoolsResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "patch": { + "description": "Updates the parameters of a single VMware node pool.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools/{vmwareNodePoolsId}", + "httpMethod": "PATCH", + "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.patch", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "Immutable. The resource name of this node pool.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+/vmwareNodePools/[^/]+$", + "required": true, + "type": "string" + }, + "updateMask": { + "description": "Required. Field mask is used to specify the fields to be overwritten in the VMwareNodePool resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all populated fields in the VMwareNodePool message will be updated. Empty fields will be ignored unless a field mask is used.", + "format": "google-fieldmask", + "location": "query", + "type": "string" + }, + "validateOnly": { + "description": "Validate the request without actually doing any updates.", + "location": "query", + "type": "boolean" + } + }, + "path": "v1/{+name}", + "request": { + "$ref": "VmwareNodePool" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "setIamPolicy": { + "description": "Sets the access control policy on the specified resource. Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools/{vmwareNodePoolsId}:setIamPolicy", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.setIamPolicy", + "parameterOrder": [ + "resource" + ], + "parameters": { + "resource": { + "description": "REQUIRED: The resource for which the policy is being specified. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+/vmwareNodePools/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+resource}:setIamPolicy", + "request": { + "$ref": "SetIamPolicyRequest" + }, + "response": { + "$ref": "Policy" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "testIamPermissions": { + "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not for authorization checking. This operation may \"fail open\" without warning.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools/{vmwareNodePoolsId}:testIamPermissions", + "httpMethod": "POST", + "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.testIamPermissions", + "parameterOrder": [ + "resource" + ], + "parameters": { + "resource": { + "description": "REQUIRED: The resource for which the policy detail is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+/vmwareNodePools/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+resource}:testIamPermissions", + "request": { + "$ref": "TestIamPermissionsRequest" + }, + "response": { + "$ref": "TestIamPermissionsResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "unenroll": { + "description": "Unenrolls a VMware node pool to Anthos On-Prem API", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools/{vmwareNodePoolsId}:unenroll", + "httpMethod": "DELETE", + "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.unenroll", + "parameterOrder": [ + "name" + ], + "parameters": { + "allowMissing": { + "description": "If set to true, and the VMware node pool is not found, the request will succeed but no action will be taken on the server and return a completed LRO.", + "location": "query", + "type": "boolean" + }, + "etag": { + "description": "The current etag of the VMware node pool. If an etag is provided and does not match the current etag of node pool, deletion will be blocked and an ABORTED error will be returned.", + "location": "query", + "type": "string" + }, + "name": { + "description": "Required. The name of the node pool to unenroll. Format: projects/{project}/locations/{location}/vmwareClusters/{cluster}/vmwareNodePools/{nodepool}", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+/vmwareNodePools/[^/]+$", + "required": true, + "type": "string" + }, + "validateOnly": { + "description": "If set, only validate the request, but do not actually unenroll the node pool.", + "location": "query", + "type": "boolean" + } + }, + "path": "v1/{+name}:unenroll", + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + }, + "resources": { + "operations": { + "methods": { + "get": { + "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools/{vmwareNodePoolsId}/operations/{operationsId}", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.operations.get", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "The name of the operation resource.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+/vmwareNodePools/[^/]+/operations/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+name}", + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "list": { + "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`.", + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools/{vmwareNodePoolsId}/operations", + "httpMethod": "GET", + "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.operations.list", + "parameterOrder": [ + "name" + ], + "parameters": { + "filter": { + "description": "The standard list filter.", + "location": "query", + "type": "string" + }, + "name": { + "description": "The name of the operation's parent resource.", + "location": "path", + "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+/vmwareNodePools/[^/]+$", + "required": true, + "type": "string" + }, + "pageSize": { + "description": "The standard list page size.", + "format": "int32", + "location": "query", + "type": "integer" + }, + "pageToken": { + "description": "The standard list page token.", + "location": "query", + "type": "string" + } + }, + "path": "v1/{+name}/operations", + "response": { + "$ref": "ListOperationsResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + } + } + } + } + } + } + } + } + } + } + }, + "revision": "20240124", + "rootUrl": "https://gkeonprem.googleapis.com/", + "schemas": { + "Authorization": { + "description": "Authorization defines the On-Prem cluster authorization configuration to bootstrap onto the admin cluster.", + "id": "Authorization", + "properties": { + "adminUsers": { + "description": "For VMware and bare metal user clusters, users will be granted the cluster-admin role on the cluster, which provides full administrative access to the cluster. For bare metal admin clusters, users will be granted the cluster-view role, which limits users to read-only access.", + "items": { + "$ref": "ClusterUser" + }, + "type": "array" + } + }, + "type": "object" + }, + "BareMetalAdminApiServerArgument": { + "description": "BareMetalAdminApiServerArgument represents an arg name-\u003evalue pair. Only a subset of customized flags are supported. Please refer to the API server documentation below to know the exact format: https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/", + "id": "BareMetalAdminApiServerArgument", + "properties": { + "argument": { + "description": "Required. The argument name as it appears on the API Server command line please make sure to remove the leading dashes.", + "type": "string" + }, + "value": { + "description": "Required. The value of the arg as it will be passed to the API Server command line.", + "type": "string" + } + }, + "type": "object" + }, + "BareMetalAdminCluster": { + "description": "Resource that represents a bare metal admin cluster.", + "id": "BareMetalAdminCluster", + "properties": { + "annotations": { + "additionalProperties": { + "type": "string" + }, + "description": "Annotations on the bare metal admin cluster. This field has the same restrictions as Kubernetes annotations. The total size of all keys and values combined is limited to 256k. Key can have 2 segments: prefix (optional) and name (required), separated by a slash (/). Prefix must be a DNS subdomain. Name must be 63 characters or less, begin and end with alphanumerics, with dashes (-), underscores (_), dots (.), and alphanumerics between.", + "type": "object" + }, + "bareMetalVersion": { + "description": "The Anthos clusters on bare metal version for the bare metal admin cluster.", + "type": "string" + }, + "binaryAuthorization": { + "$ref": "BinaryAuthorization", + "description": "Binary Authorization related configurations." + }, + "clusterOperations": { + "$ref": "BareMetalAdminClusterOperationsConfig", + "description": "Cluster operations configuration." + }, + "controlPlane": { + "$ref": "BareMetalAdminControlPlaneConfig", + "description": "Control plane configuration." + }, + "createTime": { + "description": "Output only. The time at which this bare metal admin cluster was created.", + "format": "google-datetime", + "readOnly": true, + "type": "string" + }, + "deleteTime": { + "description": "Output only. The time at which this bare metal admin cluster was deleted. If the resource is not deleted, this must be empty", + "format": "google-datetime", + "readOnly": true, + "type": "string" + }, + "description": { + "description": "A human readable description of this bare metal admin cluster.", + "type": "string" + }, + "endpoint": { + "description": "Output only. The IP address name of bare metal admin cluster's API server.", + "readOnly": true, + "type": "string" + }, + "etag": { + "description": "This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. Allows clients to perform consistent read-modify-writes through optimistic concurrency control.", + "type": "string" + }, + "fleet": { + "$ref": "Fleet", + "description": "Output only. Fleet configuration for the cluster.", + "readOnly": true + }, + "loadBalancer": { + "$ref": "BareMetalAdminLoadBalancerConfig", + "description": "Load balancer configuration." + }, + "localName": { + "description": "Output only. The object name of the bare metal cluster custom resource. This field is used to support conflicting names when enrolling existing clusters to the API. When used as a part of cluster enrollment, this field will differ from the ID in the resource name. For new clusters, this field will match the user provided cluster name and be visible in the last component of the resource name. It is not modifiable. All users should use this name to access their cluster using gkectl or kubectl and should expect to see the local name when viewing admin cluster controller logs.", + "readOnly": true, + "type": "string" + }, + "maintenanceConfig": { + "$ref": "BareMetalAdminMaintenanceConfig", + "description": "Maintenance configuration." + }, + "maintenanceStatus": { + "$ref": "BareMetalAdminMaintenanceStatus", + "description": "Output only. MaintenanceStatus representing state of maintenance.", + "readOnly": true + }, + "name": { + "description": "Immutable. The bare metal admin cluster resource name.", + "type": "string" + }, + "networkConfig": { + "$ref": "BareMetalAdminNetworkConfig", + "description": "Network configuration." + }, + "nodeAccessConfig": { + "$ref": "BareMetalAdminNodeAccessConfig", + "description": "Node access related configurations." + }, + "nodeConfig": { + "$ref": "BareMetalAdminWorkloadNodeConfig", + "description": "Workload node configuration." + }, + "osEnvironmentConfig": { + "$ref": "BareMetalAdminOsEnvironmentConfig", + "description": "OS environment related configurations." + }, + "proxy": { + "$ref": "BareMetalAdminProxyConfig", + "description": "Proxy configuration." + }, + "reconciling": { + "description": "Output only. If set, there are currently changes in flight to the bare metal Admin Cluster.", + "readOnly": true, + "type": "boolean" + }, + "securityConfig": { + "$ref": "BareMetalAdminSecurityConfig", + "description": "Security related configuration." + }, + "state": { + "description": "Output only. The current state of the bare metal admin cluster.", + "enum": [ + "STATE_UNSPECIFIED", + "PROVISIONING", + "RUNNING", + "RECONCILING", + "STOPPING", + "ERROR", + "DEGRADED" + ], + "enumDescriptions": [ + "Not set.", + "The PROVISIONING state indicates the cluster is being created.", + "The RUNNING state indicates the cluster has been created and is fully usable.", + "The RECONCILING state indicates that the cluster is being updated. It remains available, but potentially with degraded performance.", + "The STOPPING state indicates the cluster is being deleted.", + "The ERROR state indicates the cluster is in a broken unrecoverable state.", + "The DEGRADED state indicates the cluster requires user action to restore full functionality." + ], + "readOnly": true, + "type": "string" + }, + "status": { + "$ref": "ResourceStatus", + "description": "Output only. ResourceStatus representing detailed cluster status.", + "readOnly": true + }, + "storage": { + "$ref": "BareMetalAdminStorageConfig", + "description": "Storage configuration." + }, + "uid": { + "description": "Output only. The unique identifier of the bare metal admin cluster.", + "readOnly": true, + "type": "string" + }, + "updateTime": { + "description": "Output only. The time at which this bare metal admin cluster was last updated.", + "format": "google-datetime", + "readOnly": true, + "type": "string" + }, + "validationCheck": { + "$ref": "ValidationCheck", + "description": "Output only. ValidationCheck representing the result of the preflight check.", + "readOnly": true + } + }, + "type": "object" + }, + "BareMetalAdminClusterOperationsConfig": { + "description": "BareMetalAdminClusterOperationsConfig specifies the admin cluster's observability infrastructure.", + "id": "BareMetalAdminClusterOperationsConfig", + "properties": { + "enableApplicationLogs": { + "description": "Whether collection of application logs/metrics should be enabled (in addition to system logs/metrics).", + "type": "boolean" + } + }, + "type": "object" + }, + "BareMetalAdminControlPlaneConfig": { + "description": "BareMetalAdminControlPlaneConfig specifies the control plane configuration.", + "id": "BareMetalAdminControlPlaneConfig", + "properties": { + "apiServerArgs": { + "description": "Customizes the default API server args. Only a subset of customized flags are supported. Please refer to the API server documentation below to know the exact format: https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/", + "items": { + "$ref": "BareMetalAdminApiServerArgument" + }, + "type": "array" + }, + "controlPlaneNodePoolConfig": { + "$ref": "BareMetalAdminControlPlaneNodePoolConfig", + "description": "Required. Configures the node pool running the control plane. If specified the corresponding NodePool will be created for the cluster's control plane. The NodePool will have the same name and namespace as the cluster." + } + }, + "type": "object" + }, + "BareMetalAdminControlPlaneNodePoolConfig": { + "description": "BareMetalAdminControlPlaneNodePoolConfig specifies the control plane node pool configuration. We have a control plane specific node pool config so that we can flexible about supporting control plane specific fields in the future.", + "id": "BareMetalAdminControlPlaneNodePoolConfig", + "properties": { + "nodePoolConfig": { + "$ref": "BareMetalNodePoolConfig", + "description": "Required. The generic configuration for a node pool running the control plane." + } + }, + "type": "object" + }, + "BareMetalAdminDrainedMachine": { + "description": "BareMetalAdminDrainedMachine represents the machines that are drained.", + "id": "BareMetalAdminDrainedMachine", + "properties": { + "nodeIp": { + "description": "Drained machine IP address.", + "type": "string" + } + }, + "type": "object" + }, + "BareMetalAdminDrainingMachine": { + "description": "BareMetalAdminDrainingMachine represents the machines that are currently draining.", + "id": "BareMetalAdminDrainingMachine", + "properties": { + "nodeIp": { + "description": "Draining machine IP address.", + "type": "string" + }, + "podCount": { + "description": "The count of pods yet to drain.", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "BareMetalAdminIslandModeCidrConfig": { + "description": "BareMetalAdminIslandModeCidrConfig specifies the cluster CIDR configuration while running in island mode.", + "id": "BareMetalAdminIslandModeCidrConfig", + "properties": { + "podAddressCidrBlocks": { + "description": "Required. All pods in the cluster are assigned an RFC1918 IPv4 address from these ranges. This field cannot be changed after creation.", + "items": { + "type": "string" + }, + "type": "array" + }, + "serviceAddressCidrBlocks": { + "description": "Required. All services in the cluster are assigned an RFC1918 IPv4 address from these ranges. This field cannot be changed after creation.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "BareMetalAdminLoadBalancerConfig": { + "description": "BareMetalAdminLoadBalancerConfig specifies the load balancer configuration.", + "id": "BareMetalAdminLoadBalancerConfig", + "properties": { + "manualLbConfig": { + "$ref": "BareMetalAdminManualLbConfig", + "description": "Manually configured load balancers." + }, + "portConfig": { + "$ref": "BareMetalAdminPortConfig", + "description": "Configures the ports that the load balancer will listen on." + }, + "vipConfig": { + "$ref": "BareMetalAdminVipConfig", + "description": "The VIPs used by the load balancer." + } + }, + "type": "object" + }, + "BareMetalAdminMachineDrainStatus": { + "description": "BareMetalAdminMachineDrainStatus represents the status of bare metal node machines that are undergoing drain operations.", + "id": "BareMetalAdminMachineDrainStatus", + "properties": { + "drainedMachines": { + "description": "The list of drained machines.", + "items": { + "$ref": "BareMetalAdminDrainedMachine" + }, + "type": "array" + }, + "drainingMachines": { + "description": "The list of draning machines.", + "items": { + "$ref": "BareMetalAdminDrainingMachine" + }, + "type": "array" + } + }, + "type": "object" + }, + "BareMetalAdminMaintenanceConfig": { + "description": "BareMetalAdminMaintenanceConfig specifies configurations to put bare metal Admin cluster CRs nodes in and out of maintenance.", + "id": "BareMetalAdminMaintenanceConfig", + "properties": { + "maintenanceAddressCidrBlocks": { + "description": "Required. All IPv4 address from these ranges will be placed into maintenance mode. Nodes in maintenance mode will be cordoned and drained. When both of these are true, the \"baremetal.cluster.gke.io/maintenance\" annotation will be set on the node resource.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "BareMetalAdminMaintenanceStatus": { + "description": "BareMetalAdminMaintenanceStatus represents the maintenance status for bare metal Admin cluster CR's nodes.", + "id": "BareMetalAdminMaintenanceStatus", + "properties": { + "machineDrainStatus": { + "$ref": "BareMetalAdminMachineDrainStatus", + "description": "Represents the status of draining and drained machine nodes. This is used to show the progress of cluster upgrade." + } + }, + "type": "object" + }, + "BareMetalAdminManualLbConfig": { + "description": "BareMetalAdminManualLbConfig represents configuration parameters for a manual load balancer.", + "id": "BareMetalAdminManualLbConfig", + "properties": { + "enabled": { + "description": "Whether manual load balancing is enabled.", + "type": "boolean" + } + }, + "type": "object" + }, + "BareMetalAdminNetworkConfig": { + "description": "BareMetalAdminNetworkConfig specifies the cluster network configuration.", + "id": "BareMetalAdminNetworkConfig", + "properties": { + "islandModeCidr": { + "$ref": "BareMetalAdminIslandModeCidrConfig", + "description": "Configuration for Island mode CIDR." + } + }, + "type": "object" + }, + "BareMetalAdminNodeAccessConfig": { + "description": "Specifies the node access related settings for the bare metal admin cluster.", + "id": "BareMetalAdminNodeAccessConfig", + "properties": { + "loginUser": { + "description": "Required. LoginUser is the user name used to access node machines. It defaults to \"root\" if not set.", + "type": "string" + } + }, + "type": "object" + }, + "BareMetalAdminOsEnvironmentConfig": { + "description": "Specifies operating system operation settings for cluster provisioning.", + "id": "BareMetalAdminOsEnvironmentConfig", + "properties": { + "packageRepoExcluded": { + "description": "Whether the package repo should be added when initializing bare metal machines.", + "type": "boolean" + } + }, + "type": "object" + }, + "BareMetalAdminPortConfig": { + "description": "BareMetalAdminPortConfig is the specification of load balancer ports.", + "id": "BareMetalAdminPortConfig", + "properties": { + "controlPlaneLoadBalancerPort": { + "description": "The port that control plane hosted load balancers will listen on.", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "BareMetalAdminProxyConfig": { + "description": "BareMetalAdminProxyConfig specifies the cluster proxy configuration.", + "id": "BareMetalAdminProxyConfig", + "properties": { + "noProxy": { + "description": "A list of IPs, hostnames, and domains that should skip the proxy. Examples: [\"127.0.0.1\", \"example.com\", \".corp\", \"localhost\"].", + "items": { + "type": "string" + }, + "type": "array" + }, + "uri": { + "description": "Required. Specifies the address of your proxy server. Examples: `http://domain` WARNING: Do not provide credentials in the format `http://(username:password@)domain` these will be rejected by the server.", + "type": "string" + } + }, + "type": "object" + }, + "BareMetalAdminSecurityConfig": { + "description": "Specifies the security related settings for the bare metal admin cluster.", + "id": "BareMetalAdminSecurityConfig", + "properties": { + "authorization": { + "$ref": "Authorization", + "description": "Configures user access to the admin cluster." + } + }, + "type": "object" + }, + "BareMetalAdminStorageConfig": { + "description": "BareMetalAdminStorageConfig specifies the cluster storage configuration.", + "id": "BareMetalAdminStorageConfig", + "properties": { + "lvpNodeMountsConfig": { + "$ref": "BareMetalLvpConfig", + "description": "Required. Specifies the config for local PersistentVolumes backed by mounted node disks. These disks need to be formatted and mounted by the user, which can be done before or after cluster creation." + }, + "lvpShareConfig": { + "$ref": "BareMetalLvpShareConfig", + "description": "Required. Specifies the config for local PersistentVolumes backed by subdirectories in a shared filesystem. These subdirectores are automatically created during cluster creation." + } + }, + "type": "object" + }, + "BareMetalAdminVipConfig": { + "description": "BareMetalAdminVipConfig for bare metal load balancer configurations.", + "id": "BareMetalAdminVipConfig", + "properties": { + "controlPlaneVip": { + "description": "The VIP which you previously set aside for the Kubernetes API of this bare metal admin cluster.", + "type": "string" + } + }, + "type": "object" + }, + "BareMetalAdminWorkloadNodeConfig": { + "description": "BareMetalAdminWorkloadNodeConfig specifies the workload node configurations.", + "id": "BareMetalAdminWorkloadNodeConfig", + "properties": { + "maxPodsPerNode": { + "description": "The maximum number of pods a node can run. The size of the CIDR range assigned to the node will be derived from this parameter. By default 110 Pods are created per Node. Upper bound is 250 for both HA and non-HA admin cluster. Lower bound is 64 for non-HA admin cluster and 32 for HA admin cluster.", + "format": "int64", + "type": "string" + } + }, + "type": "object" + }, + "BareMetalApiServerArgument": { + "description": "Represents an arg name-\u003evalue pair. Only a subset of customized flags are supported. For the exact format, refer to the [API server documentation](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/).", + "id": "BareMetalApiServerArgument", + "properties": { + "argument": { + "description": "Required. The argument name as it appears on the API Server command line, make sure to remove the leading dashes.", + "type": "string" + }, + "value": { + "description": "Required. The value of the arg as it will be passed to the API Server command line.", + "type": "string" + } + }, + "type": "object" + }, + "BareMetalBgpLbConfig": { + "description": "BareMetalBgpLbConfig represents configuration parameters for a Border Gateway Protocol (BGP) load balancer.", + "id": "BareMetalBgpLbConfig", + "properties": { + "addressPools": { + "description": "Required. AddressPools is a list of non-overlapping IP pools used by load balancer typed services. All addresses must be routable to load balancer nodes. IngressVIP must be included in the pools.", + "items": { + "$ref": "BareMetalLoadBalancerAddressPool" + }, + "type": "array" + }, + "asn": { + "description": "Required. BGP autonomous system number (ASN) of the cluster. This field can be updated after cluster creation.", + "format": "int64", + "type": "string" + }, + "bgpPeerConfigs": { + "description": "Required. The list of BGP peers that the cluster will connect to. At least one peer must be configured for each control plane node. Control plane nodes will connect to these peers to advertise the control plane VIP. The Services load balancer also uses these peers by default. This field can be updated after cluster creation.", + "items": { + "$ref": "BareMetalBgpPeerConfig" + }, + "type": "array" + }, + "loadBalancerNodePoolConfig": { + "$ref": "BareMetalLoadBalancerNodePoolConfig", + "description": "Specifies the node pool running data plane load balancing. L2 connectivity is required among nodes in this pool. If missing, the control plane node pool is used for data plane load balancing." + } + }, + "type": "object" + }, + "BareMetalBgpPeerConfig": { + "description": "BareMetalBgpPeerConfig represents configuration parameters for a Border Gateway Protocol (BGP) peer.", + "id": "BareMetalBgpPeerConfig", + "properties": { + "asn": { + "description": "Required. BGP autonomous system number (ASN) for the network that contains the external peer device.", + "format": "int64", + "type": "string" + }, + "controlPlaneNodes": { + "description": "The IP address of the control plane node that connects to the external peer. If you don't specify any control plane nodes, all control plane nodes can connect to the external peer. If you specify one or more IP addresses, only the nodes specified participate in peering sessions.", + "items": { + "type": "string" + }, + "type": "array" + }, + "ipAddress": { + "description": "Required. The IP address of the external peer device.", + "type": "string" + } + }, + "type": "object" + }, + "BareMetalCluster": { + "description": "Resource that represents a bare metal user cluster.", + "id": "BareMetalCluster", + "properties": { + "adminClusterMembership": { + "description": "Required. The admin cluster this bare metal user cluster belongs to. This is the full resource name of the admin cluster's fleet membership.", + "type": "string" + }, + "adminClusterName": { + "description": "Output only. The resource name of the bare metal admin cluster managing this user cluster.", + "readOnly": true, + "type": "string" + }, + "annotations": { + "additionalProperties": { + "type": "string" + }, + "description": "Annotations on the bare metal user cluster. This field has the same restrictions as Kubernetes annotations. The total size of all keys and values combined is limited to 256k. Key can have 2 segments: prefix (optional) and name (required), separated by a slash (/). Prefix must be a DNS subdomain. Name must be 63 characters or less, begin and end with alphanumerics, with dashes (-), underscores (_), dots (.), and alphanumerics between.", + "type": "object" + }, + "bareMetalVersion": { + "description": "Required. The Anthos clusters on bare metal version for your user cluster.", + "type": "string" + }, + "binaryAuthorization": { + "$ref": "BinaryAuthorization", + "description": "Binary Authorization related configurations." + }, + "clusterOperations": { + "$ref": "BareMetalClusterOperationsConfig", + "description": "Cluster operations configuration." + }, + "controlPlane": { + "$ref": "BareMetalControlPlaneConfig", + "description": "Required. Control plane configuration." + }, + "createTime": { + "description": "Output only. The time when the bare metal user cluster was created.", + "format": "google-datetime", + "readOnly": true, + "type": "string" + }, + "deleteTime": { + "description": "Output only. The time when the bare metal user cluster was deleted. If the resource is not deleted, this must be empty", + "format": "google-datetime", + "readOnly": true, + "type": "string" + }, + "description": { + "description": "A human readable description of this bare metal user cluster.", + "type": "string" + }, + "endpoint": { + "description": "Output only. The IP address of the bare metal user cluster's API server.", + "readOnly": true, + "type": "string" + }, + "etag": { + "description": "Output only. This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. Allows clients to perform consistent read-modify-writes through optimistic concurrency control.", + "readOnly": true, + "type": "string" + }, + "fleet": { + "$ref": "Fleet", + "description": "Output only. Fleet configuration for the cluster.", + "readOnly": true + }, + "loadBalancer": { + "$ref": "BareMetalLoadBalancerConfig", + "description": "Required. Load balancer configuration." + }, + "localName": { + "description": "Output only. The object name of the bare metal user cluster custom resource on the associated admin cluster. This field is used to support conflicting names when enrolling existing clusters to the API. When used as a part of cluster enrollment, this field will differ from the name in the resource name. For new clusters, this field will match the user provided cluster name and be visible in the last component of the resource name. It is not modifiable. When the local name and cluster name differ, the local name is used in the admin cluster controller logs. You use the cluster name when accessing the cluster using bmctl and kubectl.", + "readOnly": true, + "type": "string" + }, + "maintenanceConfig": { + "$ref": "BareMetalMaintenanceConfig", + "description": "Maintenance configuration." + }, + "maintenanceStatus": { + "$ref": "BareMetalMaintenanceStatus", + "description": "Output only. Status of on-going maintenance tasks.", + "readOnly": true + }, + "name": { + "description": "Immutable. The bare metal user cluster resource name.", + "type": "string" + }, + "networkConfig": { + "$ref": "BareMetalNetworkConfig", + "description": "Required. Network configuration." + }, + "nodeAccessConfig": { + "$ref": "BareMetalNodeAccessConfig", + "description": "Node access related configurations." + }, + "nodeConfig": { + "$ref": "BareMetalWorkloadNodeConfig", + "description": "Workload node configuration." + }, + "osEnvironmentConfig": { + "$ref": "BareMetalOsEnvironmentConfig", + "description": "OS environment related configurations." + }, + "proxy": { + "$ref": "BareMetalProxyConfig", + "description": "Proxy configuration." + }, + "reconciling": { + "description": "Output only. If set, there are currently changes in flight to the bare metal user cluster.", + "readOnly": true, + "type": "boolean" + }, + "securityConfig": { + "$ref": "BareMetalSecurityConfig", + "description": "Security related setting configuration." + }, + "state": { + "description": "Output only. The current state of the bare metal user cluster.", + "enum": [ + "STATE_UNSPECIFIED", + "PROVISIONING", + "RUNNING", + "RECONCILING", + "STOPPING", + "ERROR", + "DEGRADED" + ], + "enumDescriptions": [ + "Not set.", + "The PROVISIONING state indicates the cluster is being created.", + "The RUNNING state indicates the cluster has been created and is fully usable.", + "The RECONCILING state indicates that the cluster is being updated. It remains available, but potentially with degraded performance.", + "The STOPPING state indicates the cluster is being deleted.", + "The ERROR state indicates the cluster is in a broken unrecoverable state.", + "The DEGRADED state indicates the cluster requires user action to restore full functionality." + ], + "readOnly": true, + "type": "string" + }, + "status": { + "$ref": "ResourceStatus", + "description": "Output only. Detailed cluster status.", + "readOnly": true + }, + "storage": { + "$ref": "BareMetalStorageConfig", + "description": "Required. Storage configuration." + }, + "uid": { + "description": "Output only. The unique identifier of the bare metal user cluster.", + "readOnly": true, + "type": "string" + }, + "updateTime": { + "description": "Output only. The time when the bare metal user cluster was last updated.", + "format": "google-datetime", + "readOnly": true, + "type": "string" + }, + "upgradePolicy": { + "$ref": "BareMetalClusterUpgradePolicy", + "description": "The cluster upgrade policy." + }, + "validationCheck": { + "$ref": "ValidationCheck", + "description": "Output only. The result of the preflight check.", + "readOnly": true + } + }, + "type": "object" + }, + "BareMetalClusterOperationsConfig": { + "description": "Specifies the bare metal user cluster's observability infrastructure.", + "id": "BareMetalClusterOperationsConfig", + "properties": { + "enableApplicationLogs": { + "description": "Whether collection of application logs/metrics should be enabled (in addition to system logs/metrics).", + "type": "boolean" + } + }, + "type": "object" + }, + "BareMetalClusterUpgradePolicy": { + "description": "BareMetalClusterUpgradePolicy defines the cluster upgrade policy.", + "id": "BareMetalClusterUpgradePolicy", + "properties": { + "policy": { + "description": "Specifies which upgrade policy to use.", + "enum": [ + "NODE_POOL_POLICY_UNSPECIFIED", + "SERIAL", + "CONCURRENT" + ], + "enumDescriptions": [ + "No upgrade policy selected.", + "Upgrade worker node pools sequentially.", + "Upgrade all worker node pools in parallel." + ], + "type": "string" + } + }, + "type": "object" + }, + "BareMetalControlPlaneConfig": { + "description": "Specifies the control plane configuration.", + "id": "BareMetalControlPlaneConfig", + "properties": { + "apiServerArgs": { + "description": "Customizes the default API server args. Only a subset of customized flags are supported. For the exact format, refer to the [API server documentation](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/).", + "items": { + "$ref": "BareMetalApiServerArgument" + }, + "type": "array" + }, + "controlPlaneNodePoolConfig": { + "$ref": "BareMetalControlPlaneNodePoolConfig", + "description": "Required. Configures the node pool running the control plane." + } + }, + "type": "object" + }, + "BareMetalControlPlaneNodePoolConfig": { + "description": "Specifies the control plane node pool configuration.", + "id": "BareMetalControlPlaneNodePoolConfig", + "properties": { + "nodePoolConfig": { + "$ref": "BareMetalNodePoolConfig", + "description": "Required. The generic configuration for a node pool running the control plane." + } + }, + "type": "object" + }, + "BareMetalDrainedMachine": { + "description": "Represents a machine that is currently drained.", + "id": "BareMetalDrainedMachine", + "properties": { + "nodeIp": { + "description": "Drained machine IP address.", + "type": "string" + } + }, + "type": "object" + }, + "BareMetalDrainingMachine": { + "description": "Represents a machine that is currently draining.", + "id": "BareMetalDrainingMachine", + "properties": { + "nodeIp": { + "description": "Draining machine IP address.", + "type": "string" + }, + "podCount": { + "description": "The count of pods yet to drain.", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "BareMetalIslandModeCidrConfig": { + "description": "Specifies the cluster CIDR configuration while running in island mode.", + "id": "BareMetalIslandModeCidrConfig", + "properties": { + "podAddressCidrBlocks": { + "description": "Required. All pods in the cluster are assigned an RFC1918 IPv4 address from these ranges. This field cannot be changed after creation.", + "items": { + "type": "string" + }, + "type": "array" + }, + "serviceAddressCidrBlocks": { + "description": "Required. All services in the cluster are assigned an RFC1918 IPv4 address from these ranges. This field is mutable after creation starting with version 1.15.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "BareMetalKubeletConfig": { + "description": "KubeletConfig defines the modifiable kubelet configurations for bare metal machines. Note: this list includes fields supported in GKE (see https://cloud.google.com/kubernetes-engine/docs/how-to/node-system-config#kubelet-options).", + "id": "BareMetalKubeletConfig", + "properties": { + "registryBurst": { + "description": "The maximum size of bursty pulls, temporarily allows pulls to burst to this number, while still not exceeding registry_pull_qps. The value must not be a negative number. Updating this field may impact scalability by changing the amount of traffic produced by image pulls. Defaults to 10.", + "format": "int32", + "type": "integer" + }, + "registryPullQps": { + "description": "The limit of registry pulls per second. Setting this value to 0 means no limit. Updating this field may impact scalability by changing the amount of traffic produced by image pulls. Defaults to 5.", + "format": "int32", + "type": "integer" + }, + "serializeImagePullsDisabled": { + "description": "Prevents the Kubelet from pulling multiple images at a time. We recommend *not* changing the default value on nodes that run docker daemon with version \u003c 1.9 or an Another Union File System (Aufs) storage backend. Issue https://github.com/kubernetes/kubernetes/issues/10959 has more details.", + "type": "boolean" + } + }, + "type": "object" + }, + "BareMetalLoadBalancerAddressPool": { + "description": "Represents an IP pool used by the load balancer.", + "id": "BareMetalLoadBalancerAddressPool", + "properties": { + "addresses": { + "description": "Required. The addresses that are part of this pool. Each address must be either in the CIDR form (1.2.3.0/24) or range form (1.2.3.1-1.2.3.5).", + "items": { + "type": "string" + }, + "type": "array" + }, + "avoidBuggyIps": { + "description": "If true, avoid using IPs ending in .0 or .255. This avoids buggy consumer devices mistakenly dropping IPv4 traffic for those special IP addresses.", + "type": "boolean" + }, + "manualAssign": { + "description": "If true, prevent IP addresses from being automatically assigned.", + "type": "boolean" + }, + "pool": { + "description": "Required. The name of the address pool.", + "type": "string" + } + }, + "type": "object" + }, + "BareMetalLoadBalancerConfig": { + "description": "Specifies the load balancer configuration.", + "id": "BareMetalLoadBalancerConfig", + "properties": { + "bgpLbConfig": { + "$ref": "BareMetalBgpLbConfig", + "description": "Configuration for BGP typed load balancers. When set network_config.advanced_networking is automatically set to true." + }, + "manualLbConfig": { + "$ref": "BareMetalManualLbConfig", + "description": "Manually configured load balancers." + }, + "metalLbConfig": { + "$ref": "BareMetalMetalLbConfig", + "description": "Configuration for MetalLB load balancers." + }, + "portConfig": { + "$ref": "BareMetalPortConfig", + "description": "Configures the ports that the load balancer will listen on." + }, + "vipConfig": { + "$ref": "BareMetalVipConfig", + "description": "The VIPs used by the load balancer." + } + }, + "type": "object" + }, + "BareMetalLoadBalancerNodePoolConfig": { + "description": "Specifies the load balancer's node pool configuration.", + "id": "BareMetalLoadBalancerNodePoolConfig", + "properties": { + "nodePoolConfig": { + "$ref": "BareMetalNodePoolConfig", + "description": "The generic configuration for a node pool running a load balancer." + } + }, + "type": "object" + }, + "BareMetalLvpConfig": { + "description": "Specifies the configs for local persistent volumes (PVs).", + "id": "BareMetalLvpConfig", + "properties": { + "path": { + "description": "Required. The host machine path.", + "type": "string" + }, + "storageClass": { + "description": "Required. The StorageClass name that PVs will be created with.", + "type": "string" + } + }, + "type": "object" + }, + "BareMetalLvpShareConfig": { + "description": "Specifies the configs for local persistent volumes under a shared file system.", + "id": "BareMetalLvpShareConfig", + "properties": { + "lvpConfig": { + "$ref": "BareMetalLvpConfig", + "description": "Required. Defines the machine path and storage class for the LVP Share." + }, + "sharedPathPvCount": { + "description": "The number of subdirectories to create under path.", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "BareMetalMachineDrainStatus": { + "description": "Represents the status of node machines that are undergoing drain operations.", + "id": "BareMetalMachineDrainStatus", + "properties": { + "drainedMachines": { + "description": "The list of drained machines.", + "items": { + "$ref": "BareMetalDrainedMachine" + }, + "type": "array" + }, + "drainingMachines": { + "description": "The list of draning machines.", + "items": { + "$ref": "BareMetalDrainingMachine" + }, + "type": "array" + } + }, + "type": "object" + }, + "BareMetalMaintenanceConfig": { + "description": "Specifies configurations to put bare metal nodes in and out of maintenance.", + "id": "BareMetalMaintenanceConfig", + "properties": { + "maintenanceAddressCidrBlocks": { + "description": "Required. All IPv4 address from these ranges will be placed into maintenance mode. Nodes in maintenance mode will be cordoned and drained. When both of these are true, the \"baremetal.cluster.gke.io/maintenance\" annotation will be set on the node resource.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "BareMetalMaintenanceStatus": { + "description": "Represents the maintenance status of the bare metal user cluster.", + "id": "BareMetalMaintenanceStatus", + "properties": { + "machineDrainStatus": { + "$ref": "BareMetalMachineDrainStatus", + "description": "The maintenance status of node machines." + } + }, + "type": "object" + }, + "BareMetalManualLbConfig": { + "description": "Represents configuration parameters for a manual load balancer.", + "id": "BareMetalManualLbConfig", + "properties": { + "enabled": { + "description": "Whether manual load balancing is enabled.", + "type": "boolean" + } + }, + "type": "object" + }, + "BareMetalMetalLbConfig": { + "description": "Represents configuration parameters for a MetalLB load balancer.", + "id": "BareMetalMetalLbConfig", + "properties": { + "addressPools": { + "description": "Required. AddressPools is a list of non-overlapping IP pools used by load balancer typed services. All addresses must be routable to load balancer nodes. IngressVIP must be included in the pools.", + "items": { + "$ref": "BareMetalLoadBalancerAddressPool" + }, + "type": "array" + }, + "loadBalancerNodePoolConfig": { + "$ref": "BareMetalLoadBalancerNodePoolConfig", + "description": "Specifies the node pool running the load balancer. L2 connectivity is required among nodes in this pool. If missing, the control plane node pool is used as the load balancer pool." + } + }, + "type": "object" + }, + "BareMetalMultipleNetworkInterfacesConfig": { + "description": "Specifies the multiple networking interfaces cluster configuration.", + "id": "BareMetalMultipleNetworkInterfacesConfig", + "properties": { + "enabled": { + "description": "Whether to enable multiple network interfaces for your pods. When set network_config.advanced_networking is automatically set to true.", + "type": "boolean" + } + }, + "type": "object" + }, + "BareMetalNetworkConfig": { + "description": "Specifies the cluster network configuration.", + "id": "BareMetalNetworkConfig", + "properties": { + "advancedNetworking": { + "description": "Enables the use of advanced Anthos networking features, such as Bundled Load Balancing with BGP or the egress NAT gateway. Setting configuration for advanced networking features will automatically set this flag.", + "type": "boolean" + }, + "islandModeCidr": { + "$ref": "BareMetalIslandModeCidrConfig", + "description": "Configuration for island mode CIDR. In an island-mode network, nodes have unique IP addresses, but pods don't have unique addresses across clusters. This doesn't cause problems because pods in one cluster never directly communicate with pods in another cluster. Instead, there are gateways that mediate between a pod in one cluster and a pod in another cluster." + }, + "multipleNetworkInterfacesConfig": { + "$ref": "BareMetalMultipleNetworkInterfacesConfig", + "description": "Configuration for multiple network interfaces." + }, + "srIovConfig": { + "$ref": "BareMetalSrIovConfig", + "description": "Configuration for SR-IOV." + } + }, + "type": "object" + }, + "BareMetalNodeAccessConfig": { + "description": "Specifies the node access related settings for the bare metal user cluster.", + "id": "BareMetalNodeAccessConfig", + "properties": { + "loginUser": { + "description": "LoginUser is the user name used to access node machines. It defaults to \"root\" if not set.", + "type": "string" + } + }, + "type": "object" + }, + "BareMetalNodeConfig": { + "description": "BareMetalNodeConfig lists machine addresses to access Nodes.", + "id": "BareMetalNodeConfig", + "properties": { + "labels": { + "additionalProperties": { + "type": "string" + }, + "description": "The labels assigned to this node. An object containing a list of key/value pairs. The labels here, unioned with the labels set on BareMetalNodePoolConfig are the set of labels that will be applied to the node. If there are any conflicts, the BareMetalNodeConfig labels take precedence. Example: { \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.", + "type": "object" + }, + "nodeIp": { + "description": "The default IPv4 address for SSH access and Kubernetes node. Example: 192.168.0.1", + "type": "string" + } + }, + "type": "object" + }, + "BareMetalNodePool": { + "description": "Resource that represents a bare metal node pool.", + "id": "BareMetalNodePool", + "properties": { + "annotations": { + "additionalProperties": { + "type": "string" + }, + "description": "Annotations on the bare metal node pool. This field has the same restrictions as Kubernetes annotations. The total size of all keys and values combined is limited to 256k. Key can have 2 segments: prefix (optional) and name (required), separated by a slash (/). Prefix must be a DNS subdomain. Name must be 63 characters or less, begin and end with alphanumerics, with dashes (-), underscores (_), dots (.), and alphanumerics between.", + "type": "object" + }, + "createTime": { + "description": "Output only. The time at which this bare metal node pool was created.", + "format": "google-datetime", + "readOnly": true, + "type": "string" + }, + "deleteTime": { + "description": "Output only. The time at which this bare metal node pool was deleted. If the resource is not deleted, this must be empty", + "format": "google-datetime", + "readOnly": true, + "type": "string" + }, + "displayName": { + "description": "The display name for the bare metal node pool.", + "type": "string" + }, + "etag": { + "description": "This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. Allows clients to perform consistent read-modify-writes through optimistic concurrency control.", + "type": "string" + }, + "name": { + "description": "Immutable. The bare metal node pool resource name.", + "type": "string" + }, + "nodePoolConfig": { + "$ref": "BareMetalNodePoolConfig", + "description": "Required. Node pool configuration." + }, + "reconciling": { + "description": "Output only. If set, there are currently changes in flight to the bare metal node pool.", + "readOnly": true, + "type": "boolean" + }, + "state": { + "description": "Output only. The current state of the bare metal node pool.", + "enum": [ + "STATE_UNSPECIFIED", + "PROVISIONING", + "RUNNING", + "RECONCILING", + "STOPPING", + "ERROR", + "DEGRADED" + ], + "enumDescriptions": [ + "Not set.", + "The PROVISIONING state indicates the bare metal node pool is being created.", + "The RUNNING state indicates the bare metal node pool has been created and is fully usable.", + "The RECONCILING state indicates that the bare metal node pool is being updated. It remains available, but potentially with degraded performance.", + "The STOPPING state indicates the bare metal node pool is being deleted.", + "The ERROR state indicates the bare metal node pool is in a broken unrecoverable state.", + "The DEGRADED state indicates the bare metal node pool requires user action to restore full functionality." + ], + "readOnly": true, + "type": "string" + }, + "status": { + "$ref": "ResourceStatus", + "description": "Output only. ResourceStatus representing the detailed node pool status.", + "readOnly": true + }, + "uid": { + "description": "Output only. The unique identifier of the bare metal node pool.", + "readOnly": true, + "type": "string" + }, + "updateTime": { + "description": "Output only. The time at which this bare metal node pool was last updated.", + "format": "google-datetime", + "readOnly": true, + "type": "string" + }, + "upgradePolicy": { + "$ref": "BareMetalNodePoolUpgradePolicy", + "description": "The worker node pool upgrade policy." + } + }, + "type": "object" + }, + "BareMetalNodePoolConfig": { + "description": "BareMetalNodePoolConfig describes the configuration of all nodes within a given bare metal node pool.", + "id": "BareMetalNodePoolConfig", + "properties": { + "kubeletConfig": { + "$ref": "BareMetalKubeletConfig", + "description": "The modifiable kubelet configurations for the bare metal machines." + }, + "labels": { + "additionalProperties": { + "type": "string" + }, + "description": "The labels assigned to nodes of this node pool. An object containing a list of key/value pairs. Example: { \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.", + "type": "object" + }, + "nodeConfigs": { + "description": "Required. The list of machine addresses in the bare metal node pool.", + "items": { + "$ref": "BareMetalNodeConfig" + }, + "type": "array" + }, + "operatingSystem": { + "description": "Specifies the nodes operating system (default: LINUX).", + "enum": [ + "OPERATING_SYSTEM_UNSPECIFIED", + "LINUX" + ], + "enumDescriptions": [ + "No operating system runtime selected.", + "Linux operating system." + ], + "type": "string" + }, + "taints": { + "description": "The initial taints assigned to nodes of this node pool.", + "items": { + "$ref": "NodeTaint" + }, + "type": "array" + } + }, + "type": "object" + }, + "BareMetalNodePoolUpgradePolicy": { + "description": "BareMetalNodePoolUpgradePolicy defines the node pool upgrade policy.", + "id": "BareMetalNodePoolUpgradePolicy", + "properties": { + "parallelUpgradeConfig": { + "$ref": "BareMetalParallelUpgradeConfig", + "description": "The parallel upgrade settings for worker node pools." + } + }, + "type": "object" + }, + "BareMetalOsEnvironmentConfig": { + "description": "Specifies operating system settings for cluster provisioning.", + "id": "BareMetalOsEnvironmentConfig", + "properties": { + "packageRepoExcluded": { + "description": "Whether the package repo should not be included when initializing bare metal machines.", + "type": "boolean" + } + }, + "type": "object" + }, + "BareMetalParallelUpgradeConfig": { + "description": "BareMetalParallelUpgradeConfig defines the parallel upgrade settings for worker node pools.", + "id": "BareMetalParallelUpgradeConfig", + "properties": { + "concurrentNodes": { + "description": "The maximum number of nodes that can be upgraded at once.", + "format": "int32", + "type": "integer" + }, + "minimumAvailableNodes": { + "description": "The minimum number of nodes that should be healthy and available during an upgrade. If set to the default value of 0, it is possible that none of the nodes will be available during an upgrade.", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "BareMetalPortConfig": { + "description": "Specifies load balancer ports for the bare metal user cluster.", + "id": "BareMetalPortConfig", + "properties": { + "controlPlaneLoadBalancerPort": { + "description": "The port that control plane hosted load balancers will listen on.", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "BareMetalProxyConfig": { + "description": "Specifies the cluster proxy configuration.", + "id": "BareMetalProxyConfig", + "properties": { + "noProxy": { + "description": "A list of IPs, hostnames, and domains that should skip the proxy. Examples: [\"127.0.0.1\", \"example.com\", \".corp\", \"localhost\"].", + "items": { + "type": "string" + }, + "type": "array" + }, + "uri": { + "description": "Required. Specifies the address of your proxy server. Examples: `http://domain` Do not provide credentials in the format `http://(username:password@)domain` these will be rejected by the server.", + "type": "string" + } + }, + "type": "object" + }, + "BareMetalSecurityConfig": { + "description": "Specifies the security related settings for the bare metal user cluster.", + "id": "BareMetalSecurityConfig", + "properties": { + "authorization": { + "$ref": "Authorization", + "description": "Configures user access to the user cluster." + } + }, + "type": "object" + }, + "BareMetalSrIovConfig": { + "description": "Specifies the SR-IOV networking operator config.", + "id": "BareMetalSrIovConfig", + "properties": { + "enabled": { + "description": "Whether to install the SR-IOV operator.", + "type": "boolean" + } + }, + "type": "object" + }, + "BareMetalStorageConfig": { + "description": "BareMetalStorageConfig specifies the cluster storage configuration.", + "id": "BareMetalStorageConfig", + "properties": { + "lvpNodeMountsConfig": { + "$ref": "BareMetalLvpConfig", + "description": "Required. Specifies the config for local PersistentVolumes backed by mounted node disks. These disks need to be formatted and mounted by the user, which can be done before or after cluster creation." + }, + "lvpShareConfig": { + "$ref": "BareMetalLvpShareConfig", + "description": "Required. Specifies the config for local PersistentVolumes backed by subdirectories in a shared filesystem. These subdirectores are automatically created during cluster creation." + } + }, + "type": "object" + }, + "BareMetalVersionInfo": { + "description": "Contains information about a specific Anthos on bare metal version.", + "id": "BareMetalVersionInfo", + "properties": { + "dependencies": { + "description": "The list of upgrade dependencies for this version.", + "items": { + "$ref": "UpgradeDependency" + }, + "type": "array" + }, + "hasDependencies": { + "description": "If set, the cluster dependencies (e.g. the admin cluster, other user clusters managed by the same admin cluster, version skew policy, etc) must be upgraded before this version can be installed or upgraded to.", + "type": "boolean" + }, + "version": { + "description": "Version number e.g. 1.13.1.", + "type": "string" + } + }, + "type": "object" + }, + "BareMetalVipConfig": { + "description": "Specifies the VIP config for the bare metal load balancer.", + "id": "BareMetalVipConfig", + "properties": { + "controlPlaneVip": { + "description": "The VIP which you previously set aside for the Kubernetes API of this bare metal user cluster.", + "type": "string" + }, + "ingressVip": { + "description": "The VIP which you previously set aside for ingress traffic into this bare metal user cluster.", + "type": "string" + } + }, + "type": "object" + }, + "BareMetalWorkloadNodeConfig": { + "description": "Specifies the workload node configurations.", + "id": "BareMetalWorkloadNodeConfig", + "properties": { + "containerRuntime": { + "description": "Specifies which container runtime will be used.", + "enum": [ + "CONTAINER_RUNTIME_UNSPECIFIED", + "CONTAINERD" + ], + "enumDescriptions": [ + "No container runtime selected.", + "Containerd runtime." + ], + "type": "string" + }, + "maxPodsPerNode": { + "description": "The maximum number of pods a node can run. The size of the CIDR range assigned to the node will be derived from this parameter.", + "format": "int64", + "type": "string" + } + }, + "type": "object" + }, + "BinaryAuthorization": { + "description": "Configuration for Binary Authorization.", + "id": "BinaryAuthorization", + "properties": { + "evaluationMode": { + "description": "Mode of operation for binauthz policy evaluation. If unspecified, defaults to DISABLED.", + "enum": [ + "EVALUATION_MODE_UNSPECIFIED", + "DISABLED", + "PROJECT_SINGLETON_POLICY_ENFORCE" + ], + "enumDescriptions": [ + "Default value", + "Disable BinaryAuthorization", + "Enforce Kubernetes admission requests with BinaryAuthorization using the project's singleton policy." + ], + "type": "string" + } + }, + "type": "object" + }, + "Binding": { + "description": "Associates `members`, or principals, with a `role`.", + "id": "Binding", + "properties": { + "condition": { + "$ref": "Expr", + "description": "The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the principals in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies)." + }, + "members": { + "description": "Specifies the principals requesting access for a Google Cloud resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. Does not include identities that come from external identity providers (IdPs) through identity federation. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a Google service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `serviceAccount:{projectid}.svc.id.goog[{namespace}/{kubernetes-sa}]`: An identifier for a [Kubernetes service account](https://cloud.google.com/kubernetes-engine/docs/how-to/kubernetes-service-accounts). For example, `my-project.svc.id.goog[my-namespace/my-kubernetes-sa]`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. * `principal://iam.googleapis.com/locations/global/workforcePools/{pool_id}/subject/{subject_attribute_value}`: A single identity in a workforce identity pool. * `principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/group/{group_id}`: All workforce identities in a group. * `principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/attribute.{attribute_name}/{attribute_value}`: All workforce identities with a specific attribute value. * `principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/*`: All identities in a workforce identity pool. * `principal://iam.googleapis.com/projects/{project_number}/locations/global/workloadIdentityPools/{pool_id}/subject/{subject_attribute_value}`: A single identity in a workload identity pool. * `principalSet://iam.googleapis.com/projects/{project_number}/locations/global/workloadIdentityPools/{pool_id}/group/{group_id}`: A workload identity pool group. * `principalSet://iam.googleapis.com/projects/{project_number}/locations/global/workloadIdentityPools/{pool_id}/attribute.{attribute_name}/{attribute_value}`: All identities in a workload identity pool with a certain attribute. * `principalSet://iam.googleapis.com/projects/{project_number}/locations/global/workloadIdentityPools/{pool_id}/*`: All identities in a workload identity pool. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `deleted:principal://iam.googleapis.com/locations/global/workforcePools/{pool_id}/subject/{subject_attribute_value}`: Deleted single identity in a workforce identity pool. For example, `deleted:principal://iam.googleapis.com/locations/global/workforcePools/my-pool-id/subject/my-subject-attribute-value`.", + "items": { + "type": "string" + }, + "type": "array" + }, + "role": { + "description": "Role that is assigned to the list of `members`, or principals. For example, `roles/viewer`, `roles/editor`, or `roles/owner`. For an overview of the IAM roles and permissions, see the [IAM documentation](https://cloud.google.com/iam/docs/roles-overview). For a list of the available pre-defined roles, see [here](https://cloud.google.com/iam/docs/understanding-roles).", + "type": "string" + } + }, + "type": "object" + }, + "CancelOperationRequest": { + "description": "The request message for Operations.CancelOperation.", + "id": "CancelOperationRequest", + "properties": {}, + "type": "object" + }, + "ClusterUser": { + "description": "ClusterUser configures user principals for an RBAC policy.", + "id": "ClusterUser", + "properties": { + "username": { + "description": "Required. The name of the user, e.g. `my-gcp-id@gmail.com`.", + "type": "string" + } + }, + "type": "object" + }, + "Empty": { + "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }", + "id": "Empty", + "properties": {}, + "type": "object" + }, + "EnrollBareMetalAdminClusterRequest": { + "description": "Message for enrolling an existing bare metal admin cluster to the GKE on-prem API.", + "id": "EnrollBareMetalAdminClusterRequest", + "properties": { + "bareMetalAdminClusterId": { + "description": "User provided OnePlatform identifier that is used as part of the resource name. This must be unique among all GKE on-prem clusters within a project and location and will return a 409 if the cluster already exists. (https://tools.ietf.org/html/rfc1123) format.", + "type": "string" + }, + "membership": { + "description": "Required. This is the full resource name of this admin cluster's fleet membership.", + "type": "string" + } + }, + "type": "object" + }, + "EnrollBareMetalClusterRequest": { + "description": "Message for enrolling an existing bare metal cluster to the Anthos On-Prem API.", + "id": "EnrollBareMetalClusterRequest", + "properties": { + "adminClusterMembership": { + "description": "Required. The admin cluster this bare metal user cluster belongs to. This is the full resource name of the admin cluster's fleet membership. In the future, references to other resource types might be allowed if admin clusters are modeled as their own resources.", + "type": "string" + }, + "bareMetalClusterId": { + "description": "User provided OnePlatform identifier that is used as part of the resource name. This must be unique among all bare metal clusters within a project and location and will return a 409 if the cluster already exists. (https://tools.ietf.org/html/rfc1123) format.", + "type": "string" + }, + "localName": { + "description": "Optional. The object name of the bare metal cluster custom resource on the associated admin cluster. This field is used to support conflicting resource names when enrolling existing clusters to the API. When not provided, this field will resolve to the bare_metal_cluster_id. Otherwise, it must match the object name of the bare metal cluster custom resource. It is not modifiable outside / beyond the enrollment operation.", + "type": "string" + } + }, + "type": "object" + }, + "EnrollBareMetalNodePoolRequest": { + "description": "Message for enrolling an existing bare metal node pool to the GKE on-prem API.", + "id": "EnrollBareMetalNodePoolRequest", + "properties": { + "bareMetalNodePoolId": { + "description": "User provided OnePlatform identifier that is used as part of the resource name. (https://tools.ietf.org/html/rfc1123) format.", + "type": "string" + }, + "validateOnly": { + "description": "If set, only validate the request, but do not actually enroll the node pool.", + "type": "boolean" + } + }, + "type": "object" + }, + "EnrollVmwareAdminClusterRequest": { + "description": "Message for enrolling an existing VMware admin cluster to the GKE on-prem API.", + "id": "EnrollVmwareAdminClusterRequest", + "properties": { + "membership": { + "description": "Required. This is the full resource name of this admin cluster's fleet membership.", + "type": "string" + }, + "vmwareAdminClusterId": { + "description": "User provided OnePlatform identifier that is used as part of the resource name. This must be unique among all GKE on-prem clusters within a project and location and will return a 409 if the cluster already exists. (https://tools.ietf.org/html/rfc1123) format.", + "type": "string" + } + }, + "type": "object" + }, + "EnrollVmwareClusterRequest": { + "description": "Message for enrolling an existing VMware cluster to the Anthos On-Prem API.", + "id": "EnrollVmwareClusterRequest", + "properties": { + "adminClusterMembership": { + "description": "Required. The admin cluster this VMware user cluster belongs to. This is the full resource name of the admin cluster's fleet membership. In the future, references to other resource types might be allowed if admin clusters are modeled as their own resources.", + "type": "string" + }, + "localName": { + "description": "Optional. The object name of the VMware OnPremUserCluster custom resource on the associated admin cluster. This field is used to support conflicting resource names when enrolling existing clusters to the API. When not provided, this field will resolve to the vmware_cluster_id. Otherwise, it must match the object name of the VMware OnPremUserCluster custom resource. It is not modifiable outside / beyond the enrollment operation.", + "type": "string" + }, + "validateOnly": { + "description": "Validate the request without actually doing any updates.", + "type": "boolean" + }, + "vmwareClusterId": { + "description": "User provided OnePlatform identifier that is used as part of the resource name. This must be unique among all GKE on-prem clusters within a project and location and will return a 409 if the cluster already exists. (https://tools.ietf.org/html/rfc1123) format.", + "type": "string" + } + }, + "type": "object" + }, + "EnrollVmwareNodePoolRequest": { + "description": "Message for enrolling a VMware node pool.", + "id": "EnrollVmwareNodePoolRequest", + "properties": { + "vmwareNodePoolId": { + "description": "The target node pool id to be enrolled.", + "type": "string" + } + }, + "type": "object" + }, + "Expr": { + "description": "Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() \u003c 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' \u0026\u0026 document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.", + "id": "Expr", + "properties": { + "description": { + "description": "Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.", + "type": "string" + }, + "expression": { + "description": "Textual representation of an expression in Common Expression Language syntax.", + "type": "string" + }, + "location": { + "description": "Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.", + "type": "string" + }, + "title": { + "description": "Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.", + "type": "string" + } + }, + "type": "object" + }, + "Fleet": { + "description": "Fleet related configuration. Fleets are a Google Cloud concept for logically organizing clusters, letting you use and manage multi-cluster capabilities and apply consistent policies across your systems. See [Anthos Fleets](`https://cloud.google.com/anthos/multicluster-management/fleets`) for more details on Anthos multi-cluster capabilities using Fleets. ##", + "id": "Fleet", + "properties": { + "membership": { + "description": "Output only. The name of the managed fleet Membership resource associated to this cluster. Membership names are formatted as `projects//locations//memberships/`.", + "readOnly": true, + "type": "string" + } + }, + "type": "object" + }, + "ListBareMetalAdminClustersResponse": { + "description": "Response message for listing bare metal admin clusters.", + "id": "ListBareMetalAdminClustersResponse", + "properties": { + "bareMetalAdminClusters": { + "description": "The list of bare metal admin cluster.", + "items": { + "$ref": "BareMetalAdminCluster" + }, + "type": "array" + }, + "nextPageToken": { + "description": "A token identifying a page of results the server should return. If the token is not empty this means that more results are available and should be retrieved by repeating the request with the provided page token.", + "type": "string" + }, + "unreachable": { + "description": "Locations that could not be reached.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "ListBareMetalClustersResponse": { + "description": "Response message for listing bare metal Clusters.", + "id": "ListBareMetalClustersResponse", + "properties": { + "bareMetalClusters": { + "description": "The list of bare metal Clusters.", + "items": { + "$ref": "BareMetalCluster" + }, + "type": "array" + }, + "nextPageToken": { + "description": "A token identifying a page of results the server should return. If the token is not empty this means that more results are available and should be retrieved by repeating the request with the provided page token.", + "type": "string" + }, + "unreachable": { + "description": "Locations that could not be reached.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "ListBareMetalNodePoolsResponse": { + "description": "Response message for listing bare metal node pools.", + "id": "ListBareMetalNodePoolsResponse", + "properties": { + "bareMetalNodePools": { + "description": "The node pools from the specified parent resource.", + "items": { + "$ref": "BareMetalNodePool" + }, + "type": "array" + }, + "nextPageToken": { + "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.", + "type": "string" + }, + "unreachable": { + "description": "Locations that could not be reached.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "ListLocationsResponse": { + "description": "The response message for Locations.ListLocations.", + "id": "ListLocationsResponse", + "properties": { + "locations": { + "description": "A list of locations that matches the specified filter in the request.", + "items": { + "$ref": "Location" + }, + "type": "array" + }, + "nextPageToken": { + "description": "The standard List next-page token.", + "type": "string" + } + }, + "type": "object" + }, + "ListOperationsResponse": { + "description": "The response message for Operations.ListOperations.", + "id": "ListOperationsResponse", + "properties": { + "nextPageToken": { + "description": "The standard List next-page token.", + "type": "string" + }, + "operations": { + "description": "A list of operations that matches the specified filter in the request.", + "items": { + "$ref": "Operation" + }, + "type": "array" + } + }, + "type": "object" + }, + "ListVmwareAdminClustersResponse": { + "description": "Response message for listing VMware admin clusters.", + "id": "ListVmwareAdminClustersResponse", + "properties": { + "nextPageToken": { + "description": "A token identifying a page of results the server should return. If the token is not empty this means that more results are available and should be retrieved by repeating the request with the provided page token.", + "type": "string" + }, + "unreachable": { + "description": "Locations that could not be reached.", + "items": { + "type": "string" + }, + "type": "array" + }, + "vmwareAdminClusters": { + "description": "The list of VMware admin cluster.", + "items": { + "$ref": "VmwareAdminCluster" + }, + "type": "array" + } + }, + "type": "object" + }, + "ListVmwareClustersResponse": { + "description": "Response message for listing VMware Clusters.", + "id": "ListVmwareClustersResponse", + "properties": { + "nextPageToken": { + "description": "A token identifying a page of results the server should return. If the token is not empty this means that more results are available and should be retrieved by repeating the request with the provided page token.", + "type": "string" + }, + "unreachable": { + "description": "Locations that could not be reached.", + "items": { + "type": "string" + }, + "type": "array" + }, + "vmwareClusters": { + "description": "The list of VMware Cluster.", + "items": { + "$ref": "VmwareCluster" + }, + "type": "array" + } + }, + "type": "object" + }, + "ListVmwareNodePoolsResponse": { + "description": "Response message for listing VMware node pools.", + "id": "ListVmwareNodePoolsResponse", + "properties": { + "nextPageToken": { + "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.", + "type": "string" + }, + "unreachable": { + "description": "Locations that could not be reached.", + "items": { + "type": "string" + }, + "type": "array" + }, + "vmwareNodePools": { + "description": "The node pools from the specified parent resource.", + "items": { + "$ref": "VmwareNodePool" + }, + "type": "array" + } + }, + "type": "object" + }, + "Location": { + "description": "A resource that represents a Google Cloud location.", + "id": "Location", + "properties": { + "displayName": { + "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\".", + "type": "string" + }, + "labels": { + "additionalProperties": { + "type": "string" + }, + "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}", + "type": "object" + }, + "locationId": { + "description": "The canonical id for this location. For example: `\"us-east1\"`.", + "type": "string" + }, + "metadata": { + "additionalProperties": { + "description": "Properties of the object. Contains field @type with type URL.", + "type": "any" + }, + "description": "Service-specific metadata. For example the available capacity at the given location.", + "type": "object" + }, + "name": { + "description": "Resource name for the location, which may vary between implementations. For example: `\"projects/example-project/locations/us-east1\"`", + "type": "string" + } + }, + "type": "object" + }, + "Metric": { + "description": "Progress metric is (string, int|float|string) pair.", + "id": "Metric", + "properties": { + "doubleValue": { + "description": "For metrics with floating point value.", + "format": "double", + "type": "number" + }, + "intValue": { + "description": "For metrics with integer value.", + "format": "int64", + "type": "string" + }, + "metric": { + "description": "Required. The metric name.", + "enum": [ + "METRIC_ID_UNSPECIFIED", + "NODES_TOTAL", + "NODES_DRAINING", + "NODES_UPGRADING", + "NODES_PENDING_UPGRADE", + "NODES_UPGRADED", + "NODES_FAILED", + "NODES_HEALTHY", + "NODES_RECONCILING", + "NODES_IN_MAINTENANCE", + "PREFLIGHTS_COMPLETED", + "PREFLIGHTS_RUNNING", + "PREFLIGHTS_FAILED", + "PREFLIGHTS_TOTAL" + ], + "enumDescriptions": [ + "Not set.", + "The total number of nodes being actuated.", + "The number of nodes draining.", + "The number of nodes actively upgrading.", + "The number of nodes to be upgraded.", + "The number of nodes upgraded.", + "The number of nodes to fail actuation.", + "The number of nodes healthy.", + "The number of nodes reconciling.", + "The number of nodes in maintenance mode.", + "The number of completed preflight checks.", + "The number of preflight checks running.", + "The number of preflight checks failed.", + "The total number of preflight checks." + ], + "type": "string" + }, + "stringValue": { + "description": "For metrics with custom values (ratios, visual progress, etc.).", + "type": "string" + } + }, + "type": "object" + }, + "NodeTaint": { + "description": "NodeTaint applied to every Kubernetes node in a node pool. Kubernetes taints can be used together with tolerations to control how workloads are scheduled to your nodes. Node taints are permanent.", + "id": "NodeTaint", + "properties": { + "effect": { + "description": "The taint effect.", + "enum": [ + "EFFECT_UNSPECIFIED", + "NO_SCHEDULE", + "PREFER_NO_SCHEDULE", + "NO_EXECUTE" + ], + "enumDescriptions": [ + "Not set.", + "Do not allow new pods to schedule onto the node unless they tolerate the taint, but allow all pods submitted to Kubelet without going through the scheduler to start, and allow all already-running pods to continue running. Enforced by the scheduler.", + "Like TaintEffectNoSchedule, but the scheduler tries not to schedule new pods onto the node, rather than prohibiting new pods from scheduling onto the node entirely. Enforced by the scheduler.", + "Evict any already-running pods that do not tolerate the taint. Currently enforced by NodeController." + ], + "type": "string" + }, + "key": { + "description": "Key associated with the effect.", + "type": "string" + }, + "value": { + "description": "Value associated with the effect.", + "type": "string" + } + }, + "type": "object" + }, + "Operation": { + "description": "This resource represents a long-running operation that is the result of a network API call.", + "id": "Operation", + "properties": { + "done": { + "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.", + "type": "boolean" + }, + "error": { + "$ref": "Status", + "description": "The error result of the operation in case of failure or cancellation." + }, + "metadata": { + "additionalProperties": { + "description": "Properties of the object. Contains field @type with type URL.", + "type": "any" + }, + "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.", + "type": "object" + }, + "name": { + "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.", + "type": "string" + }, + "response": { + "additionalProperties": { + "description": "Properties of the object. Contains field @type with type URL.", + "type": "any" + }, + "description": "The normal, successful response of the operation. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.", + "type": "object" + } + }, + "type": "object" + }, + "OperationMetadata": { + "description": "Represents the metadata of the long-running operation.", + "id": "OperationMetadata", + "properties": { + "apiVersion": { + "description": "Output only. API version used to start the operation.", + "readOnly": true, + "type": "string" + }, + "controlPlaneDisconnected": { + "description": "Output only. Denotes if the local managing cluster's control plane is currently disconnected. This is expected to occur temporarily during self-managed cluster upgrades.", + "readOnly": true, + "type": "boolean" + }, + "createTime": { + "description": "Output only. The time the operation was created.", + "format": "google-datetime", + "readOnly": true, + "type": "string" + }, + "endTime": { + "description": "Output only. The time the operation finished running.", + "format": "google-datetime", + "readOnly": true, + "type": "string" + }, + "progress": { + "$ref": "OperationProgress", + "description": "Output only. Detailed progress information for the operation.", + "readOnly": true + }, + "requestedCancellation": { + "description": "Output only. Identifies whether the user has requested cancellation of the operation. Operations that have successfully been cancelled have [Operation.error] value with a [google.rpc.Status.code] of 1, corresponding to `Code.CANCELLED`.", + "readOnly": true, + "type": "boolean" + }, + "statusMessage": { + "description": "Output only. Human-readable status of the operation, if any.", + "readOnly": true, + "type": "string" + }, + "target": { + "description": "Output only. Server-defined resource path for the target of the operation.", + "readOnly": true, + "type": "string" + }, + "type": { + "description": "Output only. Type of operation being executed.", + "enum": [ + "OPERATION_TYPE_UNSPECIFIED", + "CREATE", + "DELETE", + "UPDATE", + "UPGRADE", + "PLATFORM_UPGRADE" + ], + "enumDescriptions": [ + "Not set.", + "The resource is being created.", + "The resource is being deleted.", + "The resource is being updated.", + "The resource is being upgraded.", + "The platform is being upgraded." + ], + "readOnly": true, + "type": "string" + }, + "verb": { + "description": "Output only. Name of the verb executed by the operation.", + "readOnly": true, + "type": "string" + } + }, + "type": "object" + }, + "OperationProgress": { + "description": "Information about operation progress.", + "id": "OperationProgress", + "properties": { + "stages": { + "description": "The stages of the operation.", + "items": { + "$ref": "OperationStage" + }, + "type": "array" + } + }, + "type": "object" + }, + "OperationStage": { + "description": "Information about a particular stage of an operation.", + "id": "OperationStage", + "properties": { + "endTime": { + "description": "Time the stage ended.", + "format": "google-datetime", + "type": "string" + }, + "metrics": { + "description": "Progress metric bundle.", + "items": { + "$ref": "Metric" + }, + "type": "array" + }, + "stage": { + "description": "The high-level stage of the operation.", + "enum": [ + "STAGE_UNSPECIFIED", + "PREFLIGHT_CHECK", + "CONFIGURE", + "DEPLOY", + "HEALTH_CHECK", + "UPDATE" + ], + "enumDescriptions": [ + "Not set.", + "Preflight checks are running.", + "Resource is being configured.", + "Resource is being deployed.", + "Waiting for the resource to become healthy.", + "Resource is being updated." + ], + "type": "string" + }, + "startTime": { + "description": "Time the stage started.", + "format": "google-datetime", + "type": "string" + }, + "state": { + "description": "Output only. State of the stage.", + "enum": [ + "STATE_UNSPECIFIED", + "PENDING", + "RUNNING", + "SUCCEEDED", + "FAILED" + ], + "enumDescriptions": [ + "Not set.", + "The stage is pending.", + "The stage is running", + "The stage has completed successfully.", + "The stage has failed." + ], + "readOnly": true, + "type": "string" + } + }, + "type": "object" + }, + "Policy": { + "description": "An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members`, or principals, to a single `role`. Principals can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** ``` { \"bindings\": [ { \"role\": \"roles/resourcemanager.organizationAdmin\", \"members\": [ \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-project-id@appspot.gserviceaccount.com\" ] }, { \"role\": \"roles/resourcemanager.organizationViewer\", \"members\": [ \"user:eve@example.com\" ], \"condition\": { \"title\": \"expirable access\", \"description\": \"Does not grant access after Sep 2020\", \"expression\": \"request.time \u003c timestamp('2020-10-01T00:00:00.000Z')\", } } ], \"etag\": \"BwWWja0YfJA=\", \"version\": 3 } ``` **YAML example:** ``` bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time \u003c timestamp('2020-10-01T00:00:00.000Z') etag: BwWWja0YfJA= version: 3 ``` For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/).", + "id": "Policy", + "properties": { + "bindings": { + "description": "Associates a list of `members`, or principals, with a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one principal. The `bindings` in a `Policy` can refer to up to 1,500 principals; up to 250 of these principals can be Google groups. Each occurrence of a principal counts towards these limits. For example, if the `bindings` grant 50 different roles to `user:alice@example.com`, and not to any other principal, then you can add another 1,450 principals to the `bindings` in the `Policy`.", + "items": { + "$ref": "Binding" + }, + "type": "array" + }, + "etag": { + "description": "`etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.", + "format": "byte", + "type": "string" + }, + "version": { + "description": "Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "QueryBareMetalAdminVersionConfigResponse": { + "description": "Response message for querying bare metal admin cluster version config.", + "id": "QueryBareMetalAdminVersionConfigResponse", + "properties": { + "versions": { + "description": "List of available versions to install or to upgrade to.", + "items": { + "$ref": "BareMetalVersionInfo" + }, + "type": "array" + } + }, + "type": "object" + }, + "QueryBareMetalVersionConfigResponse": { + "description": "Response message for querying bare metal admin cluster version config.", + "id": "QueryBareMetalVersionConfigResponse", + "properties": { + "versions": { + "description": "List of available versions to install or to upgrade to.", + "items": { + "$ref": "BareMetalVersionInfo" + }, + "type": "array" + } + }, + "type": "object" + }, + "QueryVmwareVersionConfigResponse": { + "description": "Response message for querying VMware user cluster version config.", + "id": "QueryVmwareVersionConfigResponse", + "properties": { + "versions": { + "description": "List of available versions to install or to upgrade to.", + "items": { + "$ref": "VmwareVersionInfo" + }, + "type": "array" + } + }, + "type": "object" + }, + "ResourceCondition": { + "description": "ResourceCondition provides a standard mechanism for higher-level status reporting from controller.", + "id": "ResourceCondition", + "properties": { + "lastTransitionTime": { + "description": "Last time the condition transit from one status to another.", + "format": "google-datetime", + "type": "string" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Machine-readable message indicating details about last transition.", + "type": "string" + }, + "state": { + "description": "state of the condition.", + "enum": [ + "STATE_UNSPECIFIED", + "STATE_TRUE", + "STATE_FALSE", + "STATE_UNKNOWN" + ], + "enumDescriptions": [ + "Not set.", + "Resource is in the condition.", + "Resource is not in the condition.", + "Kubernetes controller can't decide if the resource is in the condition or not." + ], + "type": "string" + }, + "type": { + "description": "Type of the condition. (e.g., ClusterRunning, NodePoolRunning or ServerSidePreflightReady)", + "type": "string" + } + }, + "type": "object" + }, + "ResourceStatus": { + "description": "ResourceStatus describes why a cluster or node pool has a certain status. (e.g., ERROR or DEGRADED).", + "id": "ResourceStatus", + "properties": { + "conditions": { + "description": "ResourceCondition provide a standard mechanism for higher-level status reporting from controller.", + "items": { + "$ref": "ResourceCondition" + }, + "type": "array" + }, + "errorMessage": { + "description": "Human-friendly representation of the error message from controller. The error message can be temporary as the controller controller creates a cluster or node pool. If the error message persists for a longer period of time, it can be used to surface error message to indicate real problems requiring user intervention.", + "type": "string" + } + }, + "type": "object" + }, + "SetIamPolicyRequest": { + "description": "Request message for `SetIamPolicy` method.", + "id": "SetIamPolicyRequest", + "properties": { + "policy": { + "$ref": "Policy", + "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Google Cloud services (such as Projects) might reject them." + } + }, + "type": "object" + }, + "Status": { + "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).", + "id": "Status", + "properties": { + "code": { + "description": "The status code, which should be an enum value of google.rpc.Code.", + "format": "int32", + "type": "integer" + }, + "details": { + "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.", + "items": { + "additionalProperties": { + "description": "Properties of the object. Contains field @type with type URL.", + "type": "any" + }, + "type": "object" + }, + "type": "array" + }, + "message": { + "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.", + "type": "string" + } + }, + "type": "object" + }, + "TestIamPermissionsRequest": { + "description": "Request message for `TestIamPermissions` method.", + "id": "TestIamPermissionsRequest", + "properties": { + "permissions": { + "description": "The set of permissions to check for the `resource`. Permissions with wildcards (such as `*` or `storage.*`) are not allowed. For more information see [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "TestIamPermissionsResponse": { + "description": "Response message for `TestIamPermissions` method.", + "id": "TestIamPermissionsResponse", + "properties": { + "permissions": { + "description": "A subset of `TestPermissionsRequest.permissions` that the caller is allowed.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "UpgradeDependency": { + "description": "UpgradeDependency represents a dependency when upgrading a resource.", + "id": "UpgradeDependency", + "properties": { + "currentVersion": { + "description": "Current version of the dependency e.g. 1.15.0.", + "type": "string" + }, + "membership": { + "description": "Membership names are formatted as `projects//locations//memberships/`.", + "type": "string" + }, + "resourceName": { + "description": "Resource name of the dependency.", + "type": "string" + }, + "targetVersion": { + "description": "Target version of the dependency e.g. 1.16.1. This is the version the dependency needs to be upgraded to before a resource can be upgraded.", + "type": "string" + } + }, + "type": "object" + }, + "ValidationCheck": { + "description": "ValidationCheck represents the result of preflight check.", + "id": "ValidationCheck", + "properties": { + "option": { + "description": "Options used for the validation check", + "enum": [ + "OPTIONS_UNSPECIFIED", + "SKIP_VALIDATION_CHECK_BLOCKING", + "SKIP_VALIDATION_ALL" + ], + "enumDescriptions": [ + "Default value. Standard preflight validation check will be used.", + "Prevent failed preflight checks from failing.", + "Skip all preflight check validations." + ], + "type": "string" + }, + "scenario": { + "description": "Output only. The scenario when the preflight checks were run.", + "enum": [ + "SCENARIO_UNSPECIFIED", + "CREATE", + "UPDATE" + ], + "enumDescriptions": [ + "Default value. This value is unused.", + "The validation check occurred during a create flow.", + "The validation check occurred during an update flow." + ], + "readOnly": true, + "type": "string" + }, + "status": { + "$ref": "ValidationCheckStatus", + "description": "Output only. The detailed validation check status.", + "readOnly": true + } + }, + "type": "object" + }, + "ValidationCheckResult": { + "description": "ValidationCheckResult defines the details about the validation check.", + "id": "ValidationCheckResult", + "properties": { + "category": { + "description": "The category of the validation.", + "type": "string" + }, + "description": { + "description": "The description of the validation check.", + "type": "string" + }, + "details": { + "description": "Detailed failure information, which might be unformatted.", + "type": "string" + }, + "reason": { + "description": "A human-readable message of the check failure.", + "type": "string" + }, + "state": { + "description": "The validation check state.", + "enum": [ + "STATE_UNKNOWN", + "STATE_FAILURE", + "STATE_SKIPPED", + "STATE_FATAL", + "STATE_WARNING" + ], + "enumDescriptions": [ + "The default value. The check result is unknown.", + "The check failed.", + "The check was skipped.", + "The check itself failed to complete.", + "The check encountered a warning." + ], + "type": "string" + } + }, + "type": "object" + }, + "ValidationCheckStatus": { + "description": "ValidationCheckStatus defines the detailed validation check status.", + "id": "ValidationCheckStatus", + "properties": { + "result": { + "description": "Individual checks which failed as part of the Preflight check execution.", + "items": { + "$ref": "ValidationCheckResult" + }, + "type": "array" + } + }, + "type": "object" + }, + "VmwareAAGConfig": { + "description": "Specifies anti affinity group config for the VMware user cluster.", + "id": "VmwareAAGConfig", + "properties": { + "aagConfigDisabled": { + "description": "Spread nodes across at least three physical hosts (requires at least three hosts). Enabled by default.", + "type": "boolean" + } + }, + "type": "object" + }, + "VmwareAddressPool": { + "description": "Represents an IP pool used by the load balancer.", + "id": "VmwareAddressPool", + "properties": { + "addresses": { + "description": "Required. The addresses that are part of this pool. Each address must be either in the CIDR form (1.2.3.0/24) or range form (1.2.3.1-1.2.3.5).", + "items": { + "type": "string" + }, + "type": "array" + }, + "avoidBuggyIps": { + "description": "If true, avoid using IPs ending in .0 or .255. This avoids buggy consumer devices mistakenly dropping IPv4 traffic for those special IP addresses.", + "type": "boolean" + }, + "manualAssign": { + "description": "If true, prevent IP addresses from being automatically assigned.", + "type": "boolean" + }, + "pool": { + "description": "Required. The name of the address pool.", + "type": "string" + } + }, + "type": "object" + }, + "VmwareAdminAddonNodeConfig": { + "description": "VmwareAdminAddonNodeConfig contains add-on node configurations for VMware admin cluster.", + "id": "VmwareAdminAddonNodeConfig", + "properties": { + "autoResizeConfig": { + "$ref": "VmwareAutoResizeConfig", + "description": "VmwareAutoResizeConfig config specifies auto resize config." + } + }, + "type": "object" + }, + "VmwareAdminAuthorizationConfig": { + "description": "VmwareAdminAuthorizationConfig represents configuration for admin cluster authorization.", + "id": "VmwareAdminAuthorizationConfig", + "properties": { + "viewerUsers": { + "description": "For VMware admin clusters, users will be granted the cluster-viewer role on the cluster.", + "items": { + "$ref": "ClusterUser" + }, + "type": "array" + } + }, + "type": "object" + }, + "VmwareAdminCluster": { + "description": "Resource that represents a VMware admin cluster.", + "id": "VmwareAdminCluster", + "properties": { + "addonNode": { + "$ref": "VmwareAdminAddonNodeConfig", + "description": "The VMware admin cluster addon node configuration." + }, + "annotations": { + "additionalProperties": { + "type": "string" + }, + "description": "Annotations on the VMware admin cluster. This field has the same restrictions as Kubernetes annotations. The total size of all keys and values combined is limited to 256k. Key can have 2 segments: prefix (optional) and name (required), separated by a slash (/). Prefix must be a DNS subdomain. Name must be 63 characters or less, begin and end with alphanumerics, with dashes (-), underscores (_), dots (.), and alphanumerics between.", + "type": "object" + }, + "antiAffinityGroups": { + "$ref": "VmwareAAGConfig", + "description": "The VMware admin cluster anti affinity group configuration." + }, + "authorization": { + "$ref": "VmwareAdminAuthorizationConfig", + "description": "The VMware admin cluster authorization configuration." + }, + "autoRepairConfig": { + "$ref": "VmwareAutoRepairConfig", + "description": "The VMware admin cluster auto repair configuration." + }, + "bootstrapClusterMembership": { + "description": "The bootstrap cluster this VMware admin cluster belongs to.", + "type": "string" + }, + "controlPlaneNode": { + "$ref": "VmwareAdminControlPlaneNodeConfig", + "description": "The VMware admin cluster control plane node configuration." + }, + "createTime": { + "description": "Output only. The time at which VMware admin cluster was created.", + "format": "google-datetime", + "readOnly": true, + "type": "string" + }, + "description": { + "description": "A human readable description of this VMware admin cluster.", + "type": "string" + }, + "endpoint": { + "description": "Output only. The DNS name of VMware admin cluster's API server.", + "readOnly": true, + "type": "string" + }, + "etag": { + "description": "This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. Allows clients to perform consistent read-modify-writes through optimistic concurrency control.", + "type": "string" + }, + "fleet": { + "$ref": "Fleet", + "description": "Output only. Fleet configuration for the cluster.", + "readOnly": true + }, + "imageType": { + "description": "The OS image type for the VMware admin cluster.", + "type": "string" + }, + "loadBalancer": { + "$ref": "VmwareAdminLoadBalancerConfig", + "description": "The VMware admin cluster load balancer configuration." + }, + "localName": { + "description": "Output only. The object name of the VMware OnPremAdminCluster custom resource. This field is used to support conflicting names when enrolling existing clusters to the API. When used as a part of cluster enrollment, this field will differ from the ID in the resource name. For new clusters, this field will match the user provided cluster name and be visible in the last component of the resource name. It is not modifiable. All users should use this name to access their cluster using gkectl or kubectl and should expect to see the local name when viewing admin cluster controller logs.", + "readOnly": true, + "type": "string" + }, + "name": { + "description": "Immutable. The VMware admin cluster resource name.", + "type": "string" + }, + "networkConfig": { + "$ref": "VmwareAdminNetworkConfig", + "description": "The VMware admin cluster network configuration." + }, + "onPremVersion": { + "description": "The Anthos clusters on the VMware version for the admin cluster.", + "type": "string" + }, + "platformConfig": { + "$ref": "VmwarePlatformConfig", + "description": "The VMware platform configuration." + }, + "preparedSecrets": { + "$ref": "VmwareAdminPreparedSecretsConfig", + "description": "Output only. The VMware admin cluster prepared secrets configuration. It should always be enabled by the Central API, instead of letting users set it.", + "readOnly": true + }, + "reconciling": { + "description": "Output only. If set, there are currently changes in flight to the VMware admin cluster.", + "readOnly": true, + "type": "boolean" + }, + "state": { + "description": "Output only. The current state of VMware admin cluster.", + "enum": [ + "STATE_UNSPECIFIED", + "PROVISIONING", + "RUNNING", + "RECONCILING", + "STOPPING", + "ERROR", + "DEGRADED" + ], + "enumDescriptions": [ + "Not set.", + "The PROVISIONING state indicates the cluster is being created.", + "The RUNNING state indicates the cluster has been created and is fully usable.", + "The RECONCILING state indicates that the cluster is being updated. It remains available, but potentially with degraded performance.", + "The STOPPING state indicates the cluster is being deleted.", + "The ERROR state indicates the cluster is in a broken unrecoverable state.", + "The DEGRADED state indicates the cluster requires user action to restore full functionality." + ], + "readOnly": true, + "type": "string" + }, + "status": { + "$ref": "ResourceStatus", + "description": "Output only. ResourceStatus representing detailed cluster state.", + "readOnly": true + }, + "uid": { + "description": "Output only. The unique identifier of the VMware admin cluster.", + "readOnly": true, + "type": "string" + }, + "updateTime": { + "description": "Output only. The time at which VMware admin cluster was last updated.", + "format": "google-datetime", + "readOnly": true, + "type": "string" + }, + "vcenter": { + "$ref": "VmwareAdminVCenterConfig", + "description": "The VMware admin cluster VCenter configuration." + } + }, + "type": "object" + }, + "VmwareAdminControlPlaneNodeConfig": { + "description": "VmwareAdminControlPlaneNodeConfig contains control plane node configuration for VMware admin cluster.", + "id": "VmwareAdminControlPlaneNodeConfig", + "properties": { + "cpus": { + "description": "The number of vCPUs for the control-plane node of the admin cluster.", + "format": "int64", + "type": "string" + }, + "memory": { + "description": "The number of mebibytes of memory for the control-plane node of the admin cluster.", + "format": "int64", + "type": "string" + }, + "replicas": { + "description": "The number of control plane nodes for this VMware admin cluster. (default: 1 replica).", + "format": "int64", + "type": "string" + } + }, + "type": "object" + }, + "VmwareAdminF5BigIpConfig": { + "description": "VmwareAdminF5BigIpConfig represents configuration parameters for an F5 BIG-IP load balancer.", + "id": "VmwareAdminF5BigIpConfig", + "properties": { + "address": { + "description": "The load balancer's IP address.", + "type": "string" + }, + "partition": { + "description": "The preexisting partition to be used by the load balancer. This partition is usually created for the admin cluster for example: 'my-f5-admin-partition'.", + "type": "string" + }, + "snatPool": { + "description": "The pool name. Only necessary, if using SNAT.", + "type": "string" + } + }, + "type": "object" + }, + "VmwareAdminHAControlPlaneConfig": { + "description": "Specifies HA admin control plane config.", + "id": "VmwareAdminHAControlPlaneConfig", + "properties": { + "controlPlaneIpBlock": { + "$ref": "VmwareIpBlock", + "description": "Static IP addresses for the admin control plane nodes." + } + }, + "type": "object" + }, + "VmwareAdminLoadBalancerConfig": { + "description": "VmwareAdminLoadBalancerConfig contains load balancer configuration for VMware admin cluster.", + "id": "VmwareAdminLoadBalancerConfig", + "properties": { + "f5Config": { + "$ref": "VmwareAdminF5BigIpConfig", + "description": "Configuration for F5 Big IP typed load balancers." + }, + "manualLbConfig": { + "$ref": "VmwareAdminManualLbConfig", + "description": "Manually configured load balancers." + }, + "metalLbConfig": { + "$ref": "VmwareAdminMetalLbConfig", + "description": "MetalLB load balancers." + }, + "seesawConfig": { + "$ref": "VmwareAdminSeesawConfig", + "description": "Output only. Configuration for Seesaw typed load balancers.", + "readOnly": true + }, + "vipConfig": { + "$ref": "VmwareAdminVipConfig", + "description": "The VIPs used by the load balancer." + } + }, + "type": "object" + }, + "VmwareAdminManualLbConfig": { + "id": "VmwareAdminManualLbConfig", + "properties": { + "addonsNodePort": { + "description": "NodePort for add-ons server in the admin cluster.", + "format": "int32", + "type": "integer" + }, + "controlPlaneNodePort": { + "description": "NodePort for control plane service. The Kubernetes API server in the admin cluster is implemented as a Service of type NodePort (ex. 30968).", + "format": "int32", + "type": "integer" + }, + "ingressHttpNodePort": { + "description": "NodePort for ingress service's http. The ingress service in the admin cluster is implemented as a Service of type NodePort (ex. 32527).", + "format": "int32", + "type": "integer" + }, + "ingressHttpsNodePort": { + "description": "NodePort for ingress service's https. The ingress service in the admin cluster is implemented as a Service of type NodePort (ex. 30139).", + "format": "int32", + "type": "integer" + }, + "konnectivityServerNodePort": { + "description": "NodePort for konnectivity server service running as a sidecar in each kube-apiserver pod (ex. 30564).", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "VmwareAdminMetalLbConfig": { + "description": "VmwareAdminMetalLbConfig represents configuration parameters for a MetalLB load balancer. For admin clusters, currently no configurations is needed.", + "id": "VmwareAdminMetalLbConfig", + "properties": {}, + "type": "object" + }, + "VmwareAdminNetworkConfig": { + "description": "VmwareAdminNetworkConfig contains network configuration for VMware admin cluster.", + "id": "VmwareAdminNetworkConfig", + "properties": { + "dhcpIpConfig": { + "$ref": "VmwareDhcpIpConfig", + "description": "Configuration settings for a DHCP IP configuration." + }, + "haControlPlaneConfig": { + "$ref": "VmwareAdminHAControlPlaneConfig", + "description": "Configuration for HA admin cluster control plane." + }, + "hostConfig": { + "$ref": "VmwareHostConfig", + "description": "Represents common network settings irrespective of the host's IP address." + }, + "podAddressCidrBlocks": { + "description": "Required. All pods in the cluster are assigned an RFC1918 IPv4 address from these ranges. Only a single range is supported. This field cannot be changed after creation.", + "items": { + "type": "string" + }, + "type": "array" + }, + "serviceAddressCidrBlocks": { + "description": "Required. All services in the cluster are assigned an RFC1918 IPv4 address from these ranges. Only a single range is supported. This field cannot be changed after creation.", + "items": { + "type": "string" + }, + "type": "array" + }, + "staticIpConfig": { + "$ref": "VmwareStaticIpConfig", + "description": "Configuration settings for a static IP configuration." + }, + "vcenterNetwork": { + "description": "vcenter_network specifies vCenter network name.", + "type": "string" + } + }, + "type": "object" + }, + "VmwareAdminPreparedSecretsConfig": { + "description": "VmwareAdminPreparedSecretsConfig represents configuration for admin cluster prepared secrets.", + "id": "VmwareAdminPreparedSecretsConfig", + "properties": { + "enabled": { + "description": "Whether prepared secrets is enabled.", + "type": "boolean" + } + }, + "type": "object" + }, + "VmwareAdminSeesawConfig": { + "description": "VmwareSeesawConfig represents configuration parameters for an already existing Seesaw load balancer. IMPORTANT: Please note that the Anthos On-Prem API will not generate or update Seesaw configurations it can only bind a pre-existing configuration to a new user cluster. IMPORTANT: When attempting to create a user cluster with a pre-existing Seesaw load balancer you will need to follow some preparation steps before calling the 'CreateVmwareCluster' API method. First you will need to create the user cluster's namespace via kubectl. The namespace will need to use the following naming convention : -gke-onprem-mgmt or -gke-onprem-mgmt depending on whether you used the 'VmwareCluster.local_name' to disambiguate collisions; for more context see the documentation of 'VmwareCluster.local_name'. Once the namespace is created you will need to create a secret resource via kubectl. This secret will contain copies of your Seesaw credentials. The Secret must be called 'user-cluster-creds' and contain Seesaw's SSH and Cert credentials. The credentials must be keyed with the following names: 'seesaw-ssh-private-key', 'seesaw-ssh-public-key', 'seesaw-ssh-ca-key', 'seesaw-ssh-ca-cert'.", + "id": "VmwareAdminSeesawConfig", + "properties": { + "enableHa": { + "description": "Enable two load balancer VMs to achieve a highly-available Seesaw load balancer.", + "type": "boolean" + }, + "group": { + "description": "In general the following format should be used for the Seesaw group name: seesaw-for-[cluster_name].", + "type": "string" + }, + "ipBlocks": { + "description": "The IP Blocks to be used by the Seesaw load balancer", + "items": { + "$ref": "VmwareIpBlock" + }, + "type": "array" + }, + "masterIp": { + "description": "MasterIP is the IP announced by the master of Seesaw group.", + "type": "string" + }, + "stackdriverName": { + "description": "Name to be used by Stackdriver.", + "type": "string" + }, + "vms": { + "description": "Names of the VMs created for this Seesaw group.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "VmwareAdminVCenterConfig": { + "description": "VmwareAdminVCenterConfig contains VCenter configuration for VMware admin cluster.", + "id": "VmwareAdminVCenterConfig", + "properties": { + "address": { + "description": "The vCenter IP address.", + "type": "string" + }, + "caCertData": { + "description": "Contains the vCenter CA certificate public key for SSL verification.", + "type": "string" + }, + "cluster": { + "description": "The name of the vCenter cluster for the admin cluster.", + "type": "string" + }, + "dataDisk": { + "description": "The name of the virtual machine disk (VMDK) for the admin cluster.", + "type": "string" + }, + "datacenter": { + "description": "The name of the vCenter datacenter for the admin cluster.", + "type": "string" + }, + "datastore": { + "description": "The name of the vCenter datastore for the admin cluster.", + "type": "string" + }, + "folder": { + "description": "The name of the vCenter folder for the admin cluster.", + "type": "string" + }, + "resourcePool": { + "description": "The name of the vCenter resource pool for the admin cluster.", + "type": "string" + }, + "storagePolicyName": { + "description": "The name of the vCenter storage policy for the user cluster.", + "type": "string" + } + }, + "type": "object" + }, + "VmwareAdminVipConfig": { + "description": "VmwareAdminVipConfig for VMware load balancer configurations.", + "id": "VmwareAdminVipConfig", + "properties": { + "addonsVip": { + "description": "The VIP to configure the load balancer for add-ons.", + "type": "string" + }, + "controlPlaneVip": { + "description": "The VIP which you previously set aside for the Kubernetes API of the admin cluster.", + "type": "string" + } + }, + "type": "object" + }, + "VmwareAutoRepairConfig": { + "description": "Specifies config to enable/disable auto repair. The cluster-health-controller is deployed only if Enabled is true.", + "id": "VmwareAutoRepairConfig", + "properties": { + "enabled": { + "description": "Whether auto repair is enabled.", + "type": "boolean" + } + }, + "type": "object" + }, + "VmwareAutoResizeConfig": { + "description": "Represents auto resizing configurations for the VMware user cluster.", + "id": "VmwareAutoResizeConfig", + "properties": { + "enabled": { + "description": "Whether to enable controle plane node auto resizing.", + "type": "boolean" + } + }, + "type": "object" + }, + "VmwareBundleConfig": { + "description": "VmwareBundleConfig represents configuration for the bundle.", + "id": "VmwareBundleConfig", + "properties": { + "status": { + "$ref": "ResourceStatus", + "description": "Output only. Resource status for the bundle.", + "readOnly": true + }, + "version": { + "description": "The version of the bundle.", + "type": "string" + } + }, + "type": "object" + }, + "VmwareCluster": { + "description": "Resource that represents a VMware user cluster. ##", + "id": "VmwareCluster", + "properties": { + "adminClusterMembership": { + "description": "Required. The admin cluster this VMware user cluster belongs to. This is the full resource name of the admin cluster's fleet membership. In the future, references to other resource types might be allowed if admin clusters are modeled as their own resources.", + "type": "string" + }, + "adminClusterName": { + "description": "Output only. The resource name of the VMware admin cluster hosting this user cluster.", + "readOnly": true, + "type": "string" + }, + "annotations": { + "additionalProperties": { + "type": "string" + }, + "description": "Annotations on the VMware user cluster. This field has the same restrictions as Kubernetes annotations. The total size of all keys and values combined is limited to 256k. Key can have 2 segments: prefix (optional) and name (required), separated by a slash (/). Prefix must be a DNS subdomain. Name must be 63 characters or less, begin and end with alphanumerics, with dashes (-), underscores (_), dots (.), and alphanumerics between.", + "type": "object" + }, + "antiAffinityGroups": { + "$ref": "VmwareAAGConfig", + "description": "AAGConfig specifies whether to spread VMware user cluster nodes across at least three physical hosts in the datacenter." + }, + "authorization": { + "$ref": "Authorization", + "description": "RBAC policy that will be applied and managed by the Anthos On-Prem API." + }, + "autoRepairConfig": { + "$ref": "VmwareAutoRepairConfig", + "description": "Configuration for auto repairing." + }, + "binaryAuthorization": { + "$ref": "BinaryAuthorization", + "description": "Binary Authorization related configurations." + }, + "controlPlaneNode": { + "$ref": "VmwareControlPlaneNodeConfig", + "description": "VMware user cluster control plane nodes must have either 1 or 3 replicas." + }, + "createTime": { + "description": "Output only. The time at which VMware user cluster was created.", + "format": "google-datetime", + "readOnly": true, + "type": "string" + }, + "dataplaneV2": { + "$ref": "VmwareDataplaneV2Config", + "description": "VmwareDataplaneV2Config specifies configuration for Dataplane V2." + }, + "deleteTime": { + "description": "Output only. The time at which VMware user cluster was deleted.", + "format": "google-datetime", + "readOnly": true, + "type": "string" + }, + "description": { + "description": "A human readable description of this VMware user cluster.", + "type": "string" + }, + "disableBundledIngress": { + "description": "Disable bundled ingress.", + "type": "boolean" + }, + "enableControlPlaneV2": { + "description": "Enable control plane V2. Default to false.", + "type": "boolean" + }, + "endpoint": { + "description": "Output only. The DNS name of VMware user cluster's API server.", + "readOnly": true, + "type": "string" + }, + "etag": { + "description": "This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. Allows clients to perform consistent read-modify-writes through optimistic concurrency control.", + "type": "string" + }, + "fleet": { + "$ref": "Fleet", + "description": "Output only. Fleet configuration for the cluster.", + "readOnly": true + }, + "loadBalancer": { + "$ref": "VmwareLoadBalancerConfig", + "description": "Load balancer configuration." + }, + "localName": { + "description": "Output only. The object name of the VMware OnPremUserCluster custom resource on the associated admin cluster. This field is used to support conflicting names when enrolling existing clusters to the API. When used as a part of cluster enrollment, this field will differ from the ID in the resource name. For new clusters, this field will match the user provided cluster name and be visible in the last component of the resource name. It is not modifiable. All users should use this name to access their cluster using gkectl or kubectl and should expect to see the local name when viewing admin cluster controller logs.", + "readOnly": true, + "type": "string" + }, + "name": { + "description": "Immutable. The VMware user cluster resource name.", + "type": "string" + }, + "networkConfig": { + "$ref": "VmwareNetworkConfig", + "description": "The VMware user cluster network configuration." + }, + "onPremVersion": { + "description": "Required. The Anthos clusters on the VMware version for your user cluster.", + "type": "string" + }, + "reconciling": { + "description": "Output only. If set, there are currently changes in flight to the VMware user cluster.", + "readOnly": true, + "type": "boolean" + }, + "state": { + "description": "Output only. The current state of VMware user cluster.", + "enum": [ + "STATE_UNSPECIFIED", + "PROVISIONING", + "RUNNING", + "RECONCILING", + "STOPPING", + "ERROR", + "DEGRADED" + ], + "enumDescriptions": [ + "Not set.", + "The PROVISIONING state indicates the cluster is being created.", + "The RUNNING state indicates the cluster has been created and is fully usable.", + "The RECONCILING state indicates that the cluster is being updated. It remains available, but potentially with degraded performance.", + "The STOPPING state indicates the cluster is being deleted.", + "The ERROR state indicates the cluster is in a broken unrecoverable state.", + "The DEGRADED state indicates the cluster requires user action to restore full functionality." + ], + "readOnly": true, + "type": "string" + }, + "status": { + "$ref": "ResourceStatus", + "description": "Output only. ResourceStatus representing detailed cluster state.", + "readOnly": true + }, + "storage": { + "$ref": "VmwareStorageConfig", + "description": "Storage configuration." + }, + "uid": { + "description": "Output only. The unique identifier of the VMware user cluster.", + "readOnly": true, + "type": "string" + }, + "updateTime": { + "description": "Output only. The time at which VMware user cluster was last updated.", + "format": "google-datetime", + "readOnly": true, + "type": "string" + }, + "upgradePolicy": { + "$ref": "VmwareClusterUpgradePolicy", + "description": "Specifies upgrade policy for the cluster." + }, + "validationCheck": { + "$ref": "ValidationCheck", + "description": "Output only. ValidationCheck represents the result of the preflight check job.", + "readOnly": true + }, + "vcenter": { + "$ref": "VmwareVCenterConfig", + "description": "VmwareVCenterConfig specifies vCenter config for the user cluster. If unspecified, it is inherited from the admin cluster." + }, + "vmTrackingEnabled": { + "description": "Enable VM tracking.", + "type": "boolean" + } + }, + "type": "object" + }, + "VmwareClusterUpgradePolicy": { + "description": "VmwareClusterUpgradePolicy defines the cluster upgrade policy.", + "id": "VmwareClusterUpgradePolicy", + "properties": { + "controlPlaneOnly": { + "description": "Controls whether the upgrade applies to the control plane only.", + "type": "boolean" + } + }, + "type": "object" + }, + "VmwareControlPlaneNodeConfig": { + "description": "Specifies control plane node config for the VMware user cluster.", + "id": "VmwareControlPlaneNodeConfig", + "properties": { + "autoResizeConfig": { + "$ref": "VmwareAutoResizeConfig", + "description": "AutoResizeConfig provides auto resizing configurations." + }, + "cpus": { + "description": "The number of CPUs for each admin cluster node that serve as control planes for this VMware user cluster. (default: 4 CPUs)", + "format": "int64", + "type": "string" + }, + "memory": { + "description": "The megabytes of memory for each admin cluster node that serves as a control plane for this VMware user cluster (default: 8192 MB memory).", + "format": "int64", + "type": "string" + }, + "replicas": { + "description": "The number of control plane nodes for this VMware user cluster. (default: 1 replica).", + "format": "int64", + "type": "string" + }, + "vsphereConfig": { + "$ref": "VmwareControlPlaneVsphereConfig", + "description": "Vsphere-specific config." + } + }, + "type": "object" + }, + "VmwareControlPlaneV2Config": { + "description": "Specifies control plane V2 config.", + "id": "VmwareControlPlaneV2Config", + "properties": { + "controlPlaneIpBlock": { + "$ref": "VmwareIpBlock", + "description": "Static IP addresses for the control plane nodes." + } + }, + "type": "object" + }, + "VmwareControlPlaneVsphereConfig": { + "description": "Specifies control plane node config.", + "id": "VmwareControlPlaneVsphereConfig", + "properties": { + "datastore": { + "description": "The Vsphere datastore used by the control plane Node.", + "type": "string" + }, + "storagePolicyName": { + "description": "The Vsphere storage policy used by the control plane Node.", + "type": "string" + } + }, + "type": "object" + }, + "VmwareDataplaneV2Config": { + "description": "Contains configurations for Dataplane V2, which is optimized dataplane for Kubernetes networking. For more information, see: https://cloud.google.com/kubernetes-engine/docs/concepts/dataplane-v2", + "id": "VmwareDataplaneV2Config", + "properties": { + "advancedNetworking": { + "description": "Enable advanced networking which requires dataplane_v2_enabled to be set true.", + "type": "boolean" + }, + "dataplaneV2Enabled": { + "description": "Enables Dataplane V2.", + "type": "boolean" + }, + "forwardMode": { + "description": "Configure ForwardMode for Dataplane v2.", + "type": "string" + }, + "windowsDataplaneV2Enabled": { + "description": "Enable Dataplane V2 for clusters with Windows nodes.", + "type": "boolean" + } + }, + "type": "object" + }, + "VmwareDhcpIpConfig": { + "description": "Represents the network configuration required for the VMware user clusters with DHCP IP configurations.", + "id": "VmwareDhcpIpConfig", + "properties": { + "enabled": { + "description": "enabled is a flag to mark if DHCP IP allocation is used for VMware user clusters.", + "type": "boolean" + } + }, + "type": "object" + }, + "VmwareF5BigIpConfig": { + "description": "Represents configuration parameters for an F5 BIG-IP load balancer.", + "id": "VmwareF5BigIpConfig", + "properties": { + "address": { + "description": "The load balancer's IP address.", + "type": "string" + }, + "partition": { + "description": "The preexisting partition to be used by the load balancer. This partition is usually created for the admin cluster for example: 'my-f5-admin-partition'.", + "type": "string" + }, + "snatPool": { + "description": "The pool name. Only necessary, if using SNAT.", + "type": "string" + } + }, + "type": "object" + }, + "VmwareHostConfig": { + "description": "Represents the common parameters for all the hosts irrespective of their IP address.", + "id": "VmwareHostConfig", + "properties": { + "dnsSearchDomains": { + "description": "DNS search domains.", + "items": { + "type": "string" + }, + "type": "array" + }, + "dnsServers": { + "description": "DNS servers.", + "items": { + "type": "string" + }, + "type": "array" + }, + "ntpServers": { + "description": "NTP servers.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "VmwareHostIp": { + "description": "Represents VMware user cluster node's network configuration.", + "id": "VmwareHostIp", + "properties": { + "hostname": { + "description": "Hostname of the machine. VM's name will be used if this field is empty.", + "type": "string" + }, + "ip": { + "description": "IP could be an IP address (like 1.2.3.4) or a CIDR (like 1.2.3.0/24).", + "type": "string" + } + }, + "type": "object" + }, + "VmwareIpBlock": { + "description": "Represents a collection of IP addresses to assign to nodes.", + "id": "VmwareIpBlock", + "properties": { + "gateway": { + "description": "The network gateway used by the VMware user cluster.", + "type": "string" + }, + "ips": { + "description": "The node's network configurations used by the VMware user cluster.", + "items": { + "$ref": "VmwareHostIp" + }, + "type": "array" + }, + "netmask": { + "description": "The netmask used by the VMware user cluster.", + "type": "string" + } + }, + "type": "object" + }, + "VmwareLoadBalancerConfig": { + "description": "Specifies the locad balancer config for the VMware user cluster.", + "id": "VmwareLoadBalancerConfig", + "properties": { + "f5Config": { + "$ref": "VmwareF5BigIpConfig", + "description": "Configuration for F5 Big IP typed load balancers." + }, + "manualLbConfig": { + "$ref": "VmwareManualLbConfig", + "description": "Manually configured load balancers." + }, + "metalLbConfig": { + "$ref": "VmwareMetalLbConfig", + "description": "Configuration for MetalLB typed load balancers." + }, + "seesawConfig": { + "$ref": "VmwareSeesawConfig", + "description": "Output only. Configuration for Seesaw typed load balancers.", + "readOnly": true + }, + "vipConfig": { + "$ref": "VmwareVipConfig", + "description": "The VIPs used by the load balancer." + } + }, + "type": "object" + }, + "VmwareManualLbConfig": { + "description": "Represents configuration parameters for an already existing manual load balancer. Given the nature of manual load balancers it is expected that said load balancer will be fully managed by users. IMPORTANT: Please note that the Anthos On-Prem API will not generate or update ManualLB configurations it can only bind a pre-existing configuration to a new VMware user cluster.", + "id": "VmwareManualLbConfig", + "properties": { + "controlPlaneNodePort": { + "description": "NodePort for control plane service. The Kubernetes API server in the admin cluster is implemented as a Service of type NodePort (ex. 30968).", + "format": "int32", + "type": "integer" + }, + "ingressHttpNodePort": { + "description": "NodePort for ingress service's http. The ingress service in the admin cluster is implemented as a Service of type NodePort (ex. 32527).", + "format": "int32", + "type": "integer" + }, + "ingressHttpsNodePort": { + "description": "NodePort for ingress service's https. The ingress service in the admin cluster is implemented as a Service of type NodePort (ex. 30139).", + "format": "int32", + "type": "integer" + }, + "konnectivityServerNodePort": { + "description": "NodePort for konnectivity server service running as a sidecar in each kube-apiserver pod (ex. 30564).", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "VmwareMetalLbConfig": { + "description": "Represents configuration parameters for the MetalLB load balancer.", + "id": "VmwareMetalLbConfig", + "properties": { + "addressPools": { + "description": "Required. AddressPools is a list of non-overlapping IP pools used by load balancer typed services. All addresses must be routable to load balancer nodes. IngressVIP must be included in the pools.", + "items": { + "$ref": "VmwareAddressPool" + }, + "type": "array" + } + }, + "type": "object" + }, + "VmwareNetworkConfig": { + "description": "Specifies network config for the VMware user cluster.", + "id": "VmwareNetworkConfig", + "properties": { + "controlPlaneV2Config": { + "$ref": "VmwareControlPlaneV2Config", + "description": "Configuration for control plane V2 mode." + }, + "dhcpIpConfig": { + "$ref": "VmwareDhcpIpConfig", + "description": "Configuration settings for a DHCP IP configuration." + }, + "hostConfig": { + "$ref": "VmwareHostConfig", + "description": "Represents common network settings irrespective of the host's IP address." + }, + "podAddressCidrBlocks": { + "description": "Required. All pods in the cluster are assigned an RFC1918 IPv4 address from these ranges. Only a single range is supported. This field cannot be changed after creation.", + "items": { + "type": "string" + }, + "type": "array" + }, + "serviceAddressCidrBlocks": { + "description": "Required. All services in the cluster are assigned an RFC1918 IPv4 address from these ranges. Only a single range is supported. This field cannot be changed after creation.", + "items": { + "type": "string" + }, + "type": "array" + }, + "staticIpConfig": { + "$ref": "VmwareStaticIpConfig", + "description": "Configuration settings for a static IP configuration." + }, + "vcenterNetwork": { + "description": "vcenter_network specifies vCenter network name. Inherited from the admin cluster.", + "type": "string" + } + }, + "type": "object" + }, + "VmwareNodeConfig": { + "description": "Parameters that describe the configuration of all nodes within a given node pool.", + "id": "VmwareNodeConfig", + "properties": { + "bootDiskSizeGb": { + "description": "VMware disk size to be used during creation.", + "format": "int64", + "type": "string" + }, + "cpus": { + "description": "The number of CPUs for each node in the node pool.", + "format": "int64", + "type": "string" + }, + "enableLoadBalancer": { + "description": "Allow node pool traffic to be load balanced. Only works for clusters with MetalLB load balancers.", + "type": "boolean" + }, + "image": { + "description": "The OS image name in vCenter, only valid when using Windows.", + "type": "string" + }, + "imageType": { + "description": "Required. The OS image to be used for each node in a node pool. Currently `cos`, `ubuntu`, `ubuntu_containerd` and `windows` are supported.", + "type": "string" + }, + "labels": { + "additionalProperties": { + "type": "string" + }, + "description": "The map of Kubernetes labels (key/value pairs) to be applied to each node. These will added in addition to any default label(s) that Kubernetes may apply to the node. In case of conflict in label keys, the applied set may differ depending on the Kubernetes version -- it's best to assume the behavior is undefined and conflicts should be avoided. For more information, including usage and the valid values, see: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/", + "type": "object" + }, + "memoryMb": { + "description": "The megabytes of memory for each node in the node pool.", + "format": "int64", + "type": "string" + }, + "replicas": { + "description": "The number of nodes in the node pool.", + "format": "int64", + "type": "string" + }, + "taints": { + "description": "The initial taints assigned to nodes of this node pool.", + "items": { + "$ref": "NodeTaint" + }, + "type": "array" + }, + "vsphereConfig": { + "$ref": "VmwareVsphereConfig", + "description": "Specifies the vSphere config for node pool." + } + }, + "type": "object" + }, + "VmwareNodePool": { + "description": "Resource VmwareNodePool represents a VMware node pool. ##", + "id": "VmwareNodePool", + "properties": { + "annotations": { + "additionalProperties": { + "type": "string" + }, + "description": "Annotations on the node pool. This field has the same restrictions as Kubernetes annotations. The total size of all keys and values combined is limited to 256k. Key can have 2 segments: prefix (optional) and name (required), separated by a slash (/). Prefix must be a DNS subdomain. Name must be 63 characters or less, begin and end with alphanumerics, with dashes (-), underscores (_), dots (.), and alphanumerics between.", + "type": "object" + }, + "config": { + "$ref": "VmwareNodeConfig", + "description": "Required. The node configuration of the node pool." + }, + "createTime": { + "description": "Output only. The time at which this node pool was created.", + "format": "google-datetime", + "readOnly": true, + "type": "string" + }, + "deleteTime": { + "description": "Output only. The time at which this node pool was deleted. If the resource is not deleted, this must be empty", + "format": "google-datetime", + "readOnly": true, + "type": "string" + }, + "displayName": { + "description": "The display name for the node pool.", + "type": "string" + }, + "etag": { + "description": "This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. Allows clients to perform consistent read-modify-writes through optimistic concurrency control.", + "type": "string" + }, + "name": { + "description": "Immutable. The resource name of this node pool.", + "type": "string" + }, + "nodePoolAutoscaling": { + "$ref": "VmwareNodePoolAutoscalingConfig", + "description": "Node pool autoscaling config for the node pool." + }, + "onPremVersion": { + "description": "Anthos version for the node pool. Defaults to the user cluster version.", + "type": "string" + }, + "reconciling": { + "description": "Output only. If set, there are currently changes in flight to the node pool.", + "readOnly": true, + "type": "boolean" + }, + "state": { + "description": "Output only. The current state of the node pool.", + "enum": [ + "STATE_UNSPECIFIED", + "PROVISIONING", + "RUNNING", + "RECONCILING", + "STOPPING", + "ERROR", + "DEGRADED" + ], + "enumDescriptions": [ + "Not set.", + "The PROVISIONING state indicates the node pool is being created.", + "The RUNNING state indicates the node pool has been created and is fully usable.", + "The RECONCILING state indicates that the node pool is being updated. It remains available, but potentially with degraded performance.", + "The STOPPING state indicates the cluster is being deleted", + "The ERROR state indicates the node pool is in a broken unrecoverable state.", + "The DEGRADED state indicates the node pool requires user action to restore full functionality." + ], + "readOnly": true, + "type": "string" + }, + "status": { + "$ref": "ResourceStatus", + "description": "Output only. ResourceStatus representing the detailed VMware node pool state.", + "readOnly": true + }, + "uid": { + "description": "Output only. The unique identifier of the node pool.", + "readOnly": true, + "type": "string" + }, + "updateTime": { + "description": "Output only. The time at which this node pool was last updated.", + "format": "google-datetime", + "readOnly": true, + "type": "string" + } + }, + "type": "object" + }, + "VmwareNodePoolAutoscalingConfig": { + "description": "NodePoolAutoscaling config for the NodePool to allow for the kubernetes to scale NodePool.", + "id": "VmwareNodePoolAutoscalingConfig", + "properties": { + "maxReplicas": { + "description": "Maximum number of replicas in the NodePool.", + "format": "int32", + "type": "integer" + }, + "minReplicas": { + "description": "Minimum number of replicas in the NodePool.", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "VmwarePlatformConfig": { + "description": "VmwarePlatformConfig represents configuration for the VMware platform.", + "id": "VmwarePlatformConfig", + "properties": { + "bundles": { + "description": "Output only. The list of bundles installed in the admin cluster.", + "items": { + "$ref": "VmwareBundleConfig" + }, + "readOnly": true, + "type": "array" + }, + "platformVersion": { + "description": "Output only. The platform version e.g. 1.13.2.", + "readOnly": true, + "type": "string" + }, + "requiredPlatformVersion": { + "description": "Input only. The required platform version e.g. 1.13.1. If the current platform version is lower than the target version, the platform version will be updated to the target version. If the target version is not installed in the platform (bundle versions), download the target version bundle.", + "type": "string" + }, + "status": { + "$ref": "ResourceStatus", + "description": "Output only. Resource status for the platform.", + "readOnly": true + } + }, + "type": "object" + }, + "VmwareSeesawConfig": { + "description": "VmwareSeesawConfig represents configuration parameters for an already existing Seesaw load balancer. IMPORTANT: Please note that the Anthos On-Prem API will not generate or update Seesaw configurations it can only bind a pre-existing configuration to a new user cluster. IMPORTANT: When attempting to create a user cluster with a pre-existing Seesaw load balancer you will need to follow some preparation steps before calling the 'CreateVmwareCluster' API method. First you will need to create the user cluster's namespace via kubectl. The namespace will need to use the following naming convention : -gke-onprem-mgmt or -gke-onprem-mgmt depending on whether you used the 'VmwareCluster.local_name' to disambiguate collisions; for more context see the documentation of 'VmwareCluster.local_name'. Once the namespace is created you will need to create a secret resource via kubectl. This secret will contain copies of your Seesaw credentials. The Secret must be called 'user-cluster-creds' and contain Seesaw's SSH and Cert credentials. The credentials must be keyed with the following names: 'seesaw-ssh-private-key', 'seesaw-ssh-public-key', 'seesaw-ssh-ca-key', 'seesaw-ssh-ca-cert'.", + "id": "VmwareSeesawConfig", + "properties": { + "enableHa": { + "description": "Enable two load balancer VMs to achieve a highly-available Seesaw load balancer.", + "type": "boolean" + }, + "group": { + "description": "Required. In general the following format should be used for the Seesaw group name: seesaw-for-[cluster_name].", + "type": "string" + }, + "ipBlocks": { + "description": "Required. The IP Blocks to be used by the Seesaw load balancer", + "items": { + "$ref": "VmwareIpBlock" + }, + "type": "array" + }, + "masterIp": { + "description": "Required. MasterIP is the IP announced by the master of Seesaw group.", + "type": "string" + }, + "stackdriverName": { + "description": "Name to be used by Stackdriver.", + "type": "string" + }, + "vms": { + "description": "Names of the VMs created for this Seesaw group.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "VmwareStaticIpConfig": { + "description": "Represents the network configuration required for the VMware user clusters with Static IP configurations.", + "id": "VmwareStaticIpConfig", + "properties": { + "ipBlocks": { + "description": "Represents the configuration values for static IP allocation to nodes.", + "items": { + "$ref": "VmwareIpBlock" + }, + "type": "array" + } + }, + "type": "object" + }, + "VmwareStorageConfig": { + "description": "Specifies vSphere CSI components deployment config in the VMware user cluster.", + "id": "VmwareStorageConfig", + "properties": { + "vsphereCsiDisabled": { + "description": "Whether or not to deploy vSphere CSI components in the VMware user cluster. Enabled by default.", + "type": "boolean" + } + }, + "type": "object" + }, + "VmwareVCenterConfig": { + "description": "Represents configuration for the VMware VCenter for the user cluster.", + "id": "VmwareVCenterConfig", + "properties": { + "address": { + "description": "Output only. The vCenter IP address.", + "readOnly": true, + "type": "string" + }, + "caCertData": { + "description": "Contains the vCenter CA certificate public key for SSL verification.", + "type": "string" + }, + "cluster": { + "description": "The name of the vCenter cluster for the user cluster.", + "type": "string" + }, + "datacenter": { + "description": "The name of the vCenter datacenter for the user cluster.", + "type": "string" + }, + "datastore": { + "description": "The name of the vCenter datastore for the user cluster.", + "type": "string" + }, + "folder": { + "description": "The name of the vCenter folder for the user cluster.", + "type": "string" + }, + "resourcePool": { + "description": "The name of the vCenter resource pool for the user cluster.", + "type": "string" + }, + "storagePolicyName": { + "description": "The name of the vCenter storage policy for the user cluster.", + "type": "string" + } + }, + "type": "object" + }, + "VmwareVersionInfo": { + "description": "Contains information about a specific Anthos on VMware version.", + "id": "VmwareVersionInfo", + "properties": { + "dependencies": { + "description": "The list of upgrade dependencies for this version.", + "items": { + "$ref": "UpgradeDependency" + }, + "type": "array" + }, + "hasDependencies": { + "description": "If set, the cluster dependencies (e.g. the admin cluster, other user clusters managed by the same admin cluster) must be upgraded before this version can be installed or upgraded to.", + "type": "boolean" + }, + "isInstalled": { + "description": "If set, the version is installed in the admin cluster. Otherwise, the version bundle must be downloaded and installed before a user cluster can be created at or upgraded to this version.", + "type": "boolean" + }, + "version": { + "description": "Version number e.g. 1.13.1-gke.1000.", + "type": "string" + } + }, + "type": "object" + }, + "VmwareVipConfig": { + "description": "Specifies the VIP config for the VMware user cluster load balancer.", + "id": "VmwareVipConfig", + "properties": { + "controlPlaneVip": { + "description": "The VIP which you previously set aside for the Kubernetes API of this cluster.", + "type": "string" + }, + "ingressVip": { + "description": "The VIP which you previously set aside for ingress traffic into this cluster.", + "type": "string" + } + }, + "type": "object" + }, + "VmwareVsphereConfig": { + "description": "VmwareVsphereConfig represents configuration for the VMware VCenter for node pool.", + "id": "VmwareVsphereConfig", + "properties": { + "datastore": { + "description": "The name of the vCenter datastore. Inherited from the user cluster.", + "type": "string" + }, + "hostGroups": { + "description": "Vsphere host groups to apply to all VMs in the node pool", + "items": { + "type": "string" + }, + "type": "array" + }, + "tags": { + "description": "Tags to apply to VMs.", + "items": { + "$ref": "VmwareVsphereTag" + }, + "type": "array" + } + }, + "type": "object" + }, + "VmwareVsphereTag": { + "description": "VmwareVsphereTag describes a vSphere tag to be placed on VMs in the node pool. For more information, see https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.vcenterhost.doc/GUID-E8E854DD-AA97-4E0C-8419-CE84F93C4058.html", + "id": "VmwareVsphereTag", + "properties": { + "category": { + "description": "The Vsphere tag category.", + "type": "string" + }, + "tag": { + "description": "The Vsphere tag name.", + "type": "string" + } + }, + "type": "object" + } + }, + "servicePath": "", + "title": "Anthos On-Prem API", + "version": "v1", + "version_module": true +} \ No newline at end of file diff --git a/vendor/google.golang.org/api/gkeonprem/v1/gkeonprem-gen.go b/vendor/google.golang.org/api/gkeonprem/v1/gkeonprem-gen.go new file mode 100644 index 000000000..34e4d17c2 --- /dev/null +++ b/vendor/google.golang.org/api/gkeonprem/v1/gkeonprem-gen.go @@ -0,0 +1,20524 @@ +// Copyright 2024 Google LLC. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated file. DO NOT EDIT. + +// Package gkeonprem provides access to the Anthos On-Prem API. +// +// For product documentation, see: https://cloud.google.com/anthos/clusters/docs/on-prem/ +// +// # Library status +// +// These client libraries are officially supported by Google. However, this +// library is considered complete and is in maintenance mode. This means +// that we will address critical bugs and security issues but will not add +// any new features. +// +// When possible, we recommend using our newer +// [Cloud Client Libraries for Go](https://pkg.go.dev/cloud.google.com/go) +// that are still actively being worked and iterated on. +// +// # Creating a client +// +// Usage example: +// +// import "google.golang.org/api/gkeonprem/v1" +// ... +// ctx := context.Background() +// gkeonpremService, err := gkeonprem.NewService(ctx) +// +// In this example, Google Application Default Credentials are used for +// authentication. For information on how to create and obtain Application +// Default Credentials, see https://developers.google.com/identity/protocols/application-default-credentials. +// +// # Other authentication options +// +// To use an API key for authentication (note: some APIs do not support API +// keys), use [google.golang.org/api/option.WithAPIKey]: +// +// gkeonpremService, err := gkeonprem.NewService(ctx, option.WithAPIKey("AIza...")) +// +// To use an OAuth token (e.g., a user token obtained via a three-legged OAuth +// flow, use [google.golang.org/api/option.WithTokenSource]: +// +// config := &oauth2.Config{...} +// // ... +// token, err := config.Exchange(ctx, ...) +// gkeonpremService, err := gkeonprem.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token))) +// +// See [google.golang.org/api/option.ClientOption] for details on options. +package gkeonprem // import "google.golang.org/api/gkeonprem/v1" + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" + + googleapi "google.golang.org/api/googleapi" + internal "google.golang.org/api/internal" + gensupport "google.golang.org/api/internal/gensupport" + option "google.golang.org/api/option" + internaloption "google.golang.org/api/option/internaloption" + htransport "google.golang.org/api/transport/http" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = gensupport.MarshalJSON +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace +var _ = context.Canceled +var _ = internaloption.WithDefaultEndpoint +var _ = internal.Version + +const apiId = "gkeonprem:v1" +const apiName = "gkeonprem" +const apiVersion = "v1" +const basePath = "https://gkeonprem.googleapis.com/" +const basePathTemplate = "https://gkeonprem.UNIVERSE_DOMAIN/" +const mtlsBasePath = "https://gkeonprem.mtls.googleapis.com/" +const defaultUniverseDomain = "googleapis.com" + +// OAuth2 scopes used by this API. +const ( + // See, edit, configure, and delete your Google Cloud data and see the + // email address for your Google Account. + CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform" +) + +// NewService creates a new Service. +func NewService(ctx context.Context, opts ...option.ClientOption) (*Service, error) { + scopesOption := internaloption.WithDefaultScopes( + "https://www.googleapis.com/auth/cloud-platform", + ) + // NOTE: prepend, so we don't override user-specified scopes. + opts = append([]option.ClientOption{scopesOption}, opts...) + opts = append(opts, internaloption.WithDefaultEndpoint(basePath)) + opts = append(opts, internaloption.WithDefaultEndpointTemplate(basePathTemplate)) + opts = append(opts, internaloption.WithDefaultMTLSEndpoint(mtlsBasePath)) + opts = append(opts, internaloption.WithDefaultUniverseDomain(defaultUniverseDomain)) + client, endpoint, err := htransport.NewClient(ctx, opts...) + if err != nil { + return nil, err + } + s, err := New(client) + if err != nil { + return nil, err + } + if endpoint != "" { + s.BasePath = endpoint + } + return s, nil +} + +// New creates a new Service. It uses the provided http.Client for requests. +// +// Deprecated: please use NewService instead. +// To provide a custom HTTP client, use option.WithHTTPClient. +// If you are using google.golang.org/api/googleapis/transport.APIKey, use option.WithAPIKey with NewService instead. +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Projects = NewProjectsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + UserAgent string // optional additional User-Agent fragment + + Projects *ProjectsService +} + +func (s *Service) userAgent() string { + if s.UserAgent == "" { + return googleapi.UserAgent + } + return googleapi.UserAgent + " " + s.UserAgent +} + +func NewProjectsService(s *Service) *ProjectsService { + rs := &ProjectsService{s: s} + rs.Locations = NewProjectsLocationsService(s) + return rs +} + +type ProjectsService struct { + s *Service + + Locations *ProjectsLocationsService +} + +func NewProjectsLocationsService(s *Service) *ProjectsLocationsService { + rs := &ProjectsLocationsService{s: s} + rs.BareMetalAdminClusters = NewProjectsLocationsBareMetalAdminClustersService(s) + rs.BareMetalClusters = NewProjectsLocationsBareMetalClustersService(s) + rs.Operations = NewProjectsLocationsOperationsService(s) + rs.VmwareAdminClusters = NewProjectsLocationsVmwareAdminClustersService(s) + rs.VmwareClusters = NewProjectsLocationsVmwareClustersService(s) + return rs +} + +type ProjectsLocationsService struct { + s *Service + + BareMetalAdminClusters *ProjectsLocationsBareMetalAdminClustersService + + BareMetalClusters *ProjectsLocationsBareMetalClustersService + + Operations *ProjectsLocationsOperationsService + + VmwareAdminClusters *ProjectsLocationsVmwareAdminClustersService + + VmwareClusters *ProjectsLocationsVmwareClustersService +} + +func NewProjectsLocationsBareMetalAdminClustersService(s *Service) *ProjectsLocationsBareMetalAdminClustersService { + rs := &ProjectsLocationsBareMetalAdminClustersService{s: s} + rs.Operations = NewProjectsLocationsBareMetalAdminClustersOperationsService(s) + return rs +} + +type ProjectsLocationsBareMetalAdminClustersService struct { + s *Service + + Operations *ProjectsLocationsBareMetalAdminClustersOperationsService +} + +func NewProjectsLocationsBareMetalAdminClustersOperationsService(s *Service) *ProjectsLocationsBareMetalAdminClustersOperationsService { + rs := &ProjectsLocationsBareMetalAdminClustersOperationsService{s: s} + return rs +} + +type ProjectsLocationsBareMetalAdminClustersOperationsService struct { + s *Service +} + +func NewProjectsLocationsBareMetalClustersService(s *Service) *ProjectsLocationsBareMetalClustersService { + rs := &ProjectsLocationsBareMetalClustersService{s: s} + rs.BareMetalNodePools = NewProjectsLocationsBareMetalClustersBareMetalNodePoolsService(s) + rs.Operations = NewProjectsLocationsBareMetalClustersOperationsService(s) + return rs +} + +type ProjectsLocationsBareMetalClustersService struct { + s *Service + + BareMetalNodePools *ProjectsLocationsBareMetalClustersBareMetalNodePoolsService + + Operations *ProjectsLocationsBareMetalClustersOperationsService +} + +func NewProjectsLocationsBareMetalClustersBareMetalNodePoolsService(s *Service) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsService { + rs := &ProjectsLocationsBareMetalClustersBareMetalNodePoolsService{s: s} + rs.Operations = NewProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsService(s) + return rs +} + +type ProjectsLocationsBareMetalClustersBareMetalNodePoolsService struct { + s *Service + + Operations *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsService +} + +func NewProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsService(s *Service) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsService { + rs := &ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsService{s: s} + return rs +} + +type ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsService struct { + s *Service +} + +func NewProjectsLocationsBareMetalClustersOperationsService(s *Service) *ProjectsLocationsBareMetalClustersOperationsService { + rs := &ProjectsLocationsBareMetalClustersOperationsService{s: s} + return rs +} + +type ProjectsLocationsBareMetalClustersOperationsService struct { + s *Service +} + +func NewProjectsLocationsOperationsService(s *Service) *ProjectsLocationsOperationsService { + rs := &ProjectsLocationsOperationsService{s: s} + return rs +} + +type ProjectsLocationsOperationsService struct { + s *Service +} + +func NewProjectsLocationsVmwareAdminClustersService(s *Service) *ProjectsLocationsVmwareAdminClustersService { + rs := &ProjectsLocationsVmwareAdminClustersService{s: s} + rs.Operations = NewProjectsLocationsVmwareAdminClustersOperationsService(s) + return rs +} + +type ProjectsLocationsVmwareAdminClustersService struct { + s *Service + + Operations *ProjectsLocationsVmwareAdminClustersOperationsService +} + +func NewProjectsLocationsVmwareAdminClustersOperationsService(s *Service) *ProjectsLocationsVmwareAdminClustersOperationsService { + rs := &ProjectsLocationsVmwareAdminClustersOperationsService{s: s} + return rs +} + +type ProjectsLocationsVmwareAdminClustersOperationsService struct { + s *Service +} + +func NewProjectsLocationsVmwareClustersService(s *Service) *ProjectsLocationsVmwareClustersService { + rs := &ProjectsLocationsVmwareClustersService{s: s} + rs.Operations = NewProjectsLocationsVmwareClustersOperationsService(s) + rs.VmwareNodePools = NewProjectsLocationsVmwareClustersVmwareNodePoolsService(s) + return rs +} + +type ProjectsLocationsVmwareClustersService struct { + s *Service + + Operations *ProjectsLocationsVmwareClustersOperationsService + + VmwareNodePools *ProjectsLocationsVmwareClustersVmwareNodePoolsService +} + +func NewProjectsLocationsVmwareClustersOperationsService(s *Service) *ProjectsLocationsVmwareClustersOperationsService { + rs := &ProjectsLocationsVmwareClustersOperationsService{s: s} + return rs +} + +type ProjectsLocationsVmwareClustersOperationsService struct { + s *Service +} + +func NewProjectsLocationsVmwareClustersVmwareNodePoolsService(s *Service) *ProjectsLocationsVmwareClustersVmwareNodePoolsService { + rs := &ProjectsLocationsVmwareClustersVmwareNodePoolsService{s: s} + rs.Operations = NewProjectsLocationsVmwareClustersVmwareNodePoolsOperationsService(s) + return rs +} + +type ProjectsLocationsVmwareClustersVmwareNodePoolsService struct { + s *Service + + Operations *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsService +} + +func NewProjectsLocationsVmwareClustersVmwareNodePoolsOperationsService(s *Service) *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsService { + rs := &ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsService{s: s} + return rs +} + +type ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsService struct { + s *Service +} + +// Authorization: Authorization defines the On-Prem cluster +// authorization configuration to bootstrap onto the admin cluster. +type Authorization struct { + // AdminUsers: For VMware and bare metal user clusters, users will be + // granted the cluster-admin role on the cluster, which provides full + // administrative access to the cluster. For bare metal admin clusters, + // users will be granted the cluster-view role, which limits users to + // read-only access. + AdminUsers []*ClusterUser `json:"adminUsers,omitempty"` + + // ForceSendFields is a list of field names (e.g. "AdminUsers") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "AdminUsers") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *Authorization) MarshalJSON() ([]byte, error) { + type NoMethod Authorization + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalAdminApiServerArgument: BareMetalAdminApiServerArgument +// represents an arg name->value pair. Only a subset of customized flags +// are supported. Please refer to the API server documentation below to +// know the exact format: +// https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/ +type BareMetalAdminApiServerArgument struct { + // Argument: Required. The argument name as it appears on the API Server + // command line please make sure to remove the leading dashes. + Argument string `json:"argument,omitempty"` + + // Value: Required. The value of the arg as it will be passed to the API + // Server command line. + Value string `json:"value,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Argument") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Argument") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalAdminApiServerArgument) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalAdminApiServerArgument + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalAdminCluster: Resource that represents a bare metal admin +// cluster. +type BareMetalAdminCluster struct { + // Annotations: Annotations on the bare metal admin cluster. This field + // has the same restrictions as Kubernetes annotations. The total size + // of all keys and values combined is limited to 256k. Key can have 2 + // segments: prefix (optional) and name (required), separated by a slash + // (/). Prefix must be a DNS subdomain. Name must be 63 characters or + // less, begin and end with alphanumerics, with dashes (-), underscores + // (_), dots (.), and alphanumerics between. + Annotations map[string]string `json:"annotations,omitempty"` + + // BareMetalVersion: The Anthos clusters on bare metal version for the + // bare metal admin cluster. + BareMetalVersion string `json:"bareMetalVersion,omitempty"` + + // BinaryAuthorization: Binary Authorization related configurations. + BinaryAuthorization *BinaryAuthorization `json:"binaryAuthorization,omitempty"` + + // ClusterOperations: Cluster operations configuration. + ClusterOperations *BareMetalAdminClusterOperationsConfig `json:"clusterOperations,omitempty"` + + // ControlPlane: Control plane configuration. + ControlPlane *BareMetalAdminControlPlaneConfig `json:"controlPlane,omitempty"` + + // CreateTime: Output only. The time at which this bare metal admin + // cluster was created. + CreateTime string `json:"createTime,omitempty"` + + // DeleteTime: Output only. The time at which this bare metal admin + // cluster was deleted. If the resource is not deleted, this must be + // empty + DeleteTime string `json:"deleteTime,omitempty"` + + // Description: A human readable description of this bare metal admin + // cluster. + Description string `json:"description,omitempty"` + + // Endpoint: Output only. The IP address name of bare metal admin + // cluster's API server. + Endpoint string `json:"endpoint,omitempty"` + + // Etag: This checksum is computed by the server based on the value of + // other fields, and may be sent on update and delete requests to ensure + // the client has an up-to-date value before proceeding. Allows clients + // to perform consistent read-modify-writes through optimistic + // concurrency control. + Etag string `json:"etag,omitempty"` + + // Fleet: Output only. Fleet configuration for the cluster. + Fleet *Fleet `json:"fleet,omitempty"` + + // LoadBalancer: Load balancer configuration. + LoadBalancer *BareMetalAdminLoadBalancerConfig `json:"loadBalancer,omitempty"` + + // LocalName: Output only. The object name of the bare metal cluster + // custom resource. This field is used to support conflicting names when + // enrolling existing clusters to the API. When used as a part of + // cluster enrollment, this field will differ from the ID in the + // resource name. For new clusters, this field will match the user + // provided cluster name and be visible in the last component of the + // resource name. It is not modifiable. All users should use this name + // to access their cluster using gkectl or kubectl and should expect to + // see the local name when viewing admin cluster controller logs. + LocalName string `json:"localName,omitempty"` + + // MaintenanceConfig: Maintenance configuration. + MaintenanceConfig *BareMetalAdminMaintenanceConfig `json:"maintenanceConfig,omitempty"` + + // MaintenanceStatus: Output only. MaintenanceStatus representing state + // of maintenance. + MaintenanceStatus *BareMetalAdminMaintenanceStatus `json:"maintenanceStatus,omitempty"` + + // Name: Immutable. The bare metal admin cluster resource name. + Name string `json:"name,omitempty"` + + // NetworkConfig: Network configuration. + NetworkConfig *BareMetalAdminNetworkConfig `json:"networkConfig,omitempty"` + + // NodeAccessConfig: Node access related configurations. + NodeAccessConfig *BareMetalAdminNodeAccessConfig `json:"nodeAccessConfig,omitempty"` + + // NodeConfig: Workload node configuration. + NodeConfig *BareMetalAdminWorkloadNodeConfig `json:"nodeConfig,omitempty"` + + // OsEnvironmentConfig: OS environment related configurations. + OsEnvironmentConfig *BareMetalAdminOsEnvironmentConfig `json:"osEnvironmentConfig,omitempty"` + + // Proxy: Proxy configuration. + Proxy *BareMetalAdminProxyConfig `json:"proxy,omitempty"` + + // Reconciling: Output only. If set, there are currently changes in + // flight to the bare metal Admin Cluster. + Reconciling bool `json:"reconciling,omitempty"` + + // SecurityConfig: Security related configuration. + SecurityConfig *BareMetalAdminSecurityConfig `json:"securityConfig,omitempty"` + + // State: Output only. The current state of the bare metal admin + // cluster. + // + // Possible values: + // "STATE_UNSPECIFIED" - Not set. + // "PROVISIONING" - The PROVISIONING state indicates the cluster is + // being created. + // "RUNNING" - The RUNNING state indicates the cluster has been + // created and is fully usable. + // "RECONCILING" - The RECONCILING state indicates that the cluster is + // being updated. It remains available, but potentially with degraded + // performance. + // "STOPPING" - The STOPPING state indicates the cluster is being + // deleted. + // "ERROR" - The ERROR state indicates the cluster is in a broken + // unrecoverable state. + // "DEGRADED" - The DEGRADED state indicates the cluster requires user + // action to restore full functionality. + State string `json:"state,omitempty"` + + // Status: Output only. ResourceStatus representing detailed cluster + // status. + Status *ResourceStatus `json:"status,omitempty"` + + // Storage: Storage configuration. + Storage *BareMetalAdminStorageConfig `json:"storage,omitempty"` + + // Uid: Output only. The unique identifier of the bare metal admin + // cluster. + Uid string `json:"uid,omitempty"` + + // UpdateTime: Output only. The time at which this bare metal admin + // cluster was last updated. + UpdateTime string `json:"updateTime,omitempty"` + + // ValidationCheck: Output only. ValidationCheck representing the result + // of the preflight check. + ValidationCheck *ValidationCheck `json:"validationCheck,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "Annotations") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Annotations") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalAdminCluster) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalAdminCluster + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalAdminClusterOperationsConfig: +// BareMetalAdminClusterOperationsConfig specifies the admin cluster's +// observability infrastructure. +type BareMetalAdminClusterOperationsConfig struct { + // EnableApplicationLogs: Whether collection of application logs/metrics + // should be enabled (in addition to system logs/metrics). + EnableApplicationLogs bool `json:"enableApplicationLogs,omitempty"` + + // ForceSendFields is a list of field names (e.g. + // "EnableApplicationLogs") to unconditionally include in API requests. + // By default, fields with empty or default values are omitted from API + // requests. However, any non-pointer, non-interface field appearing in + // ForceSendFields will be sent to the server regardless of whether the + // field is empty or not. This may be used to include empty fields in + // Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "EnableApplicationLogs") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalAdminClusterOperationsConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalAdminClusterOperationsConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalAdminControlPlaneConfig: BareMetalAdminControlPlaneConfig +// specifies the control plane configuration. +type BareMetalAdminControlPlaneConfig struct { + // ApiServerArgs: Customizes the default API server args. Only a subset + // of customized flags are supported. Please refer to the API server + // documentation below to know the exact format: + // https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/ + ApiServerArgs []*BareMetalAdminApiServerArgument `json:"apiServerArgs,omitempty"` + + // ControlPlaneNodePoolConfig: Required. Configures the node pool + // running the control plane. If specified the corresponding NodePool + // will be created for the cluster's control plane. The NodePool will + // have the same name and namespace as the cluster. + ControlPlaneNodePoolConfig *BareMetalAdminControlPlaneNodePoolConfig `json:"controlPlaneNodePoolConfig,omitempty"` + + // ForceSendFields is a list of field names (e.g. "ApiServerArgs") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "ApiServerArgs") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalAdminControlPlaneConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalAdminControlPlaneConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalAdminControlPlaneNodePoolConfig: +// BareMetalAdminControlPlaneNodePoolConfig specifies the control plane +// node pool configuration. We have a control plane specific node pool +// config so that we can flexible about supporting control plane +// specific fields in the future. +type BareMetalAdminControlPlaneNodePoolConfig struct { + // NodePoolConfig: Required. The generic configuration for a node pool + // running the control plane. + NodePoolConfig *BareMetalNodePoolConfig `json:"nodePoolConfig,omitempty"` + + // ForceSendFields is a list of field names (e.g. "NodePoolConfig") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "NodePoolConfig") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalAdminControlPlaneNodePoolConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalAdminControlPlaneNodePoolConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalAdminDrainedMachine: BareMetalAdminDrainedMachine represents +// the machines that are drained. +type BareMetalAdminDrainedMachine struct { + // NodeIp: Drained machine IP address. + NodeIp string `json:"nodeIp,omitempty"` + + // ForceSendFields is a list of field names (e.g. "NodeIp") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "NodeIp") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalAdminDrainedMachine) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalAdminDrainedMachine + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalAdminDrainingMachine: BareMetalAdminDrainingMachine +// represents the machines that are currently draining. +type BareMetalAdminDrainingMachine struct { + // NodeIp: Draining machine IP address. + NodeIp string `json:"nodeIp,omitempty"` + + // PodCount: The count of pods yet to drain. + PodCount int64 `json:"podCount,omitempty"` + + // ForceSendFields is a list of field names (e.g. "NodeIp") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "NodeIp") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalAdminDrainingMachine) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalAdminDrainingMachine + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalAdminIslandModeCidrConfig: +// BareMetalAdminIslandModeCidrConfig specifies the cluster CIDR +// configuration while running in island mode. +type BareMetalAdminIslandModeCidrConfig struct { + // PodAddressCidrBlocks: Required. All pods in the cluster are assigned + // an RFC1918 IPv4 address from these ranges. This field cannot be + // changed after creation. + PodAddressCidrBlocks []string `json:"podAddressCidrBlocks,omitempty"` + + // ServiceAddressCidrBlocks: Required. All services in the cluster are + // assigned an RFC1918 IPv4 address from these ranges. This field cannot + // be changed after creation. + ServiceAddressCidrBlocks []string `json:"serviceAddressCidrBlocks,omitempty"` + + // ForceSendFields is a list of field names (e.g. + // "PodAddressCidrBlocks") to unconditionally include in API requests. + // By default, fields with empty or default values are omitted from API + // requests. However, any non-pointer, non-interface field appearing in + // ForceSendFields will be sent to the server regardless of whether the + // field is empty or not. This may be used to include empty fields in + // Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "PodAddressCidrBlocks") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalAdminIslandModeCidrConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalAdminIslandModeCidrConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalAdminLoadBalancerConfig: BareMetalAdminLoadBalancerConfig +// specifies the load balancer configuration. +type BareMetalAdminLoadBalancerConfig struct { + // ManualLbConfig: Manually configured load balancers. + ManualLbConfig *BareMetalAdminManualLbConfig `json:"manualLbConfig,omitempty"` + + // PortConfig: Configures the ports that the load balancer will listen + // on. + PortConfig *BareMetalAdminPortConfig `json:"portConfig,omitempty"` + + // VipConfig: The VIPs used by the load balancer. + VipConfig *BareMetalAdminVipConfig `json:"vipConfig,omitempty"` + + // ForceSendFields is a list of field names (e.g. "ManualLbConfig") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "ManualLbConfig") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalAdminLoadBalancerConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalAdminLoadBalancerConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalAdminMachineDrainStatus: BareMetalAdminMachineDrainStatus +// represents the status of bare metal node machines that are undergoing +// drain operations. +type BareMetalAdminMachineDrainStatus struct { + // DrainedMachines: The list of drained machines. + DrainedMachines []*BareMetalAdminDrainedMachine `json:"drainedMachines,omitempty"` + + // DrainingMachines: The list of draning machines. + DrainingMachines []*BareMetalAdminDrainingMachine `json:"drainingMachines,omitempty"` + + // ForceSendFields is a list of field names (e.g. "DrainedMachines") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "DrainedMachines") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalAdminMachineDrainStatus) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalAdminMachineDrainStatus + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalAdminMaintenanceConfig: BareMetalAdminMaintenanceConfig +// specifies configurations to put bare metal Admin cluster CRs nodes in +// and out of maintenance. +type BareMetalAdminMaintenanceConfig struct { + // MaintenanceAddressCidrBlocks: Required. All IPv4 address from these + // ranges will be placed into maintenance mode. Nodes in maintenance + // mode will be cordoned and drained. When both of these are true, the + // "baremetal.cluster.gke.io/maintenance" annotation will be set on the + // node resource. + MaintenanceAddressCidrBlocks []string `json:"maintenanceAddressCidrBlocks,omitempty"` + + // ForceSendFields is a list of field names (e.g. + // "MaintenanceAddressCidrBlocks") to unconditionally include in API + // requests. By default, fields with empty or default values are omitted + // from API requests. However, any non-pointer, non-interface field + // appearing in ForceSendFields will be sent to the server regardless of + // whether the field is empty or not. This may be used to include empty + // fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. + // "MaintenanceAddressCidrBlocks") to include in API requests with the + // JSON null value. By default, fields with empty values are omitted + // from API requests. However, any field with an empty value appearing + // in NullFields will be sent to the server as null. It is an error if a + // field in this list has a non-empty value. This may be used to include + // null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalAdminMaintenanceConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalAdminMaintenanceConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalAdminMaintenanceStatus: BareMetalAdminMaintenanceStatus +// represents the maintenance status for bare metal Admin cluster CR's +// nodes. +type BareMetalAdminMaintenanceStatus struct { + // MachineDrainStatus: Represents the status of draining and drained + // machine nodes. This is used to show the progress of cluster upgrade. + MachineDrainStatus *BareMetalAdminMachineDrainStatus `json:"machineDrainStatus,omitempty"` + + // ForceSendFields is a list of field names (e.g. "MachineDrainStatus") + // to unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "MachineDrainStatus") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalAdminMaintenanceStatus) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalAdminMaintenanceStatus + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalAdminManualLbConfig: BareMetalAdminManualLbConfig represents +// configuration parameters for a manual load balancer. +type BareMetalAdminManualLbConfig struct { + // Enabled: Whether manual load balancing is enabled. + Enabled bool `json:"enabled,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Enabled") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Enabled") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalAdminManualLbConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalAdminManualLbConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalAdminNetworkConfig: BareMetalAdminNetworkConfig specifies +// the cluster network configuration. +type BareMetalAdminNetworkConfig struct { + // IslandModeCidr: Configuration for Island mode CIDR. + IslandModeCidr *BareMetalAdminIslandModeCidrConfig `json:"islandModeCidr,omitempty"` + + // ForceSendFields is a list of field names (e.g. "IslandModeCidr") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "IslandModeCidr") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalAdminNetworkConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalAdminNetworkConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalAdminNodeAccessConfig: Specifies the node access related +// settings for the bare metal admin cluster. +type BareMetalAdminNodeAccessConfig struct { + // LoginUser: Required. LoginUser is the user name used to access node + // machines. It defaults to "root" if not set. + LoginUser string `json:"loginUser,omitempty"` + + // ForceSendFields is a list of field names (e.g. "LoginUser") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "LoginUser") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalAdminNodeAccessConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalAdminNodeAccessConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalAdminOsEnvironmentConfig: Specifies operating system +// operation settings for cluster provisioning. +type BareMetalAdminOsEnvironmentConfig struct { + // PackageRepoExcluded: Whether the package repo should be added when + // initializing bare metal machines. + PackageRepoExcluded bool `json:"packageRepoExcluded,omitempty"` + + // ForceSendFields is a list of field names (e.g. "PackageRepoExcluded") + // to unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "PackageRepoExcluded") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalAdminOsEnvironmentConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalAdminOsEnvironmentConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalAdminPortConfig: BareMetalAdminPortConfig is the +// specification of load balancer ports. +type BareMetalAdminPortConfig struct { + // ControlPlaneLoadBalancerPort: The port that control plane hosted load + // balancers will listen on. + ControlPlaneLoadBalancerPort int64 `json:"controlPlaneLoadBalancerPort,omitempty"` + + // ForceSendFields is a list of field names (e.g. + // "ControlPlaneLoadBalancerPort") to unconditionally include in API + // requests. By default, fields with empty or default values are omitted + // from API requests. However, any non-pointer, non-interface field + // appearing in ForceSendFields will be sent to the server regardless of + // whether the field is empty or not. This may be used to include empty + // fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. + // "ControlPlaneLoadBalancerPort") to include in API requests with the + // JSON null value. By default, fields with empty values are omitted + // from API requests. However, any field with an empty value appearing + // in NullFields will be sent to the server as null. It is an error if a + // field in this list has a non-empty value. This may be used to include + // null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalAdminPortConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalAdminPortConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalAdminProxyConfig: BareMetalAdminProxyConfig specifies the +// cluster proxy configuration. +type BareMetalAdminProxyConfig struct { + // NoProxy: A list of IPs, hostnames, and domains that should skip the + // proxy. Examples: ["127.0.0.1", "example.com", ".corp", "localhost"]. + NoProxy []string `json:"noProxy,omitempty"` + + // Uri: Required. Specifies the address of your proxy server. Examples: + // `http://domain` WARNING: Do not provide credentials in the format + // `http://(username:password@)domain` these will be rejected by the + // server. + Uri string `json:"uri,omitempty"` + + // ForceSendFields is a list of field names (e.g. "NoProxy") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "NoProxy") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalAdminProxyConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalAdminProxyConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalAdminSecurityConfig: Specifies the security related settings +// for the bare metal admin cluster. +type BareMetalAdminSecurityConfig struct { + // Authorization: Configures user access to the admin cluster. + Authorization *Authorization `json:"authorization,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Authorization") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Authorization") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalAdminSecurityConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalAdminSecurityConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalAdminStorageConfig: BareMetalAdminStorageConfig specifies +// the cluster storage configuration. +type BareMetalAdminStorageConfig struct { + // LvpNodeMountsConfig: Required. Specifies the config for local + // PersistentVolumes backed by mounted node disks. These disks need to + // be formatted and mounted by the user, which can be done before or + // after cluster creation. + LvpNodeMountsConfig *BareMetalLvpConfig `json:"lvpNodeMountsConfig,omitempty"` + + // LvpShareConfig: Required. Specifies the config for local + // PersistentVolumes backed by subdirectories in a shared filesystem. + // These subdirectores are automatically created during cluster + // creation. + LvpShareConfig *BareMetalLvpShareConfig `json:"lvpShareConfig,omitempty"` + + // ForceSendFields is a list of field names (e.g. "LvpNodeMountsConfig") + // to unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "LvpNodeMountsConfig") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalAdminStorageConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalAdminStorageConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalAdminVipConfig: BareMetalAdminVipConfig for bare metal load +// balancer configurations. +type BareMetalAdminVipConfig struct { + // ControlPlaneVip: The VIP which you previously set aside for the + // Kubernetes API of this bare metal admin cluster. + ControlPlaneVip string `json:"controlPlaneVip,omitempty"` + + // ForceSendFields is a list of field names (e.g. "ControlPlaneVip") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "ControlPlaneVip") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalAdminVipConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalAdminVipConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalAdminWorkloadNodeConfig: BareMetalAdminWorkloadNodeConfig +// specifies the workload node configurations. +type BareMetalAdminWorkloadNodeConfig struct { + // MaxPodsPerNode: The maximum number of pods a node can run. The size + // of the CIDR range assigned to the node will be derived from this + // parameter. By default 110 Pods are created per Node. Upper bound is + // 250 for both HA and non-HA admin cluster. Lower bound is 64 for + // non-HA admin cluster and 32 for HA admin cluster. + MaxPodsPerNode int64 `json:"maxPodsPerNode,omitempty,string"` + + // ForceSendFields is a list of field names (e.g. "MaxPodsPerNode") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "MaxPodsPerNode") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalAdminWorkloadNodeConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalAdminWorkloadNodeConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalApiServerArgument: Represents an arg name->value pair. Only +// a subset of customized flags are supported. For the exact format, +// refer to the API server documentation +// (https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/). +type BareMetalApiServerArgument struct { + // Argument: Required. The argument name as it appears on the API Server + // command line, make sure to remove the leading dashes. + Argument string `json:"argument,omitempty"` + + // Value: Required. The value of the arg as it will be passed to the API + // Server command line. + Value string `json:"value,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Argument") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Argument") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalApiServerArgument) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalApiServerArgument + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalBgpLbConfig: BareMetalBgpLbConfig represents configuration +// parameters for a Border Gateway Protocol (BGP) load balancer. +type BareMetalBgpLbConfig struct { + // AddressPools: Required. AddressPools is a list of non-overlapping IP + // pools used by load balancer typed services. All addresses must be + // routable to load balancer nodes. IngressVIP must be included in the + // pools. + AddressPools []*BareMetalLoadBalancerAddressPool `json:"addressPools,omitempty"` + + // Asn: Required. BGP autonomous system number (ASN) of the cluster. + // This field can be updated after cluster creation. + Asn int64 `json:"asn,omitempty,string"` + + // BgpPeerConfigs: Required. The list of BGP peers that the cluster will + // connect to. At least one peer must be configured for each control + // plane node. Control plane nodes will connect to these peers to + // advertise the control plane VIP. The Services load balancer also uses + // these peers by default. This field can be updated after cluster + // creation. + BgpPeerConfigs []*BareMetalBgpPeerConfig `json:"bgpPeerConfigs,omitempty"` + + // LoadBalancerNodePoolConfig: Specifies the node pool running data + // plane load balancing. L2 connectivity is required among nodes in this + // pool. If missing, the control plane node pool is used for data plane + // load balancing. + LoadBalancerNodePoolConfig *BareMetalLoadBalancerNodePoolConfig `json:"loadBalancerNodePoolConfig,omitempty"` + + // ForceSendFields is a list of field names (e.g. "AddressPools") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "AddressPools") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalBgpLbConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalBgpLbConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalBgpPeerConfig: BareMetalBgpPeerConfig represents +// configuration parameters for a Border Gateway Protocol (BGP) peer. +type BareMetalBgpPeerConfig struct { + // Asn: Required. BGP autonomous system number (ASN) for the network + // that contains the external peer device. + Asn int64 `json:"asn,omitempty,string"` + + // ControlPlaneNodes: The IP address of the control plane node that + // connects to the external peer. If you don't specify any control plane + // nodes, all control plane nodes can connect to the external peer. If + // you specify one or more IP addresses, only the nodes specified + // participate in peering sessions. + ControlPlaneNodes []string `json:"controlPlaneNodes,omitempty"` + + // IpAddress: Required. The IP address of the external peer device. + IpAddress string `json:"ipAddress,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Asn") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Asn") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalBgpPeerConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalBgpPeerConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalCluster: Resource that represents a bare metal user cluster. +type BareMetalCluster struct { + // AdminClusterMembership: Required. The admin cluster this bare metal + // user cluster belongs to. This is the full resource name of the admin + // cluster's fleet membership. + AdminClusterMembership string `json:"adminClusterMembership,omitempty"` + + // AdminClusterName: Output only. The resource name of the bare metal + // admin cluster managing this user cluster. + AdminClusterName string `json:"adminClusterName,omitempty"` + + // Annotations: Annotations on the bare metal user cluster. This field + // has the same restrictions as Kubernetes annotations. The total size + // of all keys and values combined is limited to 256k. Key can have 2 + // segments: prefix (optional) and name (required), separated by a slash + // (/). Prefix must be a DNS subdomain. Name must be 63 characters or + // less, begin and end with alphanumerics, with dashes (-), underscores + // (_), dots (.), and alphanumerics between. + Annotations map[string]string `json:"annotations,omitempty"` + + // BareMetalVersion: Required. The Anthos clusters on bare metal version + // for your user cluster. + BareMetalVersion string `json:"bareMetalVersion,omitempty"` + + // BinaryAuthorization: Binary Authorization related configurations. + BinaryAuthorization *BinaryAuthorization `json:"binaryAuthorization,omitempty"` + + // ClusterOperations: Cluster operations configuration. + ClusterOperations *BareMetalClusterOperationsConfig `json:"clusterOperations,omitempty"` + + // ControlPlane: Required. Control plane configuration. + ControlPlane *BareMetalControlPlaneConfig `json:"controlPlane,omitempty"` + + // CreateTime: Output only. The time when the bare metal user cluster + // was created. + CreateTime string `json:"createTime,omitempty"` + + // DeleteTime: Output only. The time when the bare metal user cluster + // was deleted. If the resource is not deleted, this must be empty + DeleteTime string `json:"deleteTime,omitempty"` + + // Description: A human readable description of this bare metal user + // cluster. + Description string `json:"description,omitempty"` + + // Endpoint: Output only. The IP address of the bare metal user + // cluster's API server. + Endpoint string `json:"endpoint,omitempty"` + + // Etag: Output only. This checksum is computed by the server based on + // the value of other fields, and may be sent on update and delete + // requests to ensure the client has an up-to-date value before + // proceeding. Allows clients to perform consistent read-modify-writes + // through optimistic concurrency control. + Etag string `json:"etag,omitempty"` + + // Fleet: Output only. Fleet configuration for the cluster. + Fleet *Fleet `json:"fleet,omitempty"` + + // LoadBalancer: Required. Load balancer configuration. + LoadBalancer *BareMetalLoadBalancerConfig `json:"loadBalancer,omitempty"` + + // LocalName: Output only. The object name of the bare metal user + // cluster custom resource on the associated admin cluster. This field + // is used to support conflicting names when enrolling existing clusters + // to the API. When used as a part of cluster enrollment, this field + // will differ from the name in the resource name. For new clusters, + // this field will match the user provided cluster name and be visible + // in the last component of the resource name. It is not modifiable. + // When the local name and cluster name differ, the local name is used + // in the admin cluster controller logs. You use the cluster name when + // accessing the cluster using bmctl and kubectl. + LocalName string `json:"localName,omitempty"` + + // MaintenanceConfig: Maintenance configuration. + MaintenanceConfig *BareMetalMaintenanceConfig `json:"maintenanceConfig,omitempty"` + + // MaintenanceStatus: Output only. Status of on-going maintenance tasks. + MaintenanceStatus *BareMetalMaintenanceStatus `json:"maintenanceStatus,omitempty"` + + // Name: Immutable. The bare metal user cluster resource name. + Name string `json:"name,omitempty"` + + // NetworkConfig: Required. Network configuration. + NetworkConfig *BareMetalNetworkConfig `json:"networkConfig,omitempty"` + + // NodeAccessConfig: Node access related configurations. + NodeAccessConfig *BareMetalNodeAccessConfig `json:"nodeAccessConfig,omitempty"` + + // NodeConfig: Workload node configuration. + NodeConfig *BareMetalWorkloadNodeConfig `json:"nodeConfig,omitempty"` + + // OsEnvironmentConfig: OS environment related configurations. + OsEnvironmentConfig *BareMetalOsEnvironmentConfig `json:"osEnvironmentConfig,omitempty"` + + // Proxy: Proxy configuration. + Proxy *BareMetalProxyConfig `json:"proxy,omitempty"` + + // Reconciling: Output only. If set, there are currently changes in + // flight to the bare metal user cluster. + Reconciling bool `json:"reconciling,omitempty"` + + // SecurityConfig: Security related setting configuration. + SecurityConfig *BareMetalSecurityConfig `json:"securityConfig,omitempty"` + + // State: Output only. The current state of the bare metal user cluster. + // + // Possible values: + // "STATE_UNSPECIFIED" - Not set. + // "PROVISIONING" - The PROVISIONING state indicates the cluster is + // being created. + // "RUNNING" - The RUNNING state indicates the cluster has been + // created and is fully usable. + // "RECONCILING" - The RECONCILING state indicates that the cluster is + // being updated. It remains available, but potentially with degraded + // performance. + // "STOPPING" - The STOPPING state indicates the cluster is being + // deleted. + // "ERROR" - The ERROR state indicates the cluster is in a broken + // unrecoverable state. + // "DEGRADED" - The DEGRADED state indicates the cluster requires user + // action to restore full functionality. + State string `json:"state,omitempty"` + + // Status: Output only. Detailed cluster status. + Status *ResourceStatus `json:"status,omitempty"` + + // Storage: Required. Storage configuration. + Storage *BareMetalStorageConfig `json:"storage,omitempty"` + + // Uid: Output only. The unique identifier of the bare metal user + // cluster. + Uid string `json:"uid,omitempty"` + + // UpdateTime: Output only. The time when the bare metal user cluster + // was last updated. + UpdateTime string `json:"updateTime,omitempty"` + + // UpgradePolicy: The cluster upgrade policy. + UpgradePolicy *BareMetalClusterUpgradePolicy `json:"upgradePolicy,omitempty"` + + // ValidationCheck: Output only. The result of the preflight check. + ValidationCheck *ValidationCheck `json:"validationCheck,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. + // "AdminClusterMembership") to unconditionally include in API requests. + // By default, fields with empty or default values are omitted from API + // requests. However, any non-pointer, non-interface field appearing in + // ForceSendFields will be sent to the server regardless of whether the + // field is empty or not. This may be used to include empty fields in + // Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "AdminClusterMembership") + // to include in API requests with the JSON null value. By default, + // fields with empty values are omitted from API requests. However, any + // field with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalCluster) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalCluster + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalClusterOperationsConfig: Specifies the bare metal user +// cluster's observability infrastructure. +type BareMetalClusterOperationsConfig struct { + // EnableApplicationLogs: Whether collection of application logs/metrics + // should be enabled (in addition to system logs/metrics). + EnableApplicationLogs bool `json:"enableApplicationLogs,omitempty"` + + // ForceSendFields is a list of field names (e.g. + // "EnableApplicationLogs") to unconditionally include in API requests. + // By default, fields with empty or default values are omitted from API + // requests. However, any non-pointer, non-interface field appearing in + // ForceSendFields will be sent to the server regardless of whether the + // field is empty or not. This may be used to include empty fields in + // Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "EnableApplicationLogs") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalClusterOperationsConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalClusterOperationsConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalClusterUpgradePolicy: BareMetalClusterUpgradePolicy defines +// the cluster upgrade policy. +type BareMetalClusterUpgradePolicy struct { + // Policy: Specifies which upgrade policy to use. + // + // Possible values: + // "NODE_POOL_POLICY_UNSPECIFIED" - No upgrade policy selected. + // "SERIAL" - Upgrade worker node pools sequentially. + // "CONCURRENT" - Upgrade all worker node pools in parallel. + Policy string `json:"policy,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Policy") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Policy") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalClusterUpgradePolicy) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalClusterUpgradePolicy + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalControlPlaneConfig: Specifies the control plane +// configuration. +type BareMetalControlPlaneConfig struct { + // ApiServerArgs: Customizes the default API server args. Only a subset + // of customized flags are supported. For the exact format, refer to the + // API server documentation + // (https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/). + ApiServerArgs []*BareMetalApiServerArgument `json:"apiServerArgs,omitempty"` + + // ControlPlaneNodePoolConfig: Required. Configures the node pool + // running the control plane. + ControlPlaneNodePoolConfig *BareMetalControlPlaneNodePoolConfig `json:"controlPlaneNodePoolConfig,omitempty"` + + // ForceSendFields is a list of field names (e.g. "ApiServerArgs") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "ApiServerArgs") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalControlPlaneConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalControlPlaneConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalControlPlaneNodePoolConfig: Specifies the control plane node +// pool configuration. +type BareMetalControlPlaneNodePoolConfig struct { + // NodePoolConfig: Required. The generic configuration for a node pool + // running the control plane. + NodePoolConfig *BareMetalNodePoolConfig `json:"nodePoolConfig,omitempty"` + + // ForceSendFields is a list of field names (e.g. "NodePoolConfig") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "NodePoolConfig") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalControlPlaneNodePoolConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalControlPlaneNodePoolConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalDrainedMachine: Represents a machine that is currently +// drained. +type BareMetalDrainedMachine struct { + // NodeIp: Drained machine IP address. + NodeIp string `json:"nodeIp,omitempty"` + + // ForceSendFields is a list of field names (e.g. "NodeIp") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "NodeIp") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalDrainedMachine) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalDrainedMachine + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalDrainingMachine: Represents a machine that is currently +// draining. +type BareMetalDrainingMachine struct { + // NodeIp: Draining machine IP address. + NodeIp string `json:"nodeIp,omitempty"` + + // PodCount: The count of pods yet to drain. + PodCount int64 `json:"podCount,omitempty"` + + // ForceSendFields is a list of field names (e.g. "NodeIp") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "NodeIp") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalDrainingMachine) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalDrainingMachine + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalIslandModeCidrConfig: Specifies the cluster CIDR +// configuration while running in island mode. +type BareMetalIslandModeCidrConfig struct { + // PodAddressCidrBlocks: Required. All pods in the cluster are assigned + // an RFC1918 IPv4 address from these ranges. This field cannot be + // changed after creation. + PodAddressCidrBlocks []string `json:"podAddressCidrBlocks,omitempty"` + + // ServiceAddressCidrBlocks: Required. All services in the cluster are + // assigned an RFC1918 IPv4 address from these ranges. This field is + // mutable after creation starting with version 1.15. + ServiceAddressCidrBlocks []string `json:"serviceAddressCidrBlocks,omitempty"` + + // ForceSendFields is a list of field names (e.g. + // "PodAddressCidrBlocks") to unconditionally include in API requests. + // By default, fields with empty or default values are omitted from API + // requests. However, any non-pointer, non-interface field appearing in + // ForceSendFields will be sent to the server regardless of whether the + // field is empty or not. This may be used to include empty fields in + // Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "PodAddressCidrBlocks") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalIslandModeCidrConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalIslandModeCidrConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalKubeletConfig: KubeletConfig defines the modifiable kubelet +// configurations for bare metal machines. Note: this list includes +// fields supported in GKE (see +// https://cloud.google.com/kubernetes-engine/docs/how-to/node-system-config#kubelet-options). +type BareMetalKubeletConfig struct { + // RegistryBurst: The maximum size of bursty pulls, temporarily allows + // pulls to burst to this number, while still not exceeding + // registry_pull_qps. The value must not be a negative number. Updating + // this field may impact scalability by changing the amount of traffic + // produced by image pulls. Defaults to 10. + RegistryBurst int64 `json:"registryBurst,omitempty"` + + // RegistryPullQps: The limit of registry pulls per second. Setting this + // value to 0 means no limit. Updating this field may impact scalability + // by changing the amount of traffic produced by image pulls. Defaults + // to 5. + RegistryPullQps int64 `json:"registryPullQps,omitempty"` + + // SerializeImagePullsDisabled: Prevents the Kubelet from pulling + // multiple images at a time. We recommend *not* changing the default + // value on nodes that run docker daemon with version < 1.9 or an + // Another Union File System (Aufs) storage backend. Issue + // https://github.com/kubernetes/kubernetes/issues/10959 has more + // details. + SerializeImagePullsDisabled bool `json:"serializeImagePullsDisabled,omitempty"` + + // ForceSendFields is a list of field names (e.g. "RegistryBurst") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "RegistryBurst") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalKubeletConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalKubeletConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalLoadBalancerAddressPool: Represents an IP pool used by the +// load balancer. +type BareMetalLoadBalancerAddressPool struct { + // Addresses: Required. The addresses that are part of this pool. Each + // address must be either in the CIDR form (1.2.3.0/24) or range form + // (1.2.3.1-1.2.3.5). + Addresses []string `json:"addresses,omitempty"` + + // AvoidBuggyIps: If true, avoid using IPs ending in .0 or .255. This + // avoids buggy consumer devices mistakenly dropping IPv4 traffic for + // those special IP addresses. + AvoidBuggyIps bool `json:"avoidBuggyIps,omitempty"` + + // ManualAssign: If true, prevent IP addresses from being automatically + // assigned. + ManualAssign bool `json:"manualAssign,omitempty"` + + // Pool: Required. The name of the address pool. + Pool string `json:"pool,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Addresses") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Addresses") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalLoadBalancerAddressPool) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalLoadBalancerAddressPool + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalLoadBalancerConfig: Specifies the load balancer +// configuration. +type BareMetalLoadBalancerConfig struct { + // BgpLbConfig: Configuration for BGP typed load balancers. When set + // network_config.advanced_networking is automatically set to true. + BgpLbConfig *BareMetalBgpLbConfig `json:"bgpLbConfig,omitempty"` + + // ManualLbConfig: Manually configured load balancers. + ManualLbConfig *BareMetalManualLbConfig `json:"manualLbConfig,omitempty"` + + // MetalLbConfig: Configuration for MetalLB load balancers. + MetalLbConfig *BareMetalMetalLbConfig `json:"metalLbConfig,omitempty"` + + // PortConfig: Configures the ports that the load balancer will listen + // on. + PortConfig *BareMetalPortConfig `json:"portConfig,omitempty"` + + // VipConfig: The VIPs used by the load balancer. + VipConfig *BareMetalVipConfig `json:"vipConfig,omitempty"` + + // ForceSendFields is a list of field names (e.g. "BgpLbConfig") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "BgpLbConfig") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalLoadBalancerConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalLoadBalancerConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalLoadBalancerNodePoolConfig: Specifies the load balancer's +// node pool configuration. +type BareMetalLoadBalancerNodePoolConfig struct { + // NodePoolConfig: The generic configuration for a node pool running a + // load balancer. + NodePoolConfig *BareMetalNodePoolConfig `json:"nodePoolConfig,omitempty"` + + // ForceSendFields is a list of field names (e.g. "NodePoolConfig") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "NodePoolConfig") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalLoadBalancerNodePoolConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalLoadBalancerNodePoolConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalLvpConfig: Specifies the configs for local persistent +// volumes (PVs). +type BareMetalLvpConfig struct { + // Path: Required. The host machine path. + Path string `json:"path,omitempty"` + + // StorageClass: Required. The StorageClass name that PVs will be + // created with. + StorageClass string `json:"storageClass,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Path") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Path") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalLvpConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalLvpConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalLvpShareConfig: Specifies the configs for local persistent +// volumes under a shared file system. +type BareMetalLvpShareConfig struct { + // LvpConfig: Required. Defines the machine path and storage class for + // the LVP Share. + LvpConfig *BareMetalLvpConfig `json:"lvpConfig,omitempty"` + + // SharedPathPvCount: The number of subdirectories to create under path. + SharedPathPvCount int64 `json:"sharedPathPvCount,omitempty"` + + // ForceSendFields is a list of field names (e.g. "LvpConfig") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "LvpConfig") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalLvpShareConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalLvpShareConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalMachineDrainStatus: Represents the status of node machines +// that are undergoing drain operations. +type BareMetalMachineDrainStatus struct { + // DrainedMachines: The list of drained machines. + DrainedMachines []*BareMetalDrainedMachine `json:"drainedMachines,omitempty"` + + // DrainingMachines: The list of draning machines. + DrainingMachines []*BareMetalDrainingMachine `json:"drainingMachines,omitempty"` + + // ForceSendFields is a list of field names (e.g. "DrainedMachines") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "DrainedMachines") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalMachineDrainStatus) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalMachineDrainStatus + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalMaintenanceConfig: Specifies configurations to put bare +// metal nodes in and out of maintenance. +type BareMetalMaintenanceConfig struct { + // MaintenanceAddressCidrBlocks: Required. All IPv4 address from these + // ranges will be placed into maintenance mode. Nodes in maintenance + // mode will be cordoned and drained. When both of these are true, the + // "baremetal.cluster.gke.io/maintenance" annotation will be set on the + // node resource. + MaintenanceAddressCidrBlocks []string `json:"maintenanceAddressCidrBlocks,omitempty"` + + // ForceSendFields is a list of field names (e.g. + // "MaintenanceAddressCidrBlocks") to unconditionally include in API + // requests. By default, fields with empty or default values are omitted + // from API requests. However, any non-pointer, non-interface field + // appearing in ForceSendFields will be sent to the server regardless of + // whether the field is empty or not. This may be used to include empty + // fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. + // "MaintenanceAddressCidrBlocks") to include in API requests with the + // JSON null value. By default, fields with empty values are omitted + // from API requests. However, any field with an empty value appearing + // in NullFields will be sent to the server as null. It is an error if a + // field in this list has a non-empty value. This may be used to include + // null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalMaintenanceConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalMaintenanceConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalMaintenanceStatus: Represents the maintenance status of the +// bare metal user cluster. +type BareMetalMaintenanceStatus struct { + // MachineDrainStatus: The maintenance status of node machines. + MachineDrainStatus *BareMetalMachineDrainStatus `json:"machineDrainStatus,omitempty"` + + // ForceSendFields is a list of field names (e.g. "MachineDrainStatus") + // to unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "MachineDrainStatus") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalMaintenanceStatus) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalMaintenanceStatus + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalManualLbConfig: Represents configuration parameters for a +// manual load balancer. +type BareMetalManualLbConfig struct { + // Enabled: Whether manual load balancing is enabled. + Enabled bool `json:"enabled,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Enabled") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Enabled") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalManualLbConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalManualLbConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalMetalLbConfig: Represents configuration parameters for a +// MetalLB load balancer. +type BareMetalMetalLbConfig struct { + // AddressPools: Required. AddressPools is a list of non-overlapping IP + // pools used by load balancer typed services. All addresses must be + // routable to load balancer nodes. IngressVIP must be included in the + // pools. + AddressPools []*BareMetalLoadBalancerAddressPool `json:"addressPools,omitempty"` + + // LoadBalancerNodePoolConfig: Specifies the node pool running the load + // balancer. L2 connectivity is required among nodes in this pool. If + // missing, the control plane node pool is used as the load balancer + // pool. + LoadBalancerNodePoolConfig *BareMetalLoadBalancerNodePoolConfig `json:"loadBalancerNodePoolConfig,omitempty"` + + // ForceSendFields is a list of field names (e.g. "AddressPools") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "AddressPools") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalMetalLbConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalMetalLbConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalMultipleNetworkInterfacesConfig: Specifies the multiple +// networking interfaces cluster configuration. +type BareMetalMultipleNetworkInterfacesConfig struct { + // Enabled: Whether to enable multiple network interfaces for your pods. + // When set network_config.advanced_networking is automatically set to + // true. + Enabled bool `json:"enabled,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Enabled") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Enabled") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalMultipleNetworkInterfacesConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalMultipleNetworkInterfacesConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalNetworkConfig: Specifies the cluster network configuration. +type BareMetalNetworkConfig struct { + // AdvancedNetworking: Enables the use of advanced Anthos networking + // features, such as Bundled Load Balancing with BGP or the egress NAT + // gateway. Setting configuration for advanced networking features will + // automatically set this flag. + AdvancedNetworking bool `json:"advancedNetworking,omitempty"` + + // IslandModeCidr: Configuration for island mode CIDR. In an island-mode + // network, nodes have unique IP addresses, but pods don't have unique + // addresses across clusters. This doesn't cause problems because pods + // in one cluster never directly communicate with pods in another + // cluster. Instead, there are gateways that mediate between a pod in + // one cluster and a pod in another cluster. + IslandModeCidr *BareMetalIslandModeCidrConfig `json:"islandModeCidr,omitempty"` + + // MultipleNetworkInterfacesConfig: Configuration for multiple network + // interfaces. + MultipleNetworkInterfacesConfig *BareMetalMultipleNetworkInterfacesConfig `json:"multipleNetworkInterfacesConfig,omitempty"` + + // SrIovConfig: Configuration for SR-IOV. + SrIovConfig *BareMetalSrIovConfig `json:"srIovConfig,omitempty"` + + // ForceSendFields is a list of field names (e.g. "AdvancedNetworking") + // to unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "AdvancedNetworking") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalNetworkConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalNetworkConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalNodeAccessConfig: Specifies the node access related settings +// for the bare metal user cluster. +type BareMetalNodeAccessConfig struct { + // LoginUser: LoginUser is the user name used to access node machines. + // It defaults to "root" if not set. + LoginUser string `json:"loginUser,omitempty"` + + // ForceSendFields is a list of field names (e.g. "LoginUser") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "LoginUser") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalNodeAccessConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalNodeAccessConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalNodeConfig: BareMetalNodeConfig lists machine addresses to +// access Nodes. +type BareMetalNodeConfig struct { + // Labels: The labels assigned to this node. An object containing a list + // of key/value pairs. The labels here, unioned with the labels set on + // BareMetalNodePoolConfig are the set of labels that will be applied to + // the node. If there are any conflicts, the BareMetalNodeConfig labels + // take precedence. Example: { "name": "wrench", "mass": "1.3kg", + // "count": "3" }. + Labels map[string]string `json:"labels,omitempty"` + + // NodeIp: The default IPv4 address for SSH access and Kubernetes node. + // Example: 192.168.0.1 + NodeIp string `json:"nodeIp,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Labels") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Labels") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalNodeConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalNodeConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalNodePool: Resource that represents a bare metal node pool. +type BareMetalNodePool struct { + // Annotations: Annotations on the bare metal node pool. This field has + // the same restrictions as Kubernetes annotations. The total size of + // all keys and values combined is limited to 256k. Key can have 2 + // segments: prefix (optional) and name (required), separated by a slash + // (/). Prefix must be a DNS subdomain. Name must be 63 characters or + // less, begin and end with alphanumerics, with dashes (-), underscores + // (_), dots (.), and alphanumerics between. + Annotations map[string]string `json:"annotations,omitempty"` + + // CreateTime: Output only. The time at which this bare metal node pool + // was created. + CreateTime string `json:"createTime,omitempty"` + + // DeleteTime: Output only. The time at which this bare metal node pool + // was deleted. If the resource is not deleted, this must be empty + DeleteTime string `json:"deleteTime,omitempty"` + + // DisplayName: The display name for the bare metal node pool. + DisplayName string `json:"displayName,omitempty"` + + // Etag: This checksum is computed by the server based on the value of + // other fields, and may be sent on update and delete requests to ensure + // the client has an up-to-date value before proceeding. Allows clients + // to perform consistent read-modify-writes through optimistic + // concurrency control. + Etag string `json:"etag,omitempty"` + + // Name: Immutable. The bare metal node pool resource name. + Name string `json:"name,omitempty"` + + // NodePoolConfig: Required. Node pool configuration. + NodePoolConfig *BareMetalNodePoolConfig `json:"nodePoolConfig,omitempty"` + + // Reconciling: Output only. If set, there are currently changes in + // flight to the bare metal node pool. + Reconciling bool `json:"reconciling,omitempty"` + + // State: Output only. The current state of the bare metal node pool. + // + // Possible values: + // "STATE_UNSPECIFIED" - Not set. + // "PROVISIONING" - The PROVISIONING state indicates the bare metal + // node pool is being created. + // "RUNNING" - The RUNNING state indicates the bare metal node pool + // has been created and is fully usable. + // "RECONCILING" - The RECONCILING state indicates that the bare metal + // node pool is being updated. It remains available, but potentially + // with degraded performance. + // "STOPPING" - The STOPPING state indicates the bare metal node pool + // is being deleted. + // "ERROR" - The ERROR state indicates the bare metal node pool is in + // a broken unrecoverable state. + // "DEGRADED" - The DEGRADED state indicates the bare metal node pool + // requires user action to restore full functionality. + State string `json:"state,omitempty"` + + // Status: Output only. ResourceStatus representing the detailed node + // pool status. + Status *ResourceStatus `json:"status,omitempty"` + + // Uid: Output only. The unique identifier of the bare metal node pool. + Uid string `json:"uid,omitempty"` + + // UpdateTime: Output only. The time at which this bare metal node pool + // was last updated. + UpdateTime string `json:"updateTime,omitempty"` + + // UpgradePolicy: The worker node pool upgrade policy. + UpgradePolicy *BareMetalNodePoolUpgradePolicy `json:"upgradePolicy,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "Annotations") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Annotations") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalNodePool) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalNodePool + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalNodePoolConfig: BareMetalNodePoolConfig describes the +// configuration of all nodes within a given bare metal node pool. +type BareMetalNodePoolConfig struct { + // KubeletConfig: The modifiable kubelet configurations for the bare + // metal machines. + KubeletConfig *BareMetalKubeletConfig `json:"kubeletConfig,omitempty"` + + // Labels: The labels assigned to nodes of this node pool. An object + // containing a list of key/value pairs. Example: { "name": "wrench", + // "mass": "1.3kg", "count": "3" }. + Labels map[string]string `json:"labels,omitempty"` + + // NodeConfigs: Required. The list of machine addresses in the bare + // metal node pool. + NodeConfigs []*BareMetalNodeConfig `json:"nodeConfigs,omitempty"` + + // OperatingSystem: Specifies the nodes operating system (default: + // LINUX). + // + // Possible values: + // "OPERATING_SYSTEM_UNSPECIFIED" - No operating system runtime + // selected. + // "LINUX" - Linux operating system. + OperatingSystem string `json:"operatingSystem,omitempty"` + + // Taints: The initial taints assigned to nodes of this node pool. + Taints []*NodeTaint `json:"taints,omitempty"` + + // ForceSendFields is a list of field names (e.g. "KubeletConfig") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "KubeletConfig") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalNodePoolConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalNodePoolConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalNodePoolUpgradePolicy: BareMetalNodePoolUpgradePolicy +// defines the node pool upgrade policy. +type BareMetalNodePoolUpgradePolicy struct { + // ParallelUpgradeConfig: The parallel upgrade settings for worker node + // pools. + ParallelUpgradeConfig *BareMetalParallelUpgradeConfig `json:"parallelUpgradeConfig,omitempty"` + + // ForceSendFields is a list of field names (e.g. + // "ParallelUpgradeConfig") to unconditionally include in API requests. + // By default, fields with empty or default values are omitted from API + // requests. However, any non-pointer, non-interface field appearing in + // ForceSendFields will be sent to the server regardless of whether the + // field is empty or not. This may be used to include empty fields in + // Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "ParallelUpgradeConfig") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalNodePoolUpgradePolicy) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalNodePoolUpgradePolicy + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalOsEnvironmentConfig: Specifies operating system settings for +// cluster provisioning. +type BareMetalOsEnvironmentConfig struct { + // PackageRepoExcluded: Whether the package repo should not be included + // when initializing bare metal machines. + PackageRepoExcluded bool `json:"packageRepoExcluded,omitempty"` + + // ForceSendFields is a list of field names (e.g. "PackageRepoExcluded") + // to unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "PackageRepoExcluded") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalOsEnvironmentConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalOsEnvironmentConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalParallelUpgradeConfig: BareMetalParallelUpgradeConfig +// defines the parallel upgrade settings for worker node pools. +type BareMetalParallelUpgradeConfig struct { + // ConcurrentNodes: The maximum number of nodes that can be upgraded at + // once. + ConcurrentNodes int64 `json:"concurrentNodes,omitempty"` + + // MinimumAvailableNodes: The minimum number of nodes that should be + // healthy and available during an upgrade. If set to the default value + // of 0, it is possible that none of the nodes will be available during + // an upgrade. + MinimumAvailableNodes int64 `json:"minimumAvailableNodes,omitempty"` + + // ForceSendFields is a list of field names (e.g. "ConcurrentNodes") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "ConcurrentNodes") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalParallelUpgradeConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalParallelUpgradeConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalPortConfig: Specifies load balancer ports for the bare metal +// user cluster. +type BareMetalPortConfig struct { + // ControlPlaneLoadBalancerPort: The port that control plane hosted load + // balancers will listen on. + ControlPlaneLoadBalancerPort int64 `json:"controlPlaneLoadBalancerPort,omitempty"` + + // ForceSendFields is a list of field names (e.g. + // "ControlPlaneLoadBalancerPort") to unconditionally include in API + // requests. By default, fields with empty or default values are omitted + // from API requests. However, any non-pointer, non-interface field + // appearing in ForceSendFields will be sent to the server regardless of + // whether the field is empty or not. This may be used to include empty + // fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. + // "ControlPlaneLoadBalancerPort") to include in API requests with the + // JSON null value. By default, fields with empty values are omitted + // from API requests. However, any field with an empty value appearing + // in NullFields will be sent to the server as null. It is an error if a + // field in this list has a non-empty value. This may be used to include + // null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalPortConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalPortConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalProxyConfig: Specifies the cluster proxy configuration. +type BareMetalProxyConfig struct { + // NoProxy: A list of IPs, hostnames, and domains that should skip the + // proxy. Examples: ["127.0.0.1", "example.com", ".corp", "localhost"]. + NoProxy []string `json:"noProxy,omitempty"` + + // Uri: Required. Specifies the address of your proxy server. Examples: + // `http://domain` Do not provide credentials in the format + // `http://(username:password@)domain` these will be rejected by the + // server. + Uri string `json:"uri,omitempty"` + + // ForceSendFields is a list of field names (e.g. "NoProxy") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "NoProxy") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalProxyConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalProxyConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalSecurityConfig: Specifies the security related settings for +// the bare metal user cluster. +type BareMetalSecurityConfig struct { + // Authorization: Configures user access to the user cluster. + Authorization *Authorization `json:"authorization,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Authorization") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Authorization") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalSecurityConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalSecurityConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalSrIovConfig: Specifies the SR-IOV networking operator +// config. +type BareMetalSrIovConfig struct { + // Enabled: Whether to install the SR-IOV operator. + Enabled bool `json:"enabled,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Enabled") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Enabled") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalSrIovConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalSrIovConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalStorageConfig: BareMetalStorageConfig specifies the cluster +// storage configuration. +type BareMetalStorageConfig struct { + // LvpNodeMountsConfig: Required. Specifies the config for local + // PersistentVolumes backed by mounted node disks. These disks need to + // be formatted and mounted by the user, which can be done before or + // after cluster creation. + LvpNodeMountsConfig *BareMetalLvpConfig `json:"lvpNodeMountsConfig,omitempty"` + + // LvpShareConfig: Required. Specifies the config for local + // PersistentVolumes backed by subdirectories in a shared filesystem. + // These subdirectores are automatically created during cluster + // creation. + LvpShareConfig *BareMetalLvpShareConfig `json:"lvpShareConfig,omitempty"` + + // ForceSendFields is a list of field names (e.g. "LvpNodeMountsConfig") + // to unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "LvpNodeMountsConfig") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalStorageConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalStorageConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalVersionInfo: Contains information about a specific Anthos on +// bare metal version. +type BareMetalVersionInfo struct { + // Dependencies: The list of upgrade dependencies for this version. + Dependencies []*UpgradeDependency `json:"dependencies,omitempty"` + + // HasDependencies: If set, the cluster dependencies (e.g. the admin + // cluster, other user clusters managed by the same admin cluster, + // version skew policy, etc) must be upgraded before this version can be + // installed or upgraded to. + HasDependencies bool `json:"hasDependencies,omitempty"` + + // Version: Version number e.g. 1.13.1. + Version string `json:"version,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Dependencies") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Dependencies") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalVersionInfo) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalVersionInfo + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalVipConfig: Specifies the VIP config for the bare metal load +// balancer. +type BareMetalVipConfig struct { + // ControlPlaneVip: The VIP which you previously set aside for the + // Kubernetes API of this bare metal user cluster. + ControlPlaneVip string `json:"controlPlaneVip,omitempty"` + + // IngressVip: The VIP which you previously set aside for ingress + // traffic into this bare metal user cluster. + IngressVip string `json:"ingressVip,omitempty"` + + // ForceSendFields is a list of field names (e.g. "ControlPlaneVip") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "ControlPlaneVip") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalVipConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalVipConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BareMetalWorkloadNodeConfig: Specifies the workload node +// configurations. +type BareMetalWorkloadNodeConfig struct { + // ContainerRuntime: Specifies which container runtime will be used. + // + // Possible values: + // "CONTAINER_RUNTIME_UNSPECIFIED" - No container runtime selected. + // "CONTAINERD" - Containerd runtime. + ContainerRuntime string `json:"containerRuntime,omitempty"` + + // MaxPodsPerNode: The maximum number of pods a node can run. The size + // of the CIDR range assigned to the node will be derived from this + // parameter. + MaxPodsPerNode int64 `json:"maxPodsPerNode,omitempty,string"` + + // ForceSendFields is a list of field names (e.g. "ContainerRuntime") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "ContainerRuntime") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BareMetalWorkloadNodeConfig) MarshalJSON() ([]byte, error) { + type NoMethod BareMetalWorkloadNodeConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BinaryAuthorization: Configuration for Binary Authorization. +type BinaryAuthorization struct { + // EvaluationMode: Mode of operation for binauthz policy evaluation. If + // unspecified, defaults to DISABLED. + // + // Possible values: + // "EVALUATION_MODE_UNSPECIFIED" - Default value + // "DISABLED" - Disable BinaryAuthorization + // "PROJECT_SINGLETON_POLICY_ENFORCE" - Enforce Kubernetes admission + // requests with BinaryAuthorization using the project's singleton + // policy. + EvaluationMode string `json:"evaluationMode,omitempty"` + + // ForceSendFields is a list of field names (e.g. "EvaluationMode") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "EvaluationMode") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *BinaryAuthorization) MarshalJSON() ([]byte, error) { + type NoMethod BinaryAuthorization + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// Binding: Associates `members`, or principals, with a `role`. +type Binding struct { + // Condition: The condition that is associated with this binding. If the + // condition evaluates to `true`, then this binding applies to the + // current request. If the condition evaluates to `false`, then this + // binding does not apply to the current request. However, a different + // role binding might grant the same role to one or more of the + // principals in this binding. To learn which resources support + // conditions in their IAM policies, see the IAM documentation + // (https://cloud.google.com/iam/help/conditions/resource-policies). + Condition *Expr `json:"condition,omitempty"` + + // Members: Specifies the principals requesting access for a Google + // Cloud resource. `members` can have the following values: * + // `allUsers`: A special identifier that represents anyone who is on the + // internet; with or without a Google account. * + // `allAuthenticatedUsers`: A special identifier that represents anyone + // who is authenticated with a Google account or a service account. Does + // not include identities that come from external identity providers + // (IdPs) through identity federation. * `user:{emailid}`: An email + // address that represents a specific Google account. For example, + // `alice@example.com` . * `serviceAccount:{emailid}`: An email address + // that represents a Google service account. For example, + // `my-other-app@appspot.gserviceaccount.com`. * + // `serviceAccount:{projectid}.svc.id.goog[{namespace}/{kubernetes-sa}]`: + // An identifier for a Kubernetes service account + // (https://cloud.google.com/kubernetes-engine/docs/how-to/kubernetes-service-accounts). + // For example, `my-project.svc.id.goog[my-namespace/my-kubernetes-sa]`. + // * `group:{emailid}`: An email address that represents a Google group. + // For example, `admins@example.com`. * `domain:{domain}`: The G Suite + // domain (primary) that represents all the users of that domain. For + // example, `google.com` or `example.com`. * + // `principal://iam.googleapis.com/locations/global/workforcePools/{pool_ + // id}/subject/{subject_attribute_value}`: A single identity in a + // workforce identity pool. * + // `principalSet://iam.googleapis.com/locations/global/workforcePools/{po + // ol_id}/group/{group_id}`: All workforce identities in a group. * + // `principalSet://iam.googleapis.com/locations/global/workforcePools/{po + // ol_id}/attribute.{attribute_name}/{attribute_value}`: All workforce + // identities with a specific attribute value. * + // `principalSet://iam.googleapis.com/locations/global/workforcePools/{po + // ol_id}/*`: All identities in a workforce identity pool. * + // `principal://iam.googleapis.com/projects/{project_number}/locations/gl + // obal/workloadIdentityPools/{pool_id}/subject/{subject_attribute_value} + // `: A single identity in a workload identity pool. * + // `principalSet://iam.googleapis.com/projects/{project_number}/locations + // /global/workloadIdentityPools/{pool_id}/group/{group_id}`: A workload + // identity pool group. * + // `principalSet://iam.googleapis.com/projects/{project_number}/locations + // /global/workloadIdentityPools/{pool_id}/attribute.{attribute_name}/{at + // tribute_value}`: All identities in a workload identity pool with a + // certain attribute. * + // `principalSet://iam.googleapis.com/projects/{project_number}/locations + // /global/workloadIdentityPools/{pool_id}/*`: All identities in a + // workload identity pool. * `deleted:user:{emailid}?uid={uniqueid}`: An + // email address (plus unique identifier) representing a user that has + // been recently deleted. For example, + // `alice@example.com?uid=123456789012345678901`. If the user is + // recovered, this value reverts to `user:{emailid}` and the recovered + // user retains the role in the binding. * + // `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address + // (plus unique identifier) representing a service account that has been + // recently deleted. For example, + // `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. + // If the service account is undeleted, this value reverts to + // `serviceAccount:{emailid}` and the undeleted service account retains + // the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: + // An email address (plus unique identifier) representing a Google group + // that has been recently deleted. For example, + // `admins@example.com?uid=123456789012345678901`. If the group is + // recovered, this value reverts to `group:{emailid}` and the recovered + // group retains the role in the binding. * + // `deleted:principal://iam.googleapis.com/locations/global/workforcePool + // s/{pool_id}/subject/{subject_attribute_value}`: Deleted single + // identity in a workforce identity pool. For example, + // `deleted:principal://iam.googleapis.com/locations/global/workforcePool + // s/my-pool-id/subject/my-subject-attribute-value`. + Members []string `json:"members,omitempty"` + + // Role: Role that is assigned to the list of `members`, or principals. + // For example, `roles/viewer`, `roles/editor`, or `roles/owner`. For an + // overview of the IAM roles and permissions, see the IAM documentation + // (https://cloud.google.com/iam/docs/roles-overview). For a list of the + // available pre-defined roles, see here + // (https://cloud.google.com/iam/docs/understanding-roles). + Role string `json:"role,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Condition") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Condition") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *Binding) MarshalJSON() ([]byte, error) { + type NoMethod Binding + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// CancelOperationRequest: The request message for +// Operations.CancelOperation. +type CancelOperationRequest struct { +} + +// ClusterUser: ClusterUser configures user principals for an RBAC +// policy. +type ClusterUser struct { + // Username: Required. The name of the user, e.g. `my-gcp-id@gmail.com`. + Username string `json:"username,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Username") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Username") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *ClusterUser) MarshalJSON() ([]byte, error) { + type NoMethod ClusterUser + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// Empty: A generic empty message that you can re-use to avoid defining +// duplicated empty messages in your APIs. A typical example is to use +// it as the request or the response type of an API method. For +// instance: service Foo { rpc Bar(google.protobuf.Empty) returns +// (google.protobuf.Empty); } +type Empty struct { + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` +} + +// EnrollBareMetalAdminClusterRequest: Message for enrolling an existing +// bare metal admin cluster to the GKE on-prem API. +type EnrollBareMetalAdminClusterRequest struct { + // BareMetalAdminClusterId: User provided OnePlatform identifier that is + // used as part of the resource name. This must be unique among all GKE + // on-prem clusters within a project and location and will return a 409 + // if the cluster already exists. (https://tools.ietf.org/html/rfc1123) + // format. + BareMetalAdminClusterId string `json:"bareMetalAdminClusterId,omitempty"` + + // Membership: Required. This is the full resource name of this admin + // cluster's fleet membership. + Membership string `json:"membership,omitempty"` + + // ForceSendFields is a list of field names (e.g. + // "BareMetalAdminClusterId") to unconditionally include in API + // requests. By default, fields with empty or default values are omitted + // from API requests. However, any non-pointer, non-interface field + // appearing in ForceSendFields will be sent to the server regardless of + // whether the field is empty or not. This may be used to include empty + // fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "BareMetalAdminClusterId") + // to include in API requests with the JSON null value. By default, + // fields with empty values are omitted from API requests. However, any + // field with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *EnrollBareMetalAdminClusterRequest) MarshalJSON() ([]byte, error) { + type NoMethod EnrollBareMetalAdminClusterRequest + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// EnrollBareMetalClusterRequest: Message for enrolling an existing bare +// metal cluster to the Anthos On-Prem API. +type EnrollBareMetalClusterRequest struct { + // AdminClusterMembership: Required. The admin cluster this bare metal + // user cluster belongs to. This is the full resource name of the admin + // cluster's fleet membership. In the future, references to other + // resource types might be allowed if admin clusters are modeled as + // their own resources. + AdminClusterMembership string `json:"adminClusterMembership,omitempty"` + + // BareMetalClusterId: User provided OnePlatform identifier that is used + // as part of the resource name. This must be unique among all bare + // metal clusters within a project and location and will return a 409 if + // the cluster already exists. (https://tools.ietf.org/html/rfc1123) + // format. + BareMetalClusterId string `json:"bareMetalClusterId,omitempty"` + + // LocalName: Optional. The object name of the bare metal cluster custom + // resource on the associated admin cluster. This field is used to + // support conflicting resource names when enrolling existing clusters + // to the API. When not provided, this field will resolve to the + // bare_metal_cluster_id. Otherwise, it must match the object name of + // the bare metal cluster custom resource. It is not modifiable outside + // / beyond the enrollment operation. + LocalName string `json:"localName,omitempty"` + + // ForceSendFields is a list of field names (e.g. + // "AdminClusterMembership") to unconditionally include in API requests. + // By default, fields with empty or default values are omitted from API + // requests. However, any non-pointer, non-interface field appearing in + // ForceSendFields will be sent to the server regardless of whether the + // field is empty or not. This may be used to include empty fields in + // Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "AdminClusterMembership") + // to include in API requests with the JSON null value. By default, + // fields with empty values are omitted from API requests. However, any + // field with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *EnrollBareMetalClusterRequest) MarshalJSON() ([]byte, error) { + type NoMethod EnrollBareMetalClusterRequest + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// EnrollBareMetalNodePoolRequest: Message for enrolling an existing +// bare metal node pool to the GKE on-prem API. +type EnrollBareMetalNodePoolRequest struct { + // BareMetalNodePoolId: User provided OnePlatform identifier that is + // used as part of the resource name. + // (https://tools.ietf.org/html/rfc1123) format. + BareMetalNodePoolId string `json:"bareMetalNodePoolId,omitempty"` + + // ValidateOnly: If set, only validate the request, but do not actually + // enroll the node pool. + ValidateOnly bool `json:"validateOnly,omitempty"` + + // ForceSendFields is a list of field names (e.g. "BareMetalNodePoolId") + // to unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "BareMetalNodePoolId") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *EnrollBareMetalNodePoolRequest) MarshalJSON() ([]byte, error) { + type NoMethod EnrollBareMetalNodePoolRequest + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// EnrollVmwareAdminClusterRequest: Message for enrolling an existing +// VMware admin cluster to the GKE on-prem API. +type EnrollVmwareAdminClusterRequest struct { + // Membership: Required. This is the full resource name of this admin + // cluster's fleet membership. + Membership string `json:"membership,omitempty"` + + // VmwareAdminClusterId: User provided OnePlatform identifier that is + // used as part of the resource name. This must be unique among all GKE + // on-prem clusters within a project and location and will return a 409 + // if the cluster already exists. (https://tools.ietf.org/html/rfc1123) + // format. + VmwareAdminClusterId string `json:"vmwareAdminClusterId,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Membership") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Membership") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *EnrollVmwareAdminClusterRequest) MarshalJSON() ([]byte, error) { + type NoMethod EnrollVmwareAdminClusterRequest + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// EnrollVmwareClusterRequest: Message for enrolling an existing VMware +// cluster to the Anthos On-Prem API. +type EnrollVmwareClusterRequest struct { + // AdminClusterMembership: Required. The admin cluster this VMware user + // cluster belongs to. This is the full resource name of the admin + // cluster's fleet membership. In the future, references to other + // resource types might be allowed if admin clusters are modeled as + // their own resources. + AdminClusterMembership string `json:"adminClusterMembership,omitempty"` + + // LocalName: Optional. The object name of the VMware OnPremUserCluster + // custom resource on the associated admin cluster. This field is used + // to support conflicting resource names when enrolling existing + // clusters to the API. When not provided, this field will resolve to + // the vmware_cluster_id. Otherwise, it must match the object name of + // the VMware OnPremUserCluster custom resource. It is not modifiable + // outside / beyond the enrollment operation. + LocalName string `json:"localName,omitempty"` + + // ValidateOnly: Validate the request without actually doing any + // updates. + ValidateOnly bool `json:"validateOnly,omitempty"` + + // VmwareClusterId: User provided OnePlatform identifier that is used as + // part of the resource name. This must be unique among all GKE on-prem + // clusters within a project and location and will return a 409 if the + // cluster already exists. (https://tools.ietf.org/html/rfc1123) format. + VmwareClusterId string `json:"vmwareClusterId,omitempty"` + + // ForceSendFields is a list of field names (e.g. + // "AdminClusterMembership") to unconditionally include in API requests. + // By default, fields with empty or default values are omitted from API + // requests. However, any non-pointer, non-interface field appearing in + // ForceSendFields will be sent to the server regardless of whether the + // field is empty or not. This may be used to include empty fields in + // Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "AdminClusterMembership") + // to include in API requests with the JSON null value. By default, + // fields with empty values are omitted from API requests. However, any + // field with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *EnrollVmwareClusterRequest) MarshalJSON() ([]byte, error) { + type NoMethod EnrollVmwareClusterRequest + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// EnrollVmwareNodePoolRequest: Message for enrolling a VMware node +// pool. +type EnrollVmwareNodePoolRequest struct { + // VmwareNodePoolId: The target node pool id to be enrolled. + VmwareNodePoolId string `json:"vmwareNodePoolId,omitempty"` + + // ForceSendFields is a list of field names (e.g. "VmwareNodePoolId") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "VmwareNodePoolId") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *EnrollVmwareNodePoolRequest) MarshalJSON() ([]byte, error) { + type NoMethod EnrollVmwareNodePoolRequest + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// Expr: Represents a textual expression in the Common Expression +// Language (CEL) syntax. CEL is a C-like expression language. The +// syntax and semantics of CEL are documented at +// https://github.com/google/cel-spec. Example (Comparison): title: +// "Summary size limit" description: "Determines if a summary is less +// than 100 chars" expression: "document.summary.size() < 100" Example +// (Equality): title: "Requestor is owner" description: "Determines if +// requestor is the document owner" expression: "document.owner == +// request.auth.claims.email" Example (Logic): title: "Public documents" +// description: "Determine whether the document should be publicly +// visible" expression: "document.type != 'private' && document.type != +// 'internal'" Example (Data Manipulation): title: "Notification string" +// description: "Create a notification string with a timestamp." +// expression: "'New message received at ' + +// string(document.create_time)" The exact variables and functions that +// may be referenced within an expression are determined by the service +// that evaluates it. See the service documentation for additional +// information. +type Expr struct { + // Description: Optional. Description of the expression. This is a + // longer text which describes the expression, e.g. when hovered over it + // in a UI. + Description string `json:"description,omitempty"` + + // Expression: Textual representation of an expression in Common + // Expression Language syntax. + Expression string `json:"expression,omitempty"` + + // Location: Optional. String indicating the location of the expression + // for error reporting, e.g. a file name and a position in the file. + Location string `json:"location,omitempty"` + + // Title: Optional. Title for the expression, i.e. a short string + // describing its purpose. This can be used e.g. in UIs which allow to + // enter the expression. + Title string `json:"title,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Description") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Description") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *Expr) MarshalJSON() ([]byte, error) { + type NoMethod Expr + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// Fleet: Fleet related configuration. Fleets are a Google Cloud concept +// for logically organizing clusters, letting you use and manage +// multi-cluster capabilities and apply consistent policies across your +// systems. See Anthos Fleets +// (`https://cloud.google.com/anthos/multicluster-management/fleets`) +// for more details on Anthos multi-cluster capabilities using Fleets. +// ## +type Fleet struct { + // Membership: Output only. The name of the managed fleet Membership + // resource associated to this cluster. Membership names are formatted + // as `projects//locations//memberships/`. + Membership string `json:"membership,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Membership") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Membership") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *Fleet) MarshalJSON() ([]byte, error) { + type NoMethod Fleet + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// ListBareMetalAdminClustersResponse: Response message for listing bare +// metal admin clusters. +type ListBareMetalAdminClustersResponse struct { + // BareMetalAdminClusters: The list of bare metal admin cluster. + BareMetalAdminClusters []*BareMetalAdminCluster `json:"bareMetalAdminClusters,omitempty"` + + // NextPageToken: A token identifying a page of results the server + // should return. If the token is not empty this means that more results + // are available and should be retrieved by repeating the request with + // the provided page token. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Unreachable: Locations that could not be reached. + Unreachable []string `json:"unreachable,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. + // "BareMetalAdminClusters") to unconditionally include in API requests. + // By default, fields with empty or default values are omitted from API + // requests. However, any non-pointer, non-interface field appearing in + // ForceSendFields will be sent to the server regardless of whether the + // field is empty or not. This may be used to include empty fields in + // Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "BareMetalAdminClusters") + // to include in API requests with the JSON null value. By default, + // fields with empty values are omitted from API requests. However, any + // field with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *ListBareMetalAdminClustersResponse) MarshalJSON() ([]byte, error) { + type NoMethod ListBareMetalAdminClustersResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// ListBareMetalClustersResponse: Response message for listing bare +// metal Clusters. +type ListBareMetalClustersResponse struct { + // BareMetalClusters: The list of bare metal Clusters. + BareMetalClusters []*BareMetalCluster `json:"bareMetalClusters,omitempty"` + + // NextPageToken: A token identifying a page of results the server + // should return. If the token is not empty this means that more results + // are available and should be retrieved by repeating the request with + // the provided page token. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Unreachable: Locations that could not be reached. + Unreachable []string `json:"unreachable,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "BareMetalClusters") + // to unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "BareMetalClusters") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *ListBareMetalClustersResponse) MarshalJSON() ([]byte, error) { + type NoMethod ListBareMetalClustersResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// ListBareMetalNodePoolsResponse: Response message for listing bare +// metal node pools. +type ListBareMetalNodePoolsResponse struct { + // BareMetalNodePools: The node pools from the specified parent + // resource. + BareMetalNodePools []*BareMetalNodePool `json:"bareMetalNodePools,omitempty"` + + // NextPageToken: A token, which can be sent as `page_token` to retrieve + // the next page. If this field is omitted, there are no subsequent + // pages. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Unreachable: Locations that could not be reached. + Unreachable []string `json:"unreachable,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "BareMetalNodePools") + // to unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "BareMetalNodePools") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *ListBareMetalNodePoolsResponse) MarshalJSON() ([]byte, error) { + type NoMethod ListBareMetalNodePoolsResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// ListLocationsResponse: The response message for +// Locations.ListLocations. +type ListLocationsResponse struct { + // Locations: A list of locations that matches the specified filter in + // the request. + Locations []*Location `json:"locations,omitempty"` + + // NextPageToken: The standard List next-page token. + NextPageToken string `json:"nextPageToken,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "Locations") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Locations") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *ListLocationsResponse) MarshalJSON() ([]byte, error) { + type NoMethod ListLocationsResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// ListOperationsResponse: The response message for +// Operations.ListOperations. +type ListOperationsResponse struct { + // NextPageToken: The standard List next-page token. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Operations: A list of operations that matches the specified filter in + // the request. + Operations []*Operation `json:"operations,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "NextPageToken") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "NextPageToken") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *ListOperationsResponse) MarshalJSON() ([]byte, error) { + type NoMethod ListOperationsResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// ListVmwareAdminClustersResponse: Response message for listing VMware +// admin clusters. +type ListVmwareAdminClustersResponse struct { + // NextPageToken: A token identifying a page of results the server + // should return. If the token is not empty this means that more results + // are available and should be retrieved by repeating the request with + // the provided page token. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Unreachable: Locations that could not be reached. + Unreachable []string `json:"unreachable,omitempty"` + + // VmwareAdminClusters: The list of VMware admin cluster. + VmwareAdminClusters []*VmwareAdminCluster `json:"vmwareAdminClusters,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "NextPageToken") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "NextPageToken") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *ListVmwareAdminClustersResponse) MarshalJSON() ([]byte, error) { + type NoMethod ListVmwareAdminClustersResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// ListVmwareClustersResponse: Response message for listing VMware +// Clusters. +type ListVmwareClustersResponse struct { + // NextPageToken: A token identifying a page of results the server + // should return. If the token is not empty this means that more results + // are available and should be retrieved by repeating the request with + // the provided page token. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Unreachable: Locations that could not be reached. + Unreachable []string `json:"unreachable,omitempty"` + + // VmwareClusters: The list of VMware Cluster. + VmwareClusters []*VmwareCluster `json:"vmwareClusters,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "NextPageToken") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "NextPageToken") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *ListVmwareClustersResponse) MarshalJSON() ([]byte, error) { + type NoMethod ListVmwareClustersResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// ListVmwareNodePoolsResponse: Response message for listing VMware node +// pools. +type ListVmwareNodePoolsResponse struct { + // NextPageToken: A token, which can be sent as `page_token` to retrieve + // the next page. If this field is omitted, there are no subsequent + // pages. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Unreachable: Locations that could not be reached. + Unreachable []string `json:"unreachable,omitempty"` + + // VmwareNodePools: The node pools from the specified parent resource. + VmwareNodePools []*VmwareNodePool `json:"vmwareNodePools,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "NextPageToken") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "NextPageToken") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *ListVmwareNodePoolsResponse) MarshalJSON() ([]byte, error) { + type NoMethod ListVmwareNodePoolsResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// Location: A resource that represents a Google Cloud location. +type Location struct { + // DisplayName: The friendly name for this location, typically a nearby + // city name. For example, "Tokyo". + DisplayName string `json:"displayName,omitempty"` + + // Labels: Cross-service attributes for the location. For example + // {"cloud.googleapis.com/region": "us-east1"} + Labels map[string]string `json:"labels,omitempty"` + + // LocationId: The canonical id for this location. For example: + // "us-east1". + LocationId string `json:"locationId,omitempty"` + + // Metadata: Service-specific metadata. For example the available + // capacity at the given location. + Metadata googleapi.RawMessage `json:"metadata,omitempty"` + + // Name: Resource name for the location, which may vary between + // implementations. For example: + // "projects/example-project/locations/us-east1" + Name string `json:"name,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "DisplayName") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "DisplayName") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *Location) MarshalJSON() ([]byte, error) { + type NoMethod Location + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// Metric: Progress metric is (string, int|float|string) pair. +type Metric struct { + // DoubleValue: For metrics with floating point value. + DoubleValue float64 `json:"doubleValue,omitempty"` + + // IntValue: For metrics with integer value. + IntValue int64 `json:"intValue,omitempty,string"` + + // Metric: Required. The metric name. + // + // Possible values: + // "METRIC_ID_UNSPECIFIED" - Not set. + // "NODES_TOTAL" - The total number of nodes being actuated. + // "NODES_DRAINING" - The number of nodes draining. + // "NODES_UPGRADING" - The number of nodes actively upgrading. + // "NODES_PENDING_UPGRADE" - The number of nodes to be upgraded. + // "NODES_UPGRADED" - The number of nodes upgraded. + // "NODES_FAILED" - The number of nodes to fail actuation. + // "NODES_HEALTHY" - The number of nodes healthy. + // "NODES_RECONCILING" - The number of nodes reconciling. + // "NODES_IN_MAINTENANCE" - The number of nodes in maintenance mode. + // "PREFLIGHTS_COMPLETED" - The number of completed preflight checks. + // "PREFLIGHTS_RUNNING" - The number of preflight checks running. + // "PREFLIGHTS_FAILED" - The number of preflight checks failed. + // "PREFLIGHTS_TOTAL" - The total number of preflight checks. + Metric string `json:"metric,omitempty"` + + // StringValue: For metrics with custom values (ratios, visual progress, + // etc.). + StringValue string `json:"stringValue,omitempty"` + + // ForceSendFields is a list of field names (e.g. "DoubleValue") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "DoubleValue") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *Metric) MarshalJSON() ([]byte, error) { + type NoMethod Metric + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +func (s *Metric) UnmarshalJSON(data []byte) error { + type NoMethod Metric + var s1 struct { + DoubleValue gensupport.JSONFloat64 `json:"doubleValue"` + *NoMethod + } + s1.NoMethod = (*NoMethod)(s) + if err := json.Unmarshal(data, &s1); err != nil { + return err + } + s.DoubleValue = float64(s1.DoubleValue) + return nil +} + +// NodeTaint: NodeTaint applied to every Kubernetes node in a node pool. +// Kubernetes taints can be used together with tolerations to control +// how workloads are scheduled to your nodes. Node taints are permanent. +type NodeTaint struct { + // Effect: The taint effect. + // + // Possible values: + // "EFFECT_UNSPECIFIED" - Not set. + // "NO_SCHEDULE" - Do not allow new pods to schedule onto the node + // unless they tolerate the taint, but allow all pods submitted to + // Kubelet without going through the scheduler to start, and allow all + // already-running pods to continue running. Enforced by the scheduler. + // "PREFER_NO_SCHEDULE" - Like TaintEffectNoSchedule, but the + // scheduler tries not to schedule new pods onto the node, rather than + // prohibiting new pods from scheduling onto the node entirely. Enforced + // by the scheduler. + // "NO_EXECUTE" - Evict any already-running pods that do not tolerate + // the taint. Currently enforced by NodeController. + Effect string `json:"effect,omitempty"` + + // Key: Key associated with the effect. + Key string `json:"key,omitempty"` + + // Value: Value associated with the effect. + Value string `json:"value,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Effect") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Effect") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *NodeTaint) MarshalJSON() ([]byte, error) { + type NoMethod NodeTaint + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// Operation: This resource represents a long-running operation that is +// the result of a network API call. +type Operation struct { + // Done: If the value is `false`, it means the operation is still in + // progress. If `true`, the operation is completed, and either `error` + // or `response` is available. + Done bool `json:"done,omitempty"` + + // Error: The error result of the operation in case of failure or + // cancellation. + Error *Status `json:"error,omitempty"` + + // Metadata: Service-specific metadata associated with the operation. It + // typically contains progress information and common metadata such as + // create time. Some services might not provide such metadata. Any + // method that returns a long-running operation should document the + // metadata type, if any. + Metadata googleapi.RawMessage `json:"metadata,omitempty"` + + // Name: The server-assigned name, which is only unique within the same + // service that originally returns it. If you use the default HTTP + // mapping, the `name` should be a resource name ending with + // `operations/{unique_id}`. + Name string `json:"name,omitempty"` + + // Response: The normal, successful response of the operation. If the + // original method returns no data on success, such as `Delete`, the + // response is `google.protobuf.Empty`. If the original method is + // standard `Get`/`Create`/`Update`, the response should be the + // resource. For other methods, the response should have the type + // `XxxResponse`, where `Xxx` is the original method name. For example, + // if the original method name is `TakeSnapshot()`, the inferred + // response type is `TakeSnapshotResponse`. + Response googleapi.RawMessage `json:"response,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "Done") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Done") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *Operation) MarshalJSON() ([]byte, error) { + type NoMethod Operation + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// OperationMetadata: Represents the metadata of the long-running +// operation. +type OperationMetadata struct { + // ApiVersion: Output only. API version used to start the operation. + ApiVersion string `json:"apiVersion,omitempty"` + + // ControlPlaneDisconnected: Output only. Denotes if the local managing + // cluster's control plane is currently disconnected. This is expected + // to occur temporarily during self-managed cluster upgrades. + ControlPlaneDisconnected bool `json:"controlPlaneDisconnected,omitempty"` + + // CreateTime: Output only. The time the operation was created. + CreateTime string `json:"createTime,omitempty"` + + // EndTime: Output only. The time the operation finished running. + EndTime string `json:"endTime,omitempty"` + + // Progress: Output only. Detailed progress information for the + // operation. + Progress *OperationProgress `json:"progress,omitempty"` + + // RequestedCancellation: Output only. Identifies whether the user has + // requested cancellation of the operation. Operations that have + // successfully been cancelled have [Operation.error] value with a + // [google.rpc.Status.code] of 1, corresponding to `Code.CANCELLED`. + RequestedCancellation bool `json:"requestedCancellation,omitempty"` + + // StatusMessage: Output only. Human-readable status of the operation, + // if any. + StatusMessage string `json:"statusMessage,omitempty"` + + // Target: Output only. Server-defined resource path for the target of + // the operation. + Target string `json:"target,omitempty"` + + // Type: Output only. Type of operation being executed. + // + // Possible values: + // "OPERATION_TYPE_UNSPECIFIED" - Not set. + // "CREATE" - The resource is being created. + // "DELETE" - The resource is being deleted. + // "UPDATE" - The resource is being updated. + // "UPGRADE" - The resource is being upgraded. + // "PLATFORM_UPGRADE" - The platform is being upgraded. + Type string `json:"type,omitempty"` + + // Verb: Output only. Name of the verb executed by the operation. + Verb string `json:"verb,omitempty"` + + // ForceSendFields is a list of field names (e.g. "ApiVersion") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "ApiVersion") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *OperationMetadata) MarshalJSON() ([]byte, error) { + type NoMethod OperationMetadata + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// OperationProgress: Information about operation progress. +type OperationProgress struct { + // Stages: The stages of the operation. + Stages []*OperationStage `json:"stages,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Stages") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Stages") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *OperationProgress) MarshalJSON() ([]byte, error) { + type NoMethod OperationProgress + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// OperationStage: Information about a particular stage of an operation. +type OperationStage struct { + // EndTime: Time the stage ended. + EndTime string `json:"endTime,omitempty"` + + // Metrics: Progress metric bundle. + Metrics []*Metric `json:"metrics,omitempty"` + + // Stage: The high-level stage of the operation. + // + // Possible values: + // "STAGE_UNSPECIFIED" - Not set. + // "PREFLIGHT_CHECK" - Preflight checks are running. + // "CONFIGURE" - Resource is being configured. + // "DEPLOY" - Resource is being deployed. + // "HEALTH_CHECK" - Waiting for the resource to become healthy. + // "UPDATE" - Resource is being updated. + Stage string `json:"stage,omitempty"` + + // StartTime: Time the stage started. + StartTime string `json:"startTime,omitempty"` + + // State: Output only. State of the stage. + // + // Possible values: + // "STATE_UNSPECIFIED" - Not set. + // "PENDING" - The stage is pending. + // "RUNNING" - The stage is running + // "SUCCEEDED" - The stage has completed successfully. + // "FAILED" - The stage has failed. + State string `json:"state,omitempty"` + + // ForceSendFields is a list of field names (e.g. "EndTime") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "EndTime") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *OperationStage) MarshalJSON() ([]byte, error) { + type NoMethod OperationStage + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// Policy: An Identity and Access Management (IAM) policy, which +// specifies access controls for Google Cloud resources. A `Policy` is a +// collection of `bindings`. A `binding` binds one or more `members`, or +// principals, to a single `role`. Principals can be user accounts, +// service accounts, Google groups, and domains (such as G Suite). A +// `role` is a named list of permissions; each `role` can be an IAM +// predefined role or a user-created custom role. For some types of +// Google Cloud resources, a `binding` can also specify a `condition`, +// which is a logical expression that allows access to a resource only +// if the expression evaluates to `true`. A condition can add +// constraints based on attributes of the request, the resource, or +// both. To learn which resources support conditions in their IAM +// policies, see the IAM documentation +// (https://cloud.google.com/iam/help/conditions/resource-policies). +// **JSON example:** ``` { "bindings": [ { "role": +// "roles/resourcemanager.organizationAdmin", "members": [ +// "user:mike@example.com", "group:admins@example.com", +// "domain:google.com", +// "serviceAccount:my-project-id@appspot.gserviceaccount.com" ] }, { +// "role": "roles/resourcemanager.organizationViewer", "members": [ +// "user:eve@example.com" ], "condition": { "title": "expirable access", +// "description": "Does not grant access after Sep 2020", "expression": +// "request.time < timestamp('2020-10-01T00:00:00.000Z')", } } ], +// "etag": "BwWWja0YfJA=", "version": 3 } ``` **YAML example:** ``` +// bindings: - members: - user:mike@example.com - +// group:admins@example.com - domain:google.com - +// serviceAccount:my-project-id@appspot.gserviceaccount.com role: +// roles/resourcemanager.organizationAdmin - members: - +// user:eve@example.com role: roles/resourcemanager.organizationViewer +// condition: title: expirable access description: Does not grant access +// after Sep 2020 expression: request.time < +// timestamp('2020-10-01T00:00:00.000Z') etag: BwWWja0YfJA= version: 3 +// ``` For a description of IAM and its features, see the IAM +// documentation (https://cloud.google.com/iam/docs/). +type Policy struct { + // Bindings: Associates a list of `members`, or principals, with a + // `role`. Optionally, may specify a `condition` that determines how and + // when the `bindings` are applied. Each of the `bindings` must contain + // at least one principal. The `bindings` in a `Policy` can refer to up + // to 1,500 principals; up to 250 of these principals can be Google + // groups. Each occurrence of a principal counts towards these limits. + // For example, if the `bindings` grant 50 different roles to + // `user:alice@example.com`, and not to any other principal, then you + // can add another 1,450 principals to the `bindings` in the `Policy`. + Bindings []*Binding `json:"bindings,omitempty"` + + // Etag: `etag` is used for optimistic concurrency control as a way to + // help prevent simultaneous updates of a policy from overwriting each + // other. It is strongly suggested that systems make use of the `etag` + // in the read-modify-write cycle to perform policy updates in order to + // avoid race conditions: An `etag` is returned in the response to + // `getIamPolicy`, and systems are expected to put that etag in the + // request to `setIamPolicy` to ensure that their change will be applied + // to the same version of the policy. **Important:** If you use IAM + // Conditions, you must include the `etag` field whenever you call + // `setIamPolicy`. If you omit this field, then IAM allows you to + // overwrite a version `3` policy with a version `1` policy, and all of + // the conditions in the version `3` policy are lost. + Etag string `json:"etag,omitempty"` + + // Version: Specifies the format of the policy. Valid values are `0`, + // `1`, and `3`. Requests that specify an invalid value are rejected. + // Any operation that affects conditional role bindings must specify + // version `3`. This requirement applies to the following operations: * + // Getting a policy that includes a conditional role binding * Adding a + // conditional role binding to a policy * Changing a conditional role + // binding in a policy * Removing any role binding, with or without a + // condition, from a policy that includes conditions **Important:** If + // you use IAM Conditions, you must include the `etag` field whenever + // you call `setIamPolicy`. If you omit this field, then IAM allows you + // to overwrite a version `3` policy with a version `1` policy, and all + // of the conditions in the version `3` policy are lost. If a policy + // does not include any conditions, operations on that policy may + // specify any valid version or leave the field unset. To learn which + // resources support conditions in their IAM policies, see the IAM + // documentation + // (https://cloud.google.com/iam/help/conditions/resource-policies). + Version int64 `json:"version,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "Bindings") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Bindings") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *Policy) MarshalJSON() ([]byte, error) { + type NoMethod Policy + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// QueryBareMetalAdminVersionConfigResponse: Response message for +// querying bare metal admin cluster version config. +type QueryBareMetalAdminVersionConfigResponse struct { + // Versions: List of available versions to install or to upgrade to. + Versions []*BareMetalVersionInfo `json:"versions,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "Versions") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Versions") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *QueryBareMetalAdminVersionConfigResponse) MarshalJSON() ([]byte, error) { + type NoMethod QueryBareMetalAdminVersionConfigResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// QueryBareMetalVersionConfigResponse: Response message for querying +// bare metal admin cluster version config. +type QueryBareMetalVersionConfigResponse struct { + // Versions: List of available versions to install or to upgrade to. + Versions []*BareMetalVersionInfo `json:"versions,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "Versions") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Versions") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *QueryBareMetalVersionConfigResponse) MarshalJSON() ([]byte, error) { + type NoMethod QueryBareMetalVersionConfigResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// QueryVmwareVersionConfigResponse: Response message for querying +// VMware user cluster version config. +type QueryVmwareVersionConfigResponse struct { + // Versions: List of available versions to install or to upgrade to. + Versions []*VmwareVersionInfo `json:"versions,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "Versions") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Versions") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *QueryVmwareVersionConfigResponse) MarshalJSON() ([]byte, error) { + type NoMethod QueryVmwareVersionConfigResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// ResourceCondition: ResourceCondition provides a standard mechanism +// for higher-level status reporting from controller. +type ResourceCondition struct { + // LastTransitionTime: Last time the condition transit from one status + // to another. + LastTransitionTime string `json:"lastTransitionTime,omitempty"` + + // Message: Human-readable message indicating details about last + // transition. + Message string `json:"message,omitempty"` + + // Reason: Machine-readable message indicating details about last + // transition. + Reason string `json:"reason,omitempty"` + + // State: state of the condition. + // + // Possible values: + // "STATE_UNSPECIFIED" - Not set. + // "STATE_TRUE" - Resource is in the condition. + // "STATE_FALSE" - Resource is not in the condition. + // "STATE_UNKNOWN" - Kubernetes controller can't decide if the + // resource is in the condition or not. + State string `json:"state,omitempty"` + + // Type: Type of the condition. (e.g., ClusterRunning, NodePoolRunning + // or ServerSidePreflightReady) + Type string `json:"type,omitempty"` + + // ForceSendFields is a list of field names (e.g. "LastTransitionTime") + // to unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "LastTransitionTime") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *ResourceCondition) MarshalJSON() ([]byte, error) { + type NoMethod ResourceCondition + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// ResourceStatus: ResourceStatus describes why a cluster or node pool +// has a certain status. (e.g., ERROR or DEGRADED). +type ResourceStatus struct { + // Conditions: ResourceCondition provide a standard mechanism for + // higher-level status reporting from controller. + Conditions []*ResourceCondition `json:"conditions,omitempty"` + + // ErrorMessage: Human-friendly representation of the error message from + // controller. The error message can be temporary as the controller + // controller creates a cluster or node pool. If the error message + // persists for a longer period of time, it can be used to surface error + // message to indicate real problems requiring user intervention. + ErrorMessage string `json:"errorMessage,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Conditions") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Conditions") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *ResourceStatus) MarshalJSON() ([]byte, error) { + type NoMethod ResourceStatus + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// SetIamPolicyRequest: Request message for `SetIamPolicy` method. +type SetIamPolicyRequest struct { + // Policy: REQUIRED: The complete policy to be applied to the + // `resource`. The size of the policy is limited to a few 10s of KB. An + // empty policy is a valid policy but certain Google Cloud services + // (such as Projects) might reject them. + Policy *Policy `json:"policy,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Policy") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Policy") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *SetIamPolicyRequest) MarshalJSON() ([]byte, error) { + type NoMethod SetIamPolicyRequest + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// Status: The `Status` type defines a logical error model that is +// suitable for different programming environments, including REST APIs +// and RPC APIs. It is used by gRPC (https://github.com/grpc). Each +// `Status` message contains three pieces of data: error code, error +// message, and error details. You can find out more about this error +// model and how to work with it in the API Design Guide +// (https://cloud.google.com/apis/design/errors). +type Status struct { + // Code: The status code, which should be an enum value of + // google.rpc.Code. + Code int64 `json:"code,omitempty"` + + // Details: A list of messages that carry the error details. There is a + // common set of message types for APIs to use. + Details []googleapi.RawMessage `json:"details,omitempty"` + + // Message: A developer-facing error message, which should be in + // English. Any user-facing error message should be localized and sent + // in the google.rpc.Status.details field, or localized by the client. + Message string `json:"message,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Code") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Code") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *Status) MarshalJSON() ([]byte, error) { + type NoMethod Status + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// TestIamPermissionsRequest: Request message for `TestIamPermissions` +// method. +type TestIamPermissionsRequest struct { + // Permissions: The set of permissions to check for the `resource`. + // Permissions with wildcards (such as `*` or `storage.*`) are not + // allowed. For more information see IAM Overview + // (https://cloud.google.com/iam/docs/overview#permissions). + Permissions []string `json:"permissions,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Permissions") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Permissions") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *TestIamPermissionsRequest) MarshalJSON() ([]byte, error) { + type NoMethod TestIamPermissionsRequest + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// TestIamPermissionsResponse: Response message for `TestIamPermissions` +// method. +type TestIamPermissionsResponse struct { + // Permissions: A subset of `TestPermissionsRequest.permissions` that + // the caller is allowed. + Permissions []string `json:"permissions,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "Permissions") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Permissions") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *TestIamPermissionsResponse) MarshalJSON() ([]byte, error) { + type NoMethod TestIamPermissionsResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// UpgradeDependency: UpgradeDependency represents a dependency when +// upgrading a resource. +type UpgradeDependency struct { + // CurrentVersion: Current version of the dependency e.g. 1.15.0. + CurrentVersion string `json:"currentVersion,omitempty"` + + // Membership: Membership names are formatted as + // `projects//locations//memberships/`. + Membership string `json:"membership,omitempty"` + + // ResourceName: Resource name of the dependency. + ResourceName string `json:"resourceName,omitempty"` + + // TargetVersion: Target version of the dependency e.g. 1.16.1. This is + // the version the dependency needs to be upgraded to before a resource + // can be upgraded. + TargetVersion string `json:"targetVersion,omitempty"` + + // ForceSendFields is a list of field names (e.g. "CurrentVersion") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "CurrentVersion") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *UpgradeDependency) MarshalJSON() ([]byte, error) { + type NoMethod UpgradeDependency + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// ValidationCheck: ValidationCheck represents the result of preflight +// check. +type ValidationCheck struct { + // Option: Options used for the validation check + // + // Possible values: + // "OPTIONS_UNSPECIFIED" - Default value. Standard preflight + // validation check will be used. + // "SKIP_VALIDATION_CHECK_BLOCKING" - Prevent failed preflight checks + // from failing. + // "SKIP_VALIDATION_ALL" - Skip all preflight check validations. + Option string `json:"option,omitempty"` + + // Scenario: Output only. The scenario when the preflight checks were + // run. + // + // Possible values: + // "SCENARIO_UNSPECIFIED" - Default value. This value is unused. + // "CREATE" - The validation check occurred during a create flow. + // "UPDATE" - The validation check occurred during an update flow. + Scenario string `json:"scenario,omitempty"` + + // Status: Output only. The detailed validation check status. + Status *ValidationCheckStatus `json:"status,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Option") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Option") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *ValidationCheck) MarshalJSON() ([]byte, error) { + type NoMethod ValidationCheck + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// ValidationCheckResult: ValidationCheckResult defines the details +// about the validation check. +type ValidationCheckResult struct { + // Category: The category of the validation. + Category string `json:"category,omitempty"` + + // Description: The description of the validation check. + Description string `json:"description,omitempty"` + + // Details: Detailed failure information, which might be unformatted. + Details string `json:"details,omitempty"` + + // Reason: A human-readable message of the check failure. + Reason string `json:"reason,omitempty"` + + // State: The validation check state. + // + // Possible values: + // "STATE_UNKNOWN" - The default value. The check result is unknown. + // "STATE_FAILURE" - The check failed. + // "STATE_SKIPPED" - The check was skipped. + // "STATE_FATAL" - The check itself failed to complete. + // "STATE_WARNING" - The check encountered a warning. + State string `json:"state,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Category") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Category") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *ValidationCheckResult) MarshalJSON() ([]byte, error) { + type NoMethod ValidationCheckResult + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// ValidationCheckStatus: ValidationCheckStatus defines the detailed +// validation check status. +type ValidationCheckStatus struct { + // Result: Individual checks which failed as part of the Preflight check + // execution. + Result []*ValidationCheckResult `json:"result,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Result") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Result") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *ValidationCheckStatus) MarshalJSON() ([]byte, error) { + type NoMethod ValidationCheckStatus + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareAAGConfig: Specifies anti affinity group config for the VMware +// user cluster. +type VmwareAAGConfig struct { + // AagConfigDisabled: Spread nodes across at least three physical hosts + // (requires at least three hosts). Enabled by default. + AagConfigDisabled bool `json:"aagConfigDisabled,omitempty"` + + // ForceSendFields is a list of field names (e.g. "AagConfigDisabled") + // to unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "AagConfigDisabled") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *VmwareAAGConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareAAGConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareAddressPool: Represents an IP pool used by the load balancer. +type VmwareAddressPool struct { + // Addresses: Required. The addresses that are part of this pool. Each + // address must be either in the CIDR form (1.2.3.0/24) or range form + // (1.2.3.1-1.2.3.5). + Addresses []string `json:"addresses,omitempty"` + + // AvoidBuggyIps: If true, avoid using IPs ending in .0 or .255. This + // avoids buggy consumer devices mistakenly dropping IPv4 traffic for + // those special IP addresses. + AvoidBuggyIps bool `json:"avoidBuggyIps,omitempty"` + + // ManualAssign: If true, prevent IP addresses from being automatically + // assigned. + ManualAssign bool `json:"manualAssign,omitempty"` + + // Pool: Required. The name of the address pool. + Pool string `json:"pool,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Addresses") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Addresses") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareAddressPool) MarshalJSON() ([]byte, error) { + type NoMethod VmwareAddressPool + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareAdminAddonNodeConfig: VmwareAdminAddonNodeConfig contains +// add-on node configurations for VMware admin cluster. +type VmwareAdminAddonNodeConfig struct { + // AutoResizeConfig: VmwareAutoResizeConfig config specifies auto resize + // config. + AutoResizeConfig *VmwareAutoResizeConfig `json:"autoResizeConfig,omitempty"` + + // ForceSendFields is a list of field names (e.g. "AutoResizeConfig") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "AutoResizeConfig") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *VmwareAdminAddonNodeConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareAdminAddonNodeConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareAdminAuthorizationConfig: VmwareAdminAuthorizationConfig +// represents configuration for admin cluster authorization. +type VmwareAdminAuthorizationConfig struct { + // ViewerUsers: For VMware admin clusters, users will be granted the + // cluster-viewer role on the cluster. + ViewerUsers []*ClusterUser `json:"viewerUsers,omitempty"` + + // ForceSendFields is a list of field names (e.g. "ViewerUsers") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "ViewerUsers") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareAdminAuthorizationConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareAdminAuthorizationConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareAdminCluster: Resource that represents a VMware admin cluster. +type VmwareAdminCluster struct { + // AddonNode: The VMware admin cluster addon node configuration. + AddonNode *VmwareAdminAddonNodeConfig `json:"addonNode,omitempty"` + + // Annotations: Annotations on the VMware admin cluster. This field has + // the same restrictions as Kubernetes annotations. The total size of + // all keys and values combined is limited to 256k. Key can have 2 + // segments: prefix (optional) and name (required), separated by a slash + // (/). Prefix must be a DNS subdomain. Name must be 63 characters or + // less, begin and end with alphanumerics, with dashes (-), underscores + // (_), dots (.), and alphanumerics between. + Annotations map[string]string `json:"annotations,omitempty"` + + // AntiAffinityGroups: The VMware admin cluster anti affinity group + // configuration. + AntiAffinityGroups *VmwareAAGConfig `json:"antiAffinityGroups,omitempty"` + + // Authorization: The VMware admin cluster authorization configuration. + Authorization *VmwareAdminAuthorizationConfig `json:"authorization,omitempty"` + + // AutoRepairConfig: The VMware admin cluster auto repair configuration. + AutoRepairConfig *VmwareAutoRepairConfig `json:"autoRepairConfig,omitempty"` + + // BootstrapClusterMembership: The bootstrap cluster this VMware admin + // cluster belongs to. + BootstrapClusterMembership string `json:"bootstrapClusterMembership,omitempty"` + + // ControlPlaneNode: The VMware admin cluster control plane node + // configuration. + ControlPlaneNode *VmwareAdminControlPlaneNodeConfig `json:"controlPlaneNode,omitempty"` + + // CreateTime: Output only. The time at which VMware admin cluster was + // created. + CreateTime string `json:"createTime,omitempty"` + + // Description: A human readable description of this VMware admin + // cluster. + Description string `json:"description,omitempty"` + + // Endpoint: Output only. The DNS name of VMware admin cluster's API + // server. + Endpoint string `json:"endpoint,omitempty"` + + // Etag: This checksum is computed by the server based on the value of + // other fields, and may be sent on update and delete requests to ensure + // the client has an up-to-date value before proceeding. Allows clients + // to perform consistent read-modify-writes through optimistic + // concurrency control. + Etag string `json:"etag,omitempty"` + + // Fleet: Output only. Fleet configuration for the cluster. + Fleet *Fleet `json:"fleet,omitempty"` + + // ImageType: The OS image type for the VMware admin cluster. + ImageType string `json:"imageType,omitempty"` + + // LoadBalancer: The VMware admin cluster load balancer configuration. + LoadBalancer *VmwareAdminLoadBalancerConfig `json:"loadBalancer,omitempty"` + + // LocalName: Output only. The object name of the VMware + // OnPremAdminCluster custom resource. This field is used to support + // conflicting names when enrolling existing clusters to the API. When + // used as a part of cluster enrollment, this field will differ from the + // ID in the resource name. For new clusters, this field will match the + // user provided cluster name and be visible in the last component of + // the resource name. It is not modifiable. All users should use this + // name to access their cluster using gkectl or kubectl and should + // expect to see the local name when viewing admin cluster controller + // logs. + LocalName string `json:"localName,omitempty"` + + // Name: Immutable. The VMware admin cluster resource name. + Name string `json:"name,omitempty"` + + // NetworkConfig: The VMware admin cluster network configuration. + NetworkConfig *VmwareAdminNetworkConfig `json:"networkConfig,omitempty"` + + // OnPremVersion: The Anthos clusters on the VMware version for the + // admin cluster. + OnPremVersion string `json:"onPremVersion,omitempty"` + + // PlatformConfig: The VMware platform configuration. + PlatformConfig *VmwarePlatformConfig `json:"platformConfig,omitempty"` + + // PreparedSecrets: Output only. The VMware admin cluster prepared + // secrets configuration. It should always be enabled by the Central + // API, instead of letting users set it. + PreparedSecrets *VmwareAdminPreparedSecretsConfig `json:"preparedSecrets,omitempty"` + + // Reconciling: Output only. If set, there are currently changes in + // flight to the VMware admin cluster. + Reconciling bool `json:"reconciling,omitempty"` + + // State: Output only. The current state of VMware admin cluster. + // + // Possible values: + // "STATE_UNSPECIFIED" - Not set. + // "PROVISIONING" - The PROVISIONING state indicates the cluster is + // being created. + // "RUNNING" - The RUNNING state indicates the cluster has been + // created and is fully usable. + // "RECONCILING" - The RECONCILING state indicates that the cluster is + // being updated. It remains available, but potentially with degraded + // performance. + // "STOPPING" - The STOPPING state indicates the cluster is being + // deleted. + // "ERROR" - The ERROR state indicates the cluster is in a broken + // unrecoverable state. + // "DEGRADED" - The DEGRADED state indicates the cluster requires user + // action to restore full functionality. + State string `json:"state,omitempty"` + + // Status: Output only. ResourceStatus representing detailed cluster + // state. + Status *ResourceStatus `json:"status,omitempty"` + + // Uid: Output only. The unique identifier of the VMware admin cluster. + Uid string `json:"uid,omitempty"` + + // UpdateTime: Output only. The time at which VMware admin cluster was + // last updated. + UpdateTime string `json:"updateTime,omitempty"` + + // Vcenter: The VMware admin cluster VCenter configuration. + Vcenter *VmwareAdminVCenterConfig `json:"vcenter,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "AddonNode") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "AddonNode") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareAdminCluster) MarshalJSON() ([]byte, error) { + type NoMethod VmwareAdminCluster + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareAdminControlPlaneNodeConfig: VmwareAdminControlPlaneNodeConfig +// contains control plane node configuration for VMware admin cluster. +type VmwareAdminControlPlaneNodeConfig struct { + // Cpus: The number of vCPUs for the control-plane node of the admin + // cluster. + Cpus int64 `json:"cpus,omitempty,string"` + + // Memory: The number of mebibytes of memory for the control-plane node + // of the admin cluster. + Memory int64 `json:"memory,omitempty,string"` + + // Replicas: The number of control plane nodes for this VMware admin + // cluster. (default: 1 replica). + Replicas int64 `json:"replicas,omitempty,string"` + + // ForceSendFields is a list of field names (e.g. "Cpus") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Cpus") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareAdminControlPlaneNodeConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareAdminControlPlaneNodeConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareAdminF5BigIpConfig: VmwareAdminF5BigIpConfig represents +// configuration parameters for an F5 BIG-IP load balancer. +type VmwareAdminF5BigIpConfig struct { + // Address: The load balancer's IP address. + Address string `json:"address,omitempty"` + + // Partition: The preexisting partition to be used by the load balancer. + // This partition is usually created for the admin cluster for example: + // 'my-f5-admin-partition'. + Partition string `json:"partition,omitempty"` + + // SnatPool: The pool name. Only necessary, if using SNAT. + SnatPool string `json:"snatPool,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Address") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Address") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareAdminF5BigIpConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareAdminF5BigIpConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareAdminHAControlPlaneConfig: Specifies HA admin control plane +// config. +type VmwareAdminHAControlPlaneConfig struct { + // ControlPlaneIpBlock: Static IP addresses for the admin control plane + // nodes. + ControlPlaneIpBlock *VmwareIpBlock `json:"controlPlaneIpBlock,omitempty"` + + // ForceSendFields is a list of field names (e.g. "ControlPlaneIpBlock") + // to unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "ControlPlaneIpBlock") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *VmwareAdminHAControlPlaneConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareAdminHAControlPlaneConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareAdminLoadBalancerConfig: VmwareAdminLoadBalancerConfig contains +// load balancer configuration for VMware admin cluster. +type VmwareAdminLoadBalancerConfig struct { + // F5Config: Configuration for F5 Big IP typed load balancers. + F5Config *VmwareAdminF5BigIpConfig `json:"f5Config,omitempty"` + + // ManualLbConfig: Manually configured load balancers. + ManualLbConfig *VmwareAdminManualLbConfig `json:"manualLbConfig,omitempty"` + + // MetalLbConfig: MetalLB load balancers. + MetalLbConfig *VmwareAdminMetalLbConfig `json:"metalLbConfig,omitempty"` + + // SeesawConfig: Output only. Configuration for Seesaw typed load + // balancers. + SeesawConfig *VmwareAdminSeesawConfig `json:"seesawConfig,omitempty"` + + // VipConfig: The VIPs used by the load balancer. + VipConfig *VmwareAdminVipConfig `json:"vipConfig,omitempty"` + + // ForceSendFields is a list of field names (e.g. "F5Config") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "F5Config") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareAdminLoadBalancerConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareAdminLoadBalancerConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +type VmwareAdminManualLbConfig struct { + // AddonsNodePort: NodePort for add-ons server in the admin cluster. + AddonsNodePort int64 `json:"addonsNodePort,omitempty"` + + // ControlPlaneNodePort: NodePort for control plane service. The + // Kubernetes API server in the admin cluster is implemented as a + // Service of type NodePort (ex. 30968). + ControlPlaneNodePort int64 `json:"controlPlaneNodePort,omitempty"` + + // IngressHttpNodePort: NodePort for ingress service's http. The ingress + // service in the admin cluster is implemented as a Service of type + // NodePort (ex. 32527). + IngressHttpNodePort int64 `json:"ingressHttpNodePort,omitempty"` + + // IngressHttpsNodePort: NodePort for ingress service's https. The + // ingress service in the admin cluster is implemented as a Service of + // type NodePort (ex. 30139). + IngressHttpsNodePort int64 `json:"ingressHttpsNodePort,omitempty"` + + // KonnectivityServerNodePort: NodePort for konnectivity server service + // running as a sidecar in each kube-apiserver pod (ex. 30564). + KonnectivityServerNodePort int64 `json:"konnectivityServerNodePort,omitempty"` + + // ForceSendFields is a list of field names (e.g. "AddonsNodePort") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "AddonsNodePort") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *VmwareAdminManualLbConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareAdminManualLbConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareAdminMetalLbConfig: VmwareAdminMetalLbConfig represents +// configuration parameters for a MetalLB load balancer. For admin +// clusters, currently no configurations is needed. +type VmwareAdminMetalLbConfig struct { +} + +// VmwareAdminNetworkConfig: VmwareAdminNetworkConfig contains network +// configuration for VMware admin cluster. +type VmwareAdminNetworkConfig struct { + // DhcpIpConfig: Configuration settings for a DHCP IP configuration. + DhcpIpConfig *VmwareDhcpIpConfig `json:"dhcpIpConfig,omitempty"` + + // HaControlPlaneConfig: Configuration for HA admin cluster control + // plane. + HaControlPlaneConfig *VmwareAdminHAControlPlaneConfig `json:"haControlPlaneConfig,omitempty"` + + // HostConfig: Represents common network settings irrespective of the + // host's IP address. + HostConfig *VmwareHostConfig `json:"hostConfig,omitempty"` + + // PodAddressCidrBlocks: Required. All pods in the cluster are assigned + // an RFC1918 IPv4 address from these ranges. Only a single range is + // supported. This field cannot be changed after creation. + PodAddressCidrBlocks []string `json:"podAddressCidrBlocks,omitempty"` + + // ServiceAddressCidrBlocks: Required. All services in the cluster are + // assigned an RFC1918 IPv4 address from these ranges. Only a single + // range is supported. This field cannot be changed after creation. + ServiceAddressCidrBlocks []string `json:"serviceAddressCidrBlocks,omitempty"` + + // StaticIpConfig: Configuration settings for a static IP configuration. + StaticIpConfig *VmwareStaticIpConfig `json:"staticIpConfig,omitempty"` + + // VcenterNetwork: vcenter_network specifies vCenter network name. + VcenterNetwork string `json:"vcenterNetwork,omitempty"` + + // ForceSendFields is a list of field names (e.g. "DhcpIpConfig") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "DhcpIpConfig") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareAdminNetworkConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareAdminNetworkConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareAdminPreparedSecretsConfig: VmwareAdminPreparedSecretsConfig +// represents configuration for admin cluster prepared secrets. +type VmwareAdminPreparedSecretsConfig struct { + // Enabled: Whether prepared secrets is enabled. + Enabled bool `json:"enabled,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Enabled") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Enabled") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareAdminPreparedSecretsConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareAdminPreparedSecretsConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareAdminSeesawConfig: VmwareSeesawConfig represents configuration +// parameters for an already existing Seesaw load balancer. IMPORTANT: +// Please note that the Anthos On-Prem API will not generate or update +// Seesaw configurations it can only bind a pre-existing configuration +// to a new user cluster. IMPORTANT: When attempting to create a user +// cluster with a pre-existing Seesaw load balancer you will need to +// follow some preparation steps before calling the +// 'CreateVmwareCluster' API method. First you will need to create the +// user cluster's namespace via kubectl. The namespace will need to use +// the following naming convention : -gke-onprem-mgmt or +// -gke-onprem-mgmt depending on whether you used the +// 'VmwareCluster.local_name' to disambiguate collisions; for more +// context see the documentation of 'VmwareCluster.local_name'. Once the +// namespace is created you will need to create a secret resource via +// kubectl. This secret will contain copies of your Seesaw credentials. +// The Secret must be called 'user-cluster-creds' and contain Seesaw's +// SSH and Cert credentials. The credentials must be keyed with the +// following names: 'seesaw-ssh-private-key', 'seesaw-ssh-public-key', +// 'seesaw-ssh-ca-key', 'seesaw-ssh-ca-cert'. +type VmwareAdminSeesawConfig struct { + // EnableHa: Enable two load balancer VMs to achieve a highly-available + // Seesaw load balancer. + EnableHa bool `json:"enableHa,omitempty"` + + // Group: In general the following format should be used for the Seesaw + // group name: seesaw-for-[cluster_name]. + Group string `json:"group,omitempty"` + + // IpBlocks: The IP Blocks to be used by the Seesaw load balancer + IpBlocks []*VmwareIpBlock `json:"ipBlocks,omitempty"` + + // MasterIp: MasterIP is the IP announced by the master of Seesaw group. + MasterIp string `json:"masterIp,omitempty"` + + // StackdriverName: Name to be used by Stackdriver. + StackdriverName string `json:"stackdriverName,omitempty"` + + // Vms: Names of the VMs created for this Seesaw group. + Vms []string `json:"vms,omitempty"` + + // ForceSendFields is a list of field names (e.g. "EnableHa") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "EnableHa") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareAdminSeesawConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareAdminSeesawConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareAdminVCenterConfig: VmwareAdminVCenterConfig contains VCenter +// configuration for VMware admin cluster. +type VmwareAdminVCenterConfig struct { + // Address: The vCenter IP address. + Address string `json:"address,omitempty"` + + // CaCertData: Contains the vCenter CA certificate public key for SSL + // verification. + CaCertData string `json:"caCertData,omitempty"` + + // Cluster: The name of the vCenter cluster for the admin cluster. + Cluster string `json:"cluster,omitempty"` + + // DataDisk: The name of the virtual machine disk (VMDK) for the admin + // cluster. + DataDisk string `json:"dataDisk,omitempty"` + + // Datacenter: The name of the vCenter datacenter for the admin cluster. + Datacenter string `json:"datacenter,omitempty"` + + // Datastore: The name of the vCenter datastore for the admin cluster. + Datastore string `json:"datastore,omitempty"` + + // Folder: The name of the vCenter folder for the admin cluster. + Folder string `json:"folder,omitempty"` + + // ResourcePool: The name of the vCenter resource pool for the admin + // cluster. + ResourcePool string `json:"resourcePool,omitempty"` + + // StoragePolicyName: The name of the vCenter storage policy for the + // user cluster. + StoragePolicyName string `json:"storagePolicyName,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Address") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Address") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareAdminVCenterConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareAdminVCenterConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareAdminVipConfig: VmwareAdminVipConfig for VMware load balancer +// configurations. +type VmwareAdminVipConfig struct { + // AddonsVip: The VIP to configure the load balancer for add-ons. + AddonsVip string `json:"addonsVip,omitempty"` + + // ControlPlaneVip: The VIP which you previously set aside for the + // Kubernetes API of the admin cluster. + ControlPlaneVip string `json:"controlPlaneVip,omitempty"` + + // ForceSendFields is a list of field names (e.g. "AddonsVip") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "AddonsVip") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareAdminVipConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareAdminVipConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareAutoRepairConfig: Specifies config to enable/disable auto +// repair. The cluster-health-controller is deployed only if Enabled is +// true. +type VmwareAutoRepairConfig struct { + // Enabled: Whether auto repair is enabled. + Enabled bool `json:"enabled,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Enabled") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Enabled") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareAutoRepairConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareAutoRepairConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareAutoResizeConfig: Represents auto resizing configurations for +// the VMware user cluster. +type VmwareAutoResizeConfig struct { + // Enabled: Whether to enable controle plane node auto resizing. + Enabled bool `json:"enabled,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Enabled") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Enabled") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareAutoResizeConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareAutoResizeConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareBundleConfig: VmwareBundleConfig represents configuration for +// the bundle. +type VmwareBundleConfig struct { + // Status: Output only. Resource status for the bundle. + Status *ResourceStatus `json:"status,omitempty"` + + // Version: The version of the bundle. + Version string `json:"version,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Status") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Status") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareBundleConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareBundleConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareCluster: Resource that represents a VMware user cluster. ## +type VmwareCluster struct { + // AdminClusterMembership: Required. The admin cluster this VMware user + // cluster belongs to. This is the full resource name of the admin + // cluster's fleet membership. In the future, references to other + // resource types might be allowed if admin clusters are modeled as + // their own resources. + AdminClusterMembership string `json:"adminClusterMembership,omitempty"` + + // AdminClusterName: Output only. The resource name of the VMware admin + // cluster hosting this user cluster. + AdminClusterName string `json:"adminClusterName,omitempty"` + + // Annotations: Annotations on the VMware user cluster. This field has + // the same restrictions as Kubernetes annotations. The total size of + // all keys and values combined is limited to 256k. Key can have 2 + // segments: prefix (optional) and name (required), separated by a slash + // (/). Prefix must be a DNS subdomain. Name must be 63 characters or + // less, begin and end with alphanumerics, with dashes (-), underscores + // (_), dots (.), and alphanumerics between. + Annotations map[string]string `json:"annotations,omitempty"` + + // AntiAffinityGroups: AAGConfig specifies whether to spread VMware user + // cluster nodes across at least three physical hosts in the datacenter. + AntiAffinityGroups *VmwareAAGConfig `json:"antiAffinityGroups,omitempty"` + + // Authorization: RBAC policy that will be applied and managed by the + // Anthos On-Prem API. + Authorization *Authorization `json:"authorization,omitempty"` + + // AutoRepairConfig: Configuration for auto repairing. + AutoRepairConfig *VmwareAutoRepairConfig `json:"autoRepairConfig,omitempty"` + + // BinaryAuthorization: Binary Authorization related configurations. + BinaryAuthorization *BinaryAuthorization `json:"binaryAuthorization,omitempty"` + + // ControlPlaneNode: VMware user cluster control plane nodes must have + // either 1 or 3 replicas. + ControlPlaneNode *VmwareControlPlaneNodeConfig `json:"controlPlaneNode,omitempty"` + + // CreateTime: Output only. The time at which VMware user cluster was + // created. + CreateTime string `json:"createTime,omitempty"` + + // DataplaneV2: VmwareDataplaneV2Config specifies configuration for + // Dataplane V2. + DataplaneV2 *VmwareDataplaneV2Config `json:"dataplaneV2,omitempty"` + + // DeleteTime: Output only. The time at which VMware user cluster was + // deleted. + DeleteTime string `json:"deleteTime,omitempty"` + + // Description: A human readable description of this VMware user + // cluster. + Description string `json:"description,omitempty"` + + // DisableBundledIngress: Disable bundled ingress. + DisableBundledIngress bool `json:"disableBundledIngress,omitempty"` + + // EnableControlPlaneV2: Enable control plane V2. Default to false. + EnableControlPlaneV2 bool `json:"enableControlPlaneV2,omitempty"` + + // Endpoint: Output only. The DNS name of VMware user cluster's API + // server. + Endpoint string `json:"endpoint,omitempty"` + + // Etag: This checksum is computed by the server based on the value of + // other fields, and may be sent on update and delete requests to ensure + // the client has an up-to-date value before proceeding. Allows clients + // to perform consistent read-modify-writes through optimistic + // concurrency control. + Etag string `json:"etag,omitempty"` + + // Fleet: Output only. Fleet configuration for the cluster. + Fleet *Fleet `json:"fleet,omitempty"` + + // LoadBalancer: Load balancer configuration. + LoadBalancer *VmwareLoadBalancerConfig `json:"loadBalancer,omitempty"` + + // LocalName: Output only. The object name of the VMware + // OnPremUserCluster custom resource on the associated admin cluster. + // This field is used to support conflicting names when enrolling + // existing clusters to the API. When used as a part of cluster + // enrollment, this field will differ from the ID in the resource name. + // For new clusters, this field will match the user provided cluster + // name and be visible in the last component of the resource name. It is + // not modifiable. All users should use this name to access their + // cluster using gkectl or kubectl and should expect to see the local + // name when viewing admin cluster controller logs. + LocalName string `json:"localName,omitempty"` + + // Name: Immutable. The VMware user cluster resource name. + Name string `json:"name,omitempty"` + + // NetworkConfig: The VMware user cluster network configuration. + NetworkConfig *VmwareNetworkConfig `json:"networkConfig,omitempty"` + + // OnPremVersion: Required. The Anthos clusters on the VMware version + // for your user cluster. + OnPremVersion string `json:"onPremVersion,omitempty"` + + // Reconciling: Output only. If set, there are currently changes in + // flight to the VMware user cluster. + Reconciling bool `json:"reconciling,omitempty"` + + // State: Output only. The current state of VMware user cluster. + // + // Possible values: + // "STATE_UNSPECIFIED" - Not set. + // "PROVISIONING" - The PROVISIONING state indicates the cluster is + // being created. + // "RUNNING" - The RUNNING state indicates the cluster has been + // created and is fully usable. + // "RECONCILING" - The RECONCILING state indicates that the cluster is + // being updated. It remains available, but potentially with degraded + // performance. + // "STOPPING" - The STOPPING state indicates the cluster is being + // deleted. + // "ERROR" - The ERROR state indicates the cluster is in a broken + // unrecoverable state. + // "DEGRADED" - The DEGRADED state indicates the cluster requires user + // action to restore full functionality. + State string `json:"state,omitempty"` + + // Status: Output only. ResourceStatus representing detailed cluster + // state. + Status *ResourceStatus `json:"status,omitempty"` + + // Storage: Storage configuration. + Storage *VmwareStorageConfig `json:"storage,omitempty"` + + // Uid: Output only. The unique identifier of the VMware user cluster. + Uid string `json:"uid,omitempty"` + + // UpdateTime: Output only. The time at which VMware user cluster was + // last updated. + UpdateTime string `json:"updateTime,omitempty"` + + // UpgradePolicy: Specifies upgrade policy for the cluster. + UpgradePolicy *VmwareClusterUpgradePolicy `json:"upgradePolicy,omitempty"` + + // ValidationCheck: Output only. ValidationCheck represents the result + // of the preflight check job. + ValidationCheck *ValidationCheck `json:"validationCheck,omitempty"` + + // Vcenter: VmwareVCenterConfig specifies vCenter config for the user + // cluster. If unspecified, it is inherited from the admin cluster. + Vcenter *VmwareVCenterConfig `json:"vcenter,omitempty"` + + // VmTrackingEnabled: Enable VM tracking. + VmTrackingEnabled bool `json:"vmTrackingEnabled,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. + // "AdminClusterMembership") to unconditionally include in API requests. + // By default, fields with empty or default values are omitted from API + // requests. However, any non-pointer, non-interface field appearing in + // ForceSendFields will be sent to the server regardless of whether the + // field is empty or not. This may be used to include empty fields in + // Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "AdminClusterMembership") + // to include in API requests with the JSON null value. By default, + // fields with empty values are omitted from API requests. However, any + // field with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *VmwareCluster) MarshalJSON() ([]byte, error) { + type NoMethod VmwareCluster + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareClusterUpgradePolicy: VmwareClusterUpgradePolicy defines the +// cluster upgrade policy. +type VmwareClusterUpgradePolicy struct { + // ControlPlaneOnly: Controls whether the upgrade applies to the control + // plane only. + ControlPlaneOnly bool `json:"controlPlaneOnly,omitempty"` + + // ForceSendFields is a list of field names (e.g. "ControlPlaneOnly") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "ControlPlaneOnly") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *VmwareClusterUpgradePolicy) MarshalJSON() ([]byte, error) { + type NoMethod VmwareClusterUpgradePolicy + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareControlPlaneNodeConfig: Specifies control plane node config for +// the VMware user cluster. +type VmwareControlPlaneNodeConfig struct { + // AutoResizeConfig: AutoResizeConfig provides auto resizing + // configurations. + AutoResizeConfig *VmwareAutoResizeConfig `json:"autoResizeConfig,omitempty"` + + // Cpus: The number of CPUs for each admin cluster node that serve as + // control planes for this VMware user cluster. (default: 4 CPUs) + Cpus int64 `json:"cpus,omitempty,string"` + + // Memory: The megabytes of memory for each admin cluster node that + // serves as a control plane for this VMware user cluster (default: 8192 + // MB memory). + Memory int64 `json:"memory,omitempty,string"` + + // Replicas: The number of control plane nodes for this VMware user + // cluster. (default: 1 replica). + Replicas int64 `json:"replicas,omitempty,string"` + + // VsphereConfig: Vsphere-specific config. + VsphereConfig *VmwareControlPlaneVsphereConfig `json:"vsphereConfig,omitempty"` + + // ForceSendFields is a list of field names (e.g. "AutoResizeConfig") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "AutoResizeConfig") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *VmwareControlPlaneNodeConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareControlPlaneNodeConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareControlPlaneV2Config: Specifies control plane V2 config. +type VmwareControlPlaneV2Config struct { + // ControlPlaneIpBlock: Static IP addresses for the control plane nodes. + ControlPlaneIpBlock *VmwareIpBlock `json:"controlPlaneIpBlock,omitempty"` + + // ForceSendFields is a list of field names (e.g. "ControlPlaneIpBlock") + // to unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "ControlPlaneIpBlock") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *VmwareControlPlaneV2Config) MarshalJSON() ([]byte, error) { + type NoMethod VmwareControlPlaneV2Config + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareControlPlaneVsphereConfig: Specifies control plane node config. +type VmwareControlPlaneVsphereConfig struct { + // Datastore: The Vsphere datastore used by the control plane Node. + Datastore string `json:"datastore,omitempty"` + + // StoragePolicyName: The Vsphere storage policy used by the control + // plane Node. + StoragePolicyName string `json:"storagePolicyName,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Datastore") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Datastore") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareControlPlaneVsphereConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareControlPlaneVsphereConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareDataplaneV2Config: Contains configurations for Dataplane V2, +// which is optimized dataplane for Kubernetes networking. For more +// information, see: +// https://cloud.google.com/kubernetes-engine/docs/concepts/dataplane-v2 +type VmwareDataplaneV2Config struct { + // AdvancedNetworking: Enable advanced networking which requires + // dataplane_v2_enabled to be set true. + AdvancedNetworking bool `json:"advancedNetworking,omitempty"` + + // DataplaneV2Enabled: Enables Dataplane V2. + DataplaneV2Enabled bool `json:"dataplaneV2Enabled,omitempty"` + + // ForwardMode: Configure ForwardMode for Dataplane v2. + ForwardMode string `json:"forwardMode,omitempty"` + + // WindowsDataplaneV2Enabled: Enable Dataplane V2 for clusters with + // Windows nodes. + WindowsDataplaneV2Enabled bool `json:"windowsDataplaneV2Enabled,omitempty"` + + // ForceSendFields is a list of field names (e.g. "AdvancedNetworking") + // to unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "AdvancedNetworking") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *VmwareDataplaneV2Config) MarshalJSON() ([]byte, error) { + type NoMethod VmwareDataplaneV2Config + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareDhcpIpConfig: Represents the network configuration required for +// the VMware user clusters with DHCP IP configurations. +type VmwareDhcpIpConfig struct { + // Enabled: enabled is a flag to mark if DHCP IP allocation is used for + // VMware user clusters. + Enabled bool `json:"enabled,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Enabled") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Enabled") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareDhcpIpConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareDhcpIpConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareF5BigIpConfig: Represents configuration parameters for an F5 +// BIG-IP load balancer. +type VmwareF5BigIpConfig struct { + // Address: The load balancer's IP address. + Address string `json:"address,omitempty"` + + // Partition: The preexisting partition to be used by the load balancer. + // This partition is usually created for the admin cluster for example: + // 'my-f5-admin-partition'. + Partition string `json:"partition,omitempty"` + + // SnatPool: The pool name. Only necessary, if using SNAT. + SnatPool string `json:"snatPool,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Address") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Address") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareF5BigIpConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareF5BigIpConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareHostConfig: Represents the common parameters for all the hosts +// irrespective of their IP address. +type VmwareHostConfig struct { + // DnsSearchDomains: DNS search domains. + DnsSearchDomains []string `json:"dnsSearchDomains,omitempty"` + + // DnsServers: DNS servers. + DnsServers []string `json:"dnsServers,omitempty"` + + // NtpServers: NTP servers. + NtpServers []string `json:"ntpServers,omitempty"` + + // ForceSendFields is a list of field names (e.g. "DnsSearchDomains") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "DnsSearchDomains") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *VmwareHostConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareHostConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareHostIp: Represents VMware user cluster node's network +// configuration. +type VmwareHostIp struct { + // Hostname: Hostname of the machine. VM's name will be used if this + // field is empty. + Hostname string `json:"hostname,omitempty"` + + // Ip: IP could be an IP address (like 1.2.3.4) or a CIDR (like + // 1.2.3.0/24). + Ip string `json:"ip,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Hostname") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Hostname") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareHostIp) MarshalJSON() ([]byte, error) { + type NoMethod VmwareHostIp + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareIpBlock: Represents a collection of IP addresses to assign to +// nodes. +type VmwareIpBlock struct { + // Gateway: The network gateway used by the VMware user cluster. + Gateway string `json:"gateway,omitempty"` + + // Ips: The node's network configurations used by the VMware user + // cluster. + Ips []*VmwareHostIp `json:"ips,omitempty"` + + // Netmask: The netmask used by the VMware user cluster. + Netmask string `json:"netmask,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Gateway") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Gateway") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareIpBlock) MarshalJSON() ([]byte, error) { + type NoMethod VmwareIpBlock + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareLoadBalancerConfig: Specifies the locad balancer config for the +// VMware user cluster. +type VmwareLoadBalancerConfig struct { + // F5Config: Configuration for F5 Big IP typed load balancers. + F5Config *VmwareF5BigIpConfig `json:"f5Config,omitempty"` + + // ManualLbConfig: Manually configured load balancers. + ManualLbConfig *VmwareManualLbConfig `json:"manualLbConfig,omitempty"` + + // MetalLbConfig: Configuration for MetalLB typed load balancers. + MetalLbConfig *VmwareMetalLbConfig `json:"metalLbConfig,omitempty"` + + // SeesawConfig: Output only. Configuration for Seesaw typed load + // balancers. + SeesawConfig *VmwareSeesawConfig `json:"seesawConfig,omitempty"` + + // VipConfig: The VIPs used by the load balancer. + VipConfig *VmwareVipConfig `json:"vipConfig,omitempty"` + + // ForceSendFields is a list of field names (e.g. "F5Config") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "F5Config") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareLoadBalancerConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareLoadBalancerConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareManualLbConfig: Represents configuration parameters for an +// already existing manual load balancer. Given the nature of manual +// load balancers it is expected that said load balancer will be fully +// managed by users. IMPORTANT: Please note that the Anthos On-Prem API +// will not generate or update ManualLB configurations it can only bind +// a pre-existing configuration to a new VMware user cluster. +type VmwareManualLbConfig struct { + // ControlPlaneNodePort: NodePort for control plane service. The + // Kubernetes API server in the admin cluster is implemented as a + // Service of type NodePort (ex. 30968). + ControlPlaneNodePort int64 `json:"controlPlaneNodePort,omitempty"` + + // IngressHttpNodePort: NodePort for ingress service's http. The ingress + // service in the admin cluster is implemented as a Service of type + // NodePort (ex. 32527). + IngressHttpNodePort int64 `json:"ingressHttpNodePort,omitempty"` + + // IngressHttpsNodePort: NodePort for ingress service's https. The + // ingress service in the admin cluster is implemented as a Service of + // type NodePort (ex. 30139). + IngressHttpsNodePort int64 `json:"ingressHttpsNodePort,omitempty"` + + // KonnectivityServerNodePort: NodePort for konnectivity server service + // running as a sidecar in each kube-apiserver pod (ex. 30564). + KonnectivityServerNodePort int64 `json:"konnectivityServerNodePort,omitempty"` + + // ForceSendFields is a list of field names (e.g. + // "ControlPlaneNodePort") to unconditionally include in API requests. + // By default, fields with empty or default values are omitted from API + // requests. However, any non-pointer, non-interface field appearing in + // ForceSendFields will be sent to the server regardless of whether the + // field is empty or not. This may be used to include empty fields in + // Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "ControlPlaneNodePort") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *VmwareManualLbConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareManualLbConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareMetalLbConfig: Represents configuration parameters for the +// MetalLB load balancer. +type VmwareMetalLbConfig struct { + // AddressPools: Required. AddressPools is a list of non-overlapping IP + // pools used by load balancer typed services. All addresses must be + // routable to load balancer nodes. IngressVIP must be included in the + // pools. + AddressPools []*VmwareAddressPool `json:"addressPools,omitempty"` + + // ForceSendFields is a list of field names (e.g. "AddressPools") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "AddressPools") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareMetalLbConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareMetalLbConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareNetworkConfig: Specifies network config for the VMware user +// cluster. +type VmwareNetworkConfig struct { + // ControlPlaneV2Config: Configuration for control plane V2 mode. + ControlPlaneV2Config *VmwareControlPlaneV2Config `json:"controlPlaneV2Config,omitempty"` + + // DhcpIpConfig: Configuration settings for a DHCP IP configuration. + DhcpIpConfig *VmwareDhcpIpConfig `json:"dhcpIpConfig,omitempty"` + + // HostConfig: Represents common network settings irrespective of the + // host's IP address. + HostConfig *VmwareHostConfig `json:"hostConfig,omitempty"` + + // PodAddressCidrBlocks: Required. All pods in the cluster are assigned + // an RFC1918 IPv4 address from these ranges. Only a single range is + // supported. This field cannot be changed after creation. + PodAddressCidrBlocks []string `json:"podAddressCidrBlocks,omitempty"` + + // ServiceAddressCidrBlocks: Required. All services in the cluster are + // assigned an RFC1918 IPv4 address from these ranges. Only a single + // range is supported. This field cannot be changed after creation. + ServiceAddressCidrBlocks []string `json:"serviceAddressCidrBlocks,omitempty"` + + // StaticIpConfig: Configuration settings for a static IP configuration. + StaticIpConfig *VmwareStaticIpConfig `json:"staticIpConfig,omitempty"` + + // VcenterNetwork: vcenter_network specifies vCenter network name. + // Inherited from the admin cluster. + VcenterNetwork string `json:"vcenterNetwork,omitempty"` + + // ForceSendFields is a list of field names (e.g. + // "ControlPlaneV2Config") to unconditionally include in API requests. + // By default, fields with empty or default values are omitted from API + // requests. However, any non-pointer, non-interface field appearing in + // ForceSendFields will be sent to the server regardless of whether the + // field is empty or not. This may be used to include empty fields in + // Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "ControlPlaneV2Config") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *VmwareNetworkConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareNetworkConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareNodeConfig: Parameters that describe the configuration of all +// nodes within a given node pool. +type VmwareNodeConfig struct { + // BootDiskSizeGb: VMware disk size to be used during creation. + BootDiskSizeGb int64 `json:"bootDiskSizeGb,omitempty,string"` + + // Cpus: The number of CPUs for each node in the node pool. + Cpus int64 `json:"cpus,omitempty,string"` + + // EnableLoadBalancer: Allow node pool traffic to be load balanced. Only + // works for clusters with MetalLB load balancers. + EnableLoadBalancer bool `json:"enableLoadBalancer,omitempty"` + + // Image: The OS image name in vCenter, only valid when using Windows. + Image string `json:"image,omitempty"` + + // ImageType: Required. The OS image to be used for each node in a node + // pool. Currently `cos`, `ubuntu`, `ubuntu_containerd` and `windows` + // are supported. + ImageType string `json:"imageType,omitempty"` + + // Labels: The map of Kubernetes labels (key/value pairs) to be applied + // to each node. These will added in addition to any default label(s) + // that Kubernetes may apply to the node. In case of conflict in label + // keys, the applied set may differ depending on the Kubernetes version + // -- it's best to assume the behavior is undefined and conflicts should + // be avoided. For more information, including usage and the valid + // values, see: + // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ + Labels map[string]string `json:"labels,omitempty"` + + // MemoryMb: The megabytes of memory for each node in the node pool. + MemoryMb int64 `json:"memoryMb,omitempty,string"` + + // Replicas: The number of nodes in the node pool. + Replicas int64 `json:"replicas,omitempty,string"` + + // Taints: The initial taints assigned to nodes of this node pool. + Taints []*NodeTaint `json:"taints,omitempty"` + + // VsphereConfig: Specifies the vSphere config for node pool. + VsphereConfig *VmwareVsphereConfig `json:"vsphereConfig,omitempty"` + + // ForceSendFields is a list of field names (e.g. "BootDiskSizeGb") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "BootDiskSizeGb") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *VmwareNodeConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareNodeConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareNodePool: Resource VmwareNodePool represents a VMware node +// pool. ## +type VmwareNodePool struct { + // Annotations: Annotations on the node pool. This field has the same + // restrictions as Kubernetes annotations. The total size of all keys + // and values combined is limited to 256k. Key can have 2 segments: + // prefix (optional) and name (required), separated by a slash (/). + // Prefix must be a DNS subdomain. Name must be 63 characters or less, + // begin and end with alphanumerics, with dashes (-), underscores (_), + // dots (.), and alphanumerics between. + Annotations map[string]string `json:"annotations,omitempty"` + + // Config: Required. The node configuration of the node pool. + Config *VmwareNodeConfig `json:"config,omitempty"` + + // CreateTime: Output only. The time at which this node pool was + // created. + CreateTime string `json:"createTime,omitempty"` + + // DeleteTime: Output only. The time at which this node pool was + // deleted. If the resource is not deleted, this must be empty + DeleteTime string `json:"deleteTime,omitempty"` + + // DisplayName: The display name for the node pool. + DisplayName string `json:"displayName,omitempty"` + + // Etag: This checksum is computed by the server based on the value of + // other fields, and may be sent on update and delete requests to ensure + // the client has an up-to-date value before proceeding. Allows clients + // to perform consistent read-modify-writes through optimistic + // concurrency control. + Etag string `json:"etag,omitempty"` + + // Name: Immutable. The resource name of this node pool. + Name string `json:"name,omitempty"` + + // NodePoolAutoscaling: Node pool autoscaling config for the node pool. + NodePoolAutoscaling *VmwareNodePoolAutoscalingConfig `json:"nodePoolAutoscaling,omitempty"` + + // OnPremVersion: Anthos version for the node pool. Defaults to the user + // cluster version. + OnPremVersion string `json:"onPremVersion,omitempty"` + + // Reconciling: Output only. If set, there are currently changes in + // flight to the node pool. + Reconciling bool `json:"reconciling,omitempty"` + + // State: Output only. The current state of the node pool. + // + // Possible values: + // "STATE_UNSPECIFIED" - Not set. + // "PROVISIONING" - The PROVISIONING state indicates the node pool is + // being created. + // "RUNNING" - The RUNNING state indicates the node pool has been + // created and is fully usable. + // "RECONCILING" - The RECONCILING state indicates that the node pool + // is being updated. It remains available, but potentially with degraded + // performance. + // "STOPPING" - The STOPPING state indicates the cluster is being + // deleted + // "ERROR" - The ERROR state indicates the node pool is in a broken + // unrecoverable state. + // "DEGRADED" - The DEGRADED state indicates the node pool requires + // user action to restore full functionality. + State string `json:"state,omitempty"` + + // Status: Output only. ResourceStatus representing the detailed VMware + // node pool state. + Status *ResourceStatus `json:"status,omitempty"` + + // Uid: Output only. The unique identifier of the node pool. + Uid string `json:"uid,omitempty"` + + // UpdateTime: Output only. The time at which this node pool was last + // updated. + UpdateTime string `json:"updateTime,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "Annotations") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Annotations") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareNodePool) MarshalJSON() ([]byte, error) { + type NoMethod VmwareNodePool + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareNodePoolAutoscalingConfig: NodePoolAutoscaling config for the +// NodePool to allow for the kubernetes to scale NodePool. +type VmwareNodePoolAutoscalingConfig struct { + // MaxReplicas: Maximum number of replicas in the NodePool. + MaxReplicas int64 `json:"maxReplicas,omitempty"` + + // MinReplicas: Minimum number of replicas in the NodePool. + MinReplicas int64 `json:"minReplicas,omitempty"` + + // ForceSendFields is a list of field names (e.g. "MaxReplicas") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "MaxReplicas") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareNodePoolAutoscalingConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareNodePoolAutoscalingConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwarePlatformConfig: VmwarePlatformConfig represents configuration +// for the VMware platform. +type VmwarePlatformConfig struct { + // Bundles: Output only. The list of bundles installed in the admin + // cluster. + Bundles []*VmwareBundleConfig `json:"bundles,omitempty"` + + // PlatformVersion: Output only. The platform version e.g. 1.13.2. + PlatformVersion string `json:"platformVersion,omitempty"` + + // RequiredPlatformVersion: Input only. The required platform version + // e.g. 1.13.1. If the current platform version is lower than the target + // version, the platform version will be updated to the target version. + // If the target version is not installed in the platform (bundle + // versions), download the target version bundle. + RequiredPlatformVersion string `json:"requiredPlatformVersion,omitempty"` + + // Status: Output only. Resource status for the platform. + Status *ResourceStatus `json:"status,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Bundles") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Bundles") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwarePlatformConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwarePlatformConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareSeesawConfig: VmwareSeesawConfig represents configuration +// parameters for an already existing Seesaw load balancer. IMPORTANT: +// Please note that the Anthos On-Prem API will not generate or update +// Seesaw configurations it can only bind a pre-existing configuration +// to a new user cluster. IMPORTANT: When attempting to create a user +// cluster with a pre-existing Seesaw load balancer you will need to +// follow some preparation steps before calling the +// 'CreateVmwareCluster' API method. First you will need to create the +// user cluster's namespace via kubectl. The namespace will need to use +// the following naming convention : -gke-onprem-mgmt or +// -gke-onprem-mgmt depending on whether you used the +// 'VmwareCluster.local_name' to disambiguate collisions; for more +// context see the documentation of 'VmwareCluster.local_name'. Once the +// namespace is created you will need to create a secret resource via +// kubectl. This secret will contain copies of your Seesaw credentials. +// The Secret must be called 'user-cluster-creds' and contain Seesaw's +// SSH and Cert credentials. The credentials must be keyed with the +// following names: 'seesaw-ssh-private-key', 'seesaw-ssh-public-key', +// 'seesaw-ssh-ca-key', 'seesaw-ssh-ca-cert'. +type VmwareSeesawConfig struct { + // EnableHa: Enable two load balancer VMs to achieve a highly-available + // Seesaw load balancer. + EnableHa bool `json:"enableHa,omitempty"` + + // Group: Required. In general the following format should be used for + // the Seesaw group name: seesaw-for-[cluster_name]. + Group string `json:"group,omitempty"` + + // IpBlocks: Required. The IP Blocks to be used by the Seesaw load + // balancer + IpBlocks []*VmwareIpBlock `json:"ipBlocks,omitempty"` + + // MasterIp: Required. MasterIP is the IP announced by the master of + // Seesaw group. + MasterIp string `json:"masterIp,omitempty"` + + // StackdriverName: Name to be used by Stackdriver. + StackdriverName string `json:"stackdriverName,omitempty"` + + // Vms: Names of the VMs created for this Seesaw group. + Vms []string `json:"vms,omitempty"` + + // ForceSendFields is a list of field names (e.g. "EnableHa") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "EnableHa") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareSeesawConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareSeesawConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareStaticIpConfig: Represents the network configuration required +// for the VMware user clusters with Static IP configurations. +type VmwareStaticIpConfig struct { + // IpBlocks: Represents the configuration values for static IP + // allocation to nodes. + IpBlocks []*VmwareIpBlock `json:"ipBlocks,omitempty"` + + // ForceSendFields is a list of field names (e.g. "IpBlocks") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "IpBlocks") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareStaticIpConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareStaticIpConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareStorageConfig: Specifies vSphere CSI components deployment +// config in the VMware user cluster. +type VmwareStorageConfig struct { + // VsphereCsiDisabled: Whether or not to deploy vSphere CSI components + // in the VMware user cluster. Enabled by default. + VsphereCsiDisabled bool `json:"vsphereCsiDisabled,omitempty"` + + // ForceSendFields is a list of field names (e.g. "VsphereCsiDisabled") + // to unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "VsphereCsiDisabled") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *VmwareStorageConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareStorageConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareVCenterConfig: Represents configuration for the VMware VCenter +// for the user cluster. +type VmwareVCenterConfig struct { + // Address: Output only. The vCenter IP address. + Address string `json:"address,omitempty"` + + // CaCertData: Contains the vCenter CA certificate public key for SSL + // verification. + CaCertData string `json:"caCertData,omitempty"` + + // Cluster: The name of the vCenter cluster for the user cluster. + Cluster string `json:"cluster,omitempty"` + + // Datacenter: The name of the vCenter datacenter for the user cluster. + Datacenter string `json:"datacenter,omitempty"` + + // Datastore: The name of the vCenter datastore for the user cluster. + Datastore string `json:"datastore,omitempty"` + + // Folder: The name of the vCenter folder for the user cluster. + Folder string `json:"folder,omitempty"` + + // ResourcePool: The name of the vCenter resource pool for the user + // cluster. + ResourcePool string `json:"resourcePool,omitempty"` + + // StoragePolicyName: The name of the vCenter storage policy for the + // user cluster. + StoragePolicyName string `json:"storagePolicyName,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Address") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Address") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareVCenterConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareVCenterConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareVersionInfo: Contains information about a specific Anthos on +// VMware version. +type VmwareVersionInfo struct { + // Dependencies: The list of upgrade dependencies for this version. + Dependencies []*UpgradeDependency `json:"dependencies,omitempty"` + + // HasDependencies: If set, the cluster dependencies (e.g. the admin + // cluster, other user clusters managed by the same admin cluster) must + // be upgraded before this version can be installed or upgraded to. + HasDependencies bool `json:"hasDependencies,omitempty"` + + // IsInstalled: If set, the version is installed in the admin cluster. + // Otherwise, the version bundle must be downloaded and installed before + // a user cluster can be created at or upgraded to this version. + IsInstalled bool `json:"isInstalled,omitempty"` + + // Version: Version number e.g. 1.13.1-gke.1000. + Version string `json:"version,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Dependencies") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Dependencies") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareVersionInfo) MarshalJSON() ([]byte, error) { + type NoMethod VmwareVersionInfo + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareVipConfig: Specifies the VIP config for the VMware user cluster +// load balancer. +type VmwareVipConfig struct { + // ControlPlaneVip: The VIP which you previously set aside for the + // Kubernetes API of this cluster. + ControlPlaneVip string `json:"controlPlaneVip,omitempty"` + + // IngressVip: The VIP which you previously set aside for ingress + // traffic into this cluster. + IngressVip string `json:"ingressVip,omitempty"` + + // ForceSendFields is a list of field names (e.g. "ControlPlaneVip") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "ControlPlaneVip") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *VmwareVipConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareVipConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareVsphereConfig: VmwareVsphereConfig represents configuration for +// the VMware VCenter for node pool. +type VmwareVsphereConfig struct { + // Datastore: The name of the vCenter datastore. Inherited from the user + // cluster. + Datastore string `json:"datastore,omitempty"` + + // HostGroups: Vsphere host groups to apply to all VMs in the node pool + HostGroups []string `json:"hostGroups,omitempty"` + + // Tags: Tags to apply to VMs. + Tags []*VmwareVsphereTag `json:"tags,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Datastore") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Datastore") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareVsphereConfig) MarshalJSON() ([]byte, error) { + type NoMethod VmwareVsphereConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// VmwareVsphereTag: VmwareVsphereTag describes a vSphere tag to be +// placed on VMs in the node pool. For more information, see +// https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.vcenterhost.doc/GUID-E8E854DD-AA97-4E0C-8419-CE84F93C4058.html +type VmwareVsphereTag struct { + // Category: The Vsphere tag category. + Category string `json:"category,omitempty"` + + // Tag: The Vsphere tag name. + Tag string `json:"tag,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Category") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Category") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *VmwareVsphereTag) MarshalJSON() ([]byte, error) { + type NoMethod VmwareVsphereTag + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// method id "gkeonprem.projects.locations.get": + +type ProjectsLocationsGetCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// Get: Gets information about a location. +// +// - name: Resource name for the location. +func (r *ProjectsLocationsService) Get(name string) *ProjectsLocationsGetCall { + c := &ProjectsLocationsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsGetCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsGetCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsGetCall) Context(ctx context.Context) *ProjectsLocationsGetCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsGetCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsGetCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.get" call. +// Exactly one of *Location or error will be non-nil. Any non-2xx status +// code is an error. Response headers are in either +// *Location.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsGetCall) Do(opts ...googleapi.CallOption) (*Location, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Location{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets information about a location.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.get", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "Resource name for the location.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "Location" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.list": + +type ProjectsLocationsListCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// List: Lists information about the supported locations for this +// service. +// +// - name: The resource that owns the locations collection, if +// applicable. +func (r *ProjectsLocationsService) List(name string) *ProjectsLocationsListCall { + c := &ProjectsLocationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Filter sets the optional parameter "filter": A filter to narrow down +// results to a preferred subset. The filtering language accepts strings +// like "displayName=tokyo", and is documented in more detail in +// AIP-160 (https://google.aip.dev/160). +func (c *ProjectsLocationsListCall) Filter(filter string) *ProjectsLocationsListCall { + c.urlParams_.Set("filter", filter) + return c +} + +// PageSize sets the optional parameter "pageSize": The maximum number +// of results to return. If not set, the service selects a default. +func (c *ProjectsLocationsListCall) PageSize(pageSize int64) *ProjectsLocationsListCall { + c.urlParams_.Set("pageSize", fmt.Sprint(pageSize)) + return c +} + +// PageToken sets the optional parameter "pageToken": A page token +// received from the `next_page_token` field in the response. Send that +// page token to receive the subsequent page. +func (c *ProjectsLocationsListCall) PageToken(pageToken string) *ProjectsLocationsListCall { + c.urlParams_.Set("pageToken", pageToken) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsListCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsListCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsListCall) Context(ctx context.Context) *ProjectsLocationsListCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsListCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsListCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}/locations") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.list" call. +// Exactly one of *ListLocationsResponse or error will be non-nil. Any +// non-2xx status code is an error. Response headers are in either +// *ListLocationsResponse.ServerResponse.Header or (if a response was +// returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsListCall) Do(opts ...googleapi.CallOption) (*ListLocationsResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &ListLocationsResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists information about the supported locations for this service.", + // "flatPath": "v1/projects/{projectsId}/locations", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.list", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "filter": { + // "description": "A filter to narrow down results to a preferred subset. The filtering language accepts strings like `\"displayName=tokyo\"`, and is documented in more detail in [AIP-160](https://google.aip.dev/160).", + // "location": "query", + // "type": "string" + // }, + // "name": { + // "description": "The resource that owns the locations collection, if applicable.", + // "location": "path", + // "pattern": "^projects/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "pageSize": { + // "description": "The maximum number of results to return. If not set, the service selects a default.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A page token received from the `next_page_token` field in the response. Send that page token to receive the subsequent page.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+name}/locations", + // "response": { + // "$ref": "ListLocationsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// Pages invokes f for each page of results. +// A non-nil error returned from f will halt the iteration. +// The provided context supersedes any context provided to the Context method. +func (c *ProjectsLocationsListCall) Pages(ctx context.Context, f func(*ListLocationsResponse) error) error { + c.ctx_ = ctx + defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point + for { + x, err := c.Do() + if err != nil { + return err + } + if err := f(x); err != nil { + return err + } + if x.NextPageToken == "" { + return nil + } + c.PageToken(x.NextPageToken) + } +} + +// method id "gkeonprem.projects.locations.bareMetalAdminClusters.create": + +type ProjectsLocationsBareMetalAdminClustersCreateCall struct { + s *Service + parent string + baremetaladmincluster *BareMetalAdminCluster + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Create: Creates a new bare metal admin cluster in a given project and +// location. The API needs to be combined with creating a bootstrap +// cluster to work. See: +// https://cloud.google.com/anthos/clusters/docs/bare-metal/latest/installing/creating-clusters/create-admin-cluster-api#prepare_bootstrap_environment +// +// - parent: The parent of the project and location where the cluster is +// created in. Format: "projects/{project}/locations/{location}". +func (r *ProjectsLocationsBareMetalAdminClustersService) Create(parent string, baremetaladmincluster *BareMetalAdminCluster) *ProjectsLocationsBareMetalAdminClustersCreateCall { + c := &ProjectsLocationsBareMetalAdminClustersCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.parent = parent + c.baremetaladmincluster = baremetaladmincluster + return c +} + +// BareMetalAdminClusterId sets the optional parameter +// "bareMetalAdminClusterId": Required. User provided identifier that is +// used as part of the resource name; must conform to RFC-1034 and +// additionally restrict to lower-cased letters. This comes out roughly +// to: /^a-z+[a-z0-9]$/ +func (c *ProjectsLocationsBareMetalAdminClustersCreateCall) BareMetalAdminClusterId(bareMetalAdminClusterId string) *ProjectsLocationsBareMetalAdminClustersCreateCall { + c.urlParams_.Set("bareMetalAdminClusterId", bareMetalAdminClusterId) + return c +} + +// ValidateOnly sets the optional parameter "validateOnly": Validate the +// request without actually doing any updates. +func (c *ProjectsLocationsBareMetalAdminClustersCreateCall) ValidateOnly(validateOnly bool) *ProjectsLocationsBareMetalAdminClustersCreateCall { + c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalAdminClustersCreateCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalAdminClustersCreateCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalAdminClustersCreateCall) Context(ctx context.Context) *ProjectsLocationsBareMetalAdminClustersCreateCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalAdminClustersCreateCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalAdminClustersCreateCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.baremetaladmincluster) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/bareMetalAdminClusters") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "parent": c.parent, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalAdminClusters.create" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalAdminClustersCreateCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new bare metal admin cluster in a given project and location. The API needs to be combined with creating a bootstrap cluster to work. See: https://cloud.google.com/anthos/clusters/docs/bare-metal/latest/installing/creating-clusters/create-admin-cluster-api#prepare_bootstrap_environment", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.bareMetalAdminClusters.create", + // "parameterOrder": [ + // "parent" + // ], + // "parameters": { + // "bareMetalAdminClusterId": { + // "description": "Required. User provided identifier that is used as part of the resource name; must conform to RFC-1034 and additionally restrict to lower-cased letters. This comes out roughly to: /^a-z+[a-z0-9]$/", + // "location": "query", + // "type": "string" + // }, + // "parent": { + // "description": "Required. The parent of the project and location where the cluster is created in. Format: \"projects/{project}/locations/{location}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "validateOnly": { + // "description": "Validate the request without actually doing any updates.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "v1/{+parent}/bareMetalAdminClusters", + // "request": { + // "$ref": "BareMetalAdminCluster" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalAdminClusters.enroll": + +type ProjectsLocationsBareMetalAdminClustersEnrollCall struct { + s *Service + parent string + enrollbaremetaladminclusterrequest *EnrollBareMetalAdminClusterRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Enroll: Enrolls an existing bare metal admin cluster to the Anthos +// On-Prem API within a given project and location. Through enrollment, +// an existing admin cluster will become Anthos On-Prem API managed. The +// corresponding GCP resources will be created and all future +// modifications to the cluster will be expected to be performed through +// the API. +// +// - parent: The parent of the project and location where the cluster is +// enrolled in. Format: "projects/{project}/locations/{location}". +func (r *ProjectsLocationsBareMetalAdminClustersService) Enroll(parent string, enrollbaremetaladminclusterrequest *EnrollBareMetalAdminClusterRequest) *ProjectsLocationsBareMetalAdminClustersEnrollCall { + c := &ProjectsLocationsBareMetalAdminClustersEnrollCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.parent = parent + c.enrollbaremetaladminclusterrequest = enrollbaremetaladminclusterrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalAdminClustersEnrollCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalAdminClustersEnrollCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalAdminClustersEnrollCall) Context(ctx context.Context) *ProjectsLocationsBareMetalAdminClustersEnrollCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalAdminClustersEnrollCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalAdminClustersEnrollCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.enrollbaremetaladminclusterrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/bareMetalAdminClusters:enroll") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "parent": c.parent, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalAdminClusters.enroll" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalAdminClustersEnrollCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Enrolls an existing bare metal admin cluster to the Anthos On-Prem API within a given project and location. Through enrollment, an existing admin cluster will become Anthos On-Prem API managed. The corresponding GCP resources will be created and all future modifications to the cluster will be expected to be performed through the API.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters:enroll", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.bareMetalAdminClusters.enroll", + // "parameterOrder": [ + // "parent" + // ], + // "parameters": { + // "parent": { + // "description": "Required. The parent of the project and location where the cluster is enrolled in. Format: \"projects/{project}/locations/{location}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+parent}/bareMetalAdminClusters:enroll", + // "request": { + // "$ref": "EnrollBareMetalAdminClusterRequest" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalAdminClusters.get": + +type ProjectsLocationsBareMetalAdminClustersGetCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// Get: Gets details of a single bare metal admin cluster. +// +// - name: Name of the bare metal admin cluster to get. Format: +// "projects/{project}/locations/{location}/bareMetalAdminClusters/{bar +// e_metal_admin_cluster}". +func (r *ProjectsLocationsBareMetalAdminClustersService) Get(name string) *ProjectsLocationsBareMetalAdminClustersGetCall { + c := &ProjectsLocationsBareMetalAdminClustersGetCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// View sets the optional parameter "view": View for bare metal admin +// cluster. When `BASIC` is specified, only the cluster resource name +// and membership are returned. The default/unset value +// `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the +// complete cluster configuration details. +// +// Possible values: +// +// "CLUSTER_VIEW_UNSPECIFIED" - If the value is not set, the default +// +// `FULL` view is used. +// +// "BASIC" - Includes basic information of a cluster resource +// +// including cluster resource name and membership. +// +// "FULL" - Includes the complete configuration for bare metal admin +// +// cluster resource. This is the default value for +// GetBareMetalAdminClusterRequest method. +func (c *ProjectsLocationsBareMetalAdminClustersGetCall) View(view string) *ProjectsLocationsBareMetalAdminClustersGetCall { + c.urlParams_.Set("view", view) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalAdminClustersGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalAdminClustersGetCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsBareMetalAdminClustersGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsBareMetalAdminClustersGetCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalAdminClustersGetCall) Context(ctx context.Context) *ProjectsLocationsBareMetalAdminClustersGetCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalAdminClustersGetCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalAdminClustersGetCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalAdminClusters.get" call. +// Exactly one of *BareMetalAdminCluster or error will be non-nil. Any +// non-2xx status code is an error. Response headers are in either +// *BareMetalAdminCluster.ServerResponse.Header or (if a response was +// returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalAdminClustersGetCall) Do(opts ...googleapi.CallOption) (*BareMetalAdminCluster, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &BareMetalAdminCluster{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets details of a single bare metal admin cluster.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters/{bareMetalAdminClustersId}", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.bareMetalAdminClusters.get", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "Required. Name of the bare metal admin cluster to get. Format: \"projects/{project}/locations/{location}/bareMetalAdminClusters/{bare_metal_admin_cluster}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalAdminClusters/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "view": { + // "description": "View for bare metal admin cluster. When `BASIC` is specified, only the cluster resource name and membership are returned. The default/unset value `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete cluster configuration details.", + // "enum": [ + // "CLUSTER_VIEW_UNSPECIFIED", + // "BASIC", + // "FULL" + // ], + // "enumDescriptions": [ + // "If the value is not set, the default `FULL` view is used.", + // "Includes basic information of a cluster resource including cluster resource name and membership.", + // "Includes the complete configuration for bare metal admin cluster resource. This is the default value for GetBareMetalAdminClusterRequest method." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "BareMetalAdminCluster" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalAdminClusters.getIamPolicy": + +type ProjectsLocationsBareMetalAdminClustersGetIamPolicyCall struct { + s *Service + resource string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// GetIamPolicy: Gets the access control policy for a resource. Returns +// an empty policy if the resource exists and does not have a policy +// set. +// +// - resource: REQUIRED: The resource for which the policy is being +// requested. See Resource names +// (https://cloud.google.com/apis/design/resource_names) for the +// appropriate value for this field. +func (r *ProjectsLocationsBareMetalAdminClustersService) GetIamPolicy(resource string) *ProjectsLocationsBareMetalAdminClustersGetIamPolicyCall { + c := &ProjectsLocationsBareMetalAdminClustersGetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.resource = resource + return c +} + +// OptionsRequestedPolicyVersion sets the optional parameter +// "options.requestedPolicyVersion": The maximum policy version that +// will be used to format the policy. Valid values are 0, 1, and 3. +// Requests specifying an invalid value will be rejected. Requests for +// policies with any conditional role bindings must specify version 3. +// Policies with no conditional role bindings may specify any valid +// value or leave the field unset. The policy in the response might use +// the policy version that you specified, or it might use a lower policy +// version. For example, if you specify version 3, but the policy has no +// conditional role bindings, the response uses version 1. To learn +// which resources support conditions in their IAM policies, see the IAM +// documentation +// (https://cloud.google.com/iam/help/conditions/resource-policies). +func (c *ProjectsLocationsBareMetalAdminClustersGetIamPolicyCall) OptionsRequestedPolicyVersion(optionsRequestedPolicyVersion int64) *ProjectsLocationsBareMetalAdminClustersGetIamPolicyCall { + c.urlParams_.Set("options.requestedPolicyVersion", fmt.Sprint(optionsRequestedPolicyVersion)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalAdminClustersGetIamPolicyCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalAdminClustersGetIamPolicyCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsBareMetalAdminClustersGetIamPolicyCall) IfNoneMatch(entityTag string) *ProjectsLocationsBareMetalAdminClustersGetIamPolicyCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalAdminClustersGetIamPolicyCall) Context(ctx context.Context) *ProjectsLocationsBareMetalAdminClustersGetIamPolicyCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalAdminClustersGetIamPolicyCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalAdminClustersGetIamPolicyCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:getIamPolicy") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "resource": c.resource, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalAdminClusters.getIamPolicy" call. +// Exactly one of *Policy or error will be non-nil. Any non-2xx status +// code is an error. Response headers are in either +// *Policy.ServerResponse.Header or (if a response was returned at all) +// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to +// check whether the returned error was because http.StatusNotModified +// was returned. +func (c *ProjectsLocationsBareMetalAdminClustersGetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Policy{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters/{bareMetalAdminClustersId}:getIamPolicy", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.bareMetalAdminClusters.getIamPolicy", + // "parameterOrder": [ + // "resource" + // ], + // "parameters": { + // "options.requestedPolicyVersion": { + // "description": "Optional. The maximum policy version that will be used to format the policy. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional role bindings must specify version 3. Policies with no conditional role bindings may specify any valid value or leave the field unset. The policy in the response might use the policy version that you specified, or it might use a lower policy version. For example, if you specify version 3, but the policy has no conditional role bindings, the response uses version 1. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "resource": { + // "description": "REQUIRED: The resource for which the policy is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalAdminClusters/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+resource}:getIamPolicy", + // "response": { + // "$ref": "Policy" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalAdminClusters.list": + +type ProjectsLocationsBareMetalAdminClustersListCall struct { + s *Service + parent string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// List: Lists bare metal admin clusters in a given project and +// location. +// +// - parent: The parent of the project and location where the clusters +// are listed in. Format: "projects/{project}/locations/{location}". +func (r *ProjectsLocationsBareMetalAdminClustersService) List(parent string) *ProjectsLocationsBareMetalAdminClustersListCall { + c := &ProjectsLocationsBareMetalAdminClustersListCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.parent = parent + return c +} + +// PageSize sets the optional parameter "pageSize": Requested page size. +// Server may return fewer items than requested. If unspecified, at most +// 50 clusters will be returned. The maximum value is 1000; values above +// 1000 will be coerced to 1000. +func (c *ProjectsLocationsBareMetalAdminClustersListCall) PageSize(pageSize int64) *ProjectsLocationsBareMetalAdminClustersListCall { + c.urlParams_.Set("pageSize", fmt.Sprint(pageSize)) + return c +} + +// PageToken sets the optional parameter "pageToken": A token +// identifying a page of results the server should return. +func (c *ProjectsLocationsBareMetalAdminClustersListCall) PageToken(pageToken string) *ProjectsLocationsBareMetalAdminClustersListCall { + c.urlParams_.Set("pageToken", pageToken) + return c +} + +// View sets the optional parameter "view": View for bare metal admin +// clusters. When `BASIC` is specified, only the admin cluster resource +// name and membership are returned. The default/unset value +// `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the +// complete admin cluster configuration details. +// +// Possible values: +// +// "CLUSTER_VIEW_UNSPECIFIED" - If the value is not set, the default +// +// `FULL` view is used. +// +// "BASIC" - Includes basic information of a admin cluster resource +// +// including admin cluster resource name and membership. +// +// "FULL" - Includes the complete configuration for bare metal admin +// +// cluster resource. This is the default value for +// ListBareMetalAdminClustersRequest method. +func (c *ProjectsLocationsBareMetalAdminClustersListCall) View(view string) *ProjectsLocationsBareMetalAdminClustersListCall { + c.urlParams_.Set("view", view) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalAdminClustersListCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalAdminClustersListCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsBareMetalAdminClustersListCall) IfNoneMatch(entityTag string) *ProjectsLocationsBareMetalAdminClustersListCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalAdminClustersListCall) Context(ctx context.Context) *ProjectsLocationsBareMetalAdminClustersListCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalAdminClustersListCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalAdminClustersListCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/bareMetalAdminClusters") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "parent": c.parent, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalAdminClusters.list" call. +// Exactly one of *ListBareMetalAdminClustersResponse or error will be +// non-nil. Any non-2xx status code is an error. Response headers are in +// either *ListBareMetalAdminClustersResponse.ServerResponse.Header or +// (if a response was returned at all) in +// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check +// whether the returned error was because http.StatusNotModified was +// returned. +func (c *ProjectsLocationsBareMetalAdminClustersListCall) Do(opts ...googleapi.CallOption) (*ListBareMetalAdminClustersResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &ListBareMetalAdminClustersResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists bare metal admin clusters in a given project and location.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.bareMetalAdminClusters.list", + // "parameterOrder": [ + // "parent" + // ], + // "parameters": { + // "pageSize": { + // "description": "Requested page size. Server may return fewer items than requested. If unspecified, at most 50 clusters will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A token identifying a page of results the server should return.", + // "location": "query", + // "type": "string" + // }, + // "parent": { + // "description": "Required. The parent of the project and location where the clusters are listed in. Format: \"projects/{project}/locations/{location}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "view": { + // "description": "View for bare metal admin clusters. When `BASIC` is specified, only the admin cluster resource name and membership are returned. The default/unset value `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete admin cluster configuration details.", + // "enum": [ + // "CLUSTER_VIEW_UNSPECIFIED", + // "BASIC", + // "FULL" + // ], + // "enumDescriptions": [ + // "If the value is not set, the default `FULL` view is used.", + // "Includes basic information of a admin cluster resource including admin cluster resource name and membership.", + // "Includes the complete configuration for bare metal admin cluster resource. This is the default value for ListBareMetalAdminClustersRequest method." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+parent}/bareMetalAdminClusters", + // "response": { + // "$ref": "ListBareMetalAdminClustersResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// Pages invokes f for each page of results. +// A non-nil error returned from f will halt the iteration. +// The provided context supersedes any context provided to the Context method. +func (c *ProjectsLocationsBareMetalAdminClustersListCall) Pages(ctx context.Context, f func(*ListBareMetalAdminClustersResponse) error) error { + c.ctx_ = ctx + defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point + for { + x, err := c.Do() + if err != nil { + return err + } + if err := f(x); err != nil { + return err + } + if x.NextPageToken == "" { + return nil + } + c.PageToken(x.NextPageToken) + } +} + +// method id "gkeonprem.projects.locations.bareMetalAdminClusters.patch": + +type ProjectsLocationsBareMetalAdminClustersPatchCall struct { + s *Service + name string + baremetaladmincluster *BareMetalAdminCluster + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Patch: Updates the parameters of a single bare metal admin cluster. +// +// - name: Immutable. The bare metal admin cluster resource name. +func (r *ProjectsLocationsBareMetalAdminClustersService) Patch(name string, baremetaladmincluster *BareMetalAdminCluster) *ProjectsLocationsBareMetalAdminClustersPatchCall { + c := &ProjectsLocationsBareMetalAdminClustersPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + c.baremetaladmincluster = baremetaladmincluster + return c +} + +// UpdateMask sets the optional parameter "updateMask": Required. Field +// mask is used to specify the fields to be overwritten in the +// BareMetalAdminCluster resource by the update. The fields specified in +// the update_mask are relative to the resource, not the full request. A +// field will be overwritten if it is in the mask. If the user does not +// provide a mask then all populated fields in the BareMetalAdminCluster +// message will be updated. Empty fields will be ignored unless a field +// mask is used. +func (c *ProjectsLocationsBareMetalAdminClustersPatchCall) UpdateMask(updateMask string) *ProjectsLocationsBareMetalAdminClustersPatchCall { + c.urlParams_.Set("updateMask", updateMask) + return c +} + +// ValidateOnly sets the optional parameter "validateOnly": Validate the +// request without actually doing any updates. +func (c *ProjectsLocationsBareMetalAdminClustersPatchCall) ValidateOnly(validateOnly bool) *ProjectsLocationsBareMetalAdminClustersPatchCall { + c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalAdminClustersPatchCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalAdminClustersPatchCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalAdminClustersPatchCall) Context(ctx context.Context) *ProjectsLocationsBareMetalAdminClustersPatchCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalAdminClustersPatchCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalAdminClustersPatchCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.baremetaladmincluster) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("PATCH", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalAdminClusters.patch" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalAdminClustersPatchCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the parameters of a single bare metal admin cluster.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters/{bareMetalAdminClustersId}", + // "httpMethod": "PATCH", + // "id": "gkeonprem.projects.locations.bareMetalAdminClusters.patch", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "Immutable. The bare metal admin cluster resource name.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalAdminClusters/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "updateMask": { + // "description": "Required. Field mask is used to specify the fields to be overwritten in the BareMetalAdminCluster resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all populated fields in the BareMetalAdminCluster message will be updated. Empty fields will be ignored unless a field mask is used.", + // "format": "google-fieldmask", + // "location": "query", + // "type": "string" + // }, + // "validateOnly": { + // "description": "Validate the request without actually doing any updates.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "v1/{+name}", + // "request": { + // "$ref": "BareMetalAdminCluster" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalAdminClusters.queryVersionConfig": + +type ProjectsLocationsBareMetalAdminClustersQueryVersionConfigCall struct { + s *Service + parent string + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// QueryVersionConfig: Queries the bare metal admin cluster version +// config. +// +// - parent: The parent of the project and location to query for version +// config. Format: "projects/{project}/locations/{location}". +func (r *ProjectsLocationsBareMetalAdminClustersService) QueryVersionConfig(parent string) *ProjectsLocationsBareMetalAdminClustersQueryVersionConfigCall { + c := &ProjectsLocationsBareMetalAdminClustersQueryVersionConfigCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.parent = parent + return c +} + +// UpgradeConfigClusterName sets the optional parameter +// "upgradeConfig.clusterName": The admin cluster resource name. This is +// the full resource name of the admin cluster resource. Format: +// "projects/{project}/locations/{location}/bareMetalAdminClusters/{bare_ +// metal_admin_cluster}" +func (c *ProjectsLocationsBareMetalAdminClustersQueryVersionConfigCall) UpgradeConfigClusterName(upgradeConfigClusterName string) *ProjectsLocationsBareMetalAdminClustersQueryVersionConfigCall { + c.urlParams_.Set("upgradeConfig.clusterName", upgradeConfigClusterName) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalAdminClustersQueryVersionConfigCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalAdminClustersQueryVersionConfigCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalAdminClustersQueryVersionConfigCall) Context(ctx context.Context) *ProjectsLocationsBareMetalAdminClustersQueryVersionConfigCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalAdminClustersQueryVersionConfigCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalAdminClustersQueryVersionConfigCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/bareMetalAdminClusters:queryVersionConfig") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "parent": c.parent, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalAdminClusters.queryVersionConfig" call. +// Exactly one of *QueryBareMetalAdminVersionConfigResponse or error +// will be non-nil. Any non-2xx status code is an error. Response +// headers are in either +// *QueryBareMetalAdminVersionConfigResponse.ServerResponse.Header or +// (if a response was returned at all) in +// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check +// whether the returned error was because http.StatusNotModified was +// returned. +func (c *ProjectsLocationsBareMetalAdminClustersQueryVersionConfigCall) Do(opts ...googleapi.CallOption) (*QueryBareMetalAdminVersionConfigResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &QueryBareMetalAdminVersionConfigResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Queries the bare metal admin cluster version config.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters:queryVersionConfig", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.bareMetalAdminClusters.queryVersionConfig", + // "parameterOrder": [ + // "parent" + // ], + // "parameters": { + // "parent": { + // "description": "Required. The parent of the project and location to query for version config. Format: \"projects/{project}/locations/{location}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "upgradeConfig.clusterName": { + // "description": "The admin cluster resource name. This is the full resource name of the admin cluster resource. Format: \"projects/{project}/locations/{location}/bareMetalAdminClusters/{bare_metal_admin_cluster}\"", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+parent}/bareMetalAdminClusters:queryVersionConfig", + // "response": { + // "$ref": "QueryBareMetalAdminVersionConfigResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalAdminClusters.setIamPolicy": + +type ProjectsLocationsBareMetalAdminClustersSetIamPolicyCall struct { + s *Service + resource string + setiampolicyrequest *SetIamPolicyRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// SetIamPolicy: Sets the access control policy on the specified +// resource. Replaces any existing policy. Can return `NOT_FOUND`, +// `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors. +// +// - resource: REQUIRED: The resource for which the policy is being +// specified. See Resource names +// (https://cloud.google.com/apis/design/resource_names) for the +// appropriate value for this field. +func (r *ProjectsLocationsBareMetalAdminClustersService) SetIamPolicy(resource string, setiampolicyrequest *SetIamPolicyRequest) *ProjectsLocationsBareMetalAdminClustersSetIamPolicyCall { + c := &ProjectsLocationsBareMetalAdminClustersSetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.resource = resource + c.setiampolicyrequest = setiampolicyrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalAdminClustersSetIamPolicyCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalAdminClustersSetIamPolicyCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalAdminClustersSetIamPolicyCall) Context(ctx context.Context) *ProjectsLocationsBareMetalAdminClustersSetIamPolicyCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalAdminClustersSetIamPolicyCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalAdminClustersSetIamPolicyCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.setiampolicyrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:setIamPolicy") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "resource": c.resource, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalAdminClusters.setIamPolicy" call. +// Exactly one of *Policy or error will be non-nil. Any non-2xx status +// code is an error. Response headers are in either +// *Policy.ServerResponse.Header or (if a response was returned at all) +// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to +// check whether the returned error was because http.StatusNotModified +// was returned. +func (c *ProjectsLocationsBareMetalAdminClustersSetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Policy{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets the access control policy on the specified resource. Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters/{bareMetalAdminClustersId}:setIamPolicy", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.bareMetalAdminClusters.setIamPolicy", + // "parameterOrder": [ + // "resource" + // ], + // "parameters": { + // "resource": { + // "description": "REQUIRED: The resource for which the policy is being specified. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalAdminClusters/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+resource}:setIamPolicy", + // "request": { + // "$ref": "SetIamPolicyRequest" + // }, + // "response": { + // "$ref": "Policy" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalAdminClusters.testIamPermissions": + +type ProjectsLocationsBareMetalAdminClustersTestIamPermissionsCall struct { + s *Service + resource string + testiampermissionsrequest *TestIamPermissionsRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// TestIamPermissions: Returns permissions that a caller has on the +// specified resource. If the resource does not exist, this will return +// an empty set of permissions, not a `NOT_FOUND` error. Note: This +// operation is designed to be used for building permission-aware UIs +// and command-line tools, not for authorization checking. This +// operation may "fail open" without warning. +// +// - resource: REQUIRED: The resource for which the policy detail is +// being requested. See Resource names +// (https://cloud.google.com/apis/design/resource_names) for the +// appropriate value for this field. +func (r *ProjectsLocationsBareMetalAdminClustersService) TestIamPermissions(resource string, testiampermissionsrequest *TestIamPermissionsRequest) *ProjectsLocationsBareMetalAdminClustersTestIamPermissionsCall { + c := &ProjectsLocationsBareMetalAdminClustersTestIamPermissionsCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.resource = resource + c.testiampermissionsrequest = testiampermissionsrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalAdminClustersTestIamPermissionsCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalAdminClustersTestIamPermissionsCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalAdminClustersTestIamPermissionsCall) Context(ctx context.Context) *ProjectsLocationsBareMetalAdminClustersTestIamPermissionsCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalAdminClustersTestIamPermissionsCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalAdminClustersTestIamPermissionsCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.testiampermissionsrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:testIamPermissions") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "resource": c.resource, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalAdminClusters.testIamPermissions" call. +// Exactly one of *TestIamPermissionsResponse or error will be non-nil. +// Any non-2xx status code is an error. Response headers are in either +// *TestIamPermissionsResponse.ServerResponse.Header or (if a response +// was returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalAdminClustersTestIamPermissionsCall) Do(opts ...googleapi.CallOption) (*TestIamPermissionsResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &TestIamPermissionsResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not for authorization checking. This operation may \"fail open\" without warning.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters/{bareMetalAdminClustersId}:testIamPermissions", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.bareMetalAdminClusters.testIamPermissions", + // "parameterOrder": [ + // "resource" + // ], + // "parameters": { + // "resource": { + // "description": "REQUIRED: The resource for which the policy detail is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalAdminClusters/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+resource}:testIamPermissions", + // "request": { + // "$ref": "TestIamPermissionsRequest" + // }, + // "response": { + // "$ref": "TestIamPermissionsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalAdminClusters.unenroll": + +type ProjectsLocationsBareMetalAdminClustersUnenrollCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Unenroll: Unenrolls an existing bare metal admin cluster from the +// Anthos On-Prem API within a given project and location. Unenrollment +// removes the Cloud reference to the cluster without modifying the +// underlying OnPrem Resources. Clusters will continue to run; however, +// they will no longer be accessible through the Anthos On-Prem API or +// its clients. +// +// - name: Name of the bare metal admin cluster to be unenrolled. +// Format: +// "projects/{project}/locations/{location}/bareMetalAdminClusters/{clu +// ster}". +func (r *ProjectsLocationsBareMetalAdminClustersService) Unenroll(name string) *ProjectsLocationsBareMetalAdminClustersUnenrollCall { + c := &ProjectsLocationsBareMetalAdminClustersUnenrollCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// AllowMissing sets the optional parameter "allowMissing": If set to +// true, and the bare metal admin cluster is not found, the request will +// succeed but no action will be taken on the server and return a +// completed LRO. +func (c *ProjectsLocationsBareMetalAdminClustersUnenrollCall) AllowMissing(allowMissing bool) *ProjectsLocationsBareMetalAdminClustersUnenrollCall { + c.urlParams_.Set("allowMissing", fmt.Sprint(allowMissing)) + return c +} + +// Etag sets the optional parameter "etag": The current etag of the bare +// metal admin cluster. If an etag is provided and does not match the +// current etag of the cluster, deletion will be blocked and an ABORTED +// error will be returned. +func (c *ProjectsLocationsBareMetalAdminClustersUnenrollCall) Etag(etag string) *ProjectsLocationsBareMetalAdminClustersUnenrollCall { + c.urlParams_.Set("etag", etag) + return c +} + +// IgnoreErrors sets the optional parameter "ignoreErrors": If set to +// true, the unenrollment of a bare metal admin cluster resource will +// succeed even if errors occur during unenrollment. This parameter can +// be used when you want to unenroll admin cluster resource and the +// on-prem admin cluster is disconnected / unreachable. WARNING: Using +// this parameter when your admin cluster still exists may result in a +// deleted GCP admin cluster but existing resourcelink in on-prem admin +// cluster and membership. +func (c *ProjectsLocationsBareMetalAdminClustersUnenrollCall) IgnoreErrors(ignoreErrors bool) *ProjectsLocationsBareMetalAdminClustersUnenrollCall { + c.urlParams_.Set("ignoreErrors", fmt.Sprint(ignoreErrors)) + return c +} + +// ValidateOnly sets the optional parameter "validateOnly": Validate the +// request without actually doing any updates. +func (c *ProjectsLocationsBareMetalAdminClustersUnenrollCall) ValidateOnly(validateOnly bool) *ProjectsLocationsBareMetalAdminClustersUnenrollCall { + c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalAdminClustersUnenrollCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalAdminClustersUnenrollCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalAdminClustersUnenrollCall) Context(ctx context.Context) *ProjectsLocationsBareMetalAdminClustersUnenrollCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalAdminClustersUnenrollCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalAdminClustersUnenrollCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:unenroll") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("DELETE", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalAdminClusters.unenroll" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalAdminClustersUnenrollCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Unenrolls an existing bare metal admin cluster from the Anthos On-Prem API within a given project and location. Unenrollment removes the Cloud reference to the cluster without modifying the underlying OnPrem Resources. Clusters will continue to run; however, they will no longer be accessible through the Anthos On-Prem API or its clients.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters/{bareMetalAdminClustersId}:unenroll", + // "httpMethod": "DELETE", + // "id": "gkeonprem.projects.locations.bareMetalAdminClusters.unenroll", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "allowMissing": { + // "description": "If set to true, and the bare metal admin cluster is not found, the request will succeed but no action will be taken on the server and return a completed LRO.", + // "location": "query", + // "type": "boolean" + // }, + // "etag": { + // "description": "The current etag of the bare metal admin cluster. If an etag is provided and does not match the current etag of the cluster, deletion will be blocked and an ABORTED error will be returned.", + // "location": "query", + // "type": "string" + // }, + // "ignoreErrors": { + // "description": "If set to true, the unenrollment of a bare metal admin cluster resource will succeed even if errors occur during unenrollment. This parameter can be used when you want to unenroll admin cluster resource and the on-prem admin cluster is disconnected / unreachable. WARNING: Using this parameter when your admin cluster still exists may result in a deleted GCP admin cluster but existing resourcelink in on-prem admin cluster and membership.", + // "location": "query", + // "type": "boolean" + // }, + // "name": { + // "description": "Required. Name of the bare metal admin cluster to be unenrolled. Format: \"projects/{project}/locations/{location}/bareMetalAdminClusters/{cluster}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalAdminClusters/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "validateOnly": { + // "description": "Validate the request without actually doing any updates.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "v1/{+name}:unenroll", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalAdminClusters.operations.get": + +type ProjectsLocationsBareMetalAdminClustersOperationsGetCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// Get: Gets the latest state of a long-running operation. Clients can +// use this method to poll the operation result at intervals as +// recommended by the API service. +// +// - name: The name of the operation resource. +func (r *ProjectsLocationsBareMetalAdminClustersOperationsService) Get(name string) *ProjectsLocationsBareMetalAdminClustersOperationsGetCall { + c := &ProjectsLocationsBareMetalAdminClustersOperationsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalAdminClustersOperationsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalAdminClustersOperationsGetCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsBareMetalAdminClustersOperationsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsBareMetalAdminClustersOperationsGetCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalAdminClustersOperationsGetCall) Context(ctx context.Context) *ProjectsLocationsBareMetalAdminClustersOperationsGetCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalAdminClustersOperationsGetCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalAdminClustersOperationsGetCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalAdminClusters.operations.get" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalAdminClustersOperationsGetCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters/{bareMetalAdminClustersId}/operations/{operationsId}", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.bareMetalAdminClusters.operations.get", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "The name of the operation resource.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalAdminClusters/[^/]+/operations/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalAdminClusters.operations.list": + +type ProjectsLocationsBareMetalAdminClustersOperationsListCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// List: Lists operations that match the specified filter in the +// request. If the server doesn't support this method, it returns +// `UNIMPLEMENTED`. +// +// - name: The name of the operation's parent resource. +func (r *ProjectsLocationsBareMetalAdminClustersOperationsService) List(name string) *ProjectsLocationsBareMetalAdminClustersOperationsListCall { + c := &ProjectsLocationsBareMetalAdminClustersOperationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Filter sets the optional parameter "filter": The standard list +// filter. +func (c *ProjectsLocationsBareMetalAdminClustersOperationsListCall) Filter(filter string) *ProjectsLocationsBareMetalAdminClustersOperationsListCall { + c.urlParams_.Set("filter", filter) + return c +} + +// PageSize sets the optional parameter "pageSize": The standard list +// page size. +func (c *ProjectsLocationsBareMetalAdminClustersOperationsListCall) PageSize(pageSize int64) *ProjectsLocationsBareMetalAdminClustersOperationsListCall { + c.urlParams_.Set("pageSize", fmt.Sprint(pageSize)) + return c +} + +// PageToken sets the optional parameter "pageToken": The standard list +// page token. +func (c *ProjectsLocationsBareMetalAdminClustersOperationsListCall) PageToken(pageToken string) *ProjectsLocationsBareMetalAdminClustersOperationsListCall { + c.urlParams_.Set("pageToken", pageToken) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalAdminClustersOperationsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalAdminClustersOperationsListCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsBareMetalAdminClustersOperationsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsBareMetalAdminClustersOperationsListCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalAdminClustersOperationsListCall) Context(ctx context.Context) *ProjectsLocationsBareMetalAdminClustersOperationsListCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalAdminClustersOperationsListCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalAdminClustersOperationsListCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}/operations") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalAdminClusters.operations.list" call. +// Exactly one of *ListOperationsResponse or error will be non-nil. Any +// non-2xx status code is an error. Response headers are in either +// *ListOperationsResponse.ServerResponse.Header or (if a response was +// returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalAdminClustersOperationsListCall) Do(opts ...googleapi.CallOption) (*ListOperationsResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &ListOperationsResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalAdminClusters/{bareMetalAdminClustersId}/operations", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.bareMetalAdminClusters.operations.list", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "filter": { + // "description": "The standard list filter.", + // "location": "query", + // "type": "string" + // }, + // "name": { + // "description": "The name of the operation's parent resource.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalAdminClusters/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "pageSize": { + // "description": "The standard list page size.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The standard list page token.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+name}/operations", + // "response": { + // "$ref": "ListOperationsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// Pages invokes f for each page of results. +// A non-nil error returned from f will halt the iteration. +// The provided context supersedes any context provided to the Context method. +func (c *ProjectsLocationsBareMetalAdminClustersOperationsListCall) Pages(ctx context.Context, f func(*ListOperationsResponse) error) error { + c.ctx_ = ctx + defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point + for { + x, err := c.Do() + if err != nil { + return err + } + if err := f(x); err != nil { + return err + } + if x.NextPageToken == "" { + return nil + } + c.PageToken(x.NextPageToken) + } +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.create": + +type ProjectsLocationsBareMetalClustersCreateCall struct { + s *Service + parent string + baremetalcluster *BareMetalCluster + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Create: Creates a new bare metal cluster in a given project and +// location. +// +// - parent: The parent of the project and location where the cluster is +// created in. Format: "projects/{project}/locations/{location}". +func (r *ProjectsLocationsBareMetalClustersService) Create(parent string, baremetalcluster *BareMetalCluster) *ProjectsLocationsBareMetalClustersCreateCall { + c := &ProjectsLocationsBareMetalClustersCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.parent = parent + c.baremetalcluster = baremetalcluster + return c +} + +// BareMetalClusterId sets the optional parameter "bareMetalClusterId": +// Required. User provided identifier that is used as part of the +// resource name; must conform to RFC-1034 and additionally restrict to +// lower-cased letters. This comes out roughly to: /^a-z+[a-z0-9]$/ +func (c *ProjectsLocationsBareMetalClustersCreateCall) BareMetalClusterId(bareMetalClusterId string) *ProjectsLocationsBareMetalClustersCreateCall { + c.urlParams_.Set("bareMetalClusterId", bareMetalClusterId) + return c +} + +// ValidateOnly sets the optional parameter "validateOnly": Validate the +// request without actually doing any updates. +func (c *ProjectsLocationsBareMetalClustersCreateCall) ValidateOnly(validateOnly bool) *ProjectsLocationsBareMetalClustersCreateCall { + c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersCreateCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersCreateCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersCreateCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersCreateCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersCreateCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersCreateCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.baremetalcluster) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/bareMetalClusters") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "parent": c.parent, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.create" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalClustersCreateCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new bare metal cluster in a given project and location.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.bareMetalClusters.create", + // "parameterOrder": [ + // "parent" + // ], + // "parameters": { + // "bareMetalClusterId": { + // "description": "Required. User provided identifier that is used as part of the resource name; must conform to RFC-1034 and additionally restrict to lower-cased letters. This comes out roughly to: /^a-z+[a-z0-9]$/", + // "location": "query", + // "type": "string" + // }, + // "parent": { + // "description": "Required. The parent of the project and location where the cluster is created in. Format: \"projects/{project}/locations/{location}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "validateOnly": { + // "description": "Validate the request without actually doing any updates.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "v1/{+parent}/bareMetalClusters", + // "request": { + // "$ref": "BareMetalCluster" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.delete": + +type ProjectsLocationsBareMetalClustersDeleteCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Delete: Deletes a single bare metal Cluster. +// +// - name: Name of the bare metal user cluster to be deleted. Format: +// "projects/{project}/locations/{location}/bareMetalClusters/{bare_met +// al_cluster}". +func (r *ProjectsLocationsBareMetalClustersService) Delete(name string) *ProjectsLocationsBareMetalClustersDeleteCall { + c := &ProjectsLocationsBareMetalClustersDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// AllowMissing sets the optional parameter "allowMissing": If set to +// true, and the bare metal cluster is not found, the request will +// succeed but no action will be taken on the server and return a +// completed LRO. +func (c *ProjectsLocationsBareMetalClustersDeleteCall) AllowMissing(allowMissing bool) *ProjectsLocationsBareMetalClustersDeleteCall { + c.urlParams_.Set("allowMissing", fmt.Sprint(allowMissing)) + return c +} + +// Etag sets the optional parameter "etag": The current etag of the bare +// metal Cluster. If an etag is provided and does not match the current +// etag of the cluster, deletion will be blocked and an ABORTED error +// will be returned. +func (c *ProjectsLocationsBareMetalClustersDeleteCall) Etag(etag string) *ProjectsLocationsBareMetalClustersDeleteCall { + c.urlParams_.Set("etag", etag) + return c +} + +// Force sets the optional parameter "force": If set to true, any node +// pools from the cluster will also be deleted. +func (c *ProjectsLocationsBareMetalClustersDeleteCall) Force(force bool) *ProjectsLocationsBareMetalClustersDeleteCall { + c.urlParams_.Set("force", fmt.Sprint(force)) + return c +} + +// IgnoreErrors sets the optional parameter "ignoreErrors": If set to +// true, the deletion of a bare metal user cluster resource will succeed +// even if errors occur during deletion. This parameter can be used when +// you want to delete GCP's cluster resource and the on-prem admin +// cluster that hosts your user cluster is disconnected / unreachable or +// deleted. WARNING: Using this parameter when your user cluster still +// exists may result in a deleted GCP user cluster but an existing +// on-prem user cluster. +func (c *ProjectsLocationsBareMetalClustersDeleteCall) IgnoreErrors(ignoreErrors bool) *ProjectsLocationsBareMetalClustersDeleteCall { + c.urlParams_.Set("ignoreErrors", fmt.Sprint(ignoreErrors)) + return c +} + +// ValidateOnly sets the optional parameter "validateOnly": Validate the +// request without actually doing any updates. +func (c *ProjectsLocationsBareMetalClustersDeleteCall) ValidateOnly(validateOnly bool) *ProjectsLocationsBareMetalClustersDeleteCall { + c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersDeleteCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersDeleteCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersDeleteCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersDeleteCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersDeleteCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersDeleteCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("DELETE", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.delete" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalClustersDeleteCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes a single bare metal Cluster.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}", + // "httpMethod": "DELETE", + // "id": "gkeonprem.projects.locations.bareMetalClusters.delete", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "allowMissing": { + // "description": "If set to true, and the bare metal cluster is not found, the request will succeed but no action will be taken on the server and return a completed LRO.", + // "location": "query", + // "type": "boolean" + // }, + // "etag": { + // "description": "The current etag of the bare metal Cluster. If an etag is provided and does not match the current etag of the cluster, deletion will be blocked and an ABORTED error will be returned.", + // "location": "query", + // "type": "string" + // }, + // "force": { + // "description": "If set to true, any node pools from the cluster will also be deleted.", + // "location": "query", + // "type": "boolean" + // }, + // "ignoreErrors": { + // "description": "If set to true, the deletion of a bare metal user cluster resource will succeed even if errors occur during deletion. This parameter can be used when you want to delete GCP's cluster resource and the on-prem admin cluster that hosts your user cluster is disconnected / unreachable or deleted. WARNING: Using this parameter when your user cluster still exists may result in a deleted GCP user cluster but an existing on-prem user cluster.", + // "location": "query", + // "type": "boolean" + // }, + // "name": { + // "description": "Required. Name of the bare metal user cluster to be deleted. Format: \"projects/{project}/locations/{location}/bareMetalClusters/{bare_metal_cluster}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "validateOnly": { + // "description": "Validate the request without actually doing any updates.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.enroll": + +type ProjectsLocationsBareMetalClustersEnrollCall struct { + s *Service + parent string + enrollbaremetalclusterrequest *EnrollBareMetalClusterRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Enroll: Enrolls an existing bare metal user cluster and its node +// pools to the Anthos On-Prem API within a given project and location. +// Through enrollment, an existing cluster will become Anthos On-Prem +// API managed. The corresponding GCP resources will be created and all +// future modifications to the cluster and/or its node pools will be +// expected to be performed through the API. +// +// - parent: The parent of the project and location where the cluster is +// enrolled in. Format: "projects/{project}/locations/{location}". +func (r *ProjectsLocationsBareMetalClustersService) Enroll(parent string, enrollbaremetalclusterrequest *EnrollBareMetalClusterRequest) *ProjectsLocationsBareMetalClustersEnrollCall { + c := &ProjectsLocationsBareMetalClustersEnrollCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.parent = parent + c.enrollbaremetalclusterrequest = enrollbaremetalclusterrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersEnrollCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersEnrollCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersEnrollCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersEnrollCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersEnrollCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersEnrollCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.enrollbaremetalclusterrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/bareMetalClusters:enroll") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "parent": c.parent, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.enroll" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalClustersEnrollCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Enrolls an existing bare metal user cluster and its node pools to the Anthos On-Prem API within a given project and location. Through enrollment, an existing cluster will become Anthos On-Prem API managed. The corresponding GCP resources will be created and all future modifications to the cluster and/or its node pools will be expected to be performed through the API.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters:enroll", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.bareMetalClusters.enroll", + // "parameterOrder": [ + // "parent" + // ], + // "parameters": { + // "parent": { + // "description": "Required. The parent of the project and location where the cluster is enrolled in. Format: \"projects/{project}/locations/{location}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+parent}/bareMetalClusters:enroll", + // "request": { + // "$ref": "EnrollBareMetalClusterRequest" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.get": + +type ProjectsLocationsBareMetalClustersGetCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// Get: Gets details of a single bare metal Cluster. +// +// - name: Name of the bare metal user cluster to get. Format: +// "projects/{project}/locations/{location}/bareMetalClusters/{bare_met +// al_cluster}". +func (r *ProjectsLocationsBareMetalClustersService) Get(name string) *ProjectsLocationsBareMetalClustersGetCall { + c := &ProjectsLocationsBareMetalClustersGetCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// View sets the optional parameter "view": View for bare metal user +// cluster. When `BASIC` is specified, only the cluster resource name +// and admin cluster membership are returned. The default/unset value +// `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the +// complete cluster configuration details. +// +// Possible values: +// +// "CLUSTER_VIEW_UNSPECIFIED" - If the value is not set, the default +// +// `FULL` view is used. +// +// "BASIC" - Includes basic information of a cluster resource +// +// including cluster resource name and admin cluster membership. +// +// "FULL" - Includes the complete configuration for bare metal cluster +// +// resource. This is the default value for GetBareMetalClusterRequest +// method. +func (c *ProjectsLocationsBareMetalClustersGetCall) View(view string) *ProjectsLocationsBareMetalClustersGetCall { + c.urlParams_.Set("view", view) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersGetCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsBareMetalClustersGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsBareMetalClustersGetCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersGetCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersGetCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersGetCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersGetCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.get" call. +// Exactly one of *BareMetalCluster or error will be non-nil. Any +// non-2xx status code is an error. Response headers are in either +// *BareMetalCluster.ServerResponse.Header or (if a response was +// returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalClustersGetCall) Do(opts ...googleapi.CallOption) (*BareMetalCluster, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &BareMetalCluster{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets details of a single bare metal Cluster.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.bareMetalClusters.get", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "Required. Name of the bare metal user cluster to get. Format: \"projects/{project}/locations/{location}/bareMetalClusters/{bare_metal_cluster}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "view": { + // "description": "View for bare metal user cluster. When `BASIC` is specified, only the cluster resource name and admin cluster membership are returned. The default/unset value `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete cluster configuration details.", + // "enum": [ + // "CLUSTER_VIEW_UNSPECIFIED", + // "BASIC", + // "FULL" + // ], + // "enumDescriptions": [ + // "If the value is not set, the default `FULL` view is used.", + // "Includes basic information of a cluster resource including cluster resource name and admin cluster membership.", + // "Includes the complete configuration for bare metal cluster resource. This is the default value for GetBareMetalClusterRequest method." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "BareMetalCluster" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.getIamPolicy": + +type ProjectsLocationsBareMetalClustersGetIamPolicyCall struct { + s *Service + resource string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// GetIamPolicy: Gets the access control policy for a resource. Returns +// an empty policy if the resource exists and does not have a policy +// set. +// +// - resource: REQUIRED: The resource for which the policy is being +// requested. See Resource names +// (https://cloud.google.com/apis/design/resource_names) for the +// appropriate value for this field. +func (r *ProjectsLocationsBareMetalClustersService) GetIamPolicy(resource string) *ProjectsLocationsBareMetalClustersGetIamPolicyCall { + c := &ProjectsLocationsBareMetalClustersGetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.resource = resource + return c +} + +// OptionsRequestedPolicyVersion sets the optional parameter +// "options.requestedPolicyVersion": The maximum policy version that +// will be used to format the policy. Valid values are 0, 1, and 3. +// Requests specifying an invalid value will be rejected. Requests for +// policies with any conditional role bindings must specify version 3. +// Policies with no conditional role bindings may specify any valid +// value or leave the field unset. The policy in the response might use +// the policy version that you specified, or it might use a lower policy +// version. For example, if you specify version 3, but the policy has no +// conditional role bindings, the response uses version 1. To learn +// which resources support conditions in their IAM policies, see the IAM +// documentation +// (https://cloud.google.com/iam/help/conditions/resource-policies). +func (c *ProjectsLocationsBareMetalClustersGetIamPolicyCall) OptionsRequestedPolicyVersion(optionsRequestedPolicyVersion int64) *ProjectsLocationsBareMetalClustersGetIamPolicyCall { + c.urlParams_.Set("options.requestedPolicyVersion", fmt.Sprint(optionsRequestedPolicyVersion)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersGetIamPolicyCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersGetIamPolicyCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsBareMetalClustersGetIamPolicyCall) IfNoneMatch(entityTag string) *ProjectsLocationsBareMetalClustersGetIamPolicyCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersGetIamPolicyCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersGetIamPolicyCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersGetIamPolicyCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersGetIamPolicyCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:getIamPolicy") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "resource": c.resource, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.getIamPolicy" call. +// Exactly one of *Policy or error will be non-nil. Any non-2xx status +// code is an error. Response headers are in either +// *Policy.ServerResponse.Header or (if a response was returned at all) +// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to +// check whether the returned error was because http.StatusNotModified +// was returned. +func (c *ProjectsLocationsBareMetalClustersGetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Policy{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}:getIamPolicy", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.bareMetalClusters.getIamPolicy", + // "parameterOrder": [ + // "resource" + // ], + // "parameters": { + // "options.requestedPolicyVersion": { + // "description": "Optional. The maximum policy version that will be used to format the policy. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional role bindings must specify version 3. Policies with no conditional role bindings may specify any valid value or leave the field unset. The policy in the response might use the policy version that you specified, or it might use a lower policy version. For example, if you specify version 3, but the policy has no conditional role bindings, the response uses version 1. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "resource": { + // "description": "REQUIRED: The resource for which the policy is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+resource}:getIamPolicy", + // "response": { + // "$ref": "Policy" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.list": + +type ProjectsLocationsBareMetalClustersListCall struct { + s *Service + parent string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// List: Lists bare metal clusters in a given project and location. +// +// - parent: The parent of the project and location where the clusters +// are listed in. Format: "projects/{project}/locations/{location}". +func (r *ProjectsLocationsBareMetalClustersService) List(parent string) *ProjectsLocationsBareMetalClustersListCall { + c := &ProjectsLocationsBareMetalClustersListCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.parent = parent + return c +} + +// Filter sets the optional parameter "filter": A resource filtering +// expression following https://google.aip.dev/160. When non-empty, only +// resource's whose attributes field matches the filter are returned. +func (c *ProjectsLocationsBareMetalClustersListCall) Filter(filter string) *ProjectsLocationsBareMetalClustersListCall { + c.urlParams_.Set("filter", filter) + return c +} + +// PageSize sets the optional parameter "pageSize": Requested page size. +// Server may return fewer items than requested. If unspecified, at most +// 50 clusters will be returned. The maximum value is 1000; values above +// 1000 will be coerced to 1000. +func (c *ProjectsLocationsBareMetalClustersListCall) PageSize(pageSize int64) *ProjectsLocationsBareMetalClustersListCall { + c.urlParams_.Set("pageSize", fmt.Sprint(pageSize)) + return c +} + +// PageToken sets the optional parameter "pageToken": A token +// identifying a page of results the server should return. +func (c *ProjectsLocationsBareMetalClustersListCall) PageToken(pageToken string) *ProjectsLocationsBareMetalClustersListCall { + c.urlParams_.Set("pageToken", pageToken) + return c +} + +// View sets the optional parameter "view": View for bare metal +// Clusters. When `BASIC` is specified, only the cluster resource name +// and admin cluster membership are returned. The default/unset value +// `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the +// complete cluster configuration details. +// +// Possible values: +// +// "CLUSTER_VIEW_UNSPECIFIED" - If the value is not set, the default +// +// `FULL` view is used. +// +// "BASIC" - Includes basic information of a cluster resource +// +// including cluster resource name and admin cluster membership. +// +// "FULL" - Includes the complete configuration for bare metal cluster +// +// resource. This is the default value for ListBareMetalClustersRequest +// method. +func (c *ProjectsLocationsBareMetalClustersListCall) View(view string) *ProjectsLocationsBareMetalClustersListCall { + c.urlParams_.Set("view", view) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersListCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersListCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsBareMetalClustersListCall) IfNoneMatch(entityTag string) *ProjectsLocationsBareMetalClustersListCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersListCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersListCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersListCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersListCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/bareMetalClusters") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "parent": c.parent, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.list" call. +// Exactly one of *ListBareMetalClustersResponse or error will be +// non-nil. Any non-2xx status code is an error. Response headers are in +// either *ListBareMetalClustersResponse.ServerResponse.Header or (if a +// response was returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalClustersListCall) Do(opts ...googleapi.CallOption) (*ListBareMetalClustersResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &ListBareMetalClustersResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists bare metal clusters in a given project and location.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.bareMetalClusters.list", + // "parameterOrder": [ + // "parent" + // ], + // "parameters": { + // "filter": { + // "description": "A resource filtering expression following https://google.aip.dev/160. When non-empty, only resource's whose attributes field matches the filter are returned.", + // "location": "query", + // "type": "string" + // }, + // "pageSize": { + // "description": "Requested page size. Server may return fewer items than requested. If unspecified, at most 50 clusters will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A token identifying a page of results the server should return.", + // "location": "query", + // "type": "string" + // }, + // "parent": { + // "description": "Required. The parent of the project and location where the clusters are listed in. Format: \"projects/{project}/locations/{location}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "view": { + // "description": "View for bare metal Clusters. When `BASIC` is specified, only the cluster resource name and admin cluster membership are returned. The default/unset value `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete cluster configuration details.", + // "enum": [ + // "CLUSTER_VIEW_UNSPECIFIED", + // "BASIC", + // "FULL" + // ], + // "enumDescriptions": [ + // "If the value is not set, the default `FULL` view is used.", + // "Includes basic information of a cluster resource including cluster resource name and admin cluster membership.", + // "Includes the complete configuration for bare metal cluster resource. This is the default value for ListBareMetalClustersRequest method." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+parent}/bareMetalClusters", + // "response": { + // "$ref": "ListBareMetalClustersResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// Pages invokes f for each page of results. +// A non-nil error returned from f will halt the iteration. +// The provided context supersedes any context provided to the Context method. +func (c *ProjectsLocationsBareMetalClustersListCall) Pages(ctx context.Context, f func(*ListBareMetalClustersResponse) error) error { + c.ctx_ = ctx + defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point + for { + x, err := c.Do() + if err != nil { + return err + } + if err := f(x); err != nil { + return err + } + if x.NextPageToken == "" { + return nil + } + c.PageToken(x.NextPageToken) + } +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.patch": + +type ProjectsLocationsBareMetalClustersPatchCall struct { + s *Service + name string + baremetalcluster *BareMetalCluster + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Patch: Updates the parameters of a single bare metal Cluster. +// +// - name: Immutable. The bare metal user cluster resource name. +func (r *ProjectsLocationsBareMetalClustersService) Patch(name string, baremetalcluster *BareMetalCluster) *ProjectsLocationsBareMetalClustersPatchCall { + c := &ProjectsLocationsBareMetalClustersPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + c.baremetalcluster = baremetalcluster + return c +} + +// AllowMissing sets the optional parameter "allowMissing": If set to +// true, and the bare metal cluster is not found, the request will +// create a new bare metal cluster with the provided configuration. The +// user must have both create and update permission to call Update with +// allow_missing set to true. +func (c *ProjectsLocationsBareMetalClustersPatchCall) AllowMissing(allowMissing bool) *ProjectsLocationsBareMetalClustersPatchCall { + c.urlParams_.Set("allowMissing", fmt.Sprint(allowMissing)) + return c +} + +// UpdateMask sets the optional parameter "updateMask": Required. Field +// mask is used to specify the fields to be overwritten in the +// BareMetalCluster resource by the update. The fields specified in the +// update_mask are relative to the resource, not the full request. A +// field will be overwritten if it is in the mask. If the user does not +// provide a mask then all populated fields in the BareMetalCluster +// message will be updated. Empty fields will be ignored unless a field +// mask is used. +func (c *ProjectsLocationsBareMetalClustersPatchCall) UpdateMask(updateMask string) *ProjectsLocationsBareMetalClustersPatchCall { + c.urlParams_.Set("updateMask", updateMask) + return c +} + +// ValidateOnly sets the optional parameter "validateOnly": Validate the +// request without actually doing any updates. +func (c *ProjectsLocationsBareMetalClustersPatchCall) ValidateOnly(validateOnly bool) *ProjectsLocationsBareMetalClustersPatchCall { + c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersPatchCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersPatchCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersPatchCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersPatchCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersPatchCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersPatchCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.baremetalcluster) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("PATCH", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.patch" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalClustersPatchCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the parameters of a single bare metal Cluster.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}", + // "httpMethod": "PATCH", + // "id": "gkeonprem.projects.locations.bareMetalClusters.patch", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "allowMissing": { + // "description": "If set to true, and the bare metal cluster is not found, the request will create a new bare metal cluster with the provided configuration. The user must have both create and update permission to call Update with allow_missing set to true.", + // "location": "query", + // "type": "boolean" + // }, + // "name": { + // "description": "Immutable. The bare metal user cluster resource name.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "updateMask": { + // "description": "Required. Field mask is used to specify the fields to be overwritten in the BareMetalCluster resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all populated fields in the BareMetalCluster message will be updated. Empty fields will be ignored unless a field mask is used.", + // "format": "google-fieldmask", + // "location": "query", + // "type": "string" + // }, + // "validateOnly": { + // "description": "Validate the request without actually doing any updates.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "v1/{+name}", + // "request": { + // "$ref": "BareMetalCluster" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.queryVersionConfig": + +type ProjectsLocationsBareMetalClustersQueryVersionConfigCall struct { + s *Service + parent string + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// QueryVersionConfig: Queries the bare metal user cluster version +// config. +// +// - parent: The parent of the project and location to query for version +// config. Format: "projects/{project}/locations/{location}". +func (r *ProjectsLocationsBareMetalClustersService) QueryVersionConfig(parent string) *ProjectsLocationsBareMetalClustersQueryVersionConfigCall { + c := &ProjectsLocationsBareMetalClustersQueryVersionConfigCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.parent = parent + return c +} + +// CreateConfigAdminClusterMembership sets the optional parameter +// "createConfig.adminClusterMembership": The admin cluster membership. +// This is the full resource name of the admin cluster's fleet +// membership. Format: +// "projects/{project}/locations/{location}/memberships/{membership}" +func (c *ProjectsLocationsBareMetalClustersQueryVersionConfigCall) CreateConfigAdminClusterMembership(createConfigAdminClusterMembership string) *ProjectsLocationsBareMetalClustersQueryVersionConfigCall { + c.urlParams_.Set("createConfig.adminClusterMembership", createConfigAdminClusterMembership) + return c +} + +// CreateConfigAdminClusterName sets the optional parameter +// "createConfig.adminClusterName": The admin cluster resource name. +// This is the full resource name of the admin cluster resource. Format: +// "projects/{project}/locations/{location}/bareMetalAdminClusters/{bare_ +// metal_admin_cluster}" +func (c *ProjectsLocationsBareMetalClustersQueryVersionConfigCall) CreateConfigAdminClusterName(createConfigAdminClusterName string) *ProjectsLocationsBareMetalClustersQueryVersionConfigCall { + c.urlParams_.Set("createConfig.adminClusterName", createConfigAdminClusterName) + return c +} + +// UpgradeConfigClusterName sets the optional parameter +// "upgradeConfig.clusterName": The user cluster resource name. This is +// the full resource name of the user cluster resource. Format: +// "projects/{project}/locations/{location}/bareMetalClusters/{bare_metal +// _cluster}" +func (c *ProjectsLocationsBareMetalClustersQueryVersionConfigCall) UpgradeConfigClusterName(upgradeConfigClusterName string) *ProjectsLocationsBareMetalClustersQueryVersionConfigCall { + c.urlParams_.Set("upgradeConfig.clusterName", upgradeConfigClusterName) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersQueryVersionConfigCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersQueryVersionConfigCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersQueryVersionConfigCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersQueryVersionConfigCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersQueryVersionConfigCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersQueryVersionConfigCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/bareMetalClusters:queryVersionConfig") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "parent": c.parent, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.queryVersionConfig" call. +// Exactly one of *QueryBareMetalVersionConfigResponse or error will be +// non-nil. Any non-2xx status code is an error. Response headers are in +// either *QueryBareMetalVersionConfigResponse.ServerResponse.Header or +// (if a response was returned at all) in +// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check +// whether the returned error was because http.StatusNotModified was +// returned. +func (c *ProjectsLocationsBareMetalClustersQueryVersionConfigCall) Do(opts ...googleapi.CallOption) (*QueryBareMetalVersionConfigResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &QueryBareMetalVersionConfigResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Queries the bare metal user cluster version config.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters:queryVersionConfig", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.bareMetalClusters.queryVersionConfig", + // "parameterOrder": [ + // "parent" + // ], + // "parameters": { + // "createConfig.adminClusterMembership": { + // "description": "The admin cluster membership. This is the full resource name of the admin cluster's fleet membership. Format: \"projects/{project}/locations/{location}/memberships/{membership}\"", + // "location": "query", + // "type": "string" + // }, + // "createConfig.adminClusterName": { + // "description": "The admin cluster resource name. This is the full resource name of the admin cluster resource. Format: \"projects/{project}/locations/{location}/bareMetalAdminClusters/{bare_metal_admin_cluster}\"", + // "location": "query", + // "type": "string" + // }, + // "parent": { + // "description": "Required. The parent of the project and location to query for version config. Format: \"projects/{project}/locations/{location}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "upgradeConfig.clusterName": { + // "description": "The user cluster resource name. This is the full resource name of the user cluster resource. Format: \"projects/{project}/locations/{location}/bareMetalClusters/{bare_metal_cluster}\"", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+parent}/bareMetalClusters:queryVersionConfig", + // "response": { + // "$ref": "QueryBareMetalVersionConfigResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.setIamPolicy": + +type ProjectsLocationsBareMetalClustersSetIamPolicyCall struct { + s *Service + resource string + setiampolicyrequest *SetIamPolicyRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// SetIamPolicy: Sets the access control policy on the specified +// resource. Replaces any existing policy. Can return `NOT_FOUND`, +// `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors. +// +// - resource: REQUIRED: The resource for which the policy is being +// specified. See Resource names +// (https://cloud.google.com/apis/design/resource_names) for the +// appropriate value for this field. +func (r *ProjectsLocationsBareMetalClustersService) SetIamPolicy(resource string, setiampolicyrequest *SetIamPolicyRequest) *ProjectsLocationsBareMetalClustersSetIamPolicyCall { + c := &ProjectsLocationsBareMetalClustersSetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.resource = resource + c.setiampolicyrequest = setiampolicyrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersSetIamPolicyCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersSetIamPolicyCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersSetIamPolicyCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersSetIamPolicyCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersSetIamPolicyCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersSetIamPolicyCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.setiampolicyrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:setIamPolicy") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "resource": c.resource, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.setIamPolicy" call. +// Exactly one of *Policy or error will be non-nil. Any non-2xx status +// code is an error. Response headers are in either +// *Policy.ServerResponse.Header or (if a response was returned at all) +// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to +// check whether the returned error was because http.StatusNotModified +// was returned. +func (c *ProjectsLocationsBareMetalClustersSetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Policy{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets the access control policy on the specified resource. Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}:setIamPolicy", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.bareMetalClusters.setIamPolicy", + // "parameterOrder": [ + // "resource" + // ], + // "parameters": { + // "resource": { + // "description": "REQUIRED: The resource for which the policy is being specified. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+resource}:setIamPolicy", + // "request": { + // "$ref": "SetIamPolicyRequest" + // }, + // "response": { + // "$ref": "Policy" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.testIamPermissions": + +type ProjectsLocationsBareMetalClustersTestIamPermissionsCall struct { + s *Service + resource string + testiampermissionsrequest *TestIamPermissionsRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// TestIamPermissions: Returns permissions that a caller has on the +// specified resource. If the resource does not exist, this will return +// an empty set of permissions, not a `NOT_FOUND` error. Note: This +// operation is designed to be used for building permission-aware UIs +// and command-line tools, not for authorization checking. This +// operation may "fail open" without warning. +// +// - resource: REQUIRED: The resource for which the policy detail is +// being requested. See Resource names +// (https://cloud.google.com/apis/design/resource_names) for the +// appropriate value for this field. +func (r *ProjectsLocationsBareMetalClustersService) TestIamPermissions(resource string, testiampermissionsrequest *TestIamPermissionsRequest) *ProjectsLocationsBareMetalClustersTestIamPermissionsCall { + c := &ProjectsLocationsBareMetalClustersTestIamPermissionsCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.resource = resource + c.testiampermissionsrequest = testiampermissionsrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersTestIamPermissionsCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersTestIamPermissionsCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersTestIamPermissionsCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersTestIamPermissionsCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersTestIamPermissionsCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersTestIamPermissionsCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.testiampermissionsrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:testIamPermissions") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "resource": c.resource, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.testIamPermissions" call. +// Exactly one of *TestIamPermissionsResponse or error will be non-nil. +// Any non-2xx status code is an error. Response headers are in either +// *TestIamPermissionsResponse.ServerResponse.Header or (if a response +// was returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalClustersTestIamPermissionsCall) Do(opts ...googleapi.CallOption) (*TestIamPermissionsResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &TestIamPermissionsResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not for authorization checking. This operation may \"fail open\" without warning.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}:testIamPermissions", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.bareMetalClusters.testIamPermissions", + // "parameterOrder": [ + // "resource" + // ], + // "parameters": { + // "resource": { + // "description": "REQUIRED: The resource for which the policy detail is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+resource}:testIamPermissions", + // "request": { + // "$ref": "TestIamPermissionsRequest" + // }, + // "response": { + // "$ref": "TestIamPermissionsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.unenroll": + +type ProjectsLocationsBareMetalClustersUnenrollCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Unenroll: Unenrolls an existing bare metal user cluster and its node +// pools from the Anthos On-Prem API within a given project and +// location. Unenrollment removes the Cloud reference to the cluster +// without modifying the underlying OnPrem Resources. Clusters and node +// pools will continue to run; however, they will no longer be +// accessible through the Anthos On-Prem API or its clients. +// +// - name: Name of the bare metal user cluster to be unenrolled. Format: +// "projects/{project}/locations/{location}/bareMetalClusters/{cluster} +// ". +func (r *ProjectsLocationsBareMetalClustersService) Unenroll(name string) *ProjectsLocationsBareMetalClustersUnenrollCall { + c := &ProjectsLocationsBareMetalClustersUnenrollCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// AllowMissing sets the optional parameter "allowMissing": If set to +// true, and the bare metal cluster is not found, the request will +// succeed but no action will be taken on the server and return a +// completed LRO. +func (c *ProjectsLocationsBareMetalClustersUnenrollCall) AllowMissing(allowMissing bool) *ProjectsLocationsBareMetalClustersUnenrollCall { + c.urlParams_.Set("allowMissing", fmt.Sprint(allowMissing)) + return c +} + +// Etag sets the optional parameter "etag": The current etag of the bare +// metal Cluster. If an etag is provided and does not match the current +// etag of the cluster, deletion will be blocked and an ABORTED error +// will be returned. +func (c *ProjectsLocationsBareMetalClustersUnenrollCall) Etag(etag string) *ProjectsLocationsBareMetalClustersUnenrollCall { + c.urlParams_.Set("etag", etag) + return c +} + +// Force sets the optional parameter "force": This is required if the +// cluster has any associated node pools. When set, any child node pools +// will also be unenrolled. +func (c *ProjectsLocationsBareMetalClustersUnenrollCall) Force(force bool) *ProjectsLocationsBareMetalClustersUnenrollCall { + c.urlParams_.Set("force", fmt.Sprint(force)) + return c +} + +// ValidateOnly sets the optional parameter "validateOnly": Validate the +// request without actually doing any updates. +func (c *ProjectsLocationsBareMetalClustersUnenrollCall) ValidateOnly(validateOnly bool) *ProjectsLocationsBareMetalClustersUnenrollCall { + c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersUnenrollCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersUnenrollCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersUnenrollCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersUnenrollCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersUnenrollCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersUnenrollCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:unenroll") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("DELETE", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.unenroll" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalClustersUnenrollCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Unenrolls an existing bare metal user cluster and its node pools from the Anthos On-Prem API within a given project and location. Unenrollment removes the Cloud reference to the cluster without modifying the underlying OnPrem Resources. Clusters and node pools will continue to run; however, they will no longer be accessible through the Anthos On-Prem API or its clients.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}:unenroll", + // "httpMethod": "DELETE", + // "id": "gkeonprem.projects.locations.bareMetalClusters.unenroll", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "allowMissing": { + // "description": "If set to true, and the bare metal cluster is not found, the request will succeed but no action will be taken on the server and return a completed LRO.", + // "location": "query", + // "type": "boolean" + // }, + // "etag": { + // "description": "The current etag of the bare metal Cluster. If an etag is provided and does not match the current etag of the cluster, deletion will be blocked and an ABORTED error will be returned.", + // "location": "query", + // "type": "string" + // }, + // "force": { + // "description": "This is required if the cluster has any associated node pools. When set, any child node pools will also be unenrolled.", + // "location": "query", + // "type": "boolean" + // }, + // "name": { + // "description": "Required. Name of the bare metal user cluster to be unenrolled. Format: \"projects/{project}/locations/{location}/bareMetalClusters/{cluster}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "validateOnly": { + // "description": "Validate the request without actually doing any updates.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "v1/{+name}:unenroll", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.create": + +type ProjectsLocationsBareMetalClustersBareMetalNodePoolsCreateCall struct { + s *Service + parent string + baremetalnodepool *BareMetalNodePool + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Create: Creates a new bare metal node pool in a given project, +// location and Bare Metal cluster. +// +// - parent: The parent resource where this node pool will be created. +// projects/{project}/locations/{location}/bareMetalClusters/{cluster}. +func (r *ProjectsLocationsBareMetalClustersBareMetalNodePoolsService) Create(parent string, baremetalnodepool *BareMetalNodePool) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsCreateCall { + c := &ProjectsLocationsBareMetalClustersBareMetalNodePoolsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.parent = parent + c.baremetalnodepool = baremetalnodepool + return c +} + +// BareMetalNodePoolId sets the optional parameter +// "bareMetalNodePoolId": The ID to use for the node pool, which will +// become the final component of the node pool's resource name. This +// value must be up to 63 characters, and valid characters are /a-z-/. +// The value must not be permitted to be a UUID (or UUID-like: anything +// matching /^[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$/i). +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsCreateCall) BareMetalNodePoolId(bareMetalNodePoolId string) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsCreateCall { + c.urlParams_.Set("bareMetalNodePoolId", bareMetalNodePoolId) + return c +} + +// ValidateOnly sets the optional parameter "validateOnly": If set, only +// validate the request, but do not actually create the node pool. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsCreateCall) ValidateOnly(validateOnly bool) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsCreateCall { + c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsCreateCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsCreateCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsCreateCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsCreateCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsCreateCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsCreateCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.baremetalnodepool) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/bareMetalNodePools") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "parent": c.parent, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.create" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsCreateCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new bare metal node pool in a given project, location and Bare Metal cluster.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.create", + // "parameterOrder": [ + // "parent" + // ], + // "parameters": { + // "bareMetalNodePoolId": { + // "description": "The ID to use for the node pool, which will become the final component of the node pool's resource name. This value must be up to 63 characters, and valid characters are /a-z-/. The value must not be permitted to be a UUID (or UUID-like: anything matching /^[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$/i).", + // "location": "query", + // "type": "string" + // }, + // "parent": { + // "description": "Required. The parent resource where this node pool will be created. projects/{project}/locations/{location}/bareMetalClusters/{cluster}", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "validateOnly": { + // "description": "If set, only validate the request, but do not actually create the node pool.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "v1/{+parent}/bareMetalNodePools", + // "request": { + // "$ref": "BareMetalNodePool" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.delete": + +type ProjectsLocationsBareMetalClustersBareMetalNodePoolsDeleteCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Delete: Deletes a single bare metal node pool. +// +// - name: The name of the node pool to delete. Format: +// projects/{project}/locations/{location}/bareMetalClusters/{cluster}/ +// bareMetalNodePools/{nodepool}. +func (r *ProjectsLocationsBareMetalClustersBareMetalNodePoolsService) Delete(name string) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsDeleteCall { + c := &ProjectsLocationsBareMetalClustersBareMetalNodePoolsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// AllowMissing sets the optional parameter "allowMissing": If set to +// true, and the bare metal node pool is not found, the request will +// succeed but no action will be taken on the server and return a +// completed LRO. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsDeleteCall) AllowMissing(allowMissing bool) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsDeleteCall { + c.urlParams_.Set("allowMissing", fmt.Sprint(allowMissing)) + return c +} + +// Etag sets the optional parameter "etag": The current etag of the +// BareMetalNodePool. If an etag is provided and does not match the +// current etag of the node pool, deletion will be blocked and an +// ABORTED error will be returned. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsDeleteCall) Etag(etag string) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsDeleteCall { + c.urlParams_.Set("etag", etag) + return c +} + +// IgnoreErrors sets the optional parameter "ignoreErrors": If set to +// true, the deletion of a bare metal node pool resource will succeed +// even if errors occur during deletion. This parameter can be used when +// you want to delete GCP's node pool resource and you've already +// deleted the on-prem admin cluster that hosted your node pool. +// WARNING: Using this parameter when your user cluster still exists may +// result in a deleted GCP node pool but an existing on-prem node pool. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsDeleteCall) IgnoreErrors(ignoreErrors bool) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsDeleteCall { + c.urlParams_.Set("ignoreErrors", fmt.Sprint(ignoreErrors)) + return c +} + +// ValidateOnly sets the optional parameter "validateOnly": If set, only +// validate the request, but do not actually delete the node pool. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsDeleteCall) ValidateOnly(validateOnly bool) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsDeleteCall { + c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsDeleteCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsDeleteCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsDeleteCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsDeleteCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsDeleteCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsDeleteCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("DELETE", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.delete" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsDeleteCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes a single bare metal node pool.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools/{bareMetalNodePoolsId}", + // "httpMethod": "DELETE", + // "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.delete", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "allowMissing": { + // "description": "If set to true, and the bare metal node pool is not found, the request will succeed but no action will be taken on the server and return a completed LRO.", + // "location": "query", + // "type": "boolean" + // }, + // "etag": { + // "description": "The current etag of the BareMetalNodePool. If an etag is provided and does not match the current etag of the node pool, deletion will be blocked and an ABORTED error will be returned.", + // "location": "query", + // "type": "string" + // }, + // "ignoreErrors": { + // "description": "If set to true, the deletion of a bare metal node pool resource will succeed even if errors occur during deletion. This parameter can be used when you want to delete GCP's node pool resource and you've already deleted the on-prem admin cluster that hosted your node pool. WARNING: Using this parameter when your user cluster still exists may result in a deleted GCP node pool but an existing on-prem node pool.", + // "location": "query", + // "type": "boolean" + // }, + // "name": { + // "description": "Required. The name of the node pool to delete. Format: projects/{project}/locations/{location}/bareMetalClusters/{cluster}/bareMetalNodePools/{nodepool}", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+/bareMetalNodePools/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "validateOnly": { + // "description": "If set, only validate the request, but do not actually delete the node pool.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.enroll": + +type ProjectsLocationsBareMetalClustersBareMetalNodePoolsEnrollCall struct { + s *Service + parent string + enrollbaremetalnodepoolrequest *EnrollBareMetalNodePoolRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Enroll: Enrolls an existing bare metal node pool to the Anthos +// On-Prem API within a given project and location. Through enrollment, +// an existing node pool will become Anthos On-Prem API managed. The +// corresponding GCP resources will be created. +// +// - parent: The parent resource where this node pool will be created. +// projects/{project}/locations/{location}/bareMetalClusters/{cluster}. +func (r *ProjectsLocationsBareMetalClustersBareMetalNodePoolsService) Enroll(parent string, enrollbaremetalnodepoolrequest *EnrollBareMetalNodePoolRequest) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsEnrollCall { + c := &ProjectsLocationsBareMetalClustersBareMetalNodePoolsEnrollCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.parent = parent + c.enrollbaremetalnodepoolrequest = enrollbaremetalnodepoolrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsEnrollCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsEnrollCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsEnrollCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsEnrollCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsEnrollCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsEnrollCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.enrollbaremetalnodepoolrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/bareMetalNodePools:enroll") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "parent": c.parent, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.enroll" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsEnrollCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Enrolls an existing bare metal node pool to the Anthos On-Prem API within a given project and location. Through enrollment, an existing node pool will become Anthos On-Prem API managed. The corresponding GCP resources will be created.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools:enroll", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.enroll", + // "parameterOrder": [ + // "parent" + // ], + // "parameters": { + // "parent": { + // "description": "Required. The parent resource where this node pool will be created. projects/{project}/locations/{location}/bareMetalClusters/{cluster}", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+parent}/bareMetalNodePools:enroll", + // "request": { + // "$ref": "EnrollBareMetalNodePoolRequest" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.get": + +type ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// Get: Gets details of a single bare metal node pool. +// +// - name: The name of the node pool to retrieve. +// projects/{project}/locations/{location}/bareMetalClusters/{cluster}/ +// bareMetalNodePools/{nodepool}. +func (r *ProjectsLocationsBareMetalClustersBareMetalNodePoolsService) Get(name string) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetCall { + c := &ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// View sets the optional parameter "view": View for bare metal node +// pool. When `BASIC` is specified, only the node pool resource name is +// returned. The default/unset value `NODE_POOL_VIEW_UNSPECIFIED` is the +// same as `FULL', which returns the complete node pool configuration +// details. +// +// Possible values: +// +// "NODE_POOL_VIEW_UNSPECIFIED" - If the value is not set, the default +// +// `FULL` view is used. +// +// "BASIC" - Includes basic information of a node pool resource +// +// including node pool resource name. +// +// "FULL" - Includes the complete configuration for bare metal node +// +// pool resource. This is the default value for +// GetBareMetalNodePoolRequest method. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetCall) View(view string) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetCall { + c.urlParams_.Set("view", view) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.get" call. +// Exactly one of *BareMetalNodePool or error will be non-nil. Any +// non-2xx status code is an error. Response headers are in either +// *BareMetalNodePool.ServerResponse.Header or (if a response was +// returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetCall) Do(opts ...googleapi.CallOption) (*BareMetalNodePool, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &BareMetalNodePool{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets details of a single bare metal node pool.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools/{bareMetalNodePoolsId}", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.get", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "Required. The name of the node pool to retrieve. projects/{project}/locations/{location}/bareMetalClusters/{cluster}/bareMetalNodePools/{nodepool}", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+/bareMetalNodePools/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "view": { + // "description": "View for bare metal node pool. When `BASIC` is specified, only the node pool resource name is returned. The default/unset value `NODE_POOL_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete node pool configuration details.", + // "enum": [ + // "NODE_POOL_VIEW_UNSPECIFIED", + // "BASIC", + // "FULL" + // ], + // "enumDescriptions": [ + // "If the value is not set, the default `FULL` view is used.", + // "Includes basic information of a node pool resource including node pool resource name.", + // "Includes the complete configuration for bare metal node pool resource. This is the default value for GetBareMetalNodePoolRequest method." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "BareMetalNodePool" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.getIamPolicy": + +type ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetIamPolicyCall struct { + s *Service + resource string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// GetIamPolicy: Gets the access control policy for a resource. Returns +// an empty policy if the resource exists and does not have a policy +// set. +// +// - resource: REQUIRED: The resource for which the policy is being +// requested. See Resource names +// (https://cloud.google.com/apis/design/resource_names) for the +// appropriate value for this field. +func (r *ProjectsLocationsBareMetalClustersBareMetalNodePoolsService) GetIamPolicy(resource string) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetIamPolicyCall { + c := &ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.resource = resource + return c +} + +// OptionsRequestedPolicyVersion sets the optional parameter +// "options.requestedPolicyVersion": The maximum policy version that +// will be used to format the policy. Valid values are 0, 1, and 3. +// Requests specifying an invalid value will be rejected. Requests for +// policies with any conditional role bindings must specify version 3. +// Policies with no conditional role bindings may specify any valid +// value or leave the field unset. The policy in the response might use +// the policy version that you specified, or it might use a lower policy +// version. For example, if you specify version 3, but the policy has no +// conditional role bindings, the response uses version 1. To learn +// which resources support conditions in their IAM policies, see the IAM +// documentation +// (https://cloud.google.com/iam/help/conditions/resource-policies). +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetIamPolicyCall) OptionsRequestedPolicyVersion(optionsRequestedPolicyVersion int64) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetIamPolicyCall { + c.urlParams_.Set("options.requestedPolicyVersion", fmt.Sprint(optionsRequestedPolicyVersion)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetIamPolicyCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetIamPolicyCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetIamPolicyCall) IfNoneMatch(entityTag string) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetIamPolicyCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetIamPolicyCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetIamPolicyCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetIamPolicyCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetIamPolicyCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:getIamPolicy") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "resource": c.resource, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.getIamPolicy" call. +// Exactly one of *Policy or error will be non-nil. Any non-2xx status +// code is an error. Response headers are in either +// *Policy.ServerResponse.Header or (if a response was returned at all) +// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to +// check whether the returned error was because http.StatusNotModified +// was returned. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsGetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Policy{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools/{bareMetalNodePoolsId}:getIamPolicy", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.getIamPolicy", + // "parameterOrder": [ + // "resource" + // ], + // "parameters": { + // "options.requestedPolicyVersion": { + // "description": "Optional. The maximum policy version that will be used to format the policy. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional role bindings must specify version 3. Policies with no conditional role bindings may specify any valid value or leave the field unset. The policy in the response might use the policy version that you specified, or it might use a lower policy version. For example, if you specify version 3, but the policy has no conditional role bindings, the response uses version 1. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "resource": { + // "description": "REQUIRED: The resource for which the policy is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+/bareMetalNodePools/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+resource}:getIamPolicy", + // "response": { + // "$ref": "Policy" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.list": + +type ProjectsLocationsBareMetalClustersBareMetalNodePoolsListCall struct { + s *Service + parent string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// List: Lists bare metal node pools in a given project, location and +// bare metal cluster. +// +// - parent: The parent, which owns this collection of node pools. +// Format: +// projects/{project}/locations/{location}/bareMetalClusters/{bareMetal +// Cluster}. +func (r *ProjectsLocationsBareMetalClustersBareMetalNodePoolsService) List(parent string) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsListCall { + c := &ProjectsLocationsBareMetalClustersBareMetalNodePoolsListCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.parent = parent + return c +} + +// PageSize sets the optional parameter "pageSize": The maximum number +// of node pools to return. The service may return fewer than this +// value. If unspecified, at most 50 node pools will be returned. The +// maximum value is 1000; values above 1000 will be coerced to 1000. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsListCall) PageSize(pageSize int64) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsListCall { + c.urlParams_.Set("pageSize", fmt.Sprint(pageSize)) + return c +} + +// PageToken sets the optional parameter "pageToken": A page token, +// received from a previous `ListBareMetalNodePools` call. Provide this +// to retrieve the subsequent page. When paginating, all other +// parameters provided to `ListBareMetalNodePools` must match the call +// that provided the page token. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsListCall) PageToken(pageToken string) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsListCall { + c.urlParams_.Set("pageToken", pageToken) + return c +} + +// View sets the optional parameter "view": View for bare metal node +// pools. When `BASIC` is specified, only the node pool resource name is +// returned. The default/unset value `NODE_POOL_VIEW_UNSPECIFIED` is the +// same as `FULL', which returns the complete node pool configuration +// details. +// +// Possible values: +// +// "NODE_POOL_VIEW_UNSPECIFIED" - If the value is not set, the default +// +// `FULL` view is used. +// +// "BASIC" - Includes basic information of a node pool resource +// +// including node pool resource name. +// +// "FULL" - Includes the complete configuration for bare metal node +// +// pool resource. This is the default value for +// ListBareMetalNodePoolsRequest method. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsListCall) View(view string) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsListCall { + c.urlParams_.Set("view", view) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsListCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsListCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsListCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsListCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsListCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsListCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/bareMetalNodePools") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "parent": c.parent, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.list" call. +// Exactly one of *ListBareMetalNodePoolsResponse or error will be +// non-nil. Any non-2xx status code is an error. Response headers are in +// either *ListBareMetalNodePoolsResponse.ServerResponse.Header or (if a +// response was returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsListCall) Do(opts ...googleapi.CallOption) (*ListBareMetalNodePoolsResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &ListBareMetalNodePoolsResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists bare metal node pools in a given project, location and bare metal cluster.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.list", + // "parameterOrder": [ + // "parent" + // ], + // "parameters": { + // "pageSize": { + // "description": "The maximum number of node pools to return. The service may return fewer than this value. If unspecified, at most 50 node pools will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A page token, received from a previous `ListBareMetalNodePools` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListBareMetalNodePools` must match the call that provided the page token.", + // "location": "query", + // "type": "string" + // }, + // "parent": { + // "description": "Required. The parent, which owns this collection of node pools. Format: projects/{project}/locations/{location}/bareMetalClusters/{bareMetalCluster}", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "view": { + // "description": "View for bare metal node pools. When `BASIC` is specified, only the node pool resource name is returned. The default/unset value `NODE_POOL_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete node pool configuration details.", + // "enum": [ + // "NODE_POOL_VIEW_UNSPECIFIED", + // "BASIC", + // "FULL" + // ], + // "enumDescriptions": [ + // "If the value is not set, the default `FULL` view is used.", + // "Includes basic information of a node pool resource including node pool resource name.", + // "Includes the complete configuration for bare metal node pool resource. This is the default value for ListBareMetalNodePoolsRequest method." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+parent}/bareMetalNodePools", + // "response": { + // "$ref": "ListBareMetalNodePoolsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// Pages invokes f for each page of results. +// A non-nil error returned from f will halt the iteration. +// The provided context supersedes any context provided to the Context method. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsListCall) Pages(ctx context.Context, f func(*ListBareMetalNodePoolsResponse) error) error { + c.ctx_ = ctx + defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point + for { + x, err := c.Do() + if err != nil { + return err + } + if err := f(x); err != nil { + return err + } + if x.NextPageToken == "" { + return nil + } + c.PageToken(x.NextPageToken) + } +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.patch": + +type ProjectsLocationsBareMetalClustersBareMetalNodePoolsPatchCall struct { + s *Service + name string + baremetalnodepool *BareMetalNodePool + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Patch: Updates the parameters of a single bare metal node pool. +// +// - name: Immutable. The bare metal node pool resource name. +func (r *ProjectsLocationsBareMetalClustersBareMetalNodePoolsService) Patch(name string, baremetalnodepool *BareMetalNodePool) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsPatchCall { + c := &ProjectsLocationsBareMetalClustersBareMetalNodePoolsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + c.baremetalnodepool = baremetalnodepool + return c +} + +// AllowMissing sets the optional parameter "allowMissing": If set to +// true, and the bare metal node pool is not found, the request will +// create a new bare metal node pool with the provided configuration. +// The user must have both create and update permission to call Update +// with allow_missing set to true. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsPatchCall) AllowMissing(allowMissing bool) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsPatchCall { + c.urlParams_.Set("allowMissing", fmt.Sprint(allowMissing)) + return c +} + +// UpdateMask sets the optional parameter "updateMask": Required. Field +// mask is used to specify the fields to be overwritten in the +// BareMetalNodePool resource by the update. The fields specified in the +// update_mask are relative to the resource, not the full request. A +// field will be overwritten if it is in the mask. If the user does not +// provide a mask then all populated fields in the BareMetalNodePool +// message will be updated. Empty fields will be ignored unless a field +// mask is used. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsPatchCall) UpdateMask(updateMask string) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsPatchCall { + c.urlParams_.Set("updateMask", updateMask) + return c +} + +// ValidateOnly sets the optional parameter "validateOnly": Validate the +// request without actually doing any updates. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsPatchCall) ValidateOnly(validateOnly bool) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsPatchCall { + c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsPatchCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsPatchCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsPatchCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsPatchCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsPatchCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsPatchCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.baremetalnodepool) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("PATCH", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.patch" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsPatchCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the parameters of a single bare metal node pool.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools/{bareMetalNodePoolsId}", + // "httpMethod": "PATCH", + // "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.patch", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "allowMissing": { + // "description": "If set to true, and the bare metal node pool is not found, the request will create a new bare metal node pool with the provided configuration. The user must have both create and update permission to call Update with allow_missing set to true.", + // "location": "query", + // "type": "boolean" + // }, + // "name": { + // "description": "Immutable. The bare metal node pool resource name.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+/bareMetalNodePools/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "updateMask": { + // "description": "Required. Field mask is used to specify the fields to be overwritten in the BareMetalNodePool resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all populated fields in the BareMetalNodePool message will be updated. Empty fields will be ignored unless a field mask is used.", + // "format": "google-fieldmask", + // "location": "query", + // "type": "string" + // }, + // "validateOnly": { + // "description": "Validate the request without actually doing any updates.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "v1/{+name}", + // "request": { + // "$ref": "BareMetalNodePool" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.setIamPolicy": + +type ProjectsLocationsBareMetalClustersBareMetalNodePoolsSetIamPolicyCall struct { + s *Service + resource string + setiampolicyrequest *SetIamPolicyRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// SetIamPolicy: Sets the access control policy on the specified +// resource. Replaces any existing policy. Can return `NOT_FOUND`, +// `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors. +// +// - resource: REQUIRED: The resource for which the policy is being +// specified. See Resource names +// (https://cloud.google.com/apis/design/resource_names) for the +// appropriate value for this field. +func (r *ProjectsLocationsBareMetalClustersBareMetalNodePoolsService) SetIamPolicy(resource string, setiampolicyrequest *SetIamPolicyRequest) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsSetIamPolicyCall { + c := &ProjectsLocationsBareMetalClustersBareMetalNodePoolsSetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.resource = resource + c.setiampolicyrequest = setiampolicyrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsSetIamPolicyCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsSetIamPolicyCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsSetIamPolicyCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsSetIamPolicyCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsSetIamPolicyCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsSetIamPolicyCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.setiampolicyrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:setIamPolicy") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "resource": c.resource, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.setIamPolicy" call. +// Exactly one of *Policy or error will be non-nil. Any non-2xx status +// code is an error. Response headers are in either +// *Policy.ServerResponse.Header or (if a response was returned at all) +// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to +// check whether the returned error was because http.StatusNotModified +// was returned. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsSetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Policy{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets the access control policy on the specified resource. Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools/{bareMetalNodePoolsId}:setIamPolicy", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.setIamPolicy", + // "parameterOrder": [ + // "resource" + // ], + // "parameters": { + // "resource": { + // "description": "REQUIRED: The resource for which the policy is being specified. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+/bareMetalNodePools/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+resource}:setIamPolicy", + // "request": { + // "$ref": "SetIamPolicyRequest" + // }, + // "response": { + // "$ref": "Policy" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.testIamPermissions": + +type ProjectsLocationsBareMetalClustersBareMetalNodePoolsTestIamPermissionsCall struct { + s *Service + resource string + testiampermissionsrequest *TestIamPermissionsRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// TestIamPermissions: Returns permissions that a caller has on the +// specified resource. If the resource does not exist, this will return +// an empty set of permissions, not a `NOT_FOUND` error. Note: This +// operation is designed to be used for building permission-aware UIs +// and command-line tools, not for authorization checking. This +// operation may "fail open" without warning. +// +// - resource: REQUIRED: The resource for which the policy detail is +// being requested. See Resource names +// (https://cloud.google.com/apis/design/resource_names) for the +// appropriate value for this field. +func (r *ProjectsLocationsBareMetalClustersBareMetalNodePoolsService) TestIamPermissions(resource string, testiampermissionsrequest *TestIamPermissionsRequest) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsTestIamPermissionsCall { + c := &ProjectsLocationsBareMetalClustersBareMetalNodePoolsTestIamPermissionsCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.resource = resource + c.testiampermissionsrequest = testiampermissionsrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsTestIamPermissionsCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsTestIamPermissionsCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsTestIamPermissionsCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsTestIamPermissionsCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsTestIamPermissionsCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsTestIamPermissionsCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.testiampermissionsrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:testIamPermissions") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "resource": c.resource, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.testIamPermissions" call. +// Exactly one of *TestIamPermissionsResponse or error will be non-nil. +// Any non-2xx status code is an error. Response headers are in either +// *TestIamPermissionsResponse.ServerResponse.Header or (if a response +// was returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsTestIamPermissionsCall) Do(opts ...googleapi.CallOption) (*TestIamPermissionsResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &TestIamPermissionsResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not for authorization checking. This operation may \"fail open\" without warning.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools/{bareMetalNodePoolsId}:testIamPermissions", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.testIamPermissions", + // "parameterOrder": [ + // "resource" + // ], + // "parameters": { + // "resource": { + // "description": "REQUIRED: The resource for which the policy detail is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+/bareMetalNodePools/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+resource}:testIamPermissions", + // "request": { + // "$ref": "TestIamPermissionsRequest" + // }, + // "response": { + // "$ref": "TestIamPermissionsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.unenroll": + +type ProjectsLocationsBareMetalClustersBareMetalNodePoolsUnenrollCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Unenroll: Unenrolls a bare metal node pool from Anthos On-Prem API. +// +// - name: The name of the node pool to unenroll. Format: +// projects/{project}/locations/{location}/bareMetalClusters/{cluster}/ +// bareMetalNodePools/{nodepool}. +func (r *ProjectsLocationsBareMetalClustersBareMetalNodePoolsService) Unenroll(name string) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsUnenrollCall { + c := &ProjectsLocationsBareMetalClustersBareMetalNodePoolsUnenrollCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// AllowMissing sets the optional parameter "allowMissing": If set to +// true, and the bare metal node pool is not found, the request will +// succeed but no action will be taken on the server and return a +// completed LRO. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsUnenrollCall) AllowMissing(allowMissing bool) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsUnenrollCall { + c.urlParams_.Set("allowMissing", fmt.Sprint(allowMissing)) + return c +} + +// Etag sets the optional parameter "etag": The current etag of the bare +// metal node pool. If an etag is provided and does not match the +// current etag of node pool, deletion will be blocked and an ABORTED +// error will be returned. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsUnenrollCall) Etag(etag string) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsUnenrollCall { + c.urlParams_.Set("etag", etag) + return c +} + +// ValidateOnly sets the optional parameter "validateOnly": If set, only +// validate the request, but do not actually unenroll the node pool. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsUnenrollCall) ValidateOnly(validateOnly bool) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsUnenrollCall { + c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsUnenrollCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsUnenrollCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsUnenrollCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsUnenrollCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsUnenrollCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsUnenrollCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:unenroll") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("DELETE", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.unenroll" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsUnenrollCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Unenrolls a bare metal node pool from Anthos On-Prem API.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools/{bareMetalNodePoolsId}:unenroll", + // "httpMethod": "DELETE", + // "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.unenroll", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "allowMissing": { + // "description": "If set to true, and the bare metal node pool is not found, the request will succeed but no action will be taken on the server and return a completed LRO.", + // "location": "query", + // "type": "boolean" + // }, + // "etag": { + // "description": "The current etag of the bare metal node pool. If an etag is provided and does not match the current etag of node pool, deletion will be blocked and an ABORTED error will be returned.", + // "location": "query", + // "type": "string" + // }, + // "name": { + // "description": "Required. The name of the node pool to unenroll. Format: projects/{project}/locations/{location}/bareMetalClusters/{cluster}/bareMetalNodePools/{nodepool}", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+/bareMetalNodePools/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "validateOnly": { + // "description": "If set, only validate the request, but do not actually unenroll the node pool.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "v1/{+name}:unenroll", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.operations.get": + +type ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsGetCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// Get: Gets the latest state of a long-running operation. Clients can +// use this method to poll the operation result at intervals as +// recommended by the API service. +// +// - name: The name of the operation resource. +func (r *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsService) Get(name string) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsGetCall { + c := &ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsGetCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsGetCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsGetCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsGetCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsGetCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsGetCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.operations.get" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsGetCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools/{bareMetalNodePoolsId}/operations/{operationsId}", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.operations.get", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "The name of the operation resource.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+/bareMetalNodePools/[^/]+/operations/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.operations.list": + +type ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsListCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// List: Lists operations that match the specified filter in the +// request. If the server doesn't support this method, it returns +// `UNIMPLEMENTED`. +// +// - name: The name of the operation's parent resource. +func (r *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsService) List(name string) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsListCall { + c := &ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Filter sets the optional parameter "filter": The standard list +// filter. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsListCall) Filter(filter string) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsListCall { + c.urlParams_.Set("filter", filter) + return c +} + +// PageSize sets the optional parameter "pageSize": The standard list +// page size. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsListCall) PageSize(pageSize int64) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsListCall { + c.urlParams_.Set("pageSize", fmt.Sprint(pageSize)) + return c +} + +// PageToken sets the optional parameter "pageToken": The standard list +// page token. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsListCall) PageToken(pageToken string) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsListCall { + c.urlParams_.Set("pageToken", pageToken) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsListCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsListCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsListCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsListCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsListCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsListCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}/operations") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.operations.list" call. +// Exactly one of *ListOperationsResponse or error will be non-nil. Any +// non-2xx status code is an error. Response headers are in either +// *ListOperationsResponse.ServerResponse.Header or (if a response was +// returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsListCall) Do(opts ...googleapi.CallOption) (*ListOperationsResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &ListOperationsResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/bareMetalNodePools/{bareMetalNodePoolsId}/operations", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.bareMetalClusters.bareMetalNodePools.operations.list", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "filter": { + // "description": "The standard list filter.", + // "location": "query", + // "type": "string" + // }, + // "name": { + // "description": "The name of the operation's parent resource.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+/bareMetalNodePools/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "pageSize": { + // "description": "The standard list page size.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The standard list page token.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+name}/operations", + // "response": { + // "$ref": "ListOperationsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// Pages invokes f for each page of results. +// A non-nil error returned from f will halt the iteration. +// The provided context supersedes any context provided to the Context method. +func (c *ProjectsLocationsBareMetalClustersBareMetalNodePoolsOperationsListCall) Pages(ctx context.Context, f func(*ListOperationsResponse) error) error { + c.ctx_ = ctx + defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point + for { + x, err := c.Do() + if err != nil { + return err + } + if err := f(x); err != nil { + return err + } + if x.NextPageToken == "" { + return nil + } + c.PageToken(x.NextPageToken) + } +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.operations.get": + +type ProjectsLocationsBareMetalClustersOperationsGetCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// Get: Gets the latest state of a long-running operation. Clients can +// use this method to poll the operation result at intervals as +// recommended by the API service. +// +// - name: The name of the operation resource. +func (r *ProjectsLocationsBareMetalClustersOperationsService) Get(name string) *ProjectsLocationsBareMetalClustersOperationsGetCall { + c := &ProjectsLocationsBareMetalClustersOperationsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersOperationsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersOperationsGetCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsBareMetalClustersOperationsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsBareMetalClustersOperationsGetCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersOperationsGetCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersOperationsGetCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersOperationsGetCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersOperationsGetCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.operations.get" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalClustersOperationsGetCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/operations/{operationsId}", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.bareMetalClusters.operations.get", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "The name of the operation resource.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+/operations/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.bareMetalClusters.operations.list": + +type ProjectsLocationsBareMetalClustersOperationsListCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// List: Lists operations that match the specified filter in the +// request. If the server doesn't support this method, it returns +// `UNIMPLEMENTED`. +// +// - name: The name of the operation's parent resource. +func (r *ProjectsLocationsBareMetalClustersOperationsService) List(name string) *ProjectsLocationsBareMetalClustersOperationsListCall { + c := &ProjectsLocationsBareMetalClustersOperationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Filter sets the optional parameter "filter": The standard list +// filter. +func (c *ProjectsLocationsBareMetalClustersOperationsListCall) Filter(filter string) *ProjectsLocationsBareMetalClustersOperationsListCall { + c.urlParams_.Set("filter", filter) + return c +} + +// PageSize sets the optional parameter "pageSize": The standard list +// page size. +func (c *ProjectsLocationsBareMetalClustersOperationsListCall) PageSize(pageSize int64) *ProjectsLocationsBareMetalClustersOperationsListCall { + c.urlParams_.Set("pageSize", fmt.Sprint(pageSize)) + return c +} + +// PageToken sets the optional parameter "pageToken": The standard list +// page token. +func (c *ProjectsLocationsBareMetalClustersOperationsListCall) PageToken(pageToken string) *ProjectsLocationsBareMetalClustersOperationsListCall { + c.urlParams_.Set("pageToken", pageToken) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsBareMetalClustersOperationsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsBareMetalClustersOperationsListCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsBareMetalClustersOperationsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsBareMetalClustersOperationsListCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsBareMetalClustersOperationsListCall) Context(ctx context.Context) *ProjectsLocationsBareMetalClustersOperationsListCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsBareMetalClustersOperationsListCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsBareMetalClustersOperationsListCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}/operations") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.bareMetalClusters.operations.list" call. +// Exactly one of *ListOperationsResponse or error will be non-nil. Any +// non-2xx status code is an error. Response headers are in either +// *ListOperationsResponse.ServerResponse.Header or (if a response was +// returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsBareMetalClustersOperationsListCall) Do(opts ...googleapi.CallOption) (*ListOperationsResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &ListOperationsResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/bareMetalClusters/{bareMetalClustersId}/operations", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.bareMetalClusters.operations.list", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "filter": { + // "description": "The standard list filter.", + // "location": "query", + // "type": "string" + // }, + // "name": { + // "description": "The name of the operation's parent resource.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/bareMetalClusters/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "pageSize": { + // "description": "The standard list page size.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The standard list page token.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+name}/operations", + // "response": { + // "$ref": "ListOperationsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// Pages invokes f for each page of results. +// A non-nil error returned from f will halt the iteration. +// The provided context supersedes any context provided to the Context method. +func (c *ProjectsLocationsBareMetalClustersOperationsListCall) Pages(ctx context.Context, f func(*ListOperationsResponse) error) error { + c.ctx_ = ctx + defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point + for { + x, err := c.Do() + if err != nil { + return err + } + if err := f(x); err != nil { + return err + } + if x.NextPageToken == "" { + return nil + } + c.PageToken(x.NextPageToken) + } +} + +// method id "gkeonprem.projects.locations.operations.cancel": + +type ProjectsLocationsOperationsCancelCall struct { + s *Service + name string + canceloperationrequest *CancelOperationRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Cancel: Starts asynchronous cancellation on a long-running operation. +// The server makes a best effort to cancel the operation, but success +// is not guaranteed. If the server doesn't support this method, it +// returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use +// Operations.GetOperation or other methods to check whether the +// cancellation succeeded or whether the operation completed despite +// cancellation. On successful cancellation, the operation is not +// deleted; instead, it becomes an operation with an Operation.error +// value with a google.rpc.Status.code of 1, corresponding to +// `Code.CANCELLED`. +// +// - name: The name of the operation resource to be cancelled. +func (r *ProjectsLocationsOperationsService) Cancel(name string, canceloperationrequest *CancelOperationRequest) *ProjectsLocationsOperationsCancelCall { + c := &ProjectsLocationsOperationsCancelCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + c.canceloperationrequest = canceloperationrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsOperationsCancelCall) Fields(s ...googleapi.Field) *ProjectsLocationsOperationsCancelCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsOperationsCancelCall) Context(ctx context.Context) *ProjectsLocationsOperationsCancelCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsOperationsCancelCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsOperationsCancelCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.canceloperationrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:cancel") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.operations.cancel" call. +// Exactly one of *Empty or error will be non-nil. Any non-2xx status +// code is an error. Response headers are in either +// *Empty.ServerResponse.Header or (if a response was returned at all) +// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to +// check whether the returned error was because http.StatusNotModified +// was returned. +func (c *ProjectsLocationsOperationsCancelCall) Do(opts ...googleapi.CallOption) (*Empty, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Empty{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an operation with an Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}:cancel", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.operations.cancel", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "The name of the operation resource to be cancelled.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+name}:cancel", + // "request": { + // "$ref": "CancelOperationRequest" + // }, + // "response": { + // "$ref": "Empty" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.operations.delete": + +type ProjectsLocationsOperationsDeleteCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Delete: Deletes a long-running operation. This method indicates that +// the client is no longer interested in the operation result. It does +// not cancel the operation. If the server doesn't support this method, +// it returns `google.rpc.Code.UNIMPLEMENTED`. +// +// - name: The name of the operation resource to be deleted. +func (r *ProjectsLocationsOperationsService) Delete(name string) *ProjectsLocationsOperationsDeleteCall { + c := &ProjectsLocationsOperationsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsOperationsDeleteCall) Fields(s ...googleapi.Field) *ProjectsLocationsOperationsDeleteCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsOperationsDeleteCall) Context(ctx context.Context) *ProjectsLocationsOperationsDeleteCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsOperationsDeleteCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsOperationsDeleteCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("DELETE", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.operations.delete" call. +// Exactly one of *Empty or error will be non-nil. Any non-2xx status +// code is an error. Response headers are in either +// *Empty.ServerResponse.Header or (if a response was returned at all) +// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to +// check whether the returned error was because http.StatusNotModified +// was returned. +func (c *ProjectsLocationsOperationsDeleteCall) Do(opts ...googleapi.CallOption) (*Empty, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Empty{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}", + // "httpMethod": "DELETE", + // "id": "gkeonprem.projects.locations.operations.delete", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "The name of the operation resource to be deleted.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "Empty" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.operations.get": + +type ProjectsLocationsOperationsGetCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// Get: Gets the latest state of a long-running operation. Clients can +// use this method to poll the operation result at intervals as +// recommended by the API service. +// +// - name: The name of the operation resource. +func (r *ProjectsLocationsOperationsService) Get(name string) *ProjectsLocationsOperationsGetCall { + c := &ProjectsLocationsOperationsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsOperationsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsOperationsGetCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsOperationsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsOperationsGetCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsOperationsGetCall) Context(ctx context.Context) *ProjectsLocationsOperationsGetCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsOperationsGetCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsOperationsGetCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.operations.get" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsOperationsGetCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.operations.get", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "The name of the operation resource.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.operations.list": + +type ProjectsLocationsOperationsListCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// List: Lists operations that match the specified filter in the +// request. If the server doesn't support this method, it returns +// `UNIMPLEMENTED`. +// +// - name: The name of the operation's parent resource. +func (r *ProjectsLocationsOperationsService) List(name string) *ProjectsLocationsOperationsListCall { + c := &ProjectsLocationsOperationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Filter sets the optional parameter "filter": The standard list +// filter. +func (c *ProjectsLocationsOperationsListCall) Filter(filter string) *ProjectsLocationsOperationsListCall { + c.urlParams_.Set("filter", filter) + return c +} + +// PageSize sets the optional parameter "pageSize": The standard list +// page size. +func (c *ProjectsLocationsOperationsListCall) PageSize(pageSize int64) *ProjectsLocationsOperationsListCall { + c.urlParams_.Set("pageSize", fmt.Sprint(pageSize)) + return c +} + +// PageToken sets the optional parameter "pageToken": The standard list +// page token. +func (c *ProjectsLocationsOperationsListCall) PageToken(pageToken string) *ProjectsLocationsOperationsListCall { + c.urlParams_.Set("pageToken", pageToken) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsOperationsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsOperationsListCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsOperationsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsOperationsListCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsOperationsListCall) Context(ctx context.Context) *ProjectsLocationsOperationsListCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsOperationsListCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsOperationsListCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}/operations") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.operations.list" call. +// Exactly one of *ListOperationsResponse or error will be non-nil. Any +// non-2xx status code is an error. Response headers are in either +// *ListOperationsResponse.ServerResponse.Header or (if a response was +// returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsOperationsListCall) Do(opts ...googleapi.CallOption) (*ListOperationsResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &ListOperationsResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.operations.list", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "filter": { + // "description": "The standard list filter.", + // "location": "query", + // "type": "string" + // }, + // "name": { + // "description": "The name of the operation's parent resource.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "pageSize": { + // "description": "The standard list page size.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The standard list page token.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+name}/operations", + // "response": { + // "$ref": "ListOperationsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// Pages invokes f for each page of results. +// A non-nil error returned from f will halt the iteration. +// The provided context supersedes any context provided to the Context method. +func (c *ProjectsLocationsOperationsListCall) Pages(ctx context.Context, f func(*ListOperationsResponse) error) error { + c.ctx_ = ctx + defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point + for { + x, err := c.Do() + if err != nil { + return err + } + if err := f(x); err != nil { + return err + } + if x.NextPageToken == "" { + return nil + } + c.PageToken(x.NextPageToken) + } +} + +// method id "gkeonprem.projects.locations.vmwareAdminClusters.enroll": + +type ProjectsLocationsVmwareAdminClustersEnrollCall struct { + s *Service + parent string + enrollvmwareadminclusterrequest *EnrollVmwareAdminClusterRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Enroll: Enrolls an existing VMware admin cluster to the Anthos +// On-Prem API within a given project and location. Through enrollment, +// an existing admin cluster will become Anthos On-Prem API managed. The +// corresponding GCP resources will be created and all future +// modifications to the cluster will be expected to be performed through +// the API. +// +// - parent: The parent of the project and location where the cluster is +// enrolled in. Format: "projects/{project}/locations/{location}". +func (r *ProjectsLocationsVmwareAdminClustersService) Enroll(parent string, enrollvmwareadminclusterrequest *EnrollVmwareAdminClusterRequest) *ProjectsLocationsVmwareAdminClustersEnrollCall { + c := &ProjectsLocationsVmwareAdminClustersEnrollCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.parent = parent + c.enrollvmwareadminclusterrequest = enrollvmwareadminclusterrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareAdminClustersEnrollCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareAdminClustersEnrollCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareAdminClustersEnrollCall) Context(ctx context.Context) *ProjectsLocationsVmwareAdminClustersEnrollCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareAdminClustersEnrollCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareAdminClustersEnrollCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.enrollvmwareadminclusterrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/vmwareAdminClusters:enroll") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "parent": c.parent, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareAdminClusters.enroll" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareAdminClustersEnrollCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Enrolls an existing VMware admin cluster to the Anthos On-Prem API within a given project and location. Through enrollment, an existing admin cluster will become Anthos On-Prem API managed. The corresponding GCP resources will be created and all future modifications to the cluster will be expected to be performed through the API.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareAdminClusters:enroll", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.vmwareAdminClusters.enroll", + // "parameterOrder": [ + // "parent" + // ], + // "parameters": { + // "parent": { + // "description": "Required. The parent of the project and location where the cluster is enrolled in. Format: \"projects/{project}/locations/{location}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+parent}/vmwareAdminClusters:enroll", + // "request": { + // "$ref": "EnrollVmwareAdminClusterRequest" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareAdminClusters.get": + +type ProjectsLocationsVmwareAdminClustersGetCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// Get: Gets details of a single VMware admin cluster. +// +// - name: Name of the VMware admin cluster to be returned. Format: +// "projects/{project}/locations/{location}/vmwareAdminClusters/{vmware +// _admin_cluster}". +func (r *ProjectsLocationsVmwareAdminClustersService) Get(name string) *ProjectsLocationsVmwareAdminClustersGetCall { + c := &ProjectsLocationsVmwareAdminClustersGetCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// View sets the optional parameter "view": View for VMware admin +// cluster. When `BASIC` is specified, only the cluster resource name +// and membership are returned. The default/unset value +// `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the +// complete cluster configuration details. +// +// Possible values: +// +// "CLUSTER_VIEW_UNSPECIFIED" - If the value is not set, the default +// +// `FULL` view is used. +// +// "BASIC" - Includes basic information of a cluster resource +// +// including cluster resource name and membership. +// +// "FULL" - Includes the complete configuration for VMware admin +// +// cluster resource. This is the default value for +// GetVmwareAdminClusterRequest method. +func (c *ProjectsLocationsVmwareAdminClustersGetCall) View(view string) *ProjectsLocationsVmwareAdminClustersGetCall { + c.urlParams_.Set("view", view) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareAdminClustersGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareAdminClustersGetCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsVmwareAdminClustersGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsVmwareAdminClustersGetCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareAdminClustersGetCall) Context(ctx context.Context) *ProjectsLocationsVmwareAdminClustersGetCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareAdminClustersGetCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareAdminClustersGetCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareAdminClusters.get" call. +// Exactly one of *VmwareAdminCluster or error will be non-nil. Any +// non-2xx status code is an error. Response headers are in either +// *VmwareAdminCluster.ServerResponse.Header or (if a response was +// returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareAdminClustersGetCall) Do(opts ...googleapi.CallOption) (*VmwareAdminCluster, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &VmwareAdminCluster{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets details of a single VMware admin cluster.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareAdminClusters/{vmwareAdminClustersId}", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.vmwareAdminClusters.get", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "Required. Name of the VMware admin cluster to be returned. Format: \"projects/{project}/locations/{location}/vmwareAdminClusters/{vmware_admin_cluster}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareAdminClusters/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "view": { + // "description": "View for VMware admin cluster. When `BASIC` is specified, only the cluster resource name and membership are returned. The default/unset value `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete cluster configuration details.", + // "enum": [ + // "CLUSTER_VIEW_UNSPECIFIED", + // "BASIC", + // "FULL" + // ], + // "enumDescriptions": [ + // "If the value is not set, the default `FULL` view is used.", + // "Includes basic information of a cluster resource including cluster resource name and membership.", + // "Includes the complete configuration for VMware admin cluster resource. This is the default value for GetVmwareAdminClusterRequest method." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "VmwareAdminCluster" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareAdminClusters.getIamPolicy": + +type ProjectsLocationsVmwareAdminClustersGetIamPolicyCall struct { + s *Service + resource string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// GetIamPolicy: Gets the access control policy for a resource. Returns +// an empty policy if the resource exists and does not have a policy +// set. +// +// - resource: REQUIRED: The resource for which the policy is being +// requested. See Resource names +// (https://cloud.google.com/apis/design/resource_names) for the +// appropriate value for this field. +func (r *ProjectsLocationsVmwareAdminClustersService) GetIamPolicy(resource string) *ProjectsLocationsVmwareAdminClustersGetIamPolicyCall { + c := &ProjectsLocationsVmwareAdminClustersGetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.resource = resource + return c +} + +// OptionsRequestedPolicyVersion sets the optional parameter +// "options.requestedPolicyVersion": The maximum policy version that +// will be used to format the policy. Valid values are 0, 1, and 3. +// Requests specifying an invalid value will be rejected. Requests for +// policies with any conditional role bindings must specify version 3. +// Policies with no conditional role bindings may specify any valid +// value or leave the field unset. The policy in the response might use +// the policy version that you specified, or it might use a lower policy +// version. For example, if you specify version 3, but the policy has no +// conditional role bindings, the response uses version 1. To learn +// which resources support conditions in their IAM policies, see the IAM +// documentation +// (https://cloud.google.com/iam/help/conditions/resource-policies). +func (c *ProjectsLocationsVmwareAdminClustersGetIamPolicyCall) OptionsRequestedPolicyVersion(optionsRequestedPolicyVersion int64) *ProjectsLocationsVmwareAdminClustersGetIamPolicyCall { + c.urlParams_.Set("options.requestedPolicyVersion", fmt.Sprint(optionsRequestedPolicyVersion)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareAdminClustersGetIamPolicyCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareAdminClustersGetIamPolicyCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsVmwareAdminClustersGetIamPolicyCall) IfNoneMatch(entityTag string) *ProjectsLocationsVmwareAdminClustersGetIamPolicyCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareAdminClustersGetIamPolicyCall) Context(ctx context.Context) *ProjectsLocationsVmwareAdminClustersGetIamPolicyCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareAdminClustersGetIamPolicyCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareAdminClustersGetIamPolicyCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:getIamPolicy") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "resource": c.resource, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareAdminClusters.getIamPolicy" call. +// Exactly one of *Policy or error will be non-nil. Any non-2xx status +// code is an error. Response headers are in either +// *Policy.ServerResponse.Header or (if a response was returned at all) +// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to +// check whether the returned error was because http.StatusNotModified +// was returned. +func (c *ProjectsLocationsVmwareAdminClustersGetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Policy{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareAdminClusters/{vmwareAdminClustersId}:getIamPolicy", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.vmwareAdminClusters.getIamPolicy", + // "parameterOrder": [ + // "resource" + // ], + // "parameters": { + // "options.requestedPolicyVersion": { + // "description": "Optional. The maximum policy version that will be used to format the policy. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional role bindings must specify version 3. Policies with no conditional role bindings may specify any valid value or leave the field unset. The policy in the response might use the policy version that you specified, or it might use a lower policy version. For example, if you specify version 3, but the policy has no conditional role bindings, the response uses version 1. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "resource": { + // "description": "REQUIRED: The resource for which the policy is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareAdminClusters/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+resource}:getIamPolicy", + // "response": { + // "$ref": "Policy" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareAdminClusters.list": + +type ProjectsLocationsVmwareAdminClustersListCall struct { + s *Service + parent string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// List: Lists VMware admin clusters in a given project and location. +// +// - parent: The parent of the project and location where the clusters +// are listed in. Format: "projects/{project}/locations/{location}". +func (r *ProjectsLocationsVmwareAdminClustersService) List(parent string) *ProjectsLocationsVmwareAdminClustersListCall { + c := &ProjectsLocationsVmwareAdminClustersListCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.parent = parent + return c +} + +// PageSize sets the optional parameter "pageSize": Requested page size. +// Server may return fewer items than requested. If unspecified, at most +// 50 clusters will be returned. The maximum value is 1000; values above +// 1000 will be coerced to 1000. +func (c *ProjectsLocationsVmwareAdminClustersListCall) PageSize(pageSize int64) *ProjectsLocationsVmwareAdminClustersListCall { + c.urlParams_.Set("pageSize", fmt.Sprint(pageSize)) + return c +} + +// PageToken sets the optional parameter "pageToken": A token +// identifying a page of results the server should return. +func (c *ProjectsLocationsVmwareAdminClustersListCall) PageToken(pageToken string) *ProjectsLocationsVmwareAdminClustersListCall { + c.urlParams_.Set("pageToken", pageToken) + return c +} + +// View sets the optional parameter "view": View for VMware admin +// clusters. When `BASIC` is specified, only the admin cluster resource +// name and membership are returned. The default/unset value +// `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the +// complete admin cluster configuration details. +// +// Possible values: +// +// "CLUSTER_VIEW_UNSPECIFIED" - If the value is not set, the default +// +// `FULL` view is used. +// +// "BASIC" - Includes basic information of a admin cluster resource +// +// including admin cluster resource name and membership. +// +// "FULL" - Includes the complete configuration for bare metal admin +// +// cluster resource. This is the default value for +// ListVmwareAdminClustersRequest method. +func (c *ProjectsLocationsVmwareAdminClustersListCall) View(view string) *ProjectsLocationsVmwareAdminClustersListCall { + c.urlParams_.Set("view", view) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareAdminClustersListCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareAdminClustersListCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsVmwareAdminClustersListCall) IfNoneMatch(entityTag string) *ProjectsLocationsVmwareAdminClustersListCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareAdminClustersListCall) Context(ctx context.Context) *ProjectsLocationsVmwareAdminClustersListCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareAdminClustersListCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareAdminClustersListCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/vmwareAdminClusters") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "parent": c.parent, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareAdminClusters.list" call. +// Exactly one of *ListVmwareAdminClustersResponse or error will be +// non-nil. Any non-2xx status code is an error. Response headers are in +// either *ListVmwareAdminClustersResponse.ServerResponse.Header or (if +// a response was returned at all) in error.(*googleapi.Error).Header. +// Use googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareAdminClustersListCall) Do(opts ...googleapi.CallOption) (*ListVmwareAdminClustersResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &ListVmwareAdminClustersResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists VMware admin clusters in a given project and location.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareAdminClusters", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.vmwareAdminClusters.list", + // "parameterOrder": [ + // "parent" + // ], + // "parameters": { + // "pageSize": { + // "description": "Requested page size. Server may return fewer items than requested. If unspecified, at most 50 clusters will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A token identifying a page of results the server should return.", + // "location": "query", + // "type": "string" + // }, + // "parent": { + // "description": "Required. The parent of the project and location where the clusters are listed in. Format: \"projects/{project}/locations/{location}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "view": { + // "description": "View for VMware admin clusters. When `BASIC` is specified, only the admin cluster resource name and membership are returned. The default/unset value `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete admin cluster configuration details.", + // "enum": [ + // "CLUSTER_VIEW_UNSPECIFIED", + // "BASIC", + // "FULL" + // ], + // "enumDescriptions": [ + // "If the value is not set, the default `FULL` view is used.", + // "Includes basic information of a admin cluster resource including admin cluster resource name and membership.", + // "Includes the complete configuration for bare metal admin cluster resource. This is the default value for ListVmwareAdminClustersRequest method." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+parent}/vmwareAdminClusters", + // "response": { + // "$ref": "ListVmwareAdminClustersResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// Pages invokes f for each page of results. +// A non-nil error returned from f will halt the iteration. +// The provided context supersedes any context provided to the Context method. +func (c *ProjectsLocationsVmwareAdminClustersListCall) Pages(ctx context.Context, f func(*ListVmwareAdminClustersResponse) error) error { + c.ctx_ = ctx + defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point + for { + x, err := c.Do() + if err != nil { + return err + } + if err := f(x); err != nil { + return err + } + if x.NextPageToken == "" { + return nil + } + c.PageToken(x.NextPageToken) + } +} + +// method id "gkeonprem.projects.locations.vmwareAdminClusters.patch": + +type ProjectsLocationsVmwareAdminClustersPatchCall struct { + s *Service + name string + vmwareadmincluster *VmwareAdminCluster + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Patch: Updates the parameters of a single VMware admin cluster. +// +// - name: Immutable. The VMware admin cluster resource name. +func (r *ProjectsLocationsVmwareAdminClustersService) Patch(name string, vmwareadmincluster *VmwareAdminCluster) *ProjectsLocationsVmwareAdminClustersPatchCall { + c := &ProjectsLocationsVmwareAdminClustersPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + c.vmwareadmincluster = vmwareadmincluster + return c +} + +// UpdateMask sets the optional parameter "updateMask": Required. Field +// mask is used to specify the fields to be overwritten in the +// VMwareAdminCluster resource by the update. The fields specified in +// the update_mask are relative to the resource, not the full request. A +// field will be overwritten if it is in the mask. If the user does not +// provide a mask then all populated fields in the VmwareAdminCluster +// message will be updated. Empty fields will be ignored unless a field +// mask is used. +func (c *ProjectsLocationsVmwareAdminClustersPatchCall) UpdateMask(updateMask string) *ProjectsLocationsVmwareAdminClustersPatchCall { + c.urlParams_.Set("updateMask", updateMask) + return c +} + +// ValidateOnly sets the optional parameter "validateOnly": Validate the +// request without actually doing any updates. +func (c *ProjectsLocationsVmwareAdminClustersPatchCall) ValidateOnly(validateOnly bool) *ProjectsLocationsVmwareAdminClustersPatchCall { + c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareAdminClustersPatchCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareAdminClustersPatchCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareAdminClustersPatchCall) Context(ctx context.Context) *ProjectsLocationsVmwareAdminClustersPatchCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareAdminClustersPatchCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareAdminClustersPatchCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.vmwareadmincluster) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("PATCH", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareAdminClusters.patch" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareAdminClustersPatchCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the parameters of a single VMware admin cluster.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareAdminClusters/{vmwareAdminClustersId}", + // "httpMethod": "PATCH", + // "id": "gkeonprem.projects.locations.vmwareAdminClusters.patch", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "Immutable. The VMware admin cluster resource name.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareAdminClusters/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "updateMask": { + // "description": "Required. Field mask is used to specify the fields to be overwritten in the VMwareAdminCluster resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all populated fields in the VmwareAdminCluster message will be updated. Empty fields will be ignored unless a field mask is used.", + // "format": "google-fieldmask", + // "location": "query", + // "type": "string" + // }, + // "validateOnly": { + // "description": "Validate the request without actually doing any updates.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "v1/{+name}", + // "request": { + // "$ref": "VmwareAdminCluster" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareAdminClusters.setIamPolicy": + +type ProjectsLocationsVmwareAdminClustersSetIamPolicyCall struct { + s *Service + resource string + setiampolicyrequest *SetIamPolicyRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// SetIamPolicy: Sets the access control policy on the specified +// resource. Replaces any existing policy. Can return `NOT_FOUND`, +// `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors. +// +// - resource: REQUIRED: The resource for which the policy is being +// specified. See Resource names +// (https://cloud.google.com/apis/design/resource_names) for the +// appropriate value for this field. +func (r *ProjectsLocationsVmwareAdminClustersService) SetIamPolicy(resource string, setiampolicyrequest *SetIamPolicyRequest) *ProjectsLocationsVmwareAdminClustersSetIamPolicyCall { + c := &ProjectsLocationsVmwareAdminClustersSetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.resource = resource + c.setiampolicyrequest = setiampolicyrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareAdminClustersSetIamPolicyCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareAdminClustersSetIamPolicyCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareAdminClustersSetIamPolicyCall) Context(ctx context.Context) *ProjectsLocationsVmwareAdminClustersSetIamPolicyCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareAdminClustersSetIamPolicyCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareAdminClustersSetIamPolicyCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.setiampolicyrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:setIamPolicy") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "resource": c.resource, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareAdminClusters.setIamPolicy" call. +// Exactly one of *Policy or error will be non-nil. Any non-2xx status +// code is an error. Response headers are in either +// *Policy.ServerResponse.Header or (if a response was returned at all) +// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to +// check whether the returned error was because http.StatusNotModified +// was returned. +func (c *ProjectsLocationsVmwareAdminClustersSetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Policy{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets the access control policy on the specified resource. Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareAdminClusters/{vmwareAdminClustersId}:setIamPolicy", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.vmwareAdminClusters.setIamPolicy", + // "parameterOrder": [ + // "resource" + // ], + // "parameters": { + // "resource": { + // "description": "REQUIRED: The resource for which the policy is being specified. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareAdminClusters/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+resource}:setIamPolicy", + // "request": { + // "$ref": "SetIamPolicyRequest" + // }, + // "response": { + // "$ref": "Policy" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareAdminClusters.testIamPermissions": + +type ProjectsLocationsVmwareAdminClustersTestIamPermissionsCall struct { + s *Service + resource string + testiampermissionsrequest *TestIamPermissionsRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// TestIamPermissions: Returns permissions that a caller has on the +// specified resource. If the resource does not exist, this will return +// an empty set of permissions, not a `NOT_FOUND` error. Note: This +// operation is designed to be used for building permission-aware UIs +// and command-line tools, not for authorization checking. This +// operation may "fail open" without warning. +// +// - resource: REQUIRED: The resource for which the policy detail is +// being requested. See Resource names +// (https://cloud.google.com/apis/design/resource_names) for the +// appropriate value for this field. +func (r *ProjectsLocationsVmwareAdminClustersService) TestIamPermissions(resource string, testiampermissionsrequest *TestIamPermissionsRequest) *ProjectsLocationsVmwareAdminClustersTestIamPermissionsCall { + c := &ProjectsLocationsVmwareAdminClustersTestIamPermissionsCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.resource = resource + c.testiampermissionsrequest = testiampermissionsrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareAdminClustersTestIamPermissionsCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareAdminClustersTestIamPermissionsCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareAdminClustersTestIamPermissionsCall) Context(ctx context.Context) *ProjectsLocationsVmwareAdminClustersTestIamPermissionsCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareAdminClustersTestIamPermissionsCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareAdminClustersTestIamPermissionsCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.testiampermissionsrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:testIamPermissions") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "resource": c.resource, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareAdminClusters.testIamPermissions" call. +// Exactly one of *TestIamPermissionsResponse or error will be non-nil. +// Any non-2xx status code is an error. Response headers are in either +// *TestIamPermissionsResponse.ServerResponse.Header or (if a response +// was returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareAdminClustersTestIamPermissionsCall) Do(opts ...googleapi.CallOption) (*TestIamPermissionsResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &TestIamPermissionsResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not for authorization checking. This operation may \"fail open\" without warning.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareAdminClusters/{vmwareAdminClustersId}:testIamPermissions", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.vmwareAdminClusters.testIamPermissions", + // "parameterOrder": [ + // "resource" + // ], + // "parameters": { + // "resource": { + // "description": "REQUIRED: The resource for which the policy detail is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareAdminClusters/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+resource}:testIamPermissions", + // "request": { + // "$ref": "TestIamPermissionsRequest" + // }, + // "response": { + // "$ref": "TestIamPermissionsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareAdminClusters.unenroll": + +type ProjectsLocationsVmwareAdminClustersUnenrollCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Unenroll: Unenrolls an existing VMware admin cluster from the Anthos +// On-Prem API within a given project and location. Unenrollment removes +// the Cloud reference to the cluster without modifying the underlying +// OnPrem Resources. Clusters will continue to run; however, they will +// no longer be accessible through the Anthos On-Prem API or its +// clients. +// +// - name: Name of the VMware admin cluster to be unenrolled. Format: +// "projects/{project}/locations/{location}/vmwareAdminClusters/{cluste +// r}". +func (r *ProjectsLocationsVmwareAdminClustersService) Unenroll(name string) *ProjectsLocationsVmwareAdminClustersUnenrollCall { + c := &ProjectsLocationsVmwareAdminClustersUnenrollCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// AllowMissing sets the optional parameter "allowMissing": If set to +// true, and the VMware admin cluster is not found, the request will +// succeed but no action will be taken on the server and return a +// completed LRO. +func (c *ProjectsLocationsVmwareAdminClustersUnenrollCall) AllowMissing(allowMissing bool) *ProjectsLocationsVmwareAdminClustersUnenrollCall { + c.urlParams_.Set("allowMissing", fmt.Sprint(allowMissing)) + return c +} + +// Etag sets the optional parameter "etag": The current etag of the +// VMware admin cluster. If an etag is provided and does not match the +// current etag of the cluster, deletion will be blocked and an ABORTED +// error will be returned. +func (c *ProjectsLocationsVmwareAdminClustersUnenrollCall) Etag(etag string) *ProjectsLocationsVmwareAdminClustersUnenrollCall { + c.urlParams_.Set("etag", etag) + return c +} + +// ValidateOnly sets the optional parameter "validateOnly": Validate the +// request without actually doing any updates. +func (c *ProjectsLocationsVmwareAdminClustersUnenrollCall) ValidateOnly(validateOnly bool) *ProjectsLocationsVmwareAdminClustersUnenrollCall { + c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareAdminClustersUnenrollCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareAdminClustersUnenrollCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareAdminClustersUnenrollCall) Context(ctx context.Context) *ProjectsLocationsVmwareAdminClustersUnenrollCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareAdminClustersUnenrollCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareAdminClustersUnenrollCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:unenroll") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("DELETE", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareAdminClusters.unenroll" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareAdminClustersUnenrollCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Unenrolls an existing VMware admin cluster from the Anthos On-Prem API within a given project and location. Unenrollment removes the Cloud reference to the cluster without modifying the underlying OnPrem Resources. Clusters will continue to run; however, they will no longer be accessible through the Anthos On-Prem API or its clients.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareAdminClusters/{vmwareAdminClustersId}:unenroll", + // "httpMethod": "DELETE", + // "id": "gkeonprem.projects.locations.vmwareAdminClusters.unenroll", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "allowMissing": { + // "description": "If set to true, and the VMware admin cluster is not found, the request will succeed but no action will be taken on the server and return a completed LRO.", + // "location": "query", + // "type": "boolean" + // }, + // "etag": { + // "description": "The current etag of the VMware admin cluster. If an etag is provided and does not match the current etag of the cluster, deletion will be blocked and an ABORTED error will be returned.", + // "location": "query", + // "type": "string" + // }, + // "name": { + // "description": "Required. Name of the VMware admin cluster to be unenrolled. Format: \"projects/{project}/locations/{location}/vmwareAdminClusters/{cluster}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareAdminClusters/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "validateOnly": { + // "description": "Validate the request without actually doing any updates.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "v1/{+name}:unenroll", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareAdminClusters.operations.get": + +type ProjectsLocationsVmwareAdminClustersOperationsGetCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// Get: Gets the latest state of a long-running operation. Clients can +// use this method to poll the operation result at intervals as +// recommended by the API service. +// +// - name: The name of the operation resource. +func (r *ProjectsLocationsVmwareAdminClustersOperationsService) Get(name string) *ProjectsLocationsVmwareAdminClustersOperationsGetCall { + c := &ProjectsLocationsVmwareAdminClustersOperationsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareAdminClustersOperationsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareAdminClustersOperationsGetCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsVmwareAdminClustersOperationsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsVmwareAdminClustersOperationsGetCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareAdminClustersOperationsGetCall) Context(ctx context.Context) *ProjectsLocationsVmwareAdminClustersOperationsGetCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareAdminClustersOperationsGetCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareAdminClustersOperationsGetCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareAdminClusters.operations.get" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareAdminClustersOperationsGetCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareAdminClusters/{vmwareAdminClustersId}/operations/{operationsId}", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.vmwareAdminClusters.operations.get", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "The name of the operation resource.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareAdminClusters/[^/]+/operations/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareAdminClusters.operations.list": + +type ProjectsLocationsVmwareAdminClustersOperationsListCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// List: Lists operations that match the specified filter in the +// request. If the server doesn't support this method, it returns +// `UNIMPLEMENTED`. +// +// - name: The name of the operation's parent resource. +func (r *ProjectsLocationsVmwareAdminClustersOperationsService) List(name string) *ProjectsLocationsVmwareAdminClustersOperationsListCall { + c := &ProjectsLocationsVmwareAdminClustersOperationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Filter sets the optional parameter "filter": The standard list +// filter. +func (c *ProjectsLocationsVmwareAdminClustersOperationsListCall) Filter(filter string) *ProjectsLocationsVmwareAdminClustersOperationsListCall { + c.urlParams_.Set("filter", filter) + return c +} + +// PageSize sets the optional parameter "pageSize": The standard list +// page size. +func (c *ProjectsLocationsVmwareAdminClustersOperationsListCall) PageSize(pageSize int64) *ProjectsLocationsVmwareAdminClustersOperationsListCall { + c.urlParams_.Set("pageSize", fmt.Sprint(pageSize)) + return c +} + +// PageToken sets the optional parameter "pageToken": The standard list +// page token. +func (c *ProjectsLocationsVmwareAdminClustersOperationsListCall) PageToken(pageToken string) *ProjectsLocationsVmwareAdminClustersOperationsListCall { + c.urlParams_.Set("pageToken", pageToken) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareAdminClustersOperationsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareAdminClustersOperationsListCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsVmwareAdminClustersOperationsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsVmwareAdminClustersOperationsListCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareAdminClustersOperationsListCall) Context(ctx context.Context) *ProjectsLocationsVmwareAdminClustersOperationsListCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareAdminClustersOperationsListCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareAdminClustersOperationsListCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}/operations") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareAdminClusters.operations.list" call. +// Exactly one of *ListOperationsResponse or error will be non-nil. Any +// non-2xx status code is an error. Response headers are in either +// *ListOperationsResponse.ServerResponse.Header or (if a response was +// returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareAdminClustersOperationsListCall) Do(opts ...googleapi.CallOption) (*ListOperationsResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &ListOperationsResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareAdminClusters/{vmwareAdminClustersId}/operations", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.vmwareAdminClusters.operations.list", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "filter": { + // "description": "The standard list filter.", + // "location": "query", + // "type": "string" + // }, + // "name": { + // "description": "The name of the operation's parent resource.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareAdminClusters/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "pageSize": { + // "description": "The standard list page size.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The standard list page token.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+name}/operations", + // "response": { + // "$ref": "ListOperationsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// Pages invokes f for each page of results. +// A non-nil error returned from f will halt the iteration. +// The provided context supersedes any context provided to the Context method. +func (c *ProjectsLocationsVmwareAdminClustersOperationsListCall) Pages(ctx context.Context, f func(*ListOperationsResponse) error) error { + c.ctx_ = ctx + defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point + for { + x, err := c.Do() + if err != nil { + return err + } + if err := f(x); err != nil { + return err + } + if x.NextPageToken == "" { + return nil + } + c.PageToken(x.NextPageToken) + } +} + +// method id "gkeonprem.projects.locations.vmwareClusters.create": + +type ProjectsLocationsVmwareClustersCreateCall struct { + s *Service + parent string + vmwarecluster *VmwareCluster + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Create: Creates a new VMware user cluster in a given project and +// location. +// +// - parent: The parent of the project and location where this cluster +// is created in. Format: "projects/{project}/locations/{location}". +func (r *ProjectsLocationsVmwareClustersService) Create(parent string, vmwarecluster *VmwareCluster) *ProjectsLocationsVmwareClustersCreateCall { + c := &ProjectsLocationsVmwareClustersCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.parent = parent + c.vmwarecluster = vmwarecluster + return c +} + +// ValidateOnly sets the optional parameter "validateOnly": Validate the +// request without actually doing any updates. +func (c *ProjectsLocationsVmwareClustersCreateCall) ValidateOnly(validateOnly bool) *ProjectsLocationsVmwareClustersCreateCall { + c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly)) + return c +} + +// VmwareClusterId sets the optional parameter "vmwareClusterId": User +// provided identifier that is used as part of the resource name; This +// value must be up to 40 characters and follow RFC-1123 +// (https://tools.ietf.org/html/rfc1123) format. +func (c *ProjectsLocationsVmwareClustersCreateCall) VmwareClusterId(vmwareClusterId string) *ProjectsLocationsVmwareClustersCreateCall { + c.urlParams_.Set("vmwareClusterId", vmwareClusterId) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersCreateCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersCreateCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersCreateCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersCreateCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersCreateCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersCreateCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.vmwarecluster) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/vmwareClusters") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "parent": c.parent, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.create" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareClustersCreateCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new VMware user cluster in a given project and location.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.vmwareClusters.create", + // "parameterOrder": [ + // "parent" + // ], + // "parameters": { + // "parent": { + // "description": "Required. The parent of the project and location where this cluster is created in. Format: \"projects/{project}/locations/{location}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "validateOnly": { + // "description": "Validate the request without actually doing any updates.", + // "location": "query", + // "type": "boolean" + // }, + // "vmwareClusterId": { + // "description": "User provided identifier that is used as part of the resource name; This value must be up to 40 characters and follow RFC-1123 (https://tools.ietf.org/html/rfc1123) format.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+parent}/vmwareClusters", + // "request": { + // "$ref": "VmwareCluster" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareClusters.delete": + +type ProjectsLocationsVmwareClustersDeleteCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Delete: Deletes a single VMware Cluster. +// +// - name: Name of the VMware user cluster to be deleted. Format: +// "projects/{project}/locations/{location}/vmwareClusters/{vmware_clus +// ter}". +func (r *ProjectsLocationsVmwareClustersService) Delete(name string) *ProjectsLocationsVmwareClustersDeleteCall { + c := &ProjectsLocationsVmwareClustersDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// AllowMissing sets the optional parameter "allowMissing": If set to +// true, and the VMware cluster is not found, the request will succeed +// but no action will be taken on the server and return a completed LRO. +func (c *ProjectsLocationsVmwareClustersDeleteCall) AllowMissing(allowMissing bool) *ProjectsLocationsVmwareClustersDeleteCall { + c.urlParams_.Set("allowMissing", fmt.Sprint(allowMissing)) + return c +} + +// Etag sets the optional parameter "etag": The current etag of the +// VMware cluster. If an etag is provided and does not match the current +// etag of the cluster, deletion will be blocked and an ABORTED error +// will be returned. +func (c *ProjectsLocationsVmwareClustersDeleteCall) Etag(etag string) *ProjectsLocationsVmwareClustersDeleteCall { + c.urlParams_.Set("etag", etag) + return c +} + +// Force sets the optional parameter "force": If set to true, any node +// pools from the cluster will also be deleted. +func (c *ProjectsLocationsVmwareClustersDeleteCall) Force(force bool) *ProjectsLocationsVmwareClustersDeleteCall { + c.urlParams_.Set("force", fmt.Sprint(force)) + return c +} + +// IgnoreErrors sets the optional parameter "ignoreErrors": If set to +// true, the deletion of a VMware user cluster resource will succeed +// even if errors occur during deletion. This parameter can be used when +// you want to delete GCP's cluster resource and the on-prem admin +// cluster that hosts your user cluster is disconnected / unreachable or +// deleted. WARNING: Using this parameter when your user cluster still +// exists may result in a deleted GCP user cluster but an existing +// on-prem user cluster. +func (c *ProjectsLocationsVmwareClustersDeleteCall) IgnoreErrors(ignoreErrors bool) *ProjectsLocationsVmwareClustersDeleteCall { + c.urlParams_.Set("ignoreErrors", fmt.Sprint(ignoreErrors)) + return c +} + +// ValidateOnly sets the optional parameter "validateOnly": Validate the +// request without actually doing any updates. +func (c *ProjectsLocationsVmwareClustersDeleteCall) ValidateOnly(validateOnly bool) *ProjectsLocationsVmwareClustersDeleteCall { + c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersDeleteCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersDeleteCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersDeleteCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersDeleteCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersDeleteCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersDeleteCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("DELETE", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.delete" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareClustersDeleteCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes a single VMware Cluster.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}", + // "httpMethod": "DELETE", + // "id": "gkeonprem.projects.locations.vmwareClusters.delete", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "allowMissing": { + // "description": "If set to true, and the VMware cluster is not found, the request will succeed but no action will be taken on the server and return a completed LRO.", + // "location": "query", + // "type": "boolean" + // }, + // "etag": { + // "description": "The current etag of the VMware cluster. If an etag is provided and does not match the current etag of the cluster, deletion will be blocked and an ABORTED error will be returned.", + // "location": "query", + // "type": "string" + // }, + // "force": { + // "description": "If set to true, any node pools from the cluster will also be deleted.", + // "location": "query", + // "type": "boolean" + // }, + // "ignoreErrors": { + // "description": "If set to true, the deletion of a VMware user cluster resource will succeed even if errors occur during deletion. This parameter can be used when you want to delete GCP's cluster resource and the on-prem admin cluster that hosts your user cluster is disconnected / unreachable or deleted. WARNING: Using this parameter when your user cluster still exists may result in a deleted GCP user cluster but an existing on-prem user cluster.", + // "location": "query", + // "type": "boolean" + // }, + // "name": { + // "description": "Required. Name of the VMware user cluster to be deleted. Format: \"projects/{project}/locations/{location}/vmwareClusters/{vmware_cluster}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "validateOnly": { + // "description": "Validate the request without actually doing any updates.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareClusters.enroll": + +type ProjectsLocationsVmwareClustersEnrollCall struct { + s *Service + parent string + enrollvmwareclusterrequest *EnrollVmwareClusterRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Enroll: Enrolls an existing VMware user cluster and its node pools to +// the Anthos On-Prem API within a given project and location. Through +// enrollment, an existing cluster will become Anthos On-Prem API +// managed. The corresponding GCP resources will be created and all +// future modifications to the cluster and/or its node pools will be +// expected to be performed through the API. +// +// - parent: The parent of the project and location where the cluster is +// Enrolled in. Format: "projects/{project}/locations/{location}". +func (r *ProjectsLocationsVmwareClustersService) Enroll(parent string, enrollvmwareclusterrequest *EnrollVmwareClusterRequest) *ProjectsLocationsVmwareClustersEnrollCall { + c := &ProjectsLocationsVmwareClustersEnrollCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.parent = parent + c.enrollvmwareclusterrequest = enrollvmwareclusterrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersEnrollCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersEnrollCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersEnrollCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersEnrollCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersEnrollCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersEnrollCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.enrollvmwareclusterrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/vmwareClusters:enroll") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "parent": c.parent, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.enroll" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareClustersEnrollCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Enrolls an existing VMware user cluster and its node pools to the Anthos On-Prem API within a given project and location. Through enrollment, an existing cluster will become Anthos On-Prem API managed. The corresponding GCP resources will be created and all future modifications to the cluster and/or its node pools will be expected to be performed through the API.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters:enroll", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.vmwareClusters.enroll", + // "parameterOrder": [ + // "parent" + // ], + // "parameters": { + // "parent": { + // "description": "Required. The parent of the project and location where the cluster is Enrolled in. Format: \"projects/{project}/locations/{location}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+parent}/vmwareClusters:enroll", + // "request": { + // "$ref": "EnrollVmwareClusterRequest" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareClusters.get": + +type ProjectsLocationsVmwareClustersGetCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// Get: Gets details of a single VMware Cluster. +// +// - name: Name of the VMware user cluster to be returned. Format: +// "projects/{project}/locations/{location}/vmwareClusters/{vmware_clus +// ter}". +func (r *ProjectsLocationsVmwareClustersService) Get(name string) *ProjectsLocationsVmwareClustersGetCall { + c := &ProjectsLocationsVmwareClustersGetCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// View sets the optional parameter "view": View for VMware user +// cluster. When `BASIC` is specified, only the cluster resource name +// and admin cluster membership are returned. The default/unset value +// `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the +// complete cluster configuration details. +// +// Possible values: +// +// "CLUSTER_VIEW_UNSPECIFIED" - If the value is not set, the default +// +// `FULL` view is used. +// +// "BASIC" - Includes basic information of a cluster resource +// +// including cluster resource name and admin cluster membership. +// +// "FULL" - Includes the complete configuration for VMware cluster +// +// resource. This is the default value for GetVmwareClusterRequest +// method. +func (c *ProjectsLocationsVmwareClustersGetCall) View(view string) *ProjectsLocationsVmwareClustersGetCall { + c.urlParams_.Set("view", view) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersGetCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsVmwareClustersGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsVmwareClustersGetCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersGetCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersGetCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersGetCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersGetCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.get" call. +// Exactly one of *VmwareCluster or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *VmwareCluster.ServerResponse.Header or (if a response was returned +// at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareClustersGetCall) Do(opts ...googleapi.CallOption) (*VmwareCluster, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &VmwareCluster{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets details of a single VMware Cluster.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.vmwareClusters.get", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "Required. Name of the VMware user cluster to be returned. Format: \"projects/{project}/locations/{location}/vmwareClusters/{vmware_cluster}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "view": { + // "description": "View for VMware user cluster. When `BASIC` is specified, only the cluster resource name and admin cluster membership are returned. The default/unset value `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete cluster configuration details.", + // "enum": [ + // "CLUSTER_VIEW_UNSPECIFIED", + // "BASIC", + // "FULL" + // ], + // "enumDescriptions": [ + // "If the value is not set, the default `FULL` view is used.", + // "Includes basic information of a cluster resource including cluster resource name and admin cluster membership.", + // "Includes the complete configuration for VMware cluster resource. This is the default value for GetVmwareClusterRequest method." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "VmwareCluster" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareClusters.getIamPolicy": + +type ProjectsLocationsVmwareClustersGetIamPolicyCall struct { + s *Service + resource string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// GetIamPolicy: Gets the access control policy for a resource. Returns +// an empty policy if the resource exists and does not have a policy +// set. +// +// - resource: REQUIRED: The resource for which the policy is being +// requested. See Resource names +// (https://cloud.google.com/apis/design/resource_names) for the +// appropriate value for this field. +func (r *ProjectsLocationsVmwareClustersService) GetIamPolicy(resource string) *ProjectsLocationsVmwareClustersGetIamPolicyCall { + c := &ProjectsLocationsVmwareClustersGetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.resource = resource + return c +} + +// OptionsRequestedPolicyVersion sets the optional parameter +// "options.requestedPolicyVersion": The maximum policy version that +// will be used to format the policy. Valid values are 0, 1, and 3. +// Requests specifying an invalid value will be rejected. Requests for +// policies with any conditional role bindings must specify version 3. +// Policies with no conditional role bindings may specify any valid +// value or leave the field unset. The policy in the response might use +// the policy version that you specified, or it might use a lower policy +// version. For example, if you specify version 3, but the policy has no +// conditional role bindings, the response uses version 1. To learn +// which resources support conditions in their IAM policies, see the IAM +// documentation +// (https://cloud.google.com/iam/help/conditions/resource-policies). +func (c *ProjectsLocationsVmwareClustersGetIamPolicyCall) OptionsRequestedPolicyVersion(optionsRequestedPolicyVersion int64) *ProjectsLocationsVmwareClustersGetIamPolicyCall { + c.urlParams_.Set("options.requestedPolicyVersion", fmt.Sprint(optionsRequestedPolicyVersion)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersGetIamPolicyCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersGetIamPolicyCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsVmwareClustersGetIamPolicyCall) IfNoneMatch(entityTag string) *ProjectsLocationsVmwareClustersGetIamPolicyCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersGetIamPolicyCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersGetIamPolicyCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersGetIamPolicyCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersGetIamPolicyCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:getIamPolicy") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "resource": c.resource, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.getIamPolicy" call. +// Exactly one of *Policy or error will be non-nil. Any non-2xx status +// code is an error. Response headers are in either +// *Policy.ServerResponse.Header or (if a response was returned at all) +// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to +// check whether the returned error was because http.StatusNotModified +// was returned. +func (c *ProjectsLocationsVmwareClustersGetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Policy{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}:getIamPolicy", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.vmwareClusters.getIamPolicy", + // "parameterOrder": [ + // "resource" + // ], + // "parameters": { + // "options.requestedPolicyVersion": { + // "description": "Optional. The maximum policy version that will be used to format the policy. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional role bindings must specify version 3. Policies with no conditional role bindings may specify any valid value or leave the field unset. The policy in the response might use the policy version that you specified, or it might use a lower policy version. For example, if you specify version 3, but the policy has no conditional role bindings, the response uses version 1. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "resource": { + // "description": "REQUIRED: The resource for which the policy is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+resource}:getIamPolicy", + // "response": { + // "$ref": "Policy" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareClusters.list": + +type ProjectsLocationsVmwareClustersListCall struct { + s *Service + parent string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// List: Lists VMware Clusters in a given project and location. +// +// - parent: The parent of the project and location where the clusters +// are listed in. Format: "projects/{project}/locations/{location}". +func (r *ProjectsLocationsVmwareClustersService) List(parent string) *ProjectsLocationsVmwareClustersListCall { + c := &ProjectsLocationsVmwareClustersListCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.parent = parent + return c +} + +// Filter sets the optional parameter "filter": A resource filtering +// expression following https://google.aip.dev/160. When non-empty, only +// resource's whose attributes field matches the filter are returned. +func (c *ProjectsLocationsVmwareClustersListCall) Filter(filter string) *ProjectsLocationsVmwareClustersListCall { + c.urlParams_.Set("filter", filter) + return c +} + +// PageSize sets the optional parameter "pageSize": Requested page size. +// Server may return fewer items than requested. If unspecified, at most +// 50 clusters will be returned. The maximum value is 1000; values above +// 1000 will be coerced to 1000. +func (c *ProjectsLocationsVmwareClustersListCall) PageSize(pageSize int64) *ProjectsLocationsVmwareClustersListCall { + c.urlParams_.Set("pageSize", fmt.Sprint(pageSize)) + return c +} + +// PageToken sets the optional parameter "pageToken": A token +// identifying a page of results the server should return. +func (c *ProjectsLocationsVmwareClustersListCall) PageToken(pageToken string) *ProjectsLocationsVmwareClustersListCall { + c.urlParams_.Set("pageToken", pageToken) + return c +} + +// View sets the optional parameter "view": View for VMware clusters. +// When `BASIC` is specified, only the cluster resource name and admin +// cluster membership are returned. The default/unset value +// `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the +// complete cluster configuration details. +// +// Possible values: +// +// "CLUSTER_VIEW_UNSPECIFIED" - If the value is not set, the default +// +// `FULL` view is used. +// +// "BASIC" - Includes basic information of a cluster resource +// +// including cluster resource name and admin cluster membership. +// +// "FULL" - Includes the complete configuration for VMware cluster +// +// resource. This is the default value for ListVmwareClustersRequest +// method. +func (c *ProjectsLocationsVmwareClustersListCall) View(view string) *ProjectsLocationsVmwareClustersListCall { + c.urlParams_.Set("view", view) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersListCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersListCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsVmwareClustersListCall) IfNoneMatch(entityTag string) *ProjectsLocationsVmwareClustersListCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersListCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersListCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersListCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersListCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/vmwareClusters") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "parent": c.parent, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.list" call. +// Exactly one of *ListVmwareClustersResponse or error will be non-nil. +// Any non-2xx status code is an error. Response headers are in either +// *ListVmwareClustersResponse.ServerResponse.Header or (if a response +// was returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareClustersListCall) Do(opts ...googleapi.CallOption) (*ListVmwareClustersResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &ListVmwareClustersResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists VMware Clusters in a given project and location.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.vmwareClusters.list", + // "parameterOrder": [ + // "parent" + // ], + // "parameters": { + // "filter": { + // "description": "A resource filtering expression following https://google.aip.dev/160. When non-empty, only resource's whose attributes field matches the filter are returned.", + // "location": "query", + // "type": "string" + // }, + // "pageSize": { + // "description": "Requested page size. Server may return fewer items than requested. If unspecified, at most 50 clusters will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A token identifying a page of results the server should return.", + // "location": "query", + // "type": "string" + // }, + // "parent": { + // "description": "Required. The parent of the project and location where the clusters are listed in. Format: \"projects/{project}/locations/{location}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "view": { + // "description": "View for VMware clusters. When `BASIC` is specified, only the cluster resource name and admin cluster membership are returned. The default/unset value `CLUSTER_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete cluster configuration details.", + // "enum": [ + // "CLUSTER_VIEW_UNSPECIFIED", + // "BASIC", + // "FULL" + // ], + // "enumDescriptions": [ + // "If the value is not set, the default `FULL` view is used.", + // "Includes basic information of a cluster resource including cluster resource name and admin cluster membership.", + // "Includes the complete configuration for VMware cluster resource. This is the default value for ListVmwareClustersRequest method." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+parent}/vmwareClusters", + // "response": { + // "$ref": "ListVmwareClustersResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// Pages invokes f for each page of results. +// A non-nil error returned from f will halt the iteration. +// The provided context supersedes any context provided to the Context method. +func (c *ProjectsLocationsVmwareClustersListCall) Pages(ctx context.Context, f func(*ListVmwareClustersResponse) error) error { + c.ctx_ = ctx + defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point + for { + x, err := c.Do() + if err != nil { + return err + } + if err := f(x); err != nil { + return err + } + if x.NextPageToken == "" { + return nil + } + c.PageToken(x.NextPageToken) + } +} + +// method id "gkeonprem.projects.locations.vmwareClusters.patch": + +type ProjectsLocationsVmwareClustersPatchCall struct { + s *Service + name string + vmwarecluster *VmwareCluster + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Patch: Updates the parameters of a single VMware cluster. +// +// - name: Immutable. The VMware user cluster resource name. +func (r *ProjectsLocationsVmwareClustersService) Patch(name string, vmwarecluster *VmwareCluster) *ProjectsLocationsVmwareClustersPatchCall { + c := &ProjectsLocationsVmwareClustersPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + c.vmwarecluster = vmwarecluster + return c +} + +// UpdateMask sets the optional parameter "updateMask": Required. Field +// mask is used to specify the fields to be overwritten in the +// VMwareCluster resource by the update. The fields specified in the +// update_mask are relative to the resource, not the full request. A +// field will be overwritten if it is in the mask. If the user does not +// provide a mask then all populated fields in the VmwareCluster message +// will be updated. Empty fields will be ignored unless a field mask is +// used. +func (c *ProjectsLocationsVmwareClustersPatchCall) UpdateMask(updateMask string) *ProjectsLocationsVmwareClustersPatchCall { + c.urlParams_.Set("updateMask", updateMask) + return c +} + +// ValidateOnly sets the optional parameter "validateOnly": Validate the +// request without actually doing any updates. +func (c *ProjectsLocationsVmwareClustersPatchCall) ValidateOnly(validateOnly bool) *ProjectsLocationsVmwareClustersPatchCall { + c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersPatchCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersPatchCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersPatchCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersPatchCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersPatchCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersPatchCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.vmwarecluster) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("PATCH", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.patch" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareClustersPatchCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the parameters of a single VMware cluster.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}", + // "httpMethod": "PATCH", + // "id": "gkeonprem.projects.locations.vmwareClusters.patch", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "Immutable. The VMware user cluster resource name.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "updateMask": { + // "description": "Required. Field mask is used to specify the fields to be overwritten in the VMwareCluster resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all populated fields in the VmwareCluster message will be updated. Empty fields will be ignored unless a field mask is used.", + // "format": "google-fieldmask", + // "location": "query", + // "type": "string" + // }, + // "validateOnly": { + // "description": "Validate the request without actually doing any updates.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "v1/{+name}", + // "request": { + // "$ref": "VmwareCluster" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareClusters.queryVersionConfig": + +type ProjectsLocationsVmwareClustersQueryVersionConfigCall struct { + s *Service + parent string + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// QueryVersionConfig: Queries the VMware user cluster version config. +// +// - parent: The parent of the project and location to query for version +// config. Format: "projects/{project}/locations/{location}". +func (r *ProjectsLocationsVmwareClustersService) QueryVersionConfig(parent string) *ProjectsLocationsVmwareClustersQueryVersionConfigCall { + c := &ProjectsLocationsVmwareClustersQueryVersionConfigCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.parent = parent + return c +} + +// CreateConfigAdminClusterMembership sets the optional parameter +// "createConfig.adminClusterMembership": The admin cluster membership. +// This is the full resource name of the admin cluster's fleet +// membership. Format: +// "projects/{project}/locations/{location}/memberships/{membership}" +func (c *ProjectsLocationsVmwareClustersQueryVersionConfigCall) CreateConfigAdminClusterMembership(createConfigAdminClusterMembership string) *ProjectsLocationsVmwareClustersQueryVersionConfigCall { + c.urlParams_.Set("createConfig.adminClusterMembership", createConfigAdminClusterMembership) + return c +} + +// CreateConfigAdminClusterName sets the optional parameter +// "createConfig.adminClusterName": The admin cluster resource name. +// This is the full resource name of the admin cluster resource. Format: +// "projects/{project}/locations/{location}/vmwareAdminClusters/{vmware_a +// dmin_cluster}" +func (c *ProjectsLocationsVmwareClustersQueryVersionConfigCall) CreateConfigAdminClusterName(createConfigAdminClusterName string) *ProjectsLocationsVmwareClustersQueryVersionConfigCall { + c.urlParams_.Set("createConfig.adminClusterName", createConfigAdminClusterName) + return c +} + +// UpgradeConfigClusterName sets the optional parameter +// "upgradeConfig.clusterName": The user cluster resource name. This is +// the full resource name of the user cluster resource. Format: +// "projects/{project}/locations/{location}/vmwareClusters/{vmware_cluste +// r}" +func (c *ProjectsLocationsVmwareClustersQueryVersionConfigCall) UpgradeConfigClusterName(upgradeConfigClusterName string) *ProjectsLocationsVmwareClustersQueryVersionConfigCall { + c.urlParams_.Set("upgradeConfig.clusterName", upgradeConfigClusterName) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersQueryVersionConfigCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersQueryVersionConfigCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersQueryVersionConfigCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersQueryVersionConfigCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersQueryVersionConfigCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersQueryVersionConfigCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/vmwareClusters:queryVersionConfig") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "parent": c.parent, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.queryVersionConfig" call. +// Exactly one of *QueryVmwareVersionConfigResponse or error will be +// non-nil. Any non-2xx status code is an error. Response headers are in +// either *QueryVmwareVersionConfigResponse.ServerResponse.Header or (if +// a response was returned at all) in error.(*googleapi.Error).Header. +// Use googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareClustersQueryVersionConfigCall) Do(opts ...googleapi.CallOption) (*QueryVmwareVersionConfigResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &QueryVmwareVersionConfigResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Queries the VMware user cluster version config.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters:queryVersionConfig", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.vmwareClusters.queryVersionConfig", + // "parameterOrder": [ + // "parent" + // ], + // "parameters": { + // "createConfig.adminClusterMembership": { + // "description": "The admin cluster membership. This is the full resource name of the admin cluster's fleet membership. Format: \"projects/{project}/locations/{location}/memberships/{membership}\"", + // "location": "query", + // "type": "string" + // }, + // "createConfig.adminClusterName": { + // "description": "The admin cluster resource name. This is the full resource name of the admin cluster resource. Format: \"projects/{project}/locations/{location}/vmwareAdminClusters/{vmware_admin_cluster}\"", + // "location": "query", + // "type": "string" + // }, + // "parent": { + // "description": "Required. The parent of the project and location to query for version config. Format: \"projects/{project}/locations/{location}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "upgradeConfig.clusterName": { + // "description": "The user cluster resource name. This is the full resource name of the user cluster resource. Format: \"projects/{project}/locations/{location}/vmwareClusters/{vmware_cluster}\"", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+parent}/vmwareClusters:queryVersionConfig", + // "response": { + // "$ref": "QueryVmwareVersionConfigResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareClusters.setIamPolicy": + +type ProjectsLocationsVmwareClustersSetIamPolicyCall struct { + s *Service + resource string + setiampolicyrequest *SetIamPolicyRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// SetIamPolicy: Sets the access control policy on the specified +// resource. Replaces any existing policy. Can return `NOT_FOUND`, +// `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors. +// +// - resource: REQUIRED: The resource for which the policy is being +// specified. See Resource names +// (https://cloud.google.com/apis/design/resource_names) for the +// appropriate value for this field. +func (r *ProjectsLocationsVmwareClustersService) SetIamPolicy(resource string, setiampolicyrequest *SetIamPolicyRequest) *ProjectsLocationsVmwareClustersSetIamPolicyCall { + c := &ProjectsLocationsVmwareClustersSetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.resource = resource + c.setiampolicyrequest = setiampolicyrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersSetIamPolicyCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersSetIamPolicyCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersSetIamPolicyCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersSetIamPolicyCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersSetIamPolicyCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersSetIamPolicyCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.setiampolicyrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:setIamPolicy") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "resource": c.resource, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.setIamPolicy" call. +// Exactly one of *Policy or error will be non-nil. Any non-2xx status +// code is an error. Response headers are in either +// *Policy.ServerResponse.Header or (if a response was returned at all) +// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to +// check whether the returned error was because http.StatusNotModified +// was returned. +func (c *ProjectsLocationsVmwareClustersSetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Policy{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets the access control policy on the specified resource. Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}:setIamPolicy", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.vmwareClusters.setIamPolicy", + // "parameterOrder": [ + // "resource" + // ], + // "parameters": { + // "resource": { + // "description": "REQUIRED: The resource for which the policy is being specified. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+resource}:setIamPolicy", + // "request": { + // "$ref": "SetIamPolicyRequest" + // }, + // "response": { + // "$ref": "Policy" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareClusters.testIamPermissions": + +type ProjectsLocationsVmwareClustersTestIamPermissionsCall struct { + s *Service + resource string + testiampermissionsrequest *TestIamPermissionsRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// TestIamPermissions: Returns permissions that a caller has on the +// specified resource. If the resource does not exist, this will return +// an empty set of permissions, not a `NOT_FOUND` error. Note: This +// operation is designed to be used for building permission-aware UIs +// and command-line tools, not for authorization checking. This +// operation may "fail open" without warning. +// +// - resource: REQUIRED: The resource for which the policy detail is +// being requested. See Resource names +// (https://cloud.google.com/apis/design/resource_names) for the +// appropriate value for this field. +func (r *ProjectsLocationsVmwareClustersService) TestIamPermissions(resource string, testiampermissionsrequest *TestIamPermissionsRequest) *ProjectsLocationsVmwareClustersTestIamPermissionsCall { + c := &ProjectsLocationsVmwareClustersTestIamPermissionsCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.resource = resource + c.testiampermissionsrequest = testiampermissionsrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersTestIamPermissionsCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersTestIamPermissionsCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersTestIamPermissionsCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersTestIamPermissionsCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersTestIamPermissionsCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersTestIamPermissionsCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.testiampermissionsrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:testIamPermissions") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "resource": c.resource, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.testIamPermissions" call. +// Exactly one of *TestIamPermissionsResponse or error will be non-nil. +// Any non-2xx status code is an error. Response headers are in either +// *TestIamPermissionsResponse.ServerResponse.Header or (if a response +// was returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareClustersTestIamPermissionsCall) Do(opts ...googleapi.CallOption) (*TestIamPermissionsResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &TestIamPermissionsResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not for authorization checking. This operation may \"fail open\" without warning.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}:testIamPermissions", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.vmwareClusters.testIamPermissions", + // "parameterOrder": [ + // "resource" + // ], + // "parameters": { + // "resource": { + // "description": "REQUIRED: The resource for which the policy detail is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+resource}:testIamPermissions", + // "request": { + // "$ref": "TestIamPermissionsRequest" + // }, + // "response": { + // "$ref": "TestIamPermissionsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareClusters.unenroll": + +type ProjectsLocationsVmwareClustersUnenrollCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Unenroll: Unenrolls an existing VMware user cluster and its node +// pools from the Anthos On-Prem API within a given project and +// location. Unenrollment removes the Cloud reference to the cluster +// without modifying the underlying OnPrem Resources. Clusters and node +// pools will continue to run; however, they will no longer be +// accessible through the Anthos On-Prem API or UI. +// +// - name: Name of the VMware user cluster to be unenrolled. Format: +// "projects/{project}/locations/{location}/vmwareClusters/{vmware_clus +// ter}". +func (r *ProjectsLocationsVmwareClustersService) Unenroll(name string) *ProjectsLocationsVmwareClustersUnenrollCall { + c := &ProjectsLocationsVmwareClustersUnenrollCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// AllowMissing sets the optional parameter "allowMissing": If set to +// true, and the VMware cluster is not found, the request will succeed +// but no action will be taken on the server and return a completed LRO. +func (c *ProjectsLocationsVmwareClustersUnenrollCall) AllowMissing(allowMissing bool) *ProjectsLocationsVmwareClustersUnenrollCall { + c.urlParams_.Set("allowMissing", fmt.Sprint(allowMissing)) + return c +} + +// Etag sets the optional parameter "etag": The current etag of the +// VMware Cluster. If an etag is provided and does not match the current +// etag of the cluster, deletion will be blocked and an ABORTED error +// will be returned. +func (c *ProjectsLocationsVmwareClustersUnenrollCall) Etag(etag string) *ProjectsLocationsVmwareClustersUnenrollCall { + c.urlParams_.Set("etag", etag) + return c +} + +// Force sets the optional parameter "force": This is required if the +// cluster has any associated node pools. When set, any child node pools +// will also be unenrolled. +func (c *ProjectsLocationsVmwareClustersUnenrollCall) Force(force bool) *ProjectsLocationsVmwareClustersUnenrollCall { + c.urlParams_.Set("force", fmt.Sprint(force)) + return c +} + +// ValidateOnly sets the optional parameter "validateOnly": Validate the +// request without actually doing any updates. +func (c *ProjectsLocationsVmwareClustersUnenrollCall) ValidateOnly(validateOnly bool) *ProjectsLocationsVmwareClustersUnenrollCall { + c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersUnenrollCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersUnenrollCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersUnenrollCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersUnenrollCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersUnenrollCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersUnenrollCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:unenroll") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("DELETE", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.unenroll" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareClustersUnenrollCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Unenrolls an existing VMware user cluster and its node pools from the Anthos On-Prem API within a given project and location. Unenrollment removes the Cloud reference to the cluster without modifying the underlying OnPrem Resources. Clusters and node pools will continue to run; however, they will no longer be accessible through the Anthos On-Prem API or UI.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}:unenroll", + // "httpMethod": "DELETE", + // "id": "gkeonprem.projects.locations.vmwareClusters.unenroll", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "allowMissing": { + // "description": "If set to true, and the VMware cluster is not found, the request will succeed but no action will be taken on the server and return a completed LRO.", + // "location": "query", + // "type": "boolean" + // }, + // "etag": { + // "description": "The current etag of the VMware Cluster. If an etag is provided and does not match the current etag of the cluster, deletion will be blocked and an ABORTED error will be returned.", + // "location": "query", + // "type": "string" + // }, + // "force": { + // "description": "This is required if the cluster has any associated node pools. When set, any child node pools will also be unenrolled.", + // "location": "query", + // "type": "boolean" + // }, + // "name": { + // "description": "Required. Name of the VMware user cluster to be unenrolled. Format: \"projects/{project}/locations/{location}/vmwareClusters/{vmware_cluster}\"", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "validateOnly": { + // "description": "Validate the request without actually doing any updates.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "v1/{+name}:unenroll", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareClusters.operations.get": + +type ProjectsLocationsVmwareClustersOperationsGetCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// Get: Gets the latest state of a long-running operation. Clients can +// use this method to poll the operation result at intervals as +// recommended by the API service. +// +// - name: The name of the operation resource. +func (r *ProjectsLocationsVmwareClustersOperationsService) Get(name string) *ProjectsLocationsVmwareClustersOperationsGetCall { + c := &ProjectsLocationsVmwareClustersOperationsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersOperationsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersOperationsGetCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsVmwareClustersOperationsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsVmwareClustersOperationsGetCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersOperationsGetCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersOperationsGetCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersOperationsGetCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersOperationsGetCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.operations.get" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareClustersOperationsGetCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/operations/{operationsId}", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.vmwareClusters.operations.get", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "The name of the operation resource.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+/operations/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareClusters.operations.list": + +type ProjectsLocationsVmwareClustersOperationsListCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// List: Lists operations that match the specified filter in the +// request. If the server doesn't support this method, it returns +// `UNIMPLEMENTED`. +// +// - name: The name of the operation's parent resource. +func (r *ProjectsLocationsVmwareClustersOperationsService) List(name string) *ProjectsLocationsVmwareClustersOperationsListCall { + c := &ProjectsLocationsVmwareClustersOperationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Filter sets the optional parameter "filter": The standard list +// filter. +func (c *ProjectsLocationsVmwareClustersOperationsListCall) Filter(filter string) *ProjectsLocationsVmwareClustersOperationsListCall { + c.urlParams_.Set("filter", filter) + return c +} + +// PageSize sets the optional parameter "pageSize": The standard list +// page size. +func (c *ProjectsLocationsVmwareClustersOperationsListCall) PageSize(pageSize int64) *ProjectsLocationsVmwareClustersOperationsListCall { + c.urlParams_.Set("pageSize", fmt.Sprint(pageSize)) + return c +} + +// PageToken sets the optional parameter "pageToken": The standard list +// page token. +func (c *ProjectsLocationsVmwareClustersOperationsListCall) PageToken(pageToken string) *ProjectsLocationsVmwareClustersOperationsListCall { + c.urlParams_.Set("pageToken", pageToken) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersOperationsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersOperationsListCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsVmwareClustersOperationsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsVmwareClustersOperationsListCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersOperationsListCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersOperationsListCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersOperationsListCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersOperationsListCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}/operations") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.operations.list" call. +// Exactly one of *ListOperationsResponse or error will be non-nil. Any +// non-2xx status code is an error. Response headers are in either +// *ListOperationsResponse.ServerResponse.Header or (if a response was +// returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareClustersOperationsListCall) Do(opts ...googleapi.CallOption) (*ListOperationsResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &ListOperationsResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/operations", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.vmwareClusters.operations.list", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "filter": { + // "description": "The standard list filter.", + // "location": "query", + // "type": "string" + // }, + // "name": { + // "description": "The name of the operation's parent resource.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "pageSize": { + // "description": "The standard list page size.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The standard list page token.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+name}/operations", + // "response": { + // "$ref": "ListOperationsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// Pages invokes f for each page of results. +// A non-nil error returned from f will halt the iteration. +// The provided context supersedes any context provided to the Context method. +func (c *ProjectsLocationsVmwareClustersOperationsListCall) Pages(ctx context.Context, f func(*ListOperationsResponse) error) error { + c.ctx_ = ctx + defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point + for { + x, err := c.Do() + if err != nil { + return err + } + if err := f(x); err != nil { + return err + } + if x.NextPageToken == "" { + return nil + } + c.PageToken(x.NextPageToken) + } +} + +// method id "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.create": + +type ProjectsLocationsVmwareClustersVmwareNodePoolsCreateCall struct { + s *Service + parent string + vmwarenodepool *VmwareNodePool + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Create: Creates a new VMware node pool in a given project, location +// and VMWare cluster. +// +// - parent: The parent resource where this node pool will be created. +// projects/{project}/locations/{location}/vmwareClusters/{cluster}. +func (r *ProjectsLocationsVmwareClustersVmwareNodePoolsService) Create(parent string, vmwarenodepool *VmwareNodePool) *ProjectsLocationsVmwareClustersVmwareNodePoolsCreateCall { + c := &ProjectsLocationsVmwareClustersVmwareNodePoolsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.parent = parent + c.vmwarenodepool = vmwarenodepool + return c +} + +// ValidateOnly sets the optional parameter "validateOnly": If set, only +// validate the request, but do not actually create the node pool. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsCreateCall) ValidateOnly(validateOnly bool) *ProjectsLocationsVmwareClustersVmwareNodePoolsCreateCall { + c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly)) + return c +} + +// VmwareNodePoolId sets the optional parameter "vmwareNodePoolId": The +// ID to use for the node pool, which will become the final component of +// the node pool's resource name. This value must be up to 40 characters +// and follow RFC-1123 (https://tools.ietf.org/html/rfc1123) format. The +// value must not be permitted to be a UUID (or UUID-like: anything +// matching /^[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$/i). +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsCreateCall) VmwareNodePoolId(vmwareNodePoolId string) *ProjectsLocationsVmwareClustersVmwareNodePoolsCreateCall { + c.urlParams_.Set("vmwareNodePoolId", vmwareNodePoolId) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsCreateCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersVmwareNodePoolsCreateCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsCreateCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersVmwareNodePoolsCreateCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsCreateCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsCreateCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.vmwarenodepool) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/vmwareNodePools") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "parent": c.parent, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.create" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsCreateCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new VMware node pool in a given project, location and VMWare cluster.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.create", + // "parameterOrder": [ + // "parent" + // ], + // "parameters": { + // "parent": { + // "description": "Required. The parent resource where this node pool will be created. projects/{project}/locations/{location}/vmwareClusters/{cluster}", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "validateOnly": { + // "description": "If set, only validate the request, but do not actually create the node pool.", + // "location": "query", + // "type": "boolean" + // }, + // "vmwareNodePoolId": { + // "description": "The ID to use for the node pool, which will become the final component of the node pool's resource name. This value must be up to 40 characters and follow RFC-1123 (https://tools.ietf.org/html/rfc1123) format. The value must not be permitted to be a UUID (or UUID-like: anything matching /^[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$/i).", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+parent}/vmwareNodePools", + // "request": { + // "$ref": "VmwareNodePool" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.delete": + +type ProjectsLocationsVmwareClustersVmwareNodePoolsDeleteCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Delete: Deletes a single VMware node pool. +// +// - name: The name of the node pool to delete. Format: +// projects/{project}/locations/{location}/vmwareClusters/{cluster}/vmw +// areNodePools/{nodepool}. +func (r *ProjectsLocationsVmwareClustersVmwareNodePoolsService) Delete(name string) *ProjectsLocationsVmwareClustersVmwareNodePoolsDeleteCall { + c := &ProjectsLocationsVmwareClustersVmwareNodePoolsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// AllowMissing sets the optional parameter "allowMissing": If set to +// true, and the VMware node pool is not found, the request will succeed +// but no action will be taken on the server and return a completed LRO. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsDeleteCall) AllowMissing(allowMissing bool) *ProjectsLocationsVmwareClustersVmwareNodePoolsDeleteCall { + c.urlParams_.Set("allowMissing", fmt.Sprint(allowMissing)) + return c +} + +// Etag sets the optional parameter "etag": The current etag of the +// VmwareNodePool. If an etag is provided and does not match the current +// etag of the node pool, deletion will be blocked and an ABORTED error +// will be returned. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsDeleteCall) Etag(etag string) *ProjectsLocationsVmwareClustersVmwareNodePoolsDeleteCall { + c.urlParams_.Set("etag", etag) + return c +} + +// IgnoreErrors sets the optional parameter "ignoreErrors": If set to +// true, the deletion of a VMware node pool resource will succeed even +// if errors occur during deletion. This parameter can be used when you +// want to delete GCP's node pool resource and you've already deleted +// the on-prem admin cluster that hosted your node pool. WARNING: Using +// this parameter when your user cluster still exists may result in a +// deleted GCP node pool but an existing on-prem node pool. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsDeleteCall) IgnoreErrors(ignoreErrors bool) *ProjectsLocationsVmwareClustersVmwareNodePoolsDeleteCall { + c.urlParams_.Set("ignoreErrors", fmt.Sprint(ignoreErrors)) + return c +} + +// ValidateOnly sets the optional parameter "validateOnly": If set, only +// validate the request, but do not actually delete the node pool. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsDeleteCall) ValidateOnly(validateOnly bool) *ProjectsLocationsVmwareClustersVmwareNodePoolsDeleteCall { + c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsDeleteCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersVmwareNodePoolsDeleteCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsDeleteCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersVmwareNodePoolsDeleteCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsDeleteCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsDeleteCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("DELETE", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.delete" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsDeleteCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes a single VMware node pool.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools/{vmwareNodePoolsId}", + // "httpMethod": "DELETE", + // "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.delete", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "allowMissing": { + // "description": "If set to true, and the VMware node pool is not found, the request will succeed but no action will be taken on the server and return a completed LRO.", + // "location": "query", + // "type": "boolean" + // }, + // "etag": { + // "description": "The current etag of the VmwareNodePool. If an etag is provided and does not match the current etag of the node pool, deletion will be blocked and an ABORTED error will be returned.", + // "location": "query", + // "type": "string" + // }, + // "ignoreErrors": { + // "description": "If set to true, the deletion of a VMware node pool resource will succeed even if errors occur during deletion. This parameter can be used when you want to delete GCP's node pool resource and you've already deleted the on-prem admin cluster that hosted your node pool. WARNING: Using this parameter when your user cluster still exists may result in a deleted GCP node pool but an existing on-prem node pool.", + // "location": "query", + // "type": "boolean" + // }, + // "name": { + // "description": "Required. The name of the node pool to delete. Format: projects/{project}/locations/{location}/vmwareClusters/{cluster}/vmwareNodePools/{nodepool}", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+/vmwareNodePools/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "validateOnly": { + // "description": "If set, only validate the request, but do not actually delete the node pool.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.enroll": + +type ProjectsLocationsVmwareClustersVmwareNodePoolsEnrollCall struct { + s *Service + parent string + enrollvmwarenodepoolrequest *EnrollVmwareNodePoolRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Enroll: Enrolls a VMware node pool to Anthos On-Prem API +// +// - parent: The parent resource where the node pool is enrolled in. +func (r *ProjectsLocationsVmwareClustersVmwareNodePoolsService) Enroll(parent string, enrollvmwarenodepoolrequest *EnrollVmwareNodePoolRequest) *ProjectsLocationsVmwareClustersVmwareNodePoolsEnrollCall { + c := &ProjectsLocationsVmwareClustersVmwareNodePoolsEnrollCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.parent = parent + c.enrollvmwarenodepoolrequest = enrollvmwarenodepoolrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsEnrollCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersVmwareNodePoolsEnrollCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsEnrollCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersVmwareNodePoolsEnrollCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsEnrollCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsEnrollCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.enrollvmwarenodepoolrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/vmwareNodePools:enroll") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "parent": c.parent, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.enroll" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsEnrollCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Enrolls a VMware node pool to Anthos On-Prem API", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools:enroll", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.enroll", + // "parameterOrder": [ + // "parent" + // ], + // "parameters": { + // "parent": { + // "description": "Required. The parent resource where the node pool is enrolled in.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+parent}/vmwareNodePools:enroll", + // "request": { + // "$ref": "EnrollVmwareNodePoolRequest" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.get": + +type ProjectsLocationsVmwareClustersVmwareNodePoolsGetCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// Get: Gets details of a single VMware node pool. +// +// - name: The name of the node pool to retrieve. +// projects/{project}/locations/{location}/vmwareClusters/{cluster}/vmw +// areNodePools/{nodepool}. +func (r *ProjectsLocationsVmwareClustersVmwareNodePoolsService) Get(name string) *ProjectsLocationsVmwareClustersVmwareNodePoolsGetCall { + c := &ProjectsLocationsVmwareClustersVmwareNodePoolsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// View sets the optional parameter "view": View for VMware node pool. +// When `BASIC` is specified, only the node pool resource name is +// returned. The default/unset value `NODE_POOL_VIEW_UNSPECIFIED` is the +// same as `FULL', which returns the complete node pool configuration +// details. +// +// Possible values: +// +// "NODE_POOL_VIEW_UNSPECIFIED" - If the value is not set, the default +// +// `FULL` view is used. +// +// "BASIC" - Includes basic information of a node pool resource +// +// including node pool resource name. +// +// "FULL" - Includes the complete configuration for VMware node pool +// +// resource. This is the default value for GetVmwareNodePoolRequest +// method. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsGetCall) View(view string) *ProjectsLocationsVmwareClustersVmwareNodePoolsGetCall { + c.urlParams_.Set("view", view) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersVmwareNodePoolsGetCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsVmwareClustersVmwareNodePoolsGetCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsGetCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersVmwareNodePoolsGetCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsGetCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsGetCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.get" call. +// Exactly one of *VmwareNodePool or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *VmwareNodePool.ServerResponse.Header or (if a response was returned +// at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsGetCall) Do(opts ...googleapi.CallOption) (*VmwareNodePool, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &VmwareNodePool{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets details of a single VMware node pool.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools/{vmwareNodePoolsId}", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.get", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "Required. The name of the node pool to retrieve. projects/{project}/locations/{location}/vmwareClusters/{cluster}/vmwareNodePools/{nodepool}", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+/vmwareNodePools/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "view": { + // "description": "View for VMware node pool. When `BASIC` is specified, only the node pool resource name is returned. The default/unset value `NODE_POOL_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete node pool configuration details.", + // "enum": [ + // "NODE_POOL_VIEW_UNSPECIFIED", + // "BASIC", + // "FULL" + // ], + // "enumDescriptions": [ + // "If the value is not set, the default `FULL` view is used.", + // "Includes basic information of a node pool resource including node pool resource name.", + // "Includes the complete configuration for VMware node pool resource. This is the default value for GetVmwareNodePoolRequest method." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "VmwareNodePool" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.getIamPolicy": + +type ProjectsLocationsVmwareClustersVmwareNodePoolsGetIamPolicyCall struct { + s *Service + resource string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// GetIamPolicy: Gets the access control policy for a resource. Returns +// an empty policy if the resource exists and does not have a policy +// set. +// +// - resource: REQUIRED: The resource for which the policy is being +// requested. See Resource names +// (https://cloud.google.com/apis/design/resource_names) for the +// appropriate value for this field. +func (r *ProjectsLocationsVmwareClustersVmwareNodePoolsService) GetIamPolicy(resource string) *ProjectsLocationsVmwareClustersVmwareNodePoolsGetIamPolicyCall { + c := &ProjectsLocationsVmwareClustersVmwareNodePoolsGetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.resource = resource + return c +} + +// OptionsRequestedPolicyVersion sets the optional parameter +// "options.requestedPolicyVersion": The maximum policy version that +// will be used to format the policy. Valid values are 0, 1, and 3. +// Requests specifying an invalid value will be rejected. Requests for +// policies with any conditional role bindings must specify version 3. +// Policies with no conditional role bindings may specify any valid +// value or leave the field unset. The policy in the response might use +// the policy version that you specified, or it might use a lower policy +// version. For example, if you specify version 3, but the policy has no +// conditional role bindings, the response uses version 1. To learn +// which resources support conditions in their IAM policies, see the IAM +// documentation +// (https://cloud.google.com/iam/help/conditions/resource-policies). +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsGetIamPolicyCall) OptionsRequestedPolicyVersion(optionsRequestedPolicyVersion int64) *ProjectsLocationsVmwareClustersVmwareNodePoolsGetIamPolicyCall { + c.urlParams_.Set("options.requestedPolicyVersion", fmt.Sprint(optionsRequestedPolicyVersion)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsGetIamPolicyCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersVmwareNodePoolsGetIamPolicyCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsGetIamPolicyCall) IfNoneMatch(entityTag string) *ProjectsLocationsVmwareClustersVmwareNodePoolsGetIamPolicyCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsGetIamPolicyCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersVmwareNodePoolsGetIamPolicyCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsGetIamPolicyCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsGetIamPolicyCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:getIamPolicy") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "resource": c.resource, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.getIamPolicy" call. +// Exactly one of *Policy or error will be non-nil. Any non-2xx status +// code is an error. Response headers are in either +// *Policy.ServerResponse.Header or (if a response was returned at all) +// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to +// check whether the returned error was because http.StatusNotModified +// was returned. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsGetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Policy{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools/{vmwareNodePoolsId}:getIamPolicy", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.getIamPolicy", + // "parameterOrder": [ + // "resource" + // ], + // "parameters": { + // "options.requestedPolicyVersion": { + // "description": "Optional. The maximum policy version that will be used to format the policy. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional role bindings must specify version 3. Policies with no conditional role bindings may specify any valid value or leave the field unset. The policy in the response might use the policy version that you specified, or it might use a lower policy version. For example, if you specify version 3, but the policy has no conditional role bindings, the response uses version 1. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "resource": { + // "description": "REQUIRED: The resource for which the policy is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+/vmwareNodePools/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+resource}:getIamPolicy", + // "response": { + // "$ref": "Policy" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.list": + +type ProjectsLocationsVmwareClustersVmwareNodePoolsListCall struct { + s *Service + parent string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// List: Lists VMware node pools in a given project, location and VMWare +// cluster. +// +// - parent: The parent, which owns this collection of node pools. +// Format: +// projects/{project}/locations/{location}/vmwareClusters/{vmwareCluste +// r}. +func (r *ProjectsLocationsVmwareClustersVmwareNodePoolsService) List(parent string) *ProjectsLocationsVmwareClustersVmwareNodePoolsListCall { + c := &ProjectsLocationsVmwareClustersVmwareNodePoolsListCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.parent = parent + return c +} + +// PageSize sets the optional parameter "pageSize": The maximum number +// of node pools to return. The service may return fewer than this +// value. If unspecified, at most 50 node pools will be returned. The +// maximum value is 1000; values above 1000 will be coerced to 1000. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsListCall) PageSize(pageSize int64) *ProjectsLocationsVmwareClustersVmwareNodePoolsListCall { + c.urlParams_.Set("pageSize", fmt.Sprint(pageSize)) + return c +} + +// PageToken sets the optional parameter "pageToken": A page token, +// received from a previous `ListVmwareNodePools` call. Provide this to +// retrieve the subsequent page. When paginating, all other parameters +// provided to `ListVmwareNodePools` must match the call that provided +// the page token. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsListCall) PageToken(pageToken string) *ProjectsLocationsVmwareClustersVmwareNodePoolsListCall { + c.urlParams_.Set("pageToken", pageToken) + return c +} + +// View sets the optional parameter "view": View for VMware node pools. +// When `BASIC` is specified, only the node pool resource name is +// returned. The default/unset value `NODE_POOL_VIEW_UNSPECIFIED` is the +// same as `FULL', which returns the complete node pool configuration +// details. +// +// Possible values: +// +// "NODE_POOL_VIEW_UNSPECIFIED" - If the value is not set, the default +// +// `FULL` view is used. +// +// "BASIC" - Includes basic information of a node pool resource +// +// including node pool resource name. +// +// "FULL" - Includes the complete configuration for VMware node pool +// +// resource. This is the default value for ListVmwareNodePoolsRequest +// method. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsListCall) View(view string) *ProjectsLocationsVmwareClustersVmwareNodePoolsListCall { + c.urlParams_.Set("view", view) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersVmwareNodePoolsListCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsVmwareClustersVmwareNodePoolsListCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsListCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersVmwareNodePoolsListCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsListCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsListCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/vmwareNodePools") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "parent": c.parent, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.list" call. +// Exactly one of *ListVmwareNodePoolsResponse or error will be non-nil. +// Any non-2xx status code is an error. Response headers are in either +// *ListVmwareNodePoolsResponse.ServerResponse.Header or (if a response +// was returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsListCall) Do(opts ...googleapi.CallOption) (*ListVmwareNodePoolsResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &ListVmwareNodePoolsResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists VMware node pools in a given project, location and VMWare cluster.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.list", + // "parameterOrder": [ + // "parent" + // ], + // "parameters": { + // "pageSize": { + // "description": "The maximum number of node pools to return. The service may return fewer than this value. If unspecified, at most 50 node pools will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A page token, received from a previous `ListVmwareNodePools` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListVmwareNodePools` must match the call that provided the page token.", + // "location": "query", + // "type": "string" + // }, + // "parent": { + // "description": "Required. The parent, which owns this collection of node pools. Format: projects/{project}/locations/{location}/vmwareClusters/{vmwareCluster}", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "view": { + // "description": "View for VMware node pools. When `BASIC` is specified, only the node pool resource name is returned. The default/unset value `NODE_POOL_VIEW_UNSPECIFIED` is the same as `FULL', which returns the complete node pool configuration details.", + // "enum": [ + // "NODE_POOL_VIEW_UNSPECIFIED", + // "BASIC", + // "FULL" + // ], + // "enumDescriptions": [ + // "If the value is not set, the default `FULL` view is used.", + // "Includes basic information of a node pool resource including node pool resource name.", + // "Includes the complete configuration for VMware node pool resource. This is the default value for ListVmwareNodePoolsRequest method." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+parent}/vmwareNodePools", + // "response": { + // "$ref": "ListVmwareNodePoolsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// Pages invokes f for each page of results. +// A non-nil error returned from f will halt the iteration. +// The provided context supersedes any context provided to the Context method. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsListCall) Pages(ctx context.Context, f func(*ListVmwareNodePoolsResponse) error) error { + c.ctx_ = ctx + defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point + for { + x, err := c.Do() + if err != nil { + return err + } + if err := f(x); err != nil { + return err + } + if x.NextPageToken == "" { + return nil + } + c.PageToken(x.NextPageToken) + } +} + +// method id "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.patch": + +type ProjectsLocationsVmwareClustersVmwareNodePoolsPatchCall struct { + s *Service + name string + vmwarenodepool *VmwareNodePool + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Patch: Updates the parameters of a single VMware node pool. +// +// - name: Immutable. The resource name of this node pool. +func (r *ProjectsLocationsVmwareClustersVmwareNodePoolsService) Patch(name string, vmwarenodepool *VmwareNodePool) *ProjectsLocationsVmwareClustersVmwareNodePoolsPatchCall { + c := &ProjectsLocationsVmwareClustersVmwareNodePoolsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + c.vmwarenodepool = vmwarenodepool + return c +} + +// UpdateMask sets the optional parameter "updateMask": Required. Field +// mask is used to specify the fields to be overwritten in the +// VMwareNodePool resource by the update. The fields specified in the +// update_mask are relative to the resource, not the full request. A +// field will be overwritten if it is in the mask. If the user does not +// provide a mask then all populated fields in the VMwareNodePool +// message will be updated. Empty fields will be ignored unless a field +// mask is used. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsPatchCall) UpdateMask(updateMask string) *ProjectsLocationsVmwareClustersVmwareNodePoolsPatchCall { + c.urlParams_.Set("updateMask", updateMask) + return c +} + +// ValidateOnly sets the optional parameter "validateOnly": Validate the +// request without actually doing any updates. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsPatchCall) ValidateOnly(validateOnly bool) *ProjectsLocationsVmwareClustersVmwareNodePoolsPatchCall { + c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsPatchCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersVmwareNodePoolsPatchCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsPatchCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersVmwareNodePoolsPatchCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsPatchCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsPatchCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.vmwarenodepool) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("PATCH", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.patch" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsPatchCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the parameters of a single VMware node pool.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools/{vmwareNodePoolsId}", + // "httpMethod": "PATCH", + // "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.patch", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "Immutable. The resource name of this node pool.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+/vmwareNodePools/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "updateMask": { + // "description": "Required. Field mask is used to specify the fields to be overwritten in the VMwareNodePool resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all populated fields in the VMwareNodePool message will be updated. Empty fields will be ignored unless a field mask is used.", + // "format": "google-fieldmask", + // "location": "query", + // "type": "string" + // }, + // "validateOnly": { + // "description": "Validate the request without actually doing any updates.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "v1/{+name}", + // "request": { + // "$ref": "VmwareNodePool" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.setIamPolicy": + +type ProjectsLocationsVmwareClustersVmwareNodePoolsSetIamPolicyCall struct { + s *Service + resource string + setiampolicyrequest *SetIamPolicyRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// SetIamPolicy: Sets the access control policy on the specified +// resource. Replaces any existing policy. Can return `NOT_FOUND`, +// `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors. +// +// - resource: REQUIRED: The resource for which the policy is being +// specified. See Resource names +// (https://cloud.google.com/apis/design/resource_names) for the +// appropriate value for this field. +func (r *ProjectsLocationsVmwareClustersVmwareNodePoolsService) SetIamPolicy(resource string, setiampolicyrequest *SetIamPolicyRequest) *ProjectsLocationsVmwareClustersVmwareNodePoolsSetIamPolicyCall { + c := &ProjectsLocationsVmwareClustersVmwareNodePoolsSetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.resource = resource + c.setiampolicyrequest = setiampolicyrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsSetIamPolicyCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersVmwareNodePoolsSetIamPolicyCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsSetIamPolicyCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersVmwareNodePoolsSetIamPolicyCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsSetIamPolicyCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsSetIamPolicyCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.setiampolicyrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:setIamPolicy") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "resource": c.resource, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.setIamPolicy" call. +// Exactly one of *Policy or error will be non-nil. Any non-2xx status +// code is an error. Response headers are in either +// *Policy.ServerResponse.Header or (if a response was returned at all) +// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to +// check whether the returned error was because http.StatusNotModified +// was returned. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsSetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Policy{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets the access control policy on the specified resource. Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools/{vmwareNodePoolsId}:setIamPolicy", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.setIamPolicy", + // "parameterOrder": [ + // "resource" + // ], + // "parameters": { + // "resource": { + // "description": "REQUIRED: The resource for which the policy is being specified. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+/vmwareNodePools/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+resource}:setIamPolicy", + // "request": { + // "$ref": "SetIamPolicyRequest" + // }, + // "response": { + // "$ref": "Policy" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.testIamPermissions": + +type ProjectsLocationsVmwareClustersVmwareNodePoolsTestIamPermissionsCall struct { + s *Service + resource string + testiampermissionsrequest *TestIamPermissionsRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// TestIamPermissions: Returns permissions that a caller has on the +// specified resource. If the resource does not exist, this will return +// an empty set of permissions, not a `NOT_FOUND` error. Note: This +// operation is designed to be used for building permission-aware UIs +// and command-line tools, not for authorization checking. This +// operation may "fail open" without warning. +// +// - resource: REQUIRED: The resource for which the policy detail is +// being requested. See Resource names +// (https://cloud.google.com/apis/design/resource_names) for the +// appropriate value for this field. +func (r *ProjectsLocationsVmwareClustersVmwareNodePoolsService) TestIamPermissions(resource string, testiampermissionsrequest *TestIamPermissionsRequest) *ProjectsLocationsVmwareClustersVmwareNodePoolsTestIamPermissionsCall { + c := &ProjectsLocationsVmwareClustersVmwareNodePoolsTestIamPermissionsCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.resource = resource + c.testiampermissionsrequest = testiampermissionsrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsTestIamPermissionsCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersVmwareNodePoolsTestIamPermissionsCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsTestIamPermissionsCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersVmwareNodePoolsTestIamPermissionsCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsTestIamPermissionsCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsTestIamPermissionsCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.testiampermissionsrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:testIamPermissions") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "resource": c.resource, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.testIamPermissions" call. +// Exactly one of *TestIamPermissionsResponse or error will be non-nil. +// Any non-2xx status code is an error. Response headers are in either +// *TestIamPermissionsResponse.ServerResponse.Header or (if a response +// was returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsTestIamPermissionsCall) Do(opts ...googleapi.CallOption) (*TestIamPermissionsResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &TestIamPermissionsResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not for authorization checking. This operation may \"fail open\" without warning.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools/{vmwareNodePoolsId}:testIamPermissions", + // "httpMethod": "POST", + // "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.testIamPermissions", + // "parameterOrder": [ + // "resource" + // ], + // "parameters": { + // "resource": { + // "description": "REQUIRED: The resource for which the policy detail is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+/vmwareNodePools/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+resource}:testIamPermissions", + // "request": { + // "$ref": "TestIamPermissionsRequest" + // }, + // "response": { + // "$ref": "TestIamPermissionsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.unenroll": + +type ProjectsLocationsVmwareClustersVmwareNodePoolsUnenrollCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Unenroll: Unenrolls a VMware node pool to Anthos On-Prem API +// +// - name: The name of the node pool to unenroll. Format: +// projects/{project}/locations/{location}/vmwareClusters/{cluster}/vmw +// areNodePools/{nodepool}. +func (r *ProjectsLocationsVmwareClustersVmwareNodePoolsService) Unenroll(name string) *ProjectsLocationsVmwareClustersVmwareNodePoolsUnenrollCall { + c := &ProjectsLocationsVmwareClustersVmwareNodePoolsUnenrollCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// AllowMissing sets the optional parameter "allowMissing": If set to +// true, and the VMware node pool is not found, the request will succeed +// but no action will be taken on the server and return a completed LRO. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsUnenrollCall) AllowMissing(allowMissing bool) *ProjectsLocationsVmwareClustersVmwareNodePoolsUnenrollCall { + c.urlParams_.Set("allowMissing", fmt.Sprint(allowMissing)) + return c +} + +// Etag sets the optional parameter "etag": The current etag of the +// VMware node pool. If an etag is provided and does not match the +// current etag of node pool, deletion will be blocked and an ABORTED +// error will be returned. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsUnenrollCall) Etag(etag string) *ProjectsLocationsVmwareClustersVmwareNodePoolsUnenrollCall { + c.urlParams_.Set("etag", etag) + return c +} + +// ValidateOnly sets the optional parameter "validateOnly": If set, only +// validate the request, but do not actually unenroll the node pool. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsUnenrollCall) ValidateOnly(validateOnly bool) *ProjectsLocationsVmwareClustersVmwareNodePoolsUnenrollCall { + c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly)) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsUnenrollCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersVmwareNodePoolsUnenrollCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsUnenrollCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersVmwareNodePoolsUnenrollCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsUnenrollCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsUnenrollCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:unenroll") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("DELETE", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.unenroll" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsUnenrollCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Unenrolls a VMware node pool to Anthos On-Prem API", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools/{vmwareNodePoolsId}:unenroll", + // "httpMethod": "DELETE", + // "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.unenroll", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "allowMissing": { + // "description": "If set to true, and the VMware node pool is not found, the request will succeed but no action will be taken on the server and return a completed LRO.", + // "location": "query", + // "type": "boolean" + // }, + // "etag": { + // "description": "The current etag of the VMware node pool. If an etag is provided and does not match the current etag of node pool, deletion will be blocked and an ABORTED error will be returned.", + // "location": "query", + // "type": "string" + // }, + // "name": { + // "description": "Required. The name of the node pool to unenroll. Format: projects/{project}/locations/{location}/vmwareClusters/{cluster}/vmwareNodePools/{nodepool}", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+/vmwareNodePools/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "validateOnly": { + // "description": "If set, only validate the request, but do not actually unenroll the node pool.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "v1/{+name}:unenroll", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.operations.get": + +type ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsGetCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// Get: Gets the latest state of a long-running operation. Clients can +// use this method to poll the operation result at intervals as +// recommended by the API service. +// +// - name: The name of the operation resource. +func (r *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsService) Get(name string) *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsGetCall { + c := &ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsGetCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsGetCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsGetCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsGetCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsGetCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsGetCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.operations.get" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsGetCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools/{vmwareNodePoolsId}/operations/{operationsId}", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.operations.get", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "The name of the operation resource.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+/vmwareNodePools/[^/]+/operations/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.operations.list": + +type ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsListCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// List: Lists operations that match the specified filter in the +// request. If the server doesn't support this method, it returns +// `UNIMPLEMENTED`. +// +// - name: The name of the operation's parent resource. +func (r *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsService) List(name string) *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsListCall { + c := &ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Filter sets the optional parameter "filter": The standard list +// filter. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsListCall) Filter(filter string) *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsListCall { + c.urlParams_.Set("filter", filter) + return c +} + +// PageSize sets the optional parameter "pageSize": The standard list +// page size. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsListCall) PageSize(pageSize int64) *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsListCall { + c.urlParams_.Set("pageSize", fmt.Sprint(pageSize)) + return c +} + +// PageToken sets the optional parameter "pageToken": The standard list +// page token. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsListCall) PageToken(pageToken string) *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsListCall { + c.urlParams_.Set("pageToken", pageToken) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsListCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsListCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsListCall) Context(ctx context.Context) *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsListCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsListCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsListCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}/operations") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.operations.list" call. +// Exactly one of *ListOperationsResponse or error will be non-nil. Any +// non-2xx status code is an error. Response headers are in either +// *ListOperationsResponse.ServerResponse.Header or (if a response was +// returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsListCall) Do(opts ...googleapi.CallOption) (*ListOperationsResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, gensupport.WrapError(&googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + }) + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, gensupport.WrapError(err) + } + ret := &ListOperationsResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/vmwareClusters/{vmwareClustersId}/vmwareNodePools/{vmwareNodePoolsId}/operations", + // "httpMethod": "GET", + // "id": "gkeonprem.projects.locations.vmwareClusters.vmwareNodePools.operations.list", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "filter": { + // "description": "The standard list filter.", + // "location": "query", + // "type": "string" + // }, + // "name": { + // "description": "The name of the operation's parent resource.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/vmwareClusters/[^/]+/vmwareNodePools/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "pageSize": { + // "description": "The standard list page size.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The standard list page token.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+name}/operations", + // "response": { + // "$ref": "ListOperationsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// Pages invokes f for each page of results. +// A non-nil error returned from f will halt the iteration. +// The provided context supersedes any context provided to the Context method. +func (c *ProjectsLocationsVmwareClustersVmwareNodePoolsOperationsListCall) Pages(ctx context.Context, f func(*ListOperationsResponse) error) error { + c.ctx_ = ctx + defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point + for { + x, err := c.Do() + if err != nil { + return err + } + if err := f(x); err != nil { + return err + } + if x.NextPageToken == "" { + return nil + } + c.PageToken(x.NextPageToken) + } +} diff --git a/vendor/k8s.io/component-base/featuregate/OWNERS b/vendor/k8s.io/component-base/featuregate/OWNERS deleted file mode 100644 index b2f165b6d..000000000 --- a/vendor/k8s.io/component-base/featuregate/OWNERS +++ /dev/null @@ -1,16 +0,0 @@ -# See the OWNERS docs at https://go.k8s.io/owners - -# Currently assigned to api-approvers since feature gates are the API -# for enabling/disabling other APIs. - -# Disable inheritance as this is an api owners file -options: - no_parent_owners: true -approvers: - - api-approvers -reviewers: - - api-reviewers -labels: - - kind/api-change - - sig/api-machinery - - sig/cluster-lifecycle diff --git a/vendor/k8s.io/component-base/featuregate/feature_gate.go b/vendor/k8s.io/component-base/featuregate/feature_gate.go deleted file mode 100644 index c7166d80b..000000000 --- a/vendor/k8s.io/component-base/featuregate/feature_gate.go +++ /dev/null @@ -1,375 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package featuregate - -import ( - "fmt" - "sort" - "strconv" - "strings" - "sync" - "sync/atomic" - - "github.com/spf13/pflag" - - "k8s.io/apimachinery/pkg/util/naming" - "k8s.io/klog/v2" -) - -type Feature string - -const ( - flagName = "feature-gates" - - // allAlphaGate is a global toggle for alpha features. Per-feature key - // values override the default set by allAlphaGate. Examples: - // AllAlpha=false,NewFeature=true will result in newFeature=true - // AllAlpha=true,NewFeature=false will result in newFeature=false - allAlphaGate Feature = "AllAlpha" - - // allBetaGate is a global toggle for beta features. Per-feature key - // values override the default set by allBetaGate. Examples: - // AllBeta=false,NewFeature=true will result in NewFeature=true - // AllBeta=true,NewFeature=false will result in NewFeature=false - allBetaGate Feature = "AllBeta" -) - -var ( - // The generic features. - defaultFeatures = map[Feature]FeatureSpec{ - allAlphaGate: {Default: false, PreRelease: Alpha}, - allBetaGate: {Default: false, PreRelease: Beta}, - } - - // Special handling for a few gates. - specialFeatures = map[Feature]func(known map[Feature]FeatureSpec, enabled map[Feature]bool, val bool){ - allAlphaGate: setUnsetAlphaGates, - allBetaGate: setUnsetBetaGates, - } -) - -type FeatureSpec struct { - // Default is the default enablement state for the feature - Default bool - // LockToDefault indicates that the feature is locked to its default and cannot be changed - LockToDefault bool - // PreRelease indicates the maturity level of the feature - PreRelease prerelease -} - -type prerelease string - -const ( - // Values for PreRelease. - Alpha = prerelease("ALPHA") - Beta = prerelease("BETA") - GA = prerelease("") - - // Deprecated - Deprecated = prerelease("DEPRECATED") -) - -// FeatureGate indicates whether a given feature is enabled or not -type FeatureGate interface { - // Enabled returns true if the key is enabled. - Enabled(key Feature) bool - // KnownFeatures returns a slice of strings describing the FeatureGate's known features. - KnownFeatures() []string - // DeepCopy returns a deep copy of the FeatureGate object, such that gates can be - // set on the copy without mutating the original. This is useful for validating - // config against potential feature gate changes before committing those changes. - DeepCopy() MutableFeatureGate -} - -// MutableFeatureGate parses and stores flag gates for known features from -// a string like feature1=true,feature2=false,... -type MutableFeatureGate interface { - FeatureGate - - // AddFlag adds a flag for setting global feature gates to the specified FlagSet. - AddFlag(fs *pflag.FlagSet) - // Set parses and stores flag gates for known features - // from a string like feature1=true,feature2=false,... - Set(value string) error - // SetFromMap stores flag gates for known features from a map[string]bool or returns an error - SetFromMap(m map[string]bool) error - // Add adds features to the featureGate. - Add(features map[Feature]FeatureSpec) error - // GetAll returns a copy of the map of known feature names to feature specs. - GetAll() map[Feature]FeatureSpec -} - -// featureGate implements FeatureGate as well as pflag.Value for flag parsing. -type featureGate struct { - featureGateName string - - special map[Feature]func(map[Feature]FeatureSpec, map[Feature]bool, bool) - - // lock guards writes to known, enabled, and reads/writes of closed - lock sync.Mutex - // known holds a map[Feature]FeatureSpec - known *atomic.Value - // enabled holds a map[Feature]bool - enabled *atomic.Value - // closed is set to true when AddFlag is called, and prevents subsequent calls to Add - closed bool -} - -func setUnsetAlphaGates(known map[Feature]FeatureSpec, enabled map[Feature]bool, val bool) { - for k, v := range known { - if v.PreRelease == Alpha { - if _, found := enabled[k]; !found { - enabled[k] = val - } - } - } -} - -func setUnsetBetaGates(known map[Feature]FeatureSpec, enabled map[Feature]bool, val bool) { - for k, v := range known { - if v.PreRelease == Beta { - if _, found := enabled[k]; !found { - enabled[k] = val - } - } - } -} - -// Set, String, and Type implement pflag.Value -var _ pflag.Value = &featureGate{} - -// internalPackages are packages that ignored when creating a name for featureGates. These packages are in the common -// call chains, so they'd be unhelpful as names. -var internalPackages = []string{"k8s.io/component-base/featuregate/feature_gate.go"} - -func NewFeatureGate() *featureGate { - known := map[Feature]FeatureSpec{} - for k, v := range defaultFeatures { - known[k] = v - } - - knownValue := &atomic.Value{} - knownValue.Store(known) - - enabled := map[Feature]bool{} - enabledValue := &atomic.Value{} - enabledValue.Store(enabled) - - f := &featureGate{ - featureGateName: naming.GetNameFromCallsite(internalPackages...), - known: knownValue, - special: specialFeatures, - enabled: enabledValue, - } - return f -} - -// Set parses a string of the form "key1=value1,key2=value2,..." into a -// map[string]bool of known keys or returns an error. -func (f *featureGate) Set(value string) error { - m := make(map[string]bool) - for _, s := range strings.Split(value, ",") { - if len(s) == 0 { - continue - } - arr := strings.SplitN(s, "=", 2) - k := strings.TrimSpace(arr[0]) - if len(arr) != 2 { - return fmt.Errorf("missing bool value for %s", k) - } - v := strings.TrimSpace(arr[1]) - boolValue, err := strconv.ParseBool(v) - if err != nil { - return fmt.Errorf("invalid value of %s=%s, err: %v", k, v, err) - } - m[k] = boolValue - } - return f.SetFromMap(m) -} - -// SetFromMap stores flag gates for known features from a map[string]bool or returns an error -func (f *featureGate) SetFromMap(m map[string]bool) error { - f.lock.Lock() - defer f.lock.Unlock() - - // Copy existing state - known := map[Feature]FeatureSpec{} - for k, v := range f.known.Load().(map[Feature]FeatureSpec) { - known[k] = v - } - enabled := map[Feature]bool{} - for k, v := range f.enabled.Load().(map[Feature]bool) { - enabled[k] = v - } - - for k, v := range m { - k := Feature(k) - featureSpec, ok := known[k] - if !ok { - return fmt.Errorf("unrecognized feature gate: %s", k) - } - if featureSpec.LockToDefault && featureSpec.Default != v { - return fmt.Errorf("cannot set feature gate %v to %v, feature is locked to %v", k, v, featureSpec.Default) - } - enabled[k] = v - // Handle "special" features like "all alpha gates" - if fn, found := f.special[k]; found { - fn(known, enabled, v) - } - - if featureSpec.PreRelease == Deprecated { - klog.Warningf("Setting deprecated feature gate %s=%t. It will be removed in a future release.", k, v) - } else if featureSpec.PreRelease == GA { - klog.Warningf("Setting GA feature gate %s=%t. It will be removed in a future release.", k, v) - } - } - - // Persist changes - f.known.Store(known) - f.enabled.Store(enabled) - - klog.V(1).Infof("feature gates: %v", f.enabled) - return nil -} - -// String returns a string containing all enabled feature gates, formatted as "key1=value1,key2=value2,...". -func (f *featureGate) String() string { - pairs := []string{} - for k, v := range f.enabled.Load().(map[Feature]bool) { - pairs = append(pairs, fmt.Sprintf("%s=%t", k, v)) - } - sort.Strings(pairs) - return strings.Join(pairs, ",") -} - -func (f *featureGate) Type() string { - return "mapStringBool" -} - -// Add adds features to the featureGate. -func (f *featureGate) Add(features map[Feature]FeatureSpec) error { - f.lock.Lock() - defer f.lock.Unlock() - - if f.closed { - return fmt.Errorf("cannot add a feature gate after adding it to the flag set") - } - - // Copy existing state - known := map[Feature]FeatureSpec{} - for k, v := range f.known.Load().(map[Feature]FeatureSpec) { - known[k] = v - } - - for name, spec := range features { - if existingSpec, found := known[name]; found { - if existingSpec == spec { - continue - } - return fmt.Errorf("feature gate %q with different spec already exists: %v", name, existingSpec) - } - - known[name] = spec - } - - // Persist updated state - f.known.Store(known) - - return nil -} - -// GetAll returns a copy of the map of known feature names to feature specs. -func (f *featureGate) GetAll() map[Feature]FeatureSpec { - retval := map[Feature]FeatureSpec{} - for k, v := range f.known.Load().(map[Feature]FeatureSpec) { - retval[k] = v - } - return retval -} - -// Enabled returns true if the key is enabled. If the key is not known, this call will panic. -func (f *featureGate) Enabled(key Feature) bool { - if v, ok := f.enabled.Load().(map[Feature]bool)[key]; ok { - return v - } - if v, ok := f.known.Load().(map[Feature]FeatureSpec)[key]; ok { - return v.Default - } - - panic(fmt.Errorf("feature %q is not registered in FeatureGate %q", key, f.featureGateName)) -} - -// AddFlag adds a flag for setting global feature gates to the specified FlagSet. -func (f *featureGate) AddFlag(fs *pflag.FlagSet) { - f.lock.Lock() - // TODO(mtaufen): Shouldn't we just close it on the first Set/SetFromMap instead? - // Not all components expose a feature gates flag using this AddFlag method, and - // in the future, all components will completely stop exposing a feature gates flag, - // in favor of componentconfig. - f.closed = true - f.lock.Unlock() - - known := f.KnownFeatures() - fs.Var(f, flagName, ""+ - "A set of key=value pairs that describe feature gates for alpha/experimental features. "+ - "Options are:\n"+strings.Join(known, "\n")) -} - -// KnownFeatures returns a slice of strings describing the FeatureGate's known features. -// Deprecated and GA features are hidden from the list. -func (f *featureGate) KnownFeatures() []string { - var known []string - for k, v := range f.known.Load().(map[Feature]FeatureSpec) { - if v.PreRelease == GA || v.PreRelease == Deprecated { - continue - } - known = append(known, fmt.Sprintf("%s=true|false (%s - default=%t)", k, v.PreRelease, v.Default)) - } - sort.Strings(known) - return known -} - -// DeepCopy returns a deep copy of the FeatureGate object, such that gates can be -// set on the copy without mutating the original. This is useful for validating -// config against potential feature gate changes before committing those changes. -func (f *featureGate) DeepCopy() MutableFeatureGate { - // Copy existing state. - known := map[Feature]FeatureSpec{} - for k, v := range f.known.Load().(map[Feature]FeatureSpec) { - known[k] = v - } - enabled := map[Feature]bool{} - for k, v := range f.enabled.Load().(map[Feature]bool) { - enabled[k] = v - } - - // Store copied state in new atomics. - knownValue := &atomic.Value{} - knownValue.Store(known) - enabledValue := &atomic.Value{} - enabledValue.Store(enabled) - - // Construct a new featureGate around the copied state. - // Note that specialFeatures is treated as immutable by convention, - // and we maintain the value of f.closed across the copy. - return &featureGate{ - special: specialFeatures, - known: knownValue, - enabled: enabledValue, - closed: f.closed, - } -} diff --git a/vendor/k8s.io/kube-openapi/pkg/cached/cache.go b/vendor/k8s.io/kube-openapi/pkg/cached/cache.go deleted file mode 100644 index 3972cd5f4..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/cached/cache.go +++ /dev/null @@ -1,281 +0,0 @@ -/* -Copyright 2022 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package cache provides a cache mechanism based on etags to lazily -// build, and/or cache results from expensive operation such that those -// operations are not repeated unnecessarily. The operations can be -// created as a tree, and replaced dynamically as needed. -// -// # Dependencies and types of caches -// -// This package uses a source/transform/sink model of caches to build -// the dependency tree, and can be used as follows: -// - [NewSource]: A source cache that recomputes the content every time. -// - [NewStaticSource]: A source cache that always produces the -// same content, it is only called once. -// - [NewTransformer]: A cache that transforms data from one format to -// another. It's only refreshed when the source changes. -// - [NewMerger]: A cache that aggregates multiple caches into one. -// It's only refreshed when the source changes. -// - [Replaceable]: A cache adapter that can be atomically -// replaced with a new one, and saves the previous results in case an -// error pops-up. -// -// # Atomicity -// -// Most of the operations are not atomic/thread-safe, except for -// [Replaceable.Replace] which can be performed while the objects are -// being read. Specifically, `Get` methods are NOT thread-safe. Never -// call `Get()` without a lock on a multi-threaded environment, since -// it's usually performing updates to caches that will require write -// operations. -// -// # Etags -// -// Etags in this library is a cache version identifier. It doesn't -// necessarily strictly match to the semantics of http `etags`, but are -// somewhat inspired from it and function with the same principles. -// Hashing the content is a good way to guarantee that your function is -// never going to be called spuriously. In Kubernetes world, this could -// be a `resourceVersion`, this can be an actual etag, a hash, a UUID -// (if the cache always changes), or even a made-up string when the -// content of the cache never changes. -package cached - -import ( - "fmt" - "sync/atomic" -) - -// Result is the content returned from a call to a cache. It can either -// be created with [NewResultOK] if the call was a success, or -// [NewResultErr] if the call resulted in an error. -type Result[T any] struct { - Data T - Etag string - Err error -} - -// NewResultOK creates a new [Result] for a successful operation. -func NewResultOK[T any](data T, etag string) Result[T] { - return Result[T]{ - Data: data, - Etag: etag, - } -} - -// NewResultErr creates a new [Result] when an error has happened. -func NewResultErr[T any](err error) Result[T] { - return Result[T]{ - Err: err, - } -} - -// Result can be treated as a [Data] if necessary. -func (r Result[T]) Get() Result[T] { - return r -} - -// Data is a cache that performs an action whose result data will be -// cached. It also returns an "etag" identifier to version the cache, so -// that the caller can know if they have the most recent version of the -// cache (and can decide to cache some operation based on that). -// -// The [NewMerger] and [NewTransformer] automatically handle -// that for you by checking if the etag is updated before calling the -// merging or transforming function. -type Data[T any] interface { - // Returns the cached data, as well as an "etag" to identify the - // version of the cache, or an error if something happened. - // - // # Important note - // - // This method is NEVER thread-safe, never assume it is OK to - // call `Get()` without holding a proper mutex in a - // multi-threaded environment, especially since `Get()` will - // usually update the cache and perform write operations. - Get() Result[T] -} - -// T is the source type, V is the destination type. -type merger[K comparable, T, V any] struct { - mergeFn func(map[K]Result[T]) Result[V] - caches map[K]Data[T] - cacheResults map[K]Result[T] - result Result[V] -} - -// NewMerger creates a new merge cache, a cache that merges the result -// of other caches. The function only gets called if any of the -// dependency has changed. -// -// If any of the dependency returned an error before, or any of the -// dependency returned an error this time, or if the mergeFn failed -// before, then the function is reran. -// -// The caches and results are mapped by K so that associated data can be -// retrieved. The map of dependencies can not be modified after -// creation, and a new merger should be created (and probably replaced -// using a [Replaceable]). -// -// Note that this assumes there is no "partial" merge, the merge -// function will remerge all the dependencies together everytime. Since -// the list of dependencies is constant, there is no way to save some -// partial merge information either. -func NewMerger[K comparable, T, V any](mergeFn func(results map[K]Result[T]) Result[V], caches map[K]Data[T]) Data[V] { - return &merger[K, T, V]{ - mergeFn: mergeFn, - caches: caches, - } -} - -func (c *merger[K, T, V]) prepareResults() map[K]Result[T] { - cacheResults := make(map[K]Result[T], len(c.caches)) - for key, cache := range c.caches { - cacheResults[key] = cache.Get() - } - return cacheResults -} - -// Rerun if: -// - The last run resulted in an error -// - Any of the dependency previously returned an error -// - Any of the dependency just returned an error -// - Any of the dependency's etag changed -func (c *merger[K, T, V]) needsRunning(results map[K]Result[T]) bool { - if c.cacheResults == nil { - return true - } - if c.result.Err != nil { - return true - } - if len(results) != len(c.cacheResults) { - panic(fmt.Errorf("invalid number of results: %v (expected %v)", len(results), len(c.cacheResults))) - } - for key, oldResult := range c.cacheResults { - newResult, ok := results[key] - if !ok { - panic(fmt.Errorf("unknown cache entry: %v", key)) - } - - if newResult.Etag != oldResult.Etag || newResult.Err != nil || oldResult.Err != nil { - return true - } - } - return false -} - -func (c *merger[K, T, V]) Get() Result[V] { - cacheResults := c.prepareResults() - if c.needsRunning(cacheResults) { - c.cacheResults = cacheResults - c.result = c.mergeFn(c.cacheResults) - } - return c.result -} - -type transformerCacheKeyType struct{} - -// NewTransformer creates a new cache that transforms the result of -// another cache. The transformFn will only be called if the source -// cache has updated the output, otherwise, the cached result will be -// returned. -// -// If the dependency returned an error before, or it returns an error -// this time, or if the transformerFn failed before, the function is -// reran. -func NewTransformer[T, V any](transformerFn func(Result[T]) Result[V], source Data[T]) Data[V] { - return NewMerger(func(caches map[transformerCacheKeyType]Result[T]) Result[V] { - cache, ok := caches[transformerCacheKeyType{}] - if len(caches) != 1 || !ok { - panic(fmt.Errorf("invalid cache for transformer cache: %v", caches)) - } - return transformerFn(cache) - }, map[transformerCacheKeyType]Data[T]{ - {}: source, - }) -} - -// NewSource creates a new cache that generates some data. This -// will always be called since we don't know the origin of the data and -// if it needs to be updated or not. -func NewSource[T any](sourceFn func() Result[T]) Data[T] { - c := source[T](sourceFn) - return &c -} - -type source[T any] func() Result[T] - -func (c *source[T]) Get() Result[T] { - return (*c)() -} - -// NewStaticSource creates a new cache that always generates the -// same data. This will only be called once (lazily). -func NewStaticSource[T any](staticFn func() Result[T]) Data[T] { - return &static[T]{ - fn: staticFn, - } -} - -type static[T any] struct { - fn func() Result[T] - result *Result[T] -} - -func (c *static[T]) Get() Result[T] { - if c.result == nil { - result := c.fn() - c.result = &result - } - return *c.result -} - -// Replaceable is a cache that carries the result even when the -// cache is replaced. The cache can be replaced atomically (without any -// lock held). This is the type that should typically be stored in -// structs. -type Replaceable[T any] struct { - cache atomic.Pointer[Data[T]] - result *Result[T] -} - -// Get retrieves the data from the underlying source. [Replaceable] -// implements the [Data] interface itself. This is a pass-through -// that calls the most recent underlying cache. If the cache fails but -// previously had returned a success, that success will be returned -// instead. If the cache fails but we never returned a success, that -// failure is returned. -// -// # Important note -// -// As all implementations of Get, this implementation is NOT -// thread-safe. Please properly lock a mutex before calling this method -// if you are in a multi-threaded environment, since this method will -// update the cache and perform write operations. -func (c *Replaceable[T]) Get() Result[T] { - result := (*c.cache.Load()).Get() - if result.Err != nil && c.result != nil && c.result.Err == nil { - return *c.result - } - c.result = &result - return *c.result -} - -// Replace changes the cache in a thread-safe way. -func (c *Replaceable[T]) Replace(cache Data[T]) { - c.cache.Swap(&cache) -} diff --git a/vendor/k8s.io/kube-openapi/pkg/common/common.go b/vendor/k8s.io/kube-openapi/pkg/common/common.go index 1a6c12e17..24f2b0e88 100644 --- a/vendor/k8s.io/kube-openapi/pkg/common/common.go +++ b/vendor/k8s.io/kube-openapi/pkg/common/common.go @@ -246,42 +246,38 @@ var schemaTypeFormatMap = map[string]typeInfo{ // the spec does not need to be simple type,format) or can even return a simple type,format (e.g. IntOrString). For simple // type formats, the benefit of adding OpenAPIDefinitionGetter interface is to keep both type and property documentation. // Example: -// -// type Sample struct { -// ... -// // port of the server -// port IntOrString -// ... -// } -// +// type Sample struct { +// ... +// // port of the server +// port IntOrString +// ... +// } // // IntOrString documentation... // type IntOrString { ... } // // Adding IntOrString to this function: -// -// "port" : { -// format: "string", -// type: "int-or-string", -// Description: "port of the server" -// } +// "port" : { +// format: "string", +// type: "int-or-string", +// Description: "port of the server" +// } // // Implement OpenAPIDefinitionGetter for IntOrString: // -// "port" : { -// $Ref: "#/definitions/IntOrString" -// Description: "port of the server" -// } -// +// "port" : { +// $Ref: "#/definitions/IntOrString" +// Description: "port of the server" +// } // ... // definitions: +// { +// "IntOrString": { +// format: "string", +// type: "int-or-string", +// Description: "IntOrString documentation..." // new +// } +// } // -// { -// "IntOrString": { -// format: "string", -// type: "int-or-string", -// Description: "IntOrString documentation..." // new -// } -// } func OpenAPITypeFormat(typeName string) (string, string) { mapped, ok := schemaTypeFormatMap[typeName] if !ok { diff --git a/vendor/k8s.io/kube-openapi/pkg/handler3/handler.go b/vendor/k8s.io/kube-openapi/pkg/handler3/handler.go index 66b7a68da..ec4adcdec 100644 --- a/vendor/k8s.io/kube-openapi/pkg/handler3/handler.go +++ b/vendor/k8s.io/kube-openapi/pkg/handler3/handler.go @@ -21,9 +21,11 @@ import ( "crypto/sha512" "encoding/json" "fmt" + "mime" "net/http" "net/url" "path" + "sort" "strconv" "strings" "sync" @@ -31,18 +33,23 @@ import ( "github.com/golang/protobuf/proto" openapi_v3 "github.com/google/gnostic/openapiv3" - "github.com/google/uuid" "github.com/munnerz/goautoneg" - "k8s.io/klog/v2" - "k8s.io/kube-openapi/pkg/cached" "k8s.io/kube-openapi/pkg/common" + "k8s.io/kube-openapi/pkg/internal/handler" "k8s.io/kube-openapi/pkg/spec3" + "k8s.io/kube-openapi/pkg/validation/spec" ) const ( - subTypeProtobufDeprecated = "com.github.proto-openapi.spec.v3@v1.0+protobuf" - subTypeProtobuf = "com.github.proto-openapi.spec.v3.v1.0+protobuf" - subTypeJSON = "json" + jsonExt = ".json" + + mimeJson = "application/json" + // TODO(mehdy): change @68f4ded to a version tag when gnostic add version tags. + mimePb = "application/com.github.googleapis.gnostic.OpenAPIv3@68f4ded+protobuf" + mimePbGz = "application/x-gzip" + + subTypeProtobuf = "com.github.proto-openapi.spec.v3@v1.0+protobuf" + subTypeJSON = "json" ) // OpenAPIV3Discovery is the format of the Discovery document for OpenAPI V3 @@ -58,63 +65,29 @@ type OpenAPIV3DiscoveryGroupVersion struct { ServerRelativeURL string `json:"serverRelativeURL"` } -func ToV3ProtoBinary(json []byte) ([]byte, error) { - document, err := openapi_v3.ParseDocument(json) - if err != nil { - return nil, err - } - return proto.Marshal(document) -} - -type timedSpec struct { - spec []byte +// OpenAPIService is the service responsible for serving OpenAPI spec. It has +// the ability to safely change the spec while serving it. +type OpenAPIService struct { + // rwMutex protects All members of this service. + rwMutex sync.RWMutex lastModified time.Time + v3Schema map[string]*OpenAPIV3Group } -// This type is protected by the lock on OpenAPIService. -type openAPIV3Group struct { - specCache cached.Replaceable[*spec3.OpenAPI] - pbCache cached.Data[timedSpec] - jsonCache cached.Data[timedSpec] -} +type OpenAPIV3Group struct { + rwMutex sync.RWMutex -func newOpenAPIV3Group() *openAPIV3Group { - o := &openAPIV3Group{} - o.jsonCache = cached.NewTransformer[*spec3.OpenAPI](func(result cached.Result[*spec3.OpenAPI]) cached.Result[timedSpec] { - if result.Err != nil { - return cached.NewResultErr[timedSpec](result.Err) - } - json, err := json.Marshal(result.Data) - if err != nil { - return cached.NewResultErr[timedSpec](err) - } - return cached.NewResultOK(timedSpec{spec: json, lastModified: time.Now()}, computeETag(json)) - }, &o.specCache) - o.pbCache = cached.NewTransformer(func(result cached.Result[timedSpec]) cached.Result[timedSpec] { - if result.Err != nil { - return cached.NewResultErr[timedSpec](result.Err) - } - proto, err := ToV3ProtoBinary(result.Data.spec) - if err != nil { - return cached.NewResultErr[timedSpec](err) - } - return cached.NewResultOK(timedSpec{spec: proto, lastModified: result.Data.lastModified}, result.Etag) - }, o.jsonCache) - return o -} + lastModified time.Time -func (o *openAPIV3Group) UpdateSpec(openapi cached.Data[*spec3.OpenAPI]) { - o.specCache.Replace(openapi) + pbCache handler.HandlerCache + jsonCache handler.HandlerCache + etagCache handler.HandlerCache } -// OpenAPIService is the service responsible for serving OpenAPI spec. It has -// the ability to safely change the spec while serving it. -type OpenAPIService struct { - // Mutex protects the schema map. - mutex sync.Mutex - v3Schema map[string]*openAPIV3Group - - discoveryCache cached.Replaceable[timedSpec] +func init() { + mime.AddExtensionType(".json", mimeJson) + mime.AddExtensionType(".pb-v1", mimePb) + mime.AddExtensionType(".gz", mimePbGz) } func computeETag(data []byte) string { @@ -133,90 +106,92 @@ func constructServerRelativeURL(gvString, etag string) string { } // NewOpenAPIService builds an OpenAPIService starting with the given spec. -func NewOpenAPIService() *OpenAPIService { +func NewOpenAPIService(spec *spec.Swagger) (*OpenAPIService, error) { o := &OpenAPIService{} - o.v3Schema = make(map[string]*openAPIV3Group) - // We're not locked because we haven't shared the structure yet. - o.discoveryCache.Replace(o.buildDiscoveryCacheLocked()) - return o + o.v3Schema = make(map[string]*OpenAPIV3Group) + return o, nil } -func (o *OpenAPIService) buildDiscoveryCacheLocked() cached.Data[timedSpec] { - caches := make(map[string]cached.Data[timedSpec], len(o.v3Schema)) - for gvName, group := range o.v3Schema { - caches[gvName] = group.jsonCache +func (o *OpenAPIService) getGroupBytes() ([]byte, error) { + o.rwMutex.RLock() + defer o.rwMutex.RUnlock() + keys := make([]string, len(o.v3Schema)) + i := 0 + for k := range o.v3Schema { + keys[i] = k + i++ } - return cached.NewMerger(func(results map[string]cached.Result[timedSpec]) cached.Result[timedSpec] { - discovery := &OpenAPIV3Discovery{Paths: make(map[string]OpenAPIV3DiscoveryGroupVersion)} - for gvName, result := range results { - if result.Err != nil { - return cached.NewResultErr[timedSpec](result.Err) - } - discovery.Paths[gvName] = OpenAPIV3DiscoveryGroupVersion{ - ServerRelativeURL: constructServerRelativeURL(gvName, result.Etag), - } - } - j, err := json.Marshal(discovery) + + sort.Strings(keys) + discovery := &OpenAPIV3Discovery{Paths: make(map[string]OpenAPIV3DiscoveryGroupVersion)} + for gvString, groupVersion := range o.v3Schema { + etagBytes, err := groupVersion.etagCache.Get() if err != nil { - return cached.NewResultErr[timedSpec](err) + return nil, err + } + discovery.Paths[gvString] = OpenAPIV3DiscoveryGroupVersion{ + ServerRelativeURL: constructServerRelativeURL(gvString, string(etagBytes)), } - return cached.NewResultOK(timedSpec{spec: j, lastModified: time.Now()}, computeETag(j)) - }, caches) + } + j, err := json.Marshal(discovery) + if err != nil { + return nil, err + } + return j, nil } func (o *OpenAPIService) getSingleGroupBytes(getType string, group string) ([]byte, string, time.Time, error) { - o.mutex.Lock() - defer o.mutex.Unlock() + o.rwMutex.RLock() + defer o.rwMutex.RUnlock() v, ok := o.v3Schema[group] if !ok { return nil, "", time.Now(), fmt.Errorf("Cannot find CRD group %s", group) } - result := cached.Result[timedSpec]{} - switch getType { - case subTypeJSON: - result = v.jsonCache.Get() - case subTypeProtobuf, subTypeProtobufDeprecated: - result = v.pbCache.Get() - default: - return nil, "", time.Now(), fmt.Errorf("Invalid accept clause %s", getType) + if getType == subTypeJSON { + specBytes, err := v.jsonCache.Get() + if err != nil { + return nil, "", v.lastModified, err + } + etagBytes, err := v.etagCache.Get() + return specBytes, string(etagBytes), v.lastModified, err + } else if getType == subTypeProtobuf { + specPb, err := v.pbCache.Get() + if err != nil { + return nil, "", v.lastModified, err + } + etagBytes, err := v.etagCache.Get() + return specPb, string(etagBytes), v.lastModified, err } - return result.Data.spec, result.Etag, result.Data.lastModified, result.Err + return nil, "", time.Now(), fmt.Errorf("Invalid accept clause %s", getType) } -// UpdateGroupVersionLazy adds or updates an existing group with the new cached. -func (o *OpenAPIService) UpdateGroupVersionLazy(group string, openapi cached.Data[*spec3.OpenAPI]) { - o.mutex.Lock() - defer o.mutex.Unlock() +func (o *OpenAPIService) UpdateGroupVersion(group string, openapi *spec3.OpenAPI) (err error) { + o.rwMutex.Lock() + defer o.rwMutex.Unlock() + if _, ok := o.v3Schema[group]; !ok { - o.v3Schema[group] = newOpenAPIV3Group() - // Since there is a new item, we need to re-build the cache map. - o.discoveryCache.Replace(o.buildDiscoveryCacheLocked()) + o.v3Schema[group] = &OpenAPIV3Group{} } - o.v3Schema[group].UpdateSpec(openapi) -} - -func (o *OpenAPIService) UpdateGroupVersion(group string, openapi *spec3.OpenAPI) { - o.UpdateGroupVersionLazy(group, cached.NewResultOK(openapi, uuid.New().String())) + return o.v3Schema[group].UpdateSpec(openapi) } func (o *OpenAPIService) DeleteGroupVersion(group string) { - o.mutex.Lock() - defer o.mutex.Unlock() + o.rwMutex.Lock() + defer o.rwMutex.Unlock() delete(o.v3Schema, group) - // Rebuild the merge cache map since the items have changed. - o.discoveryCache.Replace(o.buildDiscoveryCacheLocked()) } -func (o *OpenAPIService) HandleDiscovery(w http.ResponseWriter, r *http.Request) { - result := o.discoveryCache.Get() - if result.Err != nil { - klog.Errorf("Error serving discovery: %s", result.Err) - w.WriteHeader(http.StatusInternalServerError) - return +func ToV3ProtoBinary(json []byte) ([]byte, error) { + document, err := openapi_v3.ParseDocument(json) + if err != nil { + return nil, err } - w.Header().Set("Etag", strconv.Quote(result.Etag)) - w.Header().Set("Content-Type", "application/json") - http.ServeContent(w, r, "/openapi/v3", result.Data.lastModified, bytes.NewReader(result.Data.spec)) + return proto.Marshal(document) +} + +func (o *OpenAPIService) HandleDiscovery(w http.ResponseWriter, r *http.Request) { + data, _ := o.getGroupBytes() + http.ServeContent(w, r, "/openapi/v3", time.Now(), bytes.NewReader(data)) } func (o *OpenAPIService) HandleGroupVersion(w http.ResponseWriter, r *http.Request) { @@ -235,13 +210,11 @@ func (o *OpenAPIService) HandleGroupVersion(w http.ResponseWriter, r *http.Reque } accepted := []struct { - Type string - SubType string - ReturnedContentType string + Type string + SubType string }{ - {"application", subTypeJSON, "application/" + subTypeJSON}, - {"application", subTypeProtobuf, "application/" + subTypeProtobuf}, - {"application", subTypeProtobufDeprecated, "application/" + subTypeProtobuf}, + {"application", subTypeJSON}, + {"application", subTypeProtobuf}, } for _, clause := range clauses { @@ -256,9 +229,6 @@ func (o *OpenAPIService) HandleGroupVersion(w http.ResponseWriter, r *http.Reque if err != nil { return } - // Set Content-Type header in the reponse - w.Header().Set("Content-Type", accepts.ReturnedContentType) - // ETag must be enclosed in double quotes: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag w.Header().Set("Etag", strconv.Quote(etag)) @@ -292,3 +262,30 @@ func (o *OpenAPIService) RegisterOpenAPIV3VersionedService(servePath string, han handler.HandlePrefix(servePath+"/", http.HandlerFunc(o.HandleGroupVersion)) return nil } + +func (o *OpenAPIV3Group) UpdateSpec(openapi *spec3.OpenAPI) (err error) { + o.rwMutex.Lock() + defer o.rwMutex.Unlock() + + o.jsonCache = o.jsonCache.New(func() ([]byte, error) { + return json.Marshal(openapi) + }) + o.pbCache = o.pbCache.New(func() ([]byte, error) { + json, err := o.jsonCache.Get() + if err != nil { + return nil, err + } + return ToV3ProtoBinary(json) + }) + // TODO: This forces a json marshal of corresponding group-versions. + // We should look to replace this with a faster hashing mechanism. + o.etagCache = o.etagCache.New(func() ([]byte, error) { + json, err := o.jsonCache.Get() + if err != nil { + return nil, err + } + return []byte(computeETag(json)), nil + }) + o.lastModified = time.Now() + return nil +} diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/flags.go b/vendor/k8s.io/kube-openapi/pkg/internal/flags.go deleted file mode 100644 index bef603782..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/flags.go +++ /dev/null @@ -1,24 +0,0 @@ -/* -Copyright 2022 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package internal - -// Used by tests to selectively disable experimental JSON unmarshaler -var UseOptimizedJSONUnmarshaling bool = true -var UseOptimizedJSONUnmarshalingV3 bool = true - -// Used by tests to selectively disable experimental JSON marshaler -var UseOptimizedJSONMarshaling bool = true diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/handler/handler_cache.go b/vendor/k8s.io/kube-openapi/pkg/internal/handler/handler_cache.go new file mode 100644 index 000000000..e128c26eb --- /dev/null +++ b/vendor/k8s.io/kube-openapi/pkg/internal/handler/handler_cache.go @@ -0,0 +1,57 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package handler + +import ( + "sync" +) + +// HandlerCache represents a lazy cache for generating a byte array +// It is used to lazily marshal OpenAPI v2/v3 and lazily generate the ETag +type HandlerCache struct { + BuildCache func() ([]byte, error) + once sync.Once + bytes []byte + err error +} + +// Get either returns the cached value or calls BuildCache() once before caching and returning +// its results. If BuildCache returns an error, the last valid value for the cache (from prior +// calls to New()) is used instead if possible. +func (c *HandlerCache) Get() ([]byte, error) { + c.once.Do(func() { + bytes, err := c.BuildCache() + // if there is an error updating the cache, there can be situations where + // c.bytes contains a valid value (carried over from the previous update) + // but c.err is also not nil; the cache user is expected to check for this + c.err = err + if c.err == nil { + // don't override previous spec if we had an error + c.bytes = bytes + } + }) + return c.bytes, c.err +} + +// New creates a new HandlerCache for situations where a cache refresh is needed. +// This function is not thread-safe and should not be called at the same time as Get(). +func (c *HandlerCache) New(cacheBuilder func() ([]byte, error)) HandlerCache { + return HandlerCache{ + bytes: c.bytes, + BuildCache: cacheBuilder, + } +} diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/serialization.go b/vendor/k8s.io/kube-openapi/pkg/internal/serialization.go deleted file mode 100644 index 7393bacf7..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/serialization.go +++ /dev/null @@ -1,65 +0,0 @@ -/* -Copyright 2023 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package internal - -import ( - "github.com/go-openapi/jsonreference" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" -) - -// DeterministicMarshal calls the jsonv2 library with the deterministic -// flag in order to have stable marshaling. -func DeterministicMarshal(in any) ([]byte, error) { - return jsonv2.MarshalOptions{Deterministic: true}.Marshal(jsonv2.EncodeOptions{}, in) -} - -// JSONRefFromMap populates a json reference object if the map v contains a $ref key. -func JSONRefFromMap(jsonRef *jsonreference.Ref, v map[string]interface{}) error { - if v == nil { - return nil - } - if vv, ok := v["$ref"]; ok { - if str, ok := vv.(string); ok { - ref, err := jsonreference.New(str) - if err != nil { - return err - } - *jsonRef = ref - } - } - return nil -} - -// SanitizeExtensions sanitizes the input map such that non extension -// keys (non x-*, X-*) keys are dropped from the map. Returns the new -// modified map, or nil if the map is now empty. -func SanitizeExtensions(e map[string]interface{}) map[string]interface{} { - for k := range e { - if !IsExtensionKey(k) { - delete(e, k) - } - } - if len(e) == 0 { - e = nil - } - return e -} - -// IsExtensionKey returns true if the input string is of format x-* or X-* -func IsExtensionKey(k string) bool { - return len(k) > 1 && (k[0] == 'x' || k[0] == 'X') && k[1] == '-' -} diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/AUTHORS b/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/AUTHORS deleted file mode 100644 index 2b00ddba0..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code refers to The Go Authors for copyright purposes. -# The master list of authors is in the main Go distribution, -# visible at https://tip.golang.org/AUTHORS. diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/CONTRIBUTORS b/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/CONTRIBUTORS deleted file mode 100644 index 1fbd3e976..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/CONTRIBUTORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code was written by the Go contributors. -# The master list of contributors is in the main Go distribution, -# visible at https://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/LICENSE b/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/LICENSE deleted file mode 100644 index 244127300..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2020 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/README.md b/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/README.md deleted file mode 100644 index 0349adf69..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/README.md +++ /dev/null @@ -1,321 +0,0 @@ -# JSON Serialization (v2) - -[![GoDev](https://img.shields.io/static/v1?label=godev&message=reference&color=00add8)](https://pkg.go.dev/github.com/go-json-experiment/json) -[![Build Status](https://github.com/go-json-experiment/json/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/go-json-experiment/json/actions) - -This module hosts an experimental implementation of v2 `encoding/json`. -The API is unstable and breaking changes will regularly be made. -Do not depend on this in publicly available modules. - -## Goals and objectives - -* **Mostly backwards compatible:** If possible, v2 should aim to be _mostly_ -compatible with v1 in terms of both API and default behavior to ease migration. -For example, the `Marshal` and `Unmarshal` functions are the most widely used -declarations in the v1 package. It seems sensible for equivalent functionality -in v2 to be named the same and have the same signature. -Behaviorally, we should aim for 95% to 99% backwards compatibility. -We do not aim for 100% compatibility since we want the freedom to break -certain behaviors that are now considered to have been a mistake. -We may provide options that can bring the v2 implementation to 100% compatibility, -but it will not be the default. - -* **More flexible:** There is a -[long list of feature requests](https://github.com/golang/go/issues?q=is%3Aissue+is%3Aopen+encoding%2Fjson+in%3Atitle). -We should aim to provide the most flexible features that addresses most usages. -We do not want to over fit the v2 API to handle every possible use case. -Ideally, the features provided should be orthogonal in nature such that -any combination of features results in as few surprising edge cases as possible. - -* **More performant:** JSON serialization is widely used and any bit of extra -performance gains will be greatly appreciated. Some rarely used behaviors of v1 -may be dropped in favor of better performance. For example, -despite `Encoder` and `Decoder` operating on an `io.Writer` and `io.Reader`, -they do not operate in a truly streaming manner, -leading to a loss in performance. The v2 implementation should aim to be truly -streaming by default (see [#33714](https://golang.org/issue/33714)). - -* **Easy to use (hard to misuse):** The v2 API should aim to make -the common case easy and the less common case at least possible. -The API should avoid behavior that goes contrary to user expectation, -which may result in subtle bugs (see [#36225](https://golang.org/issue/36225)). - -* **v1 and v2 maintainability:** Since the v1 implementation must stay forever, -it would be beneficial if v1 could be implemented under the hood with v2, -allowing for less maintenance burden in the future. This probably implies that -behavioral changes in v2 relative to v1 need to be exposed as options. - -* **Avoid unsafe:** Standard library packages generally avoid the use of -package `unsafe` even if it could provide a performance boost. -We aim to preserve this property. - -## Expectations - -While this module aims to possibly be the v2 implementation of `encoding/json`, -there is no guarantee that this outcome will occur. As with any major change -to the Go standard library, this will eventually go through the -[Go proposal process](https://github.com/golang/proposal#readme). -At the present moment, this is still in the design and experimentation phase -and is not ready for a formal proposal. - -There are several possible outcomes from this experiment: -1. We determine that a v2 `encoding/json` would not provide sufficient benefit -over the existing v1 `encoding/json` package. Thus, we abandon this effort. -2. We propose a v2 `encoding/json` design, but it is rejected in favor of some -other design that is considered superior. -3. We propose a v2 `encoding/json` design, but rather than adding an entirely -new v2 `encoding/json` package, we decide to merge its functionality into -the existing v1 `encoding/json` package. -4. We propose a v2 `encoding/json` design and it is accepted, resulting in -its addition to the standard library. -5. Some other unforeseen outcome (among the infinite number of possibilities). - -## Development - -This module is primarily developed by -[@dsnet](https://github.com/dsnet), -[@mvdan](https://github.com/mvdan), and -[@johanbrandhorst](https://github.com/johanbrandhorst) -with feedback provided by -[@rogpeppe](https://github.com/rogpeppe), -[@ChrisHines](https://github.com/ChrisHines), and -[@rsc](https://github.com/rsc). - -Discussion about semantics occur semi-regularly, where a -[record of past meetings can be found here](https://docs.google.com/document/d/1rovrOTd-wTawGMPPlPuKhwXaYBg9VszTXR9AQQL5LfI/edit?usp=sharing). - -## Design overview - -This package aims to provide a clean separation between syntax and semantics. -Syntax deals with the structural representation of JSON (as specified in -[RFC 4627](https://tools.ietf.org/html/rfc4627), -[RFC 7159](https://tools.ietf.org/html/rfc7159), -[RFC 7493](https://tools.ietf.org/html/rfc7493), -[RFC 8259](https://tools.ietf.org/html/rfc8259), and -[RFC 8785](https://tools.ietf.org/html/rfc8785)). -Semantics deals with the meaning of syntactic data as usable application data. - -The `Encoder` and `Decoder` types are streaming tokenizers concerned with the -packing or parsing of JSON data. They operate on `Token` and `RawValue` types -which represent the common data structures that are representable in JSON. -`Encoder` and `Decoder` do not aim to provide any interpretation of the data. - -Functions like `Marshal`, `MarshalFull`, `MarshalNext`, `Unmarshal`, -`UnmarshalFull`, and `UnmarshalNext` provide semantic meaning by correlating -any arbitrary Go type with some JSON representation of that type (as stored in -data types like `[]byte`, `io.Writer`, `io.Reader`, `Encoder`, or `Decoder`). - -![API overview](api.png) - -This diagram provides a high-level overview of the v2 `json` package. -Purple blocks represent types, while blue blocks represent functions or methods. -The arrows and their direction represent the approximate flow of data. -The bottom half of the diagram contains functionality that is only concerned -with syntax, while the upper half contains functionality that assigns -semantic meaning to syntactic data handled by the bottom half. - -In contrast to v1 `encoding/json`, options are represented as separate types -rather than being setter methods on the `Encoder` or `Decoder` types. - -## Behavior changes - -The v2 `json` package changes the default behavior of `Marshal` and `Unmarshal` -relative to the v1 `json` package to be more sensible. -Some of these behavior changes have options and workarounds to opt into -behavior similar to what v1 provided. - -This table shows an overview of the changes: - -| v1 | v2 | Details | -| -- | -- | ------- | -| JSON object members are unmarshaled into a Go struct using a **case-insensitive name match**. | JSON object members are unmarshaled into a Go struct using a **case-sensitive name match**. | [CaseSensitivity](/diff_test.go#:~:text=TestCaseSensitivity) | -| When marshaling a Go struct, a struct field marked as `omitempty` is omitted if **the field value is an empty Go value**, which is defined as false, 0, a nil pointer, a nil interface value, and any empty array, slice, map, or string. | When marshaling a Go struct, a struct field marked as `omitempty` is omitted if **the field value would encode as an empty JSON value**, which is defined as a JSON null, or an empty JSON string, object, or array. | [OmitEmptyOption](/diff_test.go#:~:text=TestOmitEmptyOption) | -| The `string` option **does affect** Go bools. | The `string` option **does not affect** Go bools. | [StringOption](/diff_test.go#:~:text=TestStringOption) | -| The `string` option **does not recursively affect** sub-values of the Go field value. | The `string` option **does recursively affect** sub-values of the Go field value. | [StringOption](/diff_test.go#:~:text=TestStringOption) | -| The `string` option **sometimes accepts** a JSON null escaped within a JSON string. | The `string` option **never accepts** a JSON null escaped within a JSON string. | [StringOption](/diff_test.go#:~:text=TestStringOption) | -| A nil Go slice is marshaled as a **JSON null**. | A nil Go slice is marshaled as an **empty JSON array**. | [NilSlicesAndMaps](/diff_test.go#:~:text=TestNilSlicesAndMaps) | -| A nil Go map is marshaled as a **JSON null**. | A nil Go map is marshaled as an **empty JSON object**. | [NilSlicesAndMaps](/diff_test.go#:~:text=TestNilSlicesAndMaps) | -| A Go array may be unmarshaled from a **JSON array of any length**. | A Go array must be unmarshaled from a **JSON array of the same length**. | [Arrays](/diff_test.go#:~:text=Arrays) | -| A Go byte array is represented as a **JSON array of JSON numbers**. | A Go byte array is represented as a **Base64-encoded JSON string**. | [ByteArrays](/diff_test.go#:~:text=TestByteArrays) | -| `MarshalJSON` and `UnmarshalJSON` methods declared on a pointer receiver are **inconsistently called**. | `MarshalJSON` and `UnmarshalJSON` methods declared on a pointer receiver are **consistently called**. | [PointerReceiver](/diff_test.go#:~:text=TestPointerReceiver) | -| A Go map is marshaled in a **deterministic order**. | A Go map is marshaled in a **non-deterministic order**. | [MapDeterminism](/diff_test.go#:~:text=TestMapDeterminism) | -| JSON strings are encoded **with HTML-specific characters being escaped**. | JSON strings are encoded **without any characters being escaped** (unless necessary). | [EscapeHTML](/diff_test.go#:~:text=TestEscapeHTML) | -| When marshaling, invalid UTF-8 within a Go string **are silently replaced**. | When marshaling, invalid UTF-8 within a Go string **results in an error**. | [InvalidUTF8](/diff_test.go#:~:text=TestInvalidUTF8) | -| When unmarshaling, invalid UTF-8 within a JSON string **are silently replaced**. | When unmarshaling, invalid UTF-8 within a JSON string **results in an error**. | [InvalidUTF8](/diff_test.go#:~:text=TestInvalidUTF8) | -| When marshaling, **an error does not occur** if the output JSON value contains objects with duplicate names. | When marshaling, **an error does occur** if the output JSON value contains objects with duplicate names. | [DuplicateNames](/diff_test.go#:~:text=TestDuplicateNames) | -| When unmarshaling, **an error does not occur** if the input JSON value contains objects with duplicate names. | When unmarshaling, **an error does occur** if the input JSON value contains objects with duplicate names. | [DuplicateNames](/diff_test.go#:~:text=TestDuplicateNames) | -| Unmarshaling a JSON null into a non-empty Go value **inconsistently clears the value or does nothing**. | Unmarshaling a JSON null into a non-empty Go value **always clears the value**. | [MergeNull](/diff_test.go#:~:text=TestMergeNull) | -| Unmarshaling a JSON value into a non-empty Go value **follows inconsistent and bizarre behavior**. | Unmarshaling a JSON value into a non-empty Go value **always merges if the input is an object, and otherwise replaces**. | [MergeComposite](/diff_test.go#:~:text=TestMergeComposite) | -| A `time.Duration` is represented as a **JSON number containing the decimal number of nanoseconds**. | A `time.Duration` is represented as a **JSON string containing the formatted duration (e.g., "1h2m3.456s")**. | [TimeDurations](/diff_test.go#:~:text=TestTimeDurations) | -| Unmarshaling a JSON number into a Go float beyond its representation **results in an error**. | Unmarshaling a JSON number into a Go float beyond its representation **uses the closest representable value (e.g., ±`math.MaxFloat`)**. | [MaxFloats](/diff_test.go#:~:text=TestMaxFloats) | -| A Go struct with only unexported fields **can be serialized**. | A Go struct with only unexported fields **cannot be serialized**. | [EmptyStructs](/diff_test.go#:~:text=TestEmptyStructs) | -| A Go struct that embeds an unexported struct type **can sometimes be serialized**. | A Go struct that embeds an unexported struct type **cannot be serialized**. | [EmbedUnexported](/diff_test.go#:~:text=TestEmbedUnexported) | - -See [diff_test.go](/diff_test.go) for details about every change. - -## Performance - -One of the goals of the v2 module is to be more performant than v1. - -Each of the charts below show the performance across -several different JSON implementations: - -* `JSONv1` is `encoding/json` at `v1.18.2` -* `JSONv2` is `github.com/go-json-experiment/json` at `v0.0.0-20220524042235-dd8be80fc4a7` -* `JSONIterator` is `github.com/json-iterator/go` at `v1.1.12` -* `SegmentJSON` is `github.com/segmentio/encoding/json` at `v0.3.5` -* `GoJSON` is `github.com/goccy/go-json` at `v0.9.7` -* `SonicJSON` is `github.com/bytedance/sonic` at `v1.3.0` - -Benchmarks were run across various datasets: - -* `CanadaGeometry` is a GeoJSON (RFC 7946) representation of Canada. - It contains many JSON arrays of arrays of two-element arrays of numbers. -* `CITMCatalog` contains many JSON objects using numeric names. -* `SyntheaFHIR` is sample JSON data from the healthcare industry. - It contains many nested JSON objects with mostly string values, - where the set of unique string values is relatively small. -* `TwitterStatus` is the JSON response from the Twitter API. - It contains a mix of all different JSON kinds, where string values - are a mix of both single-byte ASCII and multi-byte Unicode. -* `GolangSource` is a simple tree representing the Go source code. - It contains many nested JSON objects, each with the same schema. -* `StringUnicode` contains many strings with multi-byte Unicode runes. - -All of the implementations other than `JSONv1` and `JSONv2` make -extensive use of `unsafe`. As such, we expect those to generally be faster, -but at the cost of memory and type safety. `SonicJSON` goes a step even further -and uses just-in-time compilation to generate machine code specialized -for the Go type being marshaled or unmarshaled. -Also, `SonicJSON` does not validate JSON strings for valid UTF-8, -and so gains a notable performance boost on datasets with multi-byte Unicode. -Benchmarks are performed based on the default marshal and unmarshal behavior -of each package. Note that `JSONv2` aims to be safe and correct by default, -which may not be the most performant strategy. - -`JSONv2` has several semantic changes relative to `JSONv1` that -impacts performance: - -1. When marshaling, `JSONv2` no longer sorts the keys of a Go map. - This will improve performance. -2. When marshaling or unmarshaling, `JSONv2` always checks - to make sure JSON object names are unique. - This will hurt performance, but is more correct. -3. When marshaling or unmarshaling, `JSONv2` always - shallow copies the underlying value for a Go interface and - shallow copies the key and value for entries in a Go map. - This is done to keep the value as addressable so that `JSONv2` can - call methods and functions that operate on a pointer receiver. - This will hurt performance, but is more correct. - -All of the charts are unit-less since the values are normalized -relative to `JSONv1`, which is why `JSONv1` always has a value of 1. -A lower value is better (i.e., runs faster). - -Benchmarks were performed on an AMD Ryzen 9 5900X. - -The code for the benchmarks is located at -https://github.com/go-json-experiment/jsonbench. - -### Marshal Performance - -#### Concrete types - -![Benchmark Marshal Concrete](benchmark-marshal-concrete.png) - -* This compares marshal performance when serializing - [from concrete types](/testdata_test.go). -* The `JSONv1` implementation is close to optimal (without the use of `unsafe`). -* Relative to `JSONv1`, `JSONv2` is generally as fast or slightly faster. -* Relative to `JSONIterator`, `JSONv2` is up to 1.3x faster. -* Relative to `SegmentJSON`, `JSONv2` is up to 1.8x slower. -* Relative to `GoJSON`, `JSONv2` is up to 2.0x slower. -* Relative to `SonicJSON`, `JSONv2` is about 1.8x to 3.2x slower - (ignoring `StringUnicode` since `SonicJSON` does not validate UTF-8). -* For `JSONv1` and `JSONv2`, marshaling from concrete types is - mostly limited by the performance of Go reflection. - -#### Interface types - -![Benchmark Marshal Interface](benchmark-marshal-interface.png) - -* This compares marshal performance when serializing from - `any`, `map[string]any`, and `[]any` types. -* Relative to `JSONv1`, `JSONv2` is about 1.5x to 4.2x faster. -* Relative to `JSONIterator`, `JSONv2` is about 1.1x to 2.4x faster. -* Relative to `SegmentJSON`, `JSONv2` is about 1.2x to 1.8x faster. -* Relative to `GoJSON`, `JSONv2` is about 1.1x to 2.5x faster. -* Relative to `SonicJSON`, `JSONv2` is up to 1.5x slower - (ignoring `StringUnicode` since `SonicJSON` does not validate UTF-8). -* `JSONv2` is faster than the alternatives. - One advantange is because it does not sort the keys for a `map[string]any`, - while alternatives (except `SonicJSON` and `JSONIterator`) do sort the keys. - -#### RawValue types - -![Benchmark Marshal Rawvalue](benchmark-marshal-rawvalue.png) - -* This compares performance when marshaling from a `json.RawValue`. - This mostly exercises the underlying encoder and - hides the cost of Go reflection. -* Relative to `JSONv1`, `JSONv2` is about 3.5x to 7.8x faster. -* `JSONIterator` is blazingly fast because - [it does not validate whether the raw value is valid](https://go.dev/play/p/bun9IXQCKRe) - and simply copies it to the output. -* Relative to `SegmentJSON`, `JSONv2` is about 1.5x to 2.7x faster. -* Relative to `GoJSON`, `JSONv2` is up to 2.2x faster. -* Relative to `SonicJSON`, `JSONv2` is up to 1.5x faster. -* Aside from `JSONIterator`, `JSONv2` is generally the fastest. - -### Unmarshal Performance - -#### Concrete types - -![Benchmark Unmarshal Concrete](benchmark-unmarshal-concrete.png) - -* This compares unmarshal performance when deserializing - [into concrete types](/testdata_test.go). -* Relative to `JSONv1`, `JSONv2` is about 1.8x to 5.7x faster. -* Relative to `JSONIterator`, `JSONv2` is about 1.1x to 1.6x slower. -* Relative to `SegmentJSON`, `JSONv2` is up to 2.5x slower. -* Relative to `GoJSON`, `JSONv2` is about 1.4x to 2.1x slower. -* Relative to `SonicJSON`, `JSONv2` is up to 4.0x slower - (ignoring `StringUnicode` since `SonicJSON` does not validate UTF-8). -* For `JSONv1` and `JSONv2`, unmarshaling into concrete types is - mostly limited by the performance of Go reflection. - -#### Interface types - -![Benchmark Unmarshal Interface](benchmark-unmarshal-interface.png) - -* This compares unmarshal performance when deserializing into - `any`, `map[string]any`, and `[]any` types. -* Relative to `JSONv1`, `JSONv2` is about 1.tx to 4.3x faster. -* Relative to `JSONIterator`, `JSONv2` is up to 1.5x faster. -* Relative to `SegmentJSON`, `JSONv2` is about 1.5 to 3.7x faster. -* Relative to `GoJSON`, `JSONv2` is up to 1.3x faster. -* Relative to `SonicJSON`, `JSONv2` is up to 1.5x slower - (ignoring `StringUnicode` since `SonicJSON` does not validate UTF-8). -* Aside from `SonicJSON`, `JSONv2` is generally just as fast - or faster than all the alternatives. - -#### RawValue types - -![Benchmark Unmarshal Rawvalue](benchmark-unmarshal-rawvalue.png) - -* This compares performance when unmarshaling into a `json.RawValue`. - This mostly exercises the underlying decoder and - hides away most of the cost of Go reflection. -* Relative to `JSONv1`, `JSONv2` is about 8.3x to 17.0x faster. -* Relative to `JSONIterator`, `JSONv2` is up to 2.0x faster. -* Relative to `SegmentJSON`, `JSONv2` is up to 1.6x faster or 1.7x slower. -* Relative to `GoJSON`, `JSONv2` is up to 1.9x faster or 2.1x slower. -* Relative to `SonicJSON`, `JSONv2` is up to 2.0x faster - (ignoring `StringUnicode` since `SonicJSON` does not validate UTF-8). -* `JSONv1` takes a - [lexical scanning approach](https://talks.golang.org/2011/lex.slide#1), - which performs a virtual function call for every byte of input. - In contrast, `JSONv2` makes heavy use of iterative and linear parsing logic - (with extra complexity to resume parsing when encountering segmented buffers). -* `JSONv2` is comparable to the alternatives that use `unsafe`. - Generally it is faster, but sometimes it is slower. diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal.go b/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal.go deleted file mode 100644 index e6c6216ff..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal.go +++ /dev/null @@ -1,513 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package json - -import ( - "errors" - "io" - "reflect" - "sync" -) - -// MarshalOptions configures how Go data is serialized as JSON data. -// The zero value is equivalent to the default marshal settings. -type MarshalOptions struct { - requireKeyedLiterals - nonComparable - - // Marshalers is a list of type-specific marshalers to use. - Marshalers *Marshalers - - // StringifyNumbers specifies that numeric Go types should be serialized - // as a JSON string containing the equivalent JSON number value. - // - // According to RFC 8259, section 6, a JSON implementation may choose to - // limit the representation of a JSON number to an IEEE 754 binary64 value. - // This may cause decoders to lose precision for int64 and uint64 types. - // Escaping JSON numbers as a JSON string preserves the exact precision. - StringifyNumbers bool - - // DiscardUnknownMembers specifies that marshaling should ignore any - // JSON object members stored in Go struct fields dedicated to storing - // unknown JSON object members. - DiscardUnknownMembers bool - - // Deterministic specifies that the same input value will be serialized - // as the exact same output bytes. Different processes of - // the same program will serialize equal values to the same bytes, - // but different versions of the same program are not guaranteed - // to produce the exact same sequence of bytes. - Deterministic bool - - // formatDepth is the depth at which we respect the format flag. - formatDepth int - // format is custom formatting for the value at the specified depth. - format string -} - -// Marshal serializes a Go value as a []byte with default options. -// It is a thin wrapper over MarshalOptions.Marshal. -func Marshal(in any) (out []byte, err error) { - return MarshalOptions{}.Marshal(EncodeOptions{}, in) -} - -// MarshalFull serializes a Go value into an io.Writer with default options. -// It is a thin wrapper over MarshalOptions.MarshalFull. -func MarshalFull(out io.Writer, in any) error { - return MarshalOptions{}.MarshalFull(EncodeOptions{}, out, in) -} - -// Marshal serializes a Go value as a []byte according to the provided -// marshal and encode options. It does not terminate the output with a newline. -// See MarshalNext for details about the conversion of a Go value into JSON. -func (mo MarshalOptions) Marshal(eo EncodeOptions, in any) (out []byte, err error) { - enc := getBufferedEncoder(eo) - defer putBufferedEncoder(enc) - enc.options.omitTopLevelNewline = true - err = mo.MarshalNext(enc, in) - // TODO(https://go.dev/issue/45038): Use bytes.Clone. - return append([]byte(nil), enc.buf...), err -} - -// MarshalFull serializes a Go value into an io.Writer according to the provided -// marshal and encode options. It does not terminate the output with a newline. -// See MarshalNext for details about the conversion of a Go value into JSON. -func (mo MarshalOptions) MarshalFull(eo EncodeOptions, out io.Writer, in any) error { - enc := getStreamingEncoder(out, eo) - defer putStreamingEncoder(enc) - enc.options.omitTopLevelNewline = true - err := mo.MarshalNext(enc, in) - return err -} - -// MarshalNext encodes a Go value as the next JSON value according to -// the provided marshal options. -// -// Type-specific marshal functions and methods take precedence -// over the default representation of a value. -// Functions or methods that operate on *T are only called when encoding -// a value of type T (by taking its address) or a non-nil value of *T. -// MarshalNext ensures that a value is always addressable -// (by boxing it on the heap if necessary) so that -// these functions and methods can be consistently called. For performance, -// it is recommended that MarshalNext be passed a non-nil pointer to the value. -// -// The input value is encoded as JSON according the following rules: -// -// - If any type-specific functions in MarshalOptions.Marshalers match -// the value type, then those functions are called to encode the value. -// If all applicable functions return SkipFunc, -// then the value is encoded according to subsequent rules. -// -// - If the value type implements MarshalerV2, -// then the MarshalNextJSON method is called to encode the value. -// -// - If the value type implements MarshalerV1, -// then the MarshalJSON method is called to encode the value. -// -// - If the value type implements encoding.TextMarshaler, -// then the MarshalText method is called to encode the value and -// subsequently encode its result as a JSON string. -// -// - Otherwise, the value is encoded according to the value's type -// as described in detail below. -// -// Most Go types have a default JSON representation. -// Certain types support specialized formatting according to -// a format flag optionally specified in the Go struct tag -// for the struct field that contains the current value -// (see the “JSON Representation of Go structs” section for more details). -// -// The representation of each type is as follows: -// -// - A Go boolean is encoded as a JSON boolean (e.g., true or false). -// It does not support any custom format flags. -// -// - A Go string is encoded as a JSON string. -// It does not support any custom format flags. -// -// - A Go []byte or [N]byte is encoded as a JSON string containing -// the binary value encoded using RFC 4648. -// If the format is "base64" or unspecified, then this uses RFC 4648, section 4. -// If the format is "base64url", then this uses RFC 4648, section 5. -// If the format is "base32", then this uses RFC 4648, section 6. -// If the format is "base32hex", then this uses RFC 4648, section 7. -// If the format is "base16" or "hex", then this uses RFC 4648, section 8. -// If the format is "array", then the bytes value is encoded as a JSON array -// where each byte is recursively JSON-encoded as each JSON array element. -// -// - A Go integer is encoded as a JSON number without fractions or exponents. -// If MarshalOptions.StringifyNumbers is specified, then the JSON number is -// encoded within a JSON string. It does not support any custom format -// flags. -// -// - A Go float is encoded as a JSON number. -// If MarshalOptions.StringifyNumbers is specified, -// then the JSON number is encoded within a JSON string. -// If the format is "nonfinite", then NaN, +Inf, and -Inf are encoded as -// the JSON strings "NaN", "Infinity", and "-Infinity", respectively. -// Otherwise, the presence of non-finite numbers results in a SemanticError. -// -// - A Go map is encoded as a JSON object, where each Go map key and value -// is recursively encoded as a name and value pair in the JSON object. -// The Go map key must encode as a JSON string, otherwise this results -// in a SemanticError. When encoding keys, MarshalOptions.StringifyNumbers -// is automatically applied so that numeric keys encode as JSON strings. -// The Go map is traversed in a non-deterministic order. -// For deterministic encoding, consider using RawValue.Canonicalize. -// If the format is "emitnull", then a nil map is encoded as a JSON null. -// Otherwise by default, a nil map is encoded as an empty JSON object. -// -// - A Go struct is encoded as a JSON object. -// See the “JSON Representation of Go structs” section -// in the package-level documentation for more details. -// -// - A Go slice is encoded as a JSON array, where each Go slice element -// is recursively JSON-encoded as the elements of the JSON array. -// If the format is "emitnull", then a nil slice is encoded as a JSON null. -// Otherwise by default, a nil slice is encoded as an empty JSON array. -// -// - A Go array is encoded as a JSON array, where each Go array element -// is recursively JSON-encoded as the elements of the JSON array. -// The JSON array length is always identical to the Go array length. -// It does not support any custom format flags. -// -// - A Go pointer is encoded as a JSON null if nil, otherwise it is -// the recursively JSON-encoded representation of the underlying value. -// Format flags are forwarded to the encoding of the underlying value. -// -// - A Go interface is encoded as a JSON null if nil, otherwise it is -// the recursively JSON-encoded representation of the underlying value. -// It does not support any custom format flags. -// -// - A Go time.Time is encoded as a JSON string containing the timestamp -// formatted in RFC 3339 with nanosecond resolution. -// If the format matches one of the format constants declared -// in the time package (e.g., RFC1123), then that format is used. -// Otherwise, the format is used as-is with time.Time.Format if non-empty. -// -// - A Go time.Duration is encoded as a JSON string containing the duration -// formatted according to time.Duration.String. -// If the format is "nanos", it is encoded as a JSON number -// containing the number of nanoseconds in the duration. -// -// - All other Go types (e.g., complex numbers, channels, and functions) -// have no default representation and result in a SemanticError. -// -// JSON cannot represent cyclic data structures and -// MarshalNext does not handle them. -// Passing cyclic structures will result in an error. -func (mo MarshalOptions) MarshalNext(out *Encoder, in any) error { - v := reflect.ValueOf(in) - if !v.IsValid() || (v.Kind() == reflect.Pointer && v.IsNil()) { - return out.WriteToken(Null) - } - // Shallow copy non-pointer values to obtain an addressable value. - // It is beneficial to performance to always pass pointers to avoid this. - if v.Kind() != reflect.Pointer { - v2 := reflect.New(v.Type()) - v2.Elem().Set(v) - v = v2 - } - va := addressableValue{v.Elem()} // dereferenced pointer is always addressable - t := va.Type() - - // Lookup and call the marshal function for this type. - marshal := lookupArshaler(t).marshal - if mo.Marshalers != nil { - marshal, _ = mo.Marshalers.lookup(marshal, t) - } - if err := marshal(mo, out, va); err != nil { - if !out.options.AllowDuplicateNames { - out.tokens.invalidateDisabledNamespaces() - } - return err - } - return nil -} - -// UnmarshalOptions configures how JSON data is deserialized as Go data. -// The zero value is equivalent to the default unmarshal settings. -type UnmarshalOptions struct { - requireKeyedLiterals - nonComparable - - // Unmarshalers is a list of type-specific unmarshalers to use. - Unmarshalers *Unmarshalers - - // StringifyNumbers specifies that numeric Go types can be deserialized - // from either a JSON number or a JSON string containing a JSON number - // without any surrounding whitespace. - StringifyNumbers bool - - // RejectUnknownMembers specifies that unknown members should be rejected - // when unmarshaling a JSON object, regardless of whether there is a field - // to store unknown members. - RejectUnknownMembers bool - - // formatDepth is the depth at which we respect the format flag. - formatDepth int - // format is custom formatting for the value at the specified depth. - format string -} - -// Unmarshal deserializes a Go value from a []byte with default options. -// It is a thin wrapper over UnmarshalOptions.Unmarshal. -func Unmarshal(in []byte, out any) error { - return UnmarshalOptions{}.Unmarshal(DecodeOptions{}, in, out) -} - -// UnmarshalFull deserializes a Go value from an io.Reader with default options. -// It is a thin wrapper over UnmarshalOptions.UnmarshalFull. -func UnmarshalFull(in io.Reader, out any) error { - return UnmarshalOptions{}.UnmarshalFull(DecodeOptions{}, in, out) -} - -// Unmarshal deserializes a Go value from a []byte according to the -// provided unmarshal and decode options. The output must be a non-nil pointer. -// The input must be a single JSON value with optional whitespace interspersed. -// See UnmarshalNext for details about the conversion of JSON into a Go value. -func (uo UnmarshalOptions) Unmarshal(do DecodeOptions, in []byte, out any) error { - dec := getBufferedDecoder(in, do) - defer putBufferedDecoder(dec) - return uo.unmarshalFull(dec, out) -} - -// UnmarshalFull deserializes a Go value from an io.Reader according to the -// provided unmarshal and decode options. The output must be a non-nil pointer. -// The input must be a single JSON value with optional whitespace interspersed. -// It consumes the entirety of io.Reader until io.EOF is encountered. -// See UnmarshalNext for details about the conversion of JSON into a Go value. -func (uo UnmarshalOptions) UnmarshalFull(do DecodeOptions, in io.Reader, out any) error { - dec := getStreamingDecoder(in, do) - defer putStreamingDecoder(dec) - return uo.unmarshalFull(dec, out) -} -func (uo UnmarshalOptions) unmarshalFull(in *Decoder, out any) error { - switch err := uo.UnmarshalNext(in, out); err { - case nil: - return in.checkEOF() - case io.EOF: - return io.ErrUnexpectedEOF - default: - return err - } -} - -// UnmarshalNext decodes the next JSON value into a Go value according to -// the provided unmarshal options. The output must be a non-nil pointer. -// -// Type-specific unmarshal functions and methods take precedence -// over the default representation of a value. -// Functions or methods that operate on *T are only called when decoding -// a value of type T (by taking its address) or a non-nil value of *T. -// UnmarshalNext ensures that a value is always addressable -// (by boxing it on the heap if necessary) so that -// these functions and methods can be consistently called. -// -// The input is decoded into the output according the following rules: -// -// - If any type-specific functions in UnmarshalOptions.Unmarshalers match -// the value type, then those functions are called to decode the JSON -// value. If all applicable functions return SkipFunc, -// then the input is decoded according to subsequent rules. -// -// - If the value type implements UnmarshalerV2, -// then the UnmarshalNextJSON method is called to decode the JSON value. -// -// - If the value type implements UnmarshalerV1, -// then the UnmarshalJSON method is called to decode the JSON value. -// -// - If the value type implements encoding.TextUnmarshaler, -// then the input is decoded as a JSON string and -// the UnmarshalText method is called with the decoded string value. -// This fails with a SemanticError if the input is not a JSON string. -// -// - Otherwise, the JSON value is decoded according to the value's type -// as described in detail below. -// -// Most Go types have a default JSON representation. -// Certain types support specialized formatting according to -// a format flag optionally specified in the Go struct tag -// for the struct field that contains the current value -// (see the “JSON Representation of Go structs” section for more details). -// A JSON null may be decoded into every supported Go value where -// it is equivalent to storing the zero value of the Go value. -// If the input JSON kind is not handled by the current Go value type, -// then this fails with a SemanticError. Unless otherwise specified, -// the decoded value replaces any pre-existing value. -// -// The representation of each type is as follows: -// -// - A Go boolean is decoded from a JSON boolean (e.g., true or false). -// It does not support any custom format flags. -// -// - A Go string is decoded from a JSON string. -// It does not support any custom format flags. -// -// - A Go []byte or [N]byte is decoded from a JSON string -// containing the binary value encoded using RFC 4648. -// If the format is "base64" or unspecified, then this uses RFC 4648, section 4. -// If the format is "base64url", then this uses RFC 4648, section 5. -// If the format is "base32", then this uses RFC 4648, section 6. -// If the format is "base32hex", then this uses RFC 4648, section 7. -// If the format is "base16" or "hex", then this uses RFC 4648, section 8. -// If the format is "array", then the Go slice or array is decoded from a -// JSON array where each JSON element is recursively decoded for each byte. -// When decoding into a non-nil []byte, the slice length is reset to zero -// and the decoded input is appended to it. -// When decoding into a [N]byte, the input must decode to exactly N bytes, -// otherwise it fails with a SemanticError. -// -// - A Go integer is decoded from a JSON number. -// It may also be decoded from a JSON string containing a JSON number -// if UnmarshalOptions.StringifyNumbers is specified. -// It fails with a SemanticError if the JSON number -// has a fractional or exponent component. -// It also fails if it overflows the representation of the Go integer type. -// It does not support any custom format flags. -// -// - A Go float is decoded from a JSON number. -// It may also be decoded from a JSON string containing a JSON number -// if UnmarshalOptions.StringifyNumbers is specified. -// The JSON number is parsed as the closest representable Go float value. -// If the format is "nonfinite", then the JSON strings -// "NaN", "Infinity", and "-Infinity" are decoded as NaN, +Inf, and -Inf. -// Otherwise, the presence of such strings results in a SemanticError. -// -// - A Go map is decoded from a JSON object, -// where each JSON object name and value pair is recursively decoded -// as the Go map key and value. When decoding keys, -// UnmarshalOptions.StringifyNumbers is automatically applied so that -// numeric keys can decode from JSON strings. Maps are not cleared. -// If the Go map is nil, then a new map is allocated to decode into. -// If the decoded key matches an existing Go map entry, the entry value -// is reused by decoding the JSON object value into it. -// The only supported format is "emitnull" and has no effect when decoding. -// -// - A Go struct is decoded from a JSON object. -// See the “JSON Representation of Go structs” section -// in the package-level documentation for more details. -// -// - A Go slice is decoded from a JSON array, where each JSON element -// is recursively decoded and appended to the Go slice. -// Before appending into a Go slice, a new slice is allocated if it is nil, -// otherwise the slice length is reset to zero. -// The only supported format is "emitnull" and has no effect when decoding. -// -// - A Go array is decoded from a JSON array, where each JSON array element -// is recursively decoded as each corresponding Go array element. -// Each Go array element is zeroed before decoding into it. -// It fails with a SemanticError if the JSON array does not contain -// the exact same number of elements as the Go array. -// It does not support any custom format flags. -// -// - A Go pointer is decoded based on the JSON kind and underlying Go type. -// If the input is a JSON null, then this stores a nil pointer. -// Otherwise, it allocates a new underlying value if the pointer is nil, -// and recursively JSON decodes into the underlying value. -// Format flags are forwarded to the decoding of the underlying type. -// -// - A Go interface is decoded based on the JSON kind and underlying Go type. -// If the input is a JSON null, then this stores a nil interface value. -// Otherwise, a nil interface value of an empty interface type is initialized -// with a zero Go bool, string, float64, map[string]any, or []any if the -// input is a JSON boolean, string, number, object, or array, respectively. -// If the interface value is still nil, then this fails with a SemanticError -// since decoding could not determine an appropriate Go type to decode into. -// For example, unmarshaling into a nil io.Reader fails since -// there is no concrete type to populate the interface value with. -// Otherwise an underlying value exists and it recursively decodes -// the JSON input into it. It does not support any custom format flags. -// -// - A Go time.Time is decoded from a JSON string containing the time -// formatted in RFC 3339 with nanosecond resolution. -// If the format matches one of the format constants declared in -// the time package (e.g., RFC1123), then that format is used for parsing. -// Otherwise, the format is used as-is with time.Time.Parse if non-empty. -// -// - A Go time.Duration is decoded from a JSON string by -// passing the decoded string to time.ParseDuration. -// If the format is "nanos", it is instead decoded from a JSON number -// containing the number of nanoseconds in the duration. -// -// - All other Go types (e.g., complex numbers, channels, and functions) -// have no default representation and result in a SemanticError. -// -// In general, unmarshaling follows merge semantics (similar to RFC 7396) -// where the decoded Go value replaces the destination value -// for any JSON kind other than an object. -// For JSON objects, the input object is merged into the destination value -// where matching object members recursively apply merge semantics. -func (uo UnmarshalOptions) UnmarshalNext(in *Decoder, out any) error { - v := reflect.ValueOf(out) - if !v.IsValid() || v.Kind() != reflect.Pointer || v.IsNil() { - var t reflect.Type - if v.IsValid() { - t = v.Type() - if t.Kind() == reflect.Pointer { - t = t.Elem() - } - } - err := errors.New("value must be passed as a non-nil pointer reference") - return &SemanticError{action: "unmarshal", GoType: t, Err: err} - } - va := addressableValue{v.Elem()} // dereferenced pointer is always addressable - t := va.Type() - - // Lookup and call the unmarshal function for this type. - unmarshal := lookupArshaler(t).unmarshal - if uo.Unmarshalers != nil { - unmarshal, _ = uo.Unmarshalers.lookup(unmarshal, t) - } - if err := unmarshal(uo, in, va); err != nil { - if !in.options.AllowDuplicateNames { - in.tokens.invalidateDisabledNamespaces() - } - return err - } - return nil -} - -// addressableValue is a reflect.Value that is guaranteed to be addressable -// such that calling the Addr and Set methods do not panic. -// -// There is no compile magic that enforces this property, -// but rather the need to construct this type makes it easier to examine each -// construction site to ensure that this property is upheld. -type addressableValue struct{ reflect.Value } - -// newAddressableValue constructs a new addressable value of type t. -func newAddressableValue(t reflect.Type) addressableValue { - return addressableValue{reflect.New(t).Elem()} -} - -// All marshal and unmarshal behavior is implemented using these signatures. -type ( - marshaler = func(MarshalOptions, *Encoder, addressableValue) error - unmarshaler = func(UnmarshalOptions, *Decoder, addressableValue) error -) - -type arshaler struct { - marshal marshaler - unmarshal unmarshaler - nonDefault bool -} - -var lookupArshalerCache sync.Map // map[reflect.Type]*arshaler - -func lookupArshaler(t reflect.Type) *arshaler { - if v, ok := lookupArshalerCache.Load(t); ok { - return v.(*arshaler) - } - - fncs := makeDefaultArshaler(t) - fncs = makeMethodArshaler(fncs, t) - fncs = makeTimeArshaler(fncs, t) - - // Use the last stored so that duplicate arshalers can be garbage collected. - v, _ := lookupArshalerCache.LoadOrStore(t, fncs) - return v.(*arshaler) -} diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_any.go b/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_any.go deleted file mode 100644 index c62b1f320..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_any.go +++ /dev/null @@ -1,238 +0,0 @@ -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package json - -import "reflect" - -// This files contains an optimized marshal and unmarshal implementation -// for the any type. This type is often used when the Go program has -// no knowledge of the JSON schema. This is a common enough occurrence -// to justify the complexity of adding logic for this. - -func marshalValueAny(mo MarshalOptions, enc *Encoder, val any) error { - switch val := val.(type) { - case nil: - return enc.WriteToken(Null) - case bool: - return enc.WriteToken(Bool(val)) - case string: - return enc.WriteToken(String(val)) - case float64: - return enc.WriteToken(Float(val)) - case map[string]any: - return marshalObjectAny(mo, enc, val) - case []any: - return marshalArrayAny(mo, enc, val) - default: - v := newAddressableValue(reflect.TypeOf(val)) - v.Set(reflect.ValueOf(val)) - marshal := lookupArshaler(v.Type()).marshal - if mo.Marshalers != nil { - marshal, _ = mo.Marshalers.lookup(marshal, v.Type()) - } - return marshal(mo, enc, v) - } -} - -func unmarshalValueAny(uo UnmarshalOptions, dec *Decoder) (any, error) { - switch k := dec.PeekKind(); k { - case '{': - return unmarshalObjectAny(uo, dec) - case '[': - return unmarshalArrayAny(uo, dec) - default: - var flags valueFlags - val, err := dec.readValue(&flags) - if err != nil { - return nil, err - } - switch val.Kind() { - case 'n': - return nil, nil - case 'f': - return false, nil - case 't': - return true, nil - case '"': - val = unescapeStringMayCopy(val, flags.isVerbatim()) - if dec.stringCache == nil { - dec.stringCache = new(stringCache) - } - return dec.stringCache.make(val), nil - case '0': - fv, _ := parseFloat(val, 64) // ignore error since readValue guarantees val is valid - return fv, nil - default: - panic("BUG: invalid kind: " + k.String()) - } - } -} - -func marshalObjectAny(mo MarshalOptions, enc *Encoder, obj map[string]any) error { - // Check for cycles. - if enc.tokens.depth() > startDetectingCyclesAfter { - v := reflect.ValueOf(obj) - if err := enc.seenPointers.visit(v); err != nil { - return err - } - defer enc.seenPointers.leave(v) - } - - // Optimize for marshaling an empty map without any preceding whitespace. - if len(obj) == 0 && !enc.options.multiline && !enc.tokens.last.needObjectName() { - enc.buf = enc.tokens.mayAppendDelim(enc.buf, '{') - enc.buf = append(enc.buf, "{}"...) - enc.tokens.last.increment() - if enc.needFlush() { - return enc.flush() - } - return nil - } - - if err := enc.WriteToken(ObjectStart); err != nil { - return err - } - // A Go map guarantees that each entry has a unique key - // The only possibility of duplicates is due to invalid UTF-8. - if !enc.options.AllowInvalidUTF8 { - enc.tokens.last.disableNamespace() - } - if !mo.Deterministic || len(obj) <= 1 { - for name, val := range obj { - if err := enc.WriteToken(String(name)); err != nil { - return err - } - if err := marshalValueAny(mo, enc, val); err != nil { - return err - } - } - } else { - names := getStrings(len(obj)) - var i int - for name := range obj { - (*names)[i] = name - i++ - } - names.Sort() - for _, name := range *names { - if err := enc.WriteToken(String(name)); err != nil { - return err - } - if err := marshalValueAny(mo, enc, obj[name]); err != nil { - return err - } - } - putStrings(names) - } - if err := enc.WriteToken(ObjectEnd); err != nil { - return err - } - return nil -} - -func unmarshalObjectAny(uo UnmarshalOptions, dec *Decoder) (map[string]any, error) { - tok, err := dec.ReadToken() - if err != nil { - return nil, err - } - k := tok.Kind() - switch k { - case 'n': - return nil, nil - case '{': - obj := make(map[string]any) - // A Go map guarantees that each entry has a unique key - // The only possibility of duplicates is due to invalid UTF-8. - if !dec.options.AllowInvalidUTF8 { - dec.tokens.last.disableNamespace() - } - for dec.PeekKind() != '}' { - tok, err := dec.ReadToken() - if err != nil { - return obj, err - } - name := tok.String() - - // Manually check for duplicate names. - if _, ok := obj[name]; ok { - name := dec.previousBuffer() - err := &SyntacticError{str: "duplicate name " + string(name) + " in object"} - return obj, err.withOffset(dec.InputOffset() - int64(len(name))) - } - - val, err := unmarshalValueAny(uo, dec) - obj[name] = val - if err != nil { - return obj, err - } - } - if _, err := dec.ReadToken(); err != nil { - return obj, err - } - return obj, nil - } - return nil, &SemanticError{action: "unmarshal", JSONKind: k, GoType: mapStringAnyType} -} - -func marshalArrayAny(mo MarshalOptions, enc *Encoder, arr []any) error { - // Check for cycles. - if enc.tokens.depth() > startDetectingCyclesAfter { - v := reflect.ValueOf(arr) - if err := enc.seenPointers.visit(v); err != nil { - return err - } - defer enc.seenPointers.leave(v) - } - - // Optimize for marshaling an empty slice without any preceding whitespace. - if len(arr) == 0 && !enc.options.multiline && !enc.tokens.last.needObjectName() { - enc.buf = enc.tokens.mayAppendDelim(enc.buf, '[') - enc.buf = append(enc.buf, "[]"...) - enc.tokens.last.increment() - if enc.needFlush() { - return enc.flush() - } - return nil - } - - if err := enc.WriteToken(ArrayStart); err != nil { - return err - } - for _, val := range arr { - if err := marshalValueAny(mo, enc, val); err != nil { - return err - } - } - if err := enc.WriteToken(ArrayEnd); err != nil { - return err - } - return nil -} - -func unmarshalArrayAny(uo UnmarshalOptions, dec *Decoder) ([]any, error) { - tok, err := dec.ReadToken() - if err != nil { - return nil, err - } - k := tok.Kind() - switch k { - case 'n': - return nil, nil - case '[': - arr := []any{} - for dec.PeekKind() != ']' { - val, err := unmarshalValueAny(uo, dec) - arr = append(arr, val) - if err != nil { - return arr, err - } - } - if _, err := dec.ReadToken(); err != nil { - return arr, err - } - return arr, nil - } - return nil, &SemanticError{action: "unmarshal", JSONKind: k, GoType: sliceAnyType} -} diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_default.go b/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_default.go deleted file mode 100644 index fd26eba35..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_default.go +++ /dev/null @@ -1,1485 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package json - -import ( - "bytes" - "encoding/base32" - "encoding/base64" - "encoding/hex" - "errors" - "fmt" - "math" - "reflect" - "sort" - "strconv" - "sync" -) - -// optimizeCommon specifies whether to use optimizations targeted for certain -// common patterns, rather than using the slower, but more general logic. -// All tests should pass regardless of whether this is true or not. -const optimizeCommon = true - -var ( - // Most natural Go type that correspond with each JSON type. - anyType = reflect.TypeOf((*any)(nil)).Elem() // JSON value - boolType = reflect.TypeOf((*bool)(nil)).Elem() // JSON bool - stringType = reflect.TypeOf((*string)(nil)).Elem() // JSON string - float64Type = reflect.TypeOf((*float64)(nil)).Elem() // JSON number - mapStringAnyType = reflect.TypeOf((*map[string]any)(nil)).Elem() // JSON object - sliceAnyType = reflect.TypeOf((*[]any)(nil)).Elem() // JSON array - - bytesType = reflect.TypeOf((*[]byte)(nil)).Elem() - emptyStructType = reflect.TypeOf((*struct{})(nil)).Elem() -) - -const startDetectingCyclesAfter = 1000 - -type seenPointers map[typedPointer]struct{} - -type typedPointer struct { - typ reflect.Type - ptr any // always stores unsafe.Pointer, but avoids depending on unsafe -} - -// visit visits pointer p of type t, reporting an error if seen before. -// If successfully visited, then the caller must eventually call leave. -func (m *seenPointers) visit(v reflect.Value) error { - p := typedPointer{v.Type(), v.UnsafePointer()} - if _, ok := (*m)[p]; ok { - return &SemanticError{action: "marshal", GoType: p.typ, Err: errors.New("encountered a cycle")} - } - if *m == nil { - *m = make(map[typedPointer]struct{}) - } - (*m)[p] = struct{}{} - return nil -} -func (m *seenPointers) leave(v reflect.Value) { - p := typedPointer{v.Type(), v.UnsafePointer()} - delete(*m, p) -} - -func makeDefaultArshaler(t reflect.Type) *arshaler { - switch t.Kind() { - case reflect.Bool: - return makeBoolArshaler(t) - case reflect.String: - return makeStringArshaler(t) - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return makeIntArshaler(t) - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - return makeUintArshaler(t) - case reflect.Float32, reflect.Float64: - return makeFloatArshaler(t) - case reflect.Map: - return makeMapArshaler(t) - case reflect.Struct: - return makeStructArshaler(t) - case reflect.Slice: - fncs := makeSliceArshaler(t) - if t.AssignableTo(bytesType) { - return makeBytesArshaler(t, fncs) - } - return fncs - case reflect.Array: - fncs := makeArrayArshaler(t) - if reflect.SliceOf(t.Elem()).AssignableTo(bytesType) { - return makeBytesArshaler(t, fncs) - } - return fncs - case reflect.Pointer: - return makePointerArshaler(t) - case reflect.Interface: - return makeInterfaceArshaler(t) - default: - return makeInvalidArshaler(t) - } -} - -func makeBoolArshaler(t reflect.Type) *arshaler { - var fncs arshaler - fncs.marshal = func(mo MarshalOptions, enc *Encoder, va addressableValue) error { - if mo.format != "" && mo.formatDepth == enc.tokens.depth() { - return newInvalidFormatError("marshal", t, mo.format) - } - - // Optimize for marshaling without preceding whitespace. - if optimizeCommon && !enc.options.multiline && !enc.tokens.last.needObjectName() { - enc.buf = enc.tokens.mayAppendDelim(enc.buf, 't') - if va.Bool() { - enc.buf = append(enc.buf, "true"...) - } else { - enc.buf = append(enc.buf, "false"...) - } - enc.tokens.last.increment() - if enc.needFlush() { - return enc.flush() - } - return nil - } - - return enc.WriteToken(Bool(va.Bool())) - } - fncs.unmarshal = func(uo UnmarshalOptions, dec *Decoder, va addressableValue) error { - if uo.format != "" && uo.formatDepth == dec.tokens.depth() { - return newInvalidFormatError("unmarshal", t, uo.format) - } - tok, err := dec.ReadToken() - if err != nil { - return err - } - k := tok.Kind() - switch k { - case 'n': - va.SetBool(false) - return nil - case 't', 'f': - va.SetBool(tok.Bool()) - return nil - } - return &SemanticError{action: "unmarshal", JSONKind: k, GoType: t} - } - return &fncs -} - -func makeStringArshaler(t reflect.Type) *arshaler { - var fncs arshaler - fncs.marshal = func(mo MarshalOptions, enc *Encoder, va addressableValue) error { - if mo.format != "" && mo.formatDepth == enc.tokens.depth() { - return newInvalidFormatError("marshal", t, mo.format) - } - return enc.WriteToken(String(va.String())) - } - fncs.unmarshal = func(uo UnmarshalOptions, dec *Decoder, va addressableValue) error { - if uo.format != "" && uo.formatDepth == dec.tokens.depth() { - return newInvalidFormatError("unmarshal", t, uo.format) - } - var flags valueFlags - val, err := dec.readValue(&flags) - if err != nil { - return err - } - k := val.Kind() - switch k { - case 'n': - va.SetString("") - return nil - case '"': - val = unescapeStringMayCopy(val, flags.isVerbatim()) - if dec.stringCache == nil { - dec.stringCache = new(stringCache) - } - str := dec.stringCache.make(val) - va.SetString(str) - return nil - } - return &SemanticError{action: "unmarshal", JSONKind: k, GoType: t} - } - return &fncs -} - -var ( - encodeBase16 = func(dst, src []byte) { hex.Encode(dst, src) } - encodeBase32 = base32.StdEncoding.Encode - encodeBase32Hex = base32.HexEncoding.Encode - encodeBase64 = base64.StdEncoding.Encode - encodeBase64URL = base64.URLEncoding.Encode - encodedLenBase16 = hex.EncodedLen - encodedLenBase32 = base32.StdEncoding.EncodedLen - encodedLenBase32Hex = base32.HexEncoding.EncodedLen - encodedLenBase64 = base64.StdEncoding.EncodedLen - encodedLenBase64URL = base64.URLEncoding.EncodedLen - decodeBase16 = hex.Decode - decodeBase32 = base32.StdEncoding.Decode - decodeBase32Hex = base32.HexEncoding.Decode - decodeBase64 = base64.StdEncoding.Decode - decodeBase64URL = base64.URLEncoding.Decode - decodedLenBase16 = hex.DecodedLen - decodedLenBase32 = base32.StdEncoding.WithPadding(base32.NoPadding).DecodedLen - decodedLenBase32Hex = base32.HexEncoding.WithPadding(base32.NoPadding).DecodedLen - decodedLenBase64 = base64.StdEncoding.WithPadding(base64.NoPadding).DecodedLen - decodedLenBase64URL = base64.URLEncoding.WithPadding(base64.NoPadding).DecodedLen -) - -func makeBytesArshaler(t reflect.Type, fncs *arshaler) *arshaler { - // NOTE: This handles both []byte and [N]byte. - marshalDefault := fncs.marshal - fncs.marshal = func(mo MarshalOptions, enc *Encoder, va addressableValue) error { - encode, encodedLen := encodeBase64, encodedLenBase64 - if mo.format != "" && mo.formatDepth == enc.tokens.depth() { - switch mo.format { - case "base64": - encode, encodedLen = encodeBase64, encodedLenBase64 - case "base64url": - encode, encodedLen = encodeBase64URL, encodedLenBase64URL - case "base32": - encode, encodedLen = encodeBase32, encodedLenBase32 - case "base32hex": - encode, encodedLen = encodeBase32Hex, encodedLenBase32Hex - case "base16", "hex": - encode, encodedLen = encodeBase16, encodedLenBase16 - case "array": - mo.format = "" - return marshalDefault(mo, enc, va) - default: - return newInvalidFormatError("marshal", t, mo.format) - } - } - val := enc.UnusedBuffer() - b := va.Bytes() - n := len(`"`) + encodedLen(len(b)) + len(`"`) - if cap(val) < n { - val = make([]byte, n) - } else { - val = val[:n] - } - val[0] = '"' - encode(val[len(`"`):len(val)-len(`"`)], b) - val[len(val)-1] = '"' - return enc.WriteValue(val) - } - unmarshalDefault := fncs.unmarshal - fncs.unmarshal = func(uo UnmarshalOptions, dec *Decoder, va addressableValue) error { - decode, decodedLen, encodedLen := decodeBase64, decodedLenBase64, encodedLenBase64 - if uo.format != "" && uo.formatDepth == dec.tokens.depth() { - switch uo.format { - case "base64": - decode, decodedLen, encodedLen = decodeBase64, decodedLenBase64, encodedLenBase64 - case "base64url": - decode, decodedLen, encodedLen = decodeBase64URL, decodedLenBase64URL, encodedLenBase64URL - case "base32": - decode, decodedLen, encodedLen = decodeBase32, decodedLenBase32, encodedLenBase32 - case "base32hex": - decode, decodedLen, encodedLen = decodeBase32Hex, decodedLenBase32Hex, encodedLenBase32Hex - case "base16", "hex": - decode, decodedLen, encodedLen = decodeBase16, decodedLenBase16, encodedLenBase16 - case "array": - uo.format = "" - return unmarshalDefault(uo, dec, va) - default: - return newInvalidFormatError("unmarshal", t, uo.format) - } - } - var flags valueFlags - val, err := dec.readValue(&flags) - if err != nil { - return err - } - k := val.Kind() - switch k { - case 'n': - va.Set(reflect.Zero(t)) - return nil - case '"': - val = unescapeStringMayCopy(val, flags.isVerbatim()) - - // For base64 and base32, decodedLen computes the maximum output size - // when given the original input size. To compute the exact size, - // adjust the input size by excluding trailing padding characters. - // This is unnecessary for base16, but also harmless. - n := len(val) - for n > 0 && val[n-1] == '=' { - n-- - } - n = decodedLen(n) - b := va.Bytes() - if va.Kind() == reflect.Array { - if n != len(b) { - err := fmt.Errorf("decoded base64 length of %d mismatches array length of %d", n, len(b)) - return &SemanticError{action: "unmarshal", JSONKind: k, GoType: t, Err: err} - } - } else { - if b == nil || cap(b) < n { - b = make([]byte, n) - } else { - b = b[:n] - } - } - n2, err := decode(b, val) - if err == nil && len(val) != encodedLen(n2) { - // TODO(https://go.dev/issue/53845): RFC 4648, section 3.3, - // specifies that non-alphabet characters must be rejected. - // Unfortunately, the "base32" and "base64" packages allow - // '\r' and '\n' characters by default. - err = errors.New("illegal data at input byte " + strconv.Itoa(bytes.IndexAny(val, "\r\n"))) - } - if err != nil { - return &SemanticError{action: "unmarshal", JSONKind: k, GoType: t, Err: err} - } - if va.Kind() == reflect.Slice { - va.SetBytes(b) - } - return nil - } - return &SemanticError{action: "unmarshal", JSONKind: k, GoType: t} - } - return fncs -} - -func makeIntArshaler(t reflect.Type) *arshaler { - var fncs arshaler - bits := t.Bits() - fncs.marshal = func(mo MarshalOptions, enc *Encoder, va addressableValue) error { - if mo.format != "" && mo.formatDepth == enc.tokens.depth() { - return newInvalidFormatError("marshal", t, mo.format) - } - - // Optimize for marshaling without preceding whitespace or string escaping. - if optimizeCommon && !enc.options.multiline && !mo.StringifyNumbers && !enc.tokens.last.needObjectName() { - enc.buf = enc.tokens.mayAppendDelim(enc.buf, '0') - enc.buf = strconv.AppendInt(enc.buf, va.Int(), 10) - enc.tokens.last.increment() - if enc.needFlush() { - return enc.flush() - } - return nil - } - - x := math.Float64frombits(uint64(va.Int())) - return enc.writeNumber(x, rawIntNumber, mo.StringifyNumbers) - } - fncs.unmarshal = func(uo UnmarshalOptions, dec *Decoder, va addressableValue) error { - if uo.format != "" && uo.formatDepth == dec.tokens.depth() { - return newInvalidFormatError("unmarshal", t, uo.format) - } - var flags valueFlags - val, err := dec.readValue(&flags) - if err != nil { - return err - } - k := val.Kind() - switch k { - case 'n': - va.SetInt(0) - return nil - case '"': - if !uo.StringifyNumbers { - break - } - val = unescapeStringMayCopy(val, flags.isVerbatim()) - fallthrough - case '0': - var negOffset int - neg := val[0] == '-' - if neg { - negOffset = 1 - } - n, ok := parseDecUint(val[negOffset:]) - maxInt := uint64(1) << (bits - 1) - overflow := (neg && n > maxInt) || (!neg && n > maxInt-1) - if !ok { - if n != math.MaxUint64 { - err := fmt.Errorf("cannot parse %q as signed integer: %w", val, strconv.ErrSyntax) - return &SemanticError{action: "unmarshal", JSONKind: k, GoType: t, Err: err} - } - overflow = true - } - if overflow { - err := fmt.Errorf("cannot parse %q as signed integer: %w", val, strconv.ErrRange) - return &SemanticError{action: "unmarshal", JSONKind: k, GoType: t, Err: err} - } - if neg { - va.SetInt(int64(-n)) - } else { - va.SetInt(int64(+n)) - } - return nil - } - return &SemanticError{action: "unmarshal", JSONKind: k, GoType: t} - } - return &fncs -} - -func makeUintArshaler(t reflect.Type) *arshaler { - var fncs arshaler - bits := t.Bits() - fncs.marshal = func(mo MarshalOptions, enc *Encoder, va addressableValue) error { - if mo.format != "" && mo.formatDepth == enc.tokens.depth() { - return newInvalidFormatError("marshal", t, mo.format) - } - - // Optimize for marshaling without preceding whitespace or string escaping. - if optimizeCommon && !enc.options.multiline && !mo.StringifyNumbers && !enc.tokens.last.needObjectName() { - enc.buf = enc.tokens.mayAppendDelim(enc.buf, '0') - enc.buf = strconv.AppendUint(enc.buf, va.Uint(), 10) - enc.tokens.last.increment() - if enc.needFlush() { - return enc.flush() - } - return nil - } - - x := math.Float64frombits(va.Uint()) - return enc.writeNumber(x, rawUintNumber, mo.StringifyNumbers) - } - fncs.unmarshal = func(uo UnmarshalOptions, dec *Decoder, va addressableValue) error { - if uo.format != "" && uo.formatDepth == dec.tokens.depth() { - return newInvalidFormatError("unmarshal", t, uo.format) - } - var flags valueFlags - val, err := dec.readValue(&flags) - if err != nil { - return err - } - k := val.Kind() - switch k { - case 'n': - va.SetUint(0) - return nil - case '"': - if !uo.StringifyNumbers { - break - } - val = unescapeStringMayCopy(val, flags.isVerbatim()) - fallthrough - case '0': - n, ok := parseDecUint(val) - maxUint := uint64(1) << bits - overflow := n > maxUint-1 - if !ok { - if n != math.MaxUint64 { - err := fmt.Errorf("cannot parse %q as unsigned integer: %w", val, strconv.ErrSyntax) - return &SemanticError{action: "unmarshal", JSONKind: k, GoType: t, Err: err} - } - overflow = true - } - if overflow { - err := fmt.Errorf("cannot parse %q as unsigned integer: %w", val, strconv.ErrRange) - return &SemanticError{action: "unmarshal", JSONKind: k, GoType: t, Err: err} - } - va.SetUint(n) - return nil - } - return &SemanticError{action: "unmarshal", JSONKind: k, GoType: t} - } - return &fncs -} - -func makeFloatArshaler(t reflect.Type) *arshaler { - var fncs arshaler - bits := t.Bits() - fncs.marshal = func(mo MarshalOptions, enc *Encoder, va addressableValue) error { - var allowNonFinite bool - if mo.format != "" && mo.formatDepth == enc.tokens.depth() { - if mo.format == "nonfinite" { - allowNonFinite = true - } else { - return newInvalidFormatError("marshal", t, mo.format) - } - } - - fv := va.Float() - if math.IsNaN(fv) || math.IsInf(fv, 0) { - if !allowNonFinite { - err := fmt.Errorf("invalid value: %v", fv) - return &SemanticError{action: "marshal", GoType: t, Err: err} - } - return enc.WriteToken(Float(fv)) - } - - // Optimize for marshaling without preceding whitespace or string escaping. - if optimizeCommon && !enc.options.multiline && !mo.StringifyNumbers && !enc.tokens.last.needObjectName() { - enc.buf = enc.tokens.mayAppendDelim(enc.buf, '0') - enc.buf = appendNumber(enc.buf, fv, bits) - enc.tokens.last.increment() - if enc.needFlush() { - return enc.flush() - } - return nil - } - - return enc.writeNumber(fv, bits, mo.StringifyNumbers) - } - fncs.unmarshal = func(uo UnmarshalOptions, dec *Decoder, va addressableValue) error { - var allowNonFinite bool - if uo.format != "" && uo.formatDepth == dec.tokens.depth() { - if uo.format == "nonfinite" { - allowNonFinite = true - } else { - return newInvalidFormatError("unmarshal", t, uo.format) - } - } - var flags valueFlags - val, err := dec.readValue(&flags) - if err != nil { - return err - } - k := val.Kind() - switch k { - case 'n': - va.SetFloat(0) - return nil - case '"': - val = unescapeStringMayCopy(val, flags.isVerbatim()) - if allowNonFinite { - switch string(val) { - case "NaN": - va.SetFloat(math.NaN()) - return nil - case "Infinity": - va.SetFloat(math.Inf(+1)) - return nil - case "-Infinity": - va.SetFloat(math.Inf(-1)) - return nil - } - } - if !uo.StringifyNumbers { - break - } - if n, err := consumeNumber(val); n != len(val) || err != nil { - err := fmt.Errorf("cannot parse %q as JSON number: %w", val, strconv.ErrSyntax) - return &SemanticError{action: "unmarshal", JSONKind: k, GoType: t, Err: err} - } - fallthrough - case '0': - // NOTE: Floating-point parsing is by nature a lossy operation. - // We never report an overflow condition since we can always - // round the input to the closest representable finite value. - // For extremely large numbers, the closest value is ±MaxFloat. - fv, _ := parseFloat(val, bits) - va.SetFloat(fv) - return nil - } - return &SemanticError{action: "unmarshal", JSONKind: k, GoType: t} - } - return &fncs -} - -func makeMapArshaler(t reflect.Type) *arshaler { - // NOTE: The logic below disables namespaces for tracking duplicate names - // when handling map keys with a unique representation. - - // NOTE: Values retrieved from a map are not addressable, - // so we shallow copy the values to make them addressable and - // store them back into the map afterwards. - - var fncs arshaler - var ( - once sync.Once - keyFncs *arshaler - valFncs *arshaler - ) - init := func() { - keyFncs = lookupArshaler(t.Key()) - valFncs = lookupArshaler(t.Elem()) - } - fncs.marshal = func(mo MarshalOptions, enc *Encoder, va addressableValue) error { - // Check for cycles. - if enc.tokens.depth() > startDetectingCyclesAfter { - if err := enc.seenPointers.visit(va.Value); err != nil { - return err - } - defer enc.seenPointers.leave(va.Value) - } - - if mo.format != "" && mo.formatDepth == enc.tokens.depth() { - if mo.format == "emitnull" { - if va.IsNil() { - return enc.WriteToken(Null) - } - mo.format = "" - } else { - return newInvalidFormatError("marshal", t, mo.format) - } - } - - // Optimize for marshaling an empty map without any preceding whitespace. - n := va.Len() - if optimizeCommon && n == 0 && !enc.options.multiline && !enc.tokens.last.needObjectName() { - enc.buf = enc.tokens.mayAppendDelim(enc.buf, '{') - enc.buf = append(enc.buf, "{}"...) - enc.tokens.last.increment() - if enc.needFlush() { - return enc.flush() - } - return nil - } - - once.Do(init) - if err := enc.WriteToken(ObjectStart); err != nil { - return err - } - if n > 0 { - // Handle maps with numeric key types by stringifying them. - mko := mo - mko.StringifyNumbers = true - - nonDefaultKey := keyFncs.nonDefault - marshalKey := keyFncs.marshal - marshalVal := valFncs.marshal - if mo.Marshalers != nil { - var ok bool - marshalKey, ok = mo.Marshalers.lookup(marshalKey, t.Key()) - marshalVal, _ = mo.Marshalers.lookup(marshalVal, t.Elem()) - nonDefaultKey = nonDefaultKey || ok - } - k := newAddressableValue(t.Key()) - v := newAddressableValue(t.Elem()) - - // A Go map guarantees that each entry has a unique key. - // As such, disable the expensive duplicate name check if we know - // that every Go key will serialize as a unique JSON string. - if !nonDefaultKey && mapKeyWithUniqueRepresentation(k.Kind(), enc.options.AllowInvalidUTF8) { - enc.tokens.last.disableNamespace() - } - - switch { - case !mo.Deterministic || n <= 1: - for iter := va.Value.MapRange(); iter.Next(); { - k.SetIterKey(iter) - if err := marshalKey(mko, enc, k); err != nil { - // TODO: If err is errMissingName, then wrap it as a - // SemanticError since this key type cannot be serialized - // as a JSON string. - return err - } - v.SetIterValue(iter) - if err := marshalVal(mo, enc, v); err != nil { - return err - } - } - case !nonDefaultKey && t.Key().Kind() == reflect.String: - names := getStrings(n) - for i, iter := 0, va.Value.MapRange(); i < n && iter.Next(); i++ { - k.SetIterKey(iter) - (*names)[i] = k.String() - } - names.Sort() - for _, name := range *names { - if err := enc.WriteToken(String(name)); err != nil { - return err - } - // TODO(https://go.dev/issue/57061): Use v.SetMapIndexOf. - k.SetString(name) - v.Set(va.MapIndex(k.Value)) - if err := marshalVal(mo, enc, v); err != nil { - return err - } - } - putStrings(names) - default: - type member struct { - name string // unquoted name - key addressableValue - } - members := make([]member, n) - keys := reflect.MakeSlice(reflect.SliceOf(t.Key()), n, n) - for i, iter := 0, va.Value.MapRange(); i < n && iter.Next(); i++ { - // Marshal the member name. - k := addressableValue{keys.Index(i)} // indexed slice element is always addressable - k.SetIterKey(iter) - if err := marshalKey(mko, enc, k); err != nil { - // TODO: If err is errMissingName, then wrap it as a - // SemanticError since this key type cannot be serialized - // as a JSON string. - return err - } - name := enc.unwriteOnlyObjectMemberName() - members[i] = member{name, k} - } - // TODO: If AllowDuplicateNames is enabled, then sort according - // to reflect.Value as well if the names are equal. - // See internal/fmtsort. - // TODO(https://go.dev/issue/47619): Use slices.SortFunc instead. - sort.Slice(members, func(i, j int) bool { - return lessUTF16(members[i].name, members[j].name) - }) - for _, member := range members { - if err := enc.WriteToken(String(member.name)); err != nil { - return err - } - // TODO(https://go.dev/issue/57061): Use v.SetMapIndexOf. - v.Set(va.MapIndex(member.key.Value)) - if err := marshalVal(mo, enc, v); err != nil { - return err - } - } - } - } - if err := enc.WriteToken(ObjectEnd); err != nil { - return err - } - return nil - } - fncs.unmarshal = func(uo UnmarshalOptions, dec *Decoder, va addressableValue) error { - if uo.format != "" && uo.formatDepth == dec.tokens.depth() { - if uo.format == "emitnull" { - uo.format = "" // only relevant for marshaling - } else { - return newInvalidFormatError("unmarshal", t, uo.format) - } - } - tok, err := dec.ReadToken() - if err != nil { - return err - } - k := tok.Kind() - switch k { - case 'n': - va.Set(reflect.Zero(t)) - return nil - case '{': - once.Do(init) - if va.IsNil() { - va.Set(reflect.MakeMap(t)) - } - - // Handle maps with numeric key types by stringifying them. - uko := uo - uko.StringifyNumbers = true - - nonDefaultKey := keyFncs.nonDefault - unmarshalKey := keyFncs.unmarshal - unmarshalVal := valFncs.unmarshal - if uo.Unmarshalers != nil { - var ok bool - unmarshalKey, ok = uo.Unmarshalers.lookup(unmarshalKey, t.Key()) - unmarshalVal, _ = uo.Unmarshalers.lookup(unmarshalVal, t.Elem()) - nonDefaultKey = nonDefaultKey || ok - } - k := newAddressableValue(t.Key()) - v := newAddressableValue(t.Elem()) - - // Manually check for duplicate entries by virtue of whether the - // unmarshaled key already exists in the destination Go map. - // Consequently, syntactically different names (e.g., "0" and "-0") - // will be rejected as duplicates since they semantically refer - // to the same Go value. This is an unusual interaction - // between syntax and semantics, but is more correct. - if !nonDefaultKey && mapKeyWithUniqueRepresentation(k.Kind(), dec.options.AllowInvalidUTF8) { - dec.tokens.last.disableNamespace() - } - - // In the rare case where the map is not already empty, - // then we need to manually track which keys we already saw - // since existing presence alone is insufficient to indicate - // whether the input had a duplicate name. - var seen reflect.Value - if !dec.options.AllowDuplicateNames && va.Len() > 0 { - seen = reflect.MakeMap(reflect.MapOf(k.Type(), emptyStructType)) - } - - for dec.PeekKind() != '}' { - k.Set(reflect.Zero(t.Key())) - if err := unmarshalKey(uko, dec, k); err != nil { - return err - } - if k.Kind() == reflect.Interface && !k.IsNil() && !k.Elem().Type().Comparable() { - err := fmt.Errorf("invalid incomparable key type %v", k.Elem().Type()) - return &SemanticError{action: "unmarshal", GoType: t, Err: err} - } - - if v2 := va.MapIndex(k.Value); v2.IsValid() { - if !dec.options.AllowDuplicateNames && (!seen.IsValid() || seen.MapIndex(k.Value).IsValid()) { - // TODO: Unread the object name. - name := dec.previousBuffer() - err := &SyntacticError{str: "duplicate name " + string(name) + " in object"} - return err.withOffset(dec.InputOffset() - int64(len(name))) - } - v.Set(v2) - } else { - v.Set(reflect.Zero(v.Type())) - } - err := unmarshalVal(uo, dec, v) - va.SetMapIndex(k.Value, v.Value) - if seen.IsValid() { - seen.SetMapIndex(k.Value, reflect.Zero(emptyStructType)) - } - if err != nil { - return err - } - } - if _, err := dec.ReadToken(); err != nil { - return err - } - return nil - } - return &SemanticError{action: "unmarshal", JSONKind: k, GoType: t} - } - return &fncs -} - -// mapKeyWithUniqueRepresentation reports whether all possible values of k -// marshal to a different JSON value, and whether all possible JSON values -// that can unmarshal into k unmarshal to different Go values. -// In other words, the representation must be a bijective. -func mapKeyWithUniqueRepresentation(k reflect.Kind, allowInvalidUTF8 bool) bool { - switch k { - case reflect.Bool, - reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, - reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - return true - case reflect.String: - // For strings, we have to be careful since names with invalid UTF-8 - // maybe unescape to the same Go string value. - return !allowInvalidUTF8 - default: - // Floating-point kinds are not listed above since NaNs - // can appear multiple times and all serialize as "NaN". - return false - } -} - -func makeStructArshaler(t reflect.Type) *arshaler { - // NOTE: The logic below disables namespaces for tracking duplicate names - // and does the tracking locally with an efficient bit-set based on which - // Go struct fields were seen. - - var fncs arshaler - var ( - once sync.Once - fields structFields - errInit *SemanticError - ) - init := func() { - fields, errInit = makeStructFields(t) - } - fncs.marshal = func(mo MarshalOptions, enc *Encoder, va addressableValue) error { - if mo.format != "" && mo.formatDepth == enc.tokens.depth() { - return newInvalidFormatError("marshal", t, mo.format) - } - once.Do(init) - if errInit != nil { - err := *errInit // shallow copy SemanticError - err.action = "marshal" - return &err - } - if err := enc.WriteToken(ObjectStart); err != nil { - return err - } - var seenIdxs uintSet - prevIdx := -1 - enc.tokens.last.disableNamespace() // we manually ensure unique names below - for i := range fields.flattened { - f := &fields.flattened[i] - v := addressableValue{va.Field(f.index[0])} // addressable if struct value is addressable - if len(f.index) > 1 { - v = v.fieldByIndex(f.index[1:], false) - if !v.IsValid() { - continue // implies a nil inlined field - } - } - - // OmitZero skips the field if the Go value is zero, - // which we can determine up front without calling the marshaler. - if f.omitzero && ((f.isZero == nil && v.IsZero()) || (f.isZero != nil && f.isZero(v))) { - continue - } - - marshal := f.fncs.marshal - nonDefault := f.fncs.nonDefault - if mo.Marshalers != nil { - var ok bool - marshal, ok = mo.Marshalers.lookup(marshal, f.typ) - nonDefault = nonDefault || ok - } - - // OmitEmpty skips the field if the marshaled JSON value is empty, - // which we can know up front if there are no custom marshalers, - // otherwise we must marshal the value and unwrite it if empty. - if f.omitempty && !nonDefault && f.isEmpty != nil && f.isEmpty(v) { - continue // fast path for omitempty - } - - // Write the object member name. - // - // The logic below is semantically equivalent to: - // enc.WriteToken(String(f.name)) - // but specialized and simplified because: - // 1. The Encoder must be expecting an object name. - // 2. The object namespace is guaranteed to be disabled. - // 3. The object name is guaranteed to be valid and pre-escaped. - // 4. There is no need to flush the buffer (for unwrite purposes). - // 5. There is no possibility of an error occurring. - if optimizeCommon { - // Append any delimiters or optional whitespace. - if enc.tokens.last.length() > 0 { - enc.buf = append(enc.buf, ',') - } - if enc.options.multiline { - enc.buf = enc.appendIndent(enc.buf, enc.tokens.needIndent('"')) - } - - // Append the token to the output and to the state machine. - n0 := len(enc.buf) // offset before calling appendString - if enc.options.EscapeRune == nil { - enc.buf = append(enc.buf, f.quotedName...) - } else { - enc.buf, _ = appendString(enc.buf, f.name, false, enc.options.EscapeRune) - } - if !enc.options.AllowDuplicateNames { - enc.names.replaceLastQuotedOffset(n0) - } - enc.tokens.last.increment() - } else { - if err := enc.WriteToken(String(f.name)); err != nil { - return err - } - } - - // Write the object member value. - mo2 := mo - if f.string { - mo2.StringifyNumbers = true - } - if f.format != "" { - mo2.formatDepth = enc.tokens.depth() - mo2.format = f.format - } - if err := marshal(mo2, enc, v); err != nil { - return err - } - - // Try unwriting the member if empty (slow path for omitempty). - if f.omitempty { - var prevName *string - if prevIdx >= 0 { - prevName = &fields.flattened[prevIdx].name - } - if enc.unwriteEmptyObjectMember(prevName) { - continue - } - } - - // Remember the previous written object member. - // The set of seen fields only needs to be updated to detect - // duplicate names with those from the inlined fallback. - if !enc.options.AllowDuplicateNames && fields.inlinedFallback != nil { - seenIdxs.insert(uint(f.id)) - } - prevIdx = f.id - } - if fields.inlinedFallback != nil && !(mo.DiscardUnknownMembers && fields.inlinedFallback.unknown) { - var insertUnquotedName func([]byte) bool - if !enc.options.AllowDuplicateNames { - insertUnquotedName = func(name []byte) bool { - // Check that the name from inlined fallback does not match - // one of the previously marshaled names from known fields. - if foldedFields := fields.byFoldedName[string(foldName(name))]; len(foldedFields) > 0 { - if f := fields.byActualName[string(name)]; f != nil { - return seenIdxs.insert(uint(f.id)) - } - for _, f := range foldedFields { - if f.nocase { - return seenIdxs.insert(uint(f.id)) - } - } - } - - // Check that the name does not match any other name - // previously marshaled from the inlined fallback. - return enc.namespaces.last().insertUnquoted(name) - } - } - if err := marshalInlinedFallbackAll(mo, enc, va, fields.inlinedFallback, insertUnquotedName); err != nil { - return err - } - } - if err := enc.WriteToken(ObjectEnd); err != nil { - return err - } - return nil - } - fncs.unmarshal = func(uo UnmarshalOptions, dec *Decoder, va addressableValue) error { - if uo.format != "" && uo.formatDepth == dec.tokens.depth() { - return newInvalidFormatError("unmarshal", t, uo.format) - } - tok, err := dec.ReadToken() - if err != nil { - return err - } - k := tok.Kind() - switch k { - case 'n': - va.Set(reflect.Zero(t)) - return nil - case '{': - once.Do(init) - if errInit != nil { - err := *errInit // shallow copy SemanticError - err.action = "unmarshal" - return &err - } - var seenIdxs uintSet - dec.tokens.last.disableNamespace() - for dec.PeekKind() != '}' { - // Process the object member name. - var flags valueFlags - val, err := dec.readValue(&flags) - if err != nil { - return err - } - name := unescapeStringMayCopy(val, flags.isVerbatim()) - f := fields.byActualName[string(name)] - if f == nil { - for _, f2 := range fields.byFoldedName[string(foldName(name))] { - if f2.nocase { - f = f2 - break - } - } - if f == nil { - if uo.RejectUnknownMembers && (fields.inlinedFallback == nil || fields.inlinedFallback.unknown) { - return &SemanticError{action: "unmarshal", GoType: t, Err: fmt.Errorf("unknown name %s", val)} - } - if !dec.options.AllowDuplicateNames && !dec.namespaces.last().insertUnquoted(name) { - // TODO: Unread the object name. - err := &SyntacticError{str: "duplicate name " + string(val) + " in object"} - return err.withOffset(dec.InputOffset() - int64(len(val))) - } - - if fields.inlinedFallback == nil { - // Skip unknown value since we have no place to store it. - if err := dec.SkipValue(); err != nil { - return err - } - } else { - // Marshal into value capable of storing arbitrary object members. - if err := unmarshalInlinedFallbackNext(uo, dec, va, fields.inlinedFallback, val, name); err != nil { - return err - } - } - continue - } - } - if !dec.options.AllowDuplicateNames && !seenIdxs.insert(uint(f.id)) { - // TODO: Unread the object name. - err := &SyntacticError{str: "duplicate name " + string(val) + " in object"} - return err.withOffset(dec.InputOffset() - int64(len(val))) - } - - // Process the object member value. - unmarshal := f.fncs.unmarshal - if uo.Unmarshalers != nil { - unmarshal, _ = uo.Unmarshalers.lookup(unmarshal, f.typ) - } - uo2 := uo - if f.string { - uo2.StringifyNumbers = true - } - if f.format != "" { - uo2.formatDepth = dec.tokens.depth() - uo2.format = f.format - } - v := addressableValue{va.Field(f.index[0])} // addressable if struct value is addressable - if len(f.index) > 1 { - v = v.fieldByIndex(f.index[1:], true) - } - if err := unmarshal(uo2, dec, v); err != nil { - return err - } - } - if _, err := dec.ReadToken(); err != nil { - return err - } - return nil - } - return &SemanticError{action: "unmarshal", JSONKind: k, GoType: t} - } - return &fncs -} - -func (va addressableValue) fieldByIndex(index []int, mayAlloc bool) addressableValue { - for _, i := range index { - va = va.indirect(mayAlloc) - if !va.IsValid() { - return va - } - va = addressableValue{va.Field(i)} // addressable if struct value is addressable - } - return va -} - -func (va addressableValue) indirect(mayAlloc bool) addressableValue { - if va.Kind() == reflect.Pointer { - if va.IsNil() { - if !mayAlloc { - return addressableValue{} - } - va.Set(reflect.New(va.Type().Elem())) - } - va = addressableValue{va.Elem()} // dereferenced pointer is always addressable - } - return va -} - -func makeSliceArshaler(t reflect.Type) *arshaler { - var fncs arshaler - var ( - once sync.Once - valFncs *arshaler - ) - init := func() { - valFncs = lookupArshaler(t.Elem()) - } - fncs.marshal = func(mo MarshalOptions, enc *Encoder, va addressableValue) error { - // Check for cycles. - if enc.tokens.depth() > startDetectingCyclesAfter { - if err := enc.seenPointers.visit(va.Value); err != nil { - return err - } - defer enc.seenPointers.leave(va.Value) - } - - if mo.format != "" && mo.formatDepth == enc.tokens.depth() { - if mo.format == "emitnull" { - if va.IsNil() { - return enc.WriteToken(Null) - } - mo.format = "" - } else { - return newInvalidFormatError("marshal", t, mo.format) - } - } - - // Optimize for marshaling an empty slice without any preceding whitespace. - n := va.Len() - if optimizeCommon && n == 0 && !enc.options.multiline && !enc.tokens.last.needObjectName() { - enc.buf = enc.tokens.mayAppendDelim(enc.buf, '[') - enc.buf = append(enc.buf, "[]"...) - enc.tokens.last.increment() - if enc.needFlush() { - return enc.flush() - } - return nil - } - - once.Do(init) - if err := enc.WriteToken(ArrayStart); err != nil { - return err - } - marshal := valFncs.marshal - if mo.Marshalers != nil { - marshal, _ = mo.Marshalers.lookup(marshal, t.Elem()) - } - for i := 0; i < n; i++ { - v := addressableValue{va.Index(i)} // indexed slice element is always addressable - if err := marshal(mo, enc, v); err != nil { - return err - } - } - if err := enc.WriteToken(ArrayEnd); err != nil { - return err - } - return nil - } - emptySlice := reflect.MakeSlice(t, 0, 0) - fncs.unmarshal = func(uo UnmarshalOptions, dec *Decoder, va addressableValue) error { - if uo.format != "" && uo.formatDepth == dec.tokens.depth() { - if uo.format == "emitnull" { - uo.format = "" // only relevant for marshaling - } else { - return newInvalidFormatError("unmarshal", t, uo.format) - } - } - - tok, err := dec.ReadToken() - if err != nil { - return err - } - k := tok.Kind() - switch k { - case 'n': - va.Set(reflect.Zero(t)) - return nil - case '[': - once.Do(init) - unmarshal := valFncs.unmarshal - if uo.Unmarshalers != nil { - unmarshal, _ = uo.Unmarshalers.lookup(unmarshal, t.Elem()) - } - mustZero := true // we do not know the cleanliness of unused capacity - cap := va.Cap() - if cap > 0 { - va.SetLen(cap) - } - var i int - for dec.PeekKind() != ']' { - if i == cap { - // TODO(https://go.dev/issue/48000): Use reflect.Value.Append. - va.Set(reflect.Append(va.Value, reflect.Zero(t.Elem()))) - cap = va.Cap() - va.SetLen(cap) - mustZero = false // append guarantees that unused capacity is zero-initialized - } - v := addressableValue{va.Index(i)} // indexed slice element is always addressable - i++ - if mustZero { - v.Set(reflect.Zero(t.Elem())) - } - if err := unmarshal(uo, dec, v); err != nil { - va.SetLen(i) - return err - } - } - if i == 0 { - va.Set(emptySlice) - } else { - va.SetLen(i) - } - if _, err := dec.ReadToken(); err != nil { - return err - } - return nil - } - return &SemanticError{action: "unmarshal", JSONKind: k, GoType: t} - } - return &fncs -} - -func makeArrayArshaler(t reflect.Type) *arshaler { - var fncs arshaler - var ( - once sync.Once - valFncs *arshaler - ) - init := func() { - valFncs = lookupArshaler(t.Elem()) - } - n := t.Len() - fncs.marshal = func(mo MarshalOptions, enc *Encoder, va addressableValue) error { - if mo.format != "" && mo.formatDepth == enc.tokens.depth() { - return newInvalidFormatError("marshal", t, mo.format) - } - once.Do(init) - if err := enc.WriteToken(ArrayStart); err != nil { - return err - } - marshal := valFncs.marshal - if mo.Marshalers != nil { - marshal, _ = mo.Marshalers.lookup(marshal, t.Elem()) - } - for i := 0; i < n; i++ { - v := addressableValue{va.Index(i)} // indexed array element is addressable if array is addressable - if err := marshal(mo, enc, v); err != nil { - return err - } - } - if err := enc.WriteToken(ArrayEnd); err != nil { - return err - } - return nil - } - fncs.unmarshal = func(uo UnmarshalOptions, dec *Decoder, va addressableValue) error { - if uo.format != "" && uo.formatDepth == dec.tokens.depth() { - return newInvalidFormatError("unmarshal", t, uo.format) - } - tok, err := dec.ReadToken() - if err != nil { - return err - } - k := tok.Kind() - switch k { - case 'n': - va.Set(reflect.Zero(t)) - return nil - case '[': - once.Do(init) - unmarshal := valFncs.unmarshal - if uo.Unmarshalers != nil { - unmarshal, _ = uo.Unmarshalers.lookup(unmarshal, t.Elem()) - } - var i int - for dec.PeekKind() != ']' { - if i >= n { - err := errors.New("too many array elements") - return &SemanticError{action: "unmarshal", GoType: t, Err: err} - } - v := addressableValue{va.Index(i)} // indexed array element is addressable if array is addressable - v.Set(reflect.Zero(v.Type())) - if err := unmarshal(uo, dec, v); err != nil { - return err - } - i++ - } - if _, err := dec.ReadToken(); err != nil { - return err - } - if i < n { - err := errors.New("too few array elements") - return &SemanticError{action: "unmarshal", GoType: t, Err: err} - } - return nil - } - return &SemanticError{action: "unmarshal", JSONKind: k, GoType: t} - } - return &fncs -} - -func makePointerArshaler(t reflect.Type) *arshaler { - var fncs arshaler - var ( - once sync.Once - valFncs *arshaler - ) - init := func() { - valFncs = lookupArshaler(t.Elem()) - } - fncs.marshal = func(mo MarshalOptions, enc *Encoder, va addressableValue) error { - // Check for cycles. - if enc.tokens.depth() > startDetectingCyclesAfter { - if err := enc.seenPointers.visit(va.Value); err != nil { - return err - } - defer enc.seenPointers.leave(va.Value) - } - - // NOTE: MarshalOptions.format is forwarded to underlying marshal. - if va.IsNil() { - return enc.WriteToken(Null) - } - once.Do(init) - marshal := valFncs.marshal - if mo.Marshalers != nil { - marshal, _ = mo.Marshalers.lookup(marshal, t.Elem()) - } - v := addressableValue{va.Elem()} // dereferenced pointer is always addressable - return marshal(mo, enc, v) - } - fncs.unmarshal = func(uo UnmarshalOptions, dec *Decoder, va addressableValue) error { - // NOTE: UnmarshalOptions.format is forwarded to underlying unmarshal. - if dec.PeekKind() == 'n' { - if _, err := dec.ReadToken(); err != nil { - return err - } - va.Set(reflect.Zero(t)) - return nil - } - once.Do(init) - unmarshal := valFncs.unmarshal - if uo.Unmarshalers != nil { - unmarshal, _ = uo.Unmarshalers.lookup(unmarshal, t.Elem()) - } - if va.IsNil() { - va.Set(reflect.New(t.Elem())) - } - v := addressableValue{va.Elem()} // dereferenced pointer is always addressable - return unmarshal(uo, dec, v) - } - return &fncs -} - -func makeInterfaceArshaler(t reflect.Type) *arshaler { - // NOTE: Values retrieved from an interface are not addressable, - // so we shallow copy the values to make them addressable and - // store them back into the interface afterwards. - - var fncs arshaler - fncs.marshal = func(mo MarshalOptions, enc *Encoder, va addressableValue) error { - if mo.format != "" && mo.formatDepth == enc.tokens.depth() { - return newInvalidFormatError("marshal", t, mo.format) - } - if va.IsNil() { - return enc.WriteToken(Null) - } - v := newAddressableValue(va.Elem().Type()) - v.Set(va.Elem()) - marshal := lookupArshaler(v.Type()).marshal - if mo.Marshalers != nil { - marshal, _ = mo.Marshalers.lookup(marshal, v.Type()) - } - // Optimize for the any type if there are no special options. - if optimizeCommon && t == anyType && !mo.StringifyNumbers && mo.format == "" && (mo.Marshalers == nil || !mo.Marshalers.fromAny) { - return marshalValueAny(mo, enc, va.Elem().Interface()) - } - return marshal(mo, enc, v) - } - fncs.unmarshal = func(uo UnmarshalOptions, dec *Decoder, va addressableValue) error { - if uo.format != "" && uo.formatDepth == dec.tokens.depth() { - return newInvalidFormatError("unmarshal", t, uo.format) - } - if dec.PeekKind() == 'n' { - if _, err := dec.ReadToken(); err != nil { - return err - } - va.Set(reflect.Zero(t)) - return nil - } - var v addressableValue - if va.IsNil() { - // Optimize for the any type if there are no special options. - // We do not care about stringified numbers since JSON strings - // are always unmarshaled into an any value as Go strings. - // Duplicate name check must be enforced since unmarshalValueAny - // does not implement merge semantics. - if optimizeCommon && t == anyType && uo.format == "" && (uo.Unmarshalers == nil || !uo.Unmarshalers.fromAny) && !dec.options.AllowDuplicateNames { - v, err := unmarshalValueAny(uo, dec) - // We must check for nil interface values up front. - // See https://go.dev/issue/52310. - if v != nil { - va.Set(reflect.ValueOf(v)) - } - return err - } - - k := dec.PeekKind() - if !isAnyType(t) { - err := errors.New("cannot derive concrete type for non-empty interface") - return &SemanticError{action: "unmarshal", JSONKind: k, GoType: t, Err: err} - } - switch k { - case 'f', 't': - v = newAddressableValue(boolType) - case '"': - v = newAddressableValue(stringType) - case '0': - v = newAddressableValue(float64Type) - case '{': - v = newAddressableValue(mapStringAnyType) - case '[': - v = newAddressableValue(sliceAnyType) - default: - // If k is invalid (e.g., due to an I/O or syntax error), then - // that will be cached by PeekKind and returned by ReadValue. - // If k is '}' or ']', then ReadValue must error since - // those are invalid kinds at the start of a JSON value. - _, err := dec.ReadValue() - return err - } - } else { - // Shallow copy the existing value to keep it addressable. - // Any mutations at the top-level of the value will be observable - // since we always store this value back into the interface value. - v = newAddressableValue(va.Elem().Type()) - v.Set(va.Elem()) - } - unmarshal := lookupArshaler(v.Type()).unmarshal - if uo.Unmarshalers != nil { - unmarshal, _ = uo.Unmarshalers.lookup(unmarshal, v.Type()) - } - err := unmarshal(uo, dec, v) - va.Set(v.Value) - return err - } - return &fncs -} - -// isAnyType reports wether t is equivalent to the any interface type. -func isAnyType(t reflect.Type) bool { - // This is forward compatible if the Go language permits type sets within - // ordinary interfaces where an interface with zero methods does not - // necessarily mean it can hold every possible Go type. - // See https://go.dev/issue/45346. - return t == anyType || anyType.Implements(t) -} - -func makeInvalidArshaler(t reflect.Type) *arshaler { - var fncs arshaler - fncs.marshal = func(mo MarshalOptions, enc *Encoder, va addressableValue) error { - return &SemanticError{action: "marshal", GoType: t} - } - fncs.unmarshal = func(uo UnmarshalOptions, dec *Decoder, va addressableValue) error { - return &SemanticError{action: "unmarshal", GoType: t} - } - return &fncs -} - -func newInvalidFormatError(action string, t reflect.Type, format string) error { - err := fmt.Errorf("invalid format flag: %q", format) - return &SemanticError{action: action, GoType: t, Err: err} -} diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_funcs.go b/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_funcs.go deleted file mode 100644 index 8a4e70083..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_funcs.go +++ /dev/null @@ -1,387 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package json - -import ( - "errors" - "fmt" - "reflect" - "sync" -) - -// SkipFunc may be returned by MarshalFuncV2 and UnmarshalFuncV2 functions. -// -// Any function that returns SkipFunc must not cause observable side effects -// on the provided Encoder or Decoder. For example, it is permissible to call -// Decoder.PeekKind, but not permissible to call Decoder.ReadToken or -// Encoder.WriteToken since such methods mutate the state. -const SkipFunc = jsonError("skip function") - -// Marshalers is a list of functions that may override the marshal behavior -// of specific types. Populate MarshalOptions.Marshalers to use it. -// A nil *Marshalers is equivalent to an empty list. -type Marshalers = typedMarshalers - -// NewMarshalers constructs a flattened list of marshal functions. -// If multiple functions in the list are applicable for a value of a given type, -// then those earlier in the list take precedence over those that come later. -// If a function returns SkipFunc, then the next applicable function is called, -// otherwise the default marshaling behavior is used. -// -// For example: -// -// m1 := NewMarshalers(f1, f2) -// m2 := NewMarshalers(f0, m1, f3) // equivalent to m3 -// m3 := NewMarshalers(f0, f1, f2, f3) // equivalent to m2 -func NewMarshalers(ms ...*Marshalers) *Marshalers { - return newMarshalers(ms...) -} - -// Unmarshalers is a list of functions that may override the unmarshal behavior -// of specific types. Populate UnmarshalOptions.Unmarshalers to use it. -// A nil *Unmarshalers is equivalent to an empty list. -type Unmarshalers = typedUnmarshalers - -// NewUnmarshalers constructs a flattened list of unmarshal functions. -// If multiple functions in the list are applicable for a value of a given type, -// then those earlier in the list take precedence over those that come later. -// If a function returns SkipFunc, then the next applicable function is called, -// otherwise the default unmarshaling behavior is used. -// -// For example: -// -// u1 := NewUnmarshalers(f1, f2) -// u2 := NewUnmarshalers(f0, u1, f3) // equivalent to u3 -// u3 := NewUnmarshalers(f0, f1, f2, f3) // equivalent to u2 -func NewUnmarshalers(us ...*Unmarshalers) *Unmarshalers { - return newUnmarshalers(us...) -} - -type typedMarshalers = typedArshalers[MarshalOptions, Encoder] -type typedUnmarshalers = typedArshalers[UnmarshalOptions, Decoder] -type typedArshalers[Options, Coder any] struct { - nonComparable - - fncVals []typedArshaler[Options, Coder] - fncCache sync.Map // map[reflect.Type]arshaler - - // fromAny reports whether any of Go types used to represent arbitrary JSON - // (i.e., any, bool, string, float64, map[string]any, or []any) matches - // any of the provided type-specific arshalers. - // - // This bit of information is needed in arshal_default.go to determine - // whether to use the specialized logic in arshal_any.go to handle - // the any interface type. The logic in arshal_any.go does not support - // type-specific arshal functions, so we must avoid using that logic - // if this is true. - fromAny bool -} -type typedMarshaler = typedArshaler[MarshalOptions, Encoder] -type typedUnmarshaler = typedArshaler[UnmarshalOptions, Decoder] -type typedArshaler[Options, Coder any] struct { - typ reflect.Type - fnc func(Options, *Coder, addressableValue) error - maySkip bool -} - -func newMarshalers(ms ...*Marshalers) *Marshalers { return newTypedArshalers(ms...) } -func newUnmarshalers(us ...*Unmarshalers) *Unmarshalers { return newTypedArshalers(us...) } -func newTypedArshalers[Options, Coder any](as ...*typedArshalers[Options, Coder]) *typedArshalers[Options, Coder] { - var a typedArshalers[Options, Coder] - for _, a2 := range as { - if a2 != nil { - a.fncVals = append(a.fncVals, a2.fncVals...) - a.fromAny = a.fromAny || a2.fromAny - } - } - if len(a.fncVals) == 0 { - return nil - } - return &a -} - -func (a *typedArshalers[Options, Coder]) lookup(fnc func(Options, *Coder, addressableValue) error, t reflect.Type) (func(Options, *Coder, addressableValue) error, bool) { - if a == nil { - return fnc, false - } - if v, ok := a.fncCache.Load(t); ok { - if v == nil { - return fnc, false - } - return v.(func(Options, *Coder, addressableValue) error), true - } - - // Collect a list of arshalers that can be called for this type. - // This list may be longer than 1 since some arshalers can be skipped. - var fncs []func(Options, *Coder, addressableValue) error - for _, fncVal := range a.fncVals { - if !castableTo(t, fncVal.typ) { - continue - } - fncs = append(fncs, fncVal.fnc) - if !fncVal.maySkip { - break // subsequent arshalers will never be called - } - } - - if len(fncs) == 0 { - a.fncCache.Store(t, nil) // nil to indicate that no funcs found - return fnc, false - } - - // Construct an arshaler that may call every applicable arshaler. - fncDefault := fnc - fnc = func(o Options, c *Coder, v addressableValue) error { - for _, fnc := range fncs { - if err := fnc(o, c, v); err != SkipFunc { - return err // may be nil or non-nil - } - } - return fncDefault(o, c, v) - } - - // Use the first stored so duplicate work can be garbage collected. - v, _ := a.fncCache.LoadOrStore(t, fnc) - return v.(func(Options, *Coder, addressableValue) error), true -} - -// MarshalFuncV1 constructs a type-specific marshaler that -// specifies how to marshal values of type T. -// T can be any type except a named pointer. -// The function is always provided with a non-nil pointer value -// if T is an interface or pointer type. -// -// The function must marshal exactly one JSON value. -// The value of T must not be retained outside the function call. -// It may not return SkipFunc. -func MarshalFuncV1[T any](fn func(T) ([]byte, error)) *Marshalers { - t := reflect.TypeOf((*T)(nil)).Elem() - assertCastableTo(t, true) - typFnc := typedMarshaler{ - typ: t, - fnc: func(mo MarshalOptions, enc *Encoder, va addressableValue) error { - val, err := fn(va.castTo(t).Interface().(T)) - if err != nil { - err = wrapSkipFunc(err, "marshal function of type func(T) ([]byte, error)") - // TODO: Avoid wrapping semantic errors. - return &SemanticError{action: "marshal", GoType: t, Err: err} - } - if err := enc.WriteValue(val); err != nil { - // TODO: Avoid wrapping semantic or I/O errors. - return &SemanticError{action: "marshal", JSONKind: RawValue(val).Kind(), GoType: t, Err: err} - } - return nil - }, - } - return &Marshalers{fncVals: []typedMarshaler{typFnc}, fromAny: castableToFromAny(t)} -} - -// MarshalFuncV2 constructs a type-specific marshaler that -// specifies how to marshal values of type T. -// T can be any type except a named pointer. -// The function is always provided with a non-nil pointer value -// if T is an interface or pointer type. -// -// The function must marshal exactly one JSON value by calling write methods -// on the provided encoder. It may return SkipFunc such that marshaling can -// move on to the next marshal function. However, no mutable method calls may -// be called on the encoder if SkipFunc is returned. -// The pointer to Encoder and the value of T must not be retained -// outside the function call. -func MarshalFuncV2[T any](fn func(MarshalOptions, *Encoder, T) error) *Marshalers { - t := reflect.TypeOf((*T)(nil)).Elem() - assertCastableTo(t, true) - typFnc := typedMarshaler{ - typ: t, - fnc: func(mo MarshalOptions, enc *Encoder, va addressableValue) error { - prevDepth, prevLength := enc.tokens.depthLength() - err := fn(mo, enc, va.castTo(t).Interface().(T)) - currDepth, currLength := enc.tokens.depthLength() - if err == nil && (prevDepth != currDepth || prevLength+1 != currLength) { - err = errors.New("must write exactly one JSON value") - } - if err != nil { - if err == SkipFunc { - if prevDepth == currDepth && prevLength == currLength { - return SkipFunc - } - err = errors.New("must not write any JSON tokens when skipping") - } - // TODO: Avoid wrapping semantic or I/O errors. - return &SemanticError{action: "marshal", GoType: t, Err: err} - } - return nil - }, - maySkip: true, - } - return &Marshalers{fncVals: []typedMarshaler{typFnc}, fromAny: castableToFromAny(t)} -} - -// UnmarshalFuncV1 constructs a type-specific unmarshaler that -// specifies how to unmarshal values of type T. -// T must be an unnamed pointer or an interface type. -// The function is always provided with a non-nil pointer value. -// -// The function must unmarshal exactly one JSON value. -// The input []byte must not be mutated. -// The input []byte and value T must not be retained outside the function call. -// It may not return SkipFunc. -func UnmarshalFuncV1[T any](fn func([]byte, T) error) *Unmarshalers { - t := reflect.TypeOf((*T)(nil)).Elem() - assertCastableTo(t, false) - typFnc := typedUnmarshaler{ - typ: t, - fnc: func(uo UnmarshalOptions, dec *Decoder, va addressableValue) error { - val, err := dec.ReadValue() - if err != nil { - return err // must be a syntactic or I/O error - } - err = fn(val, va.castTo(t).Interface().(T)) - if err != nil { - err = wrapSkipFunc(err, "unmarshal function of type func([]byte, T) error") - // TODO: Avoid wrapping semantic, syntactic, or I/O errors. - return &SemanticError{action: "unmarshal", JSONKind: val.Kind(), GoType: t, Err: err} - } - return nil - }, - } - return &Unmarshalers{fncVals: []typedUnmarshaler{typFnc}, fromAny: castableToFromAny(t)} -} - -// UnmarshalFuncV2 constructs a type-specific unmarshaler that -// specifies how to unmarshal values of type T. -// T must be an unnamed pointer or an interface type. -// The function is always provided with a non-nil pointer value. -// -// The function must unmarshal exactly one JSON value by calling read methods -// on the provided decoder. It may return SkipFunc such that unmarshaling can -// move on to the next unmarshal function. However, no mutable method calls may -// be called on the decoder if SkipFunc is returned. -// The pointer to Decoder and the value of T must not be retained -// outside the function call. -func UnmarshalFuncV2[T any](fn func(UnmarshalOptions, *Decoder, T) error) *Unmarshalers { - t := reflect.TypeOf((*T)(nil)).Elem() - assertCastableTo(t, false) - typFnc := typedUnmarshaler{ - typ: t, - fnc: func(uo UnmarshalOptions, dec *Decoder, va addressableValue) error { - prevDepth, prevLength := dec.tokens.depthLength() - err := fn(uo, dec, va.castTo(t).Interface().(T)) - currDepth, currLength := dec.tokens.depthLength() - if err == nil && (prevDepth != currDepth || prevLength+1 != currLength) { - err = errors.New("must read exactly one JSON value") - } - if err != nil { - if err == SkipFunc { - if prevDepth == currDepth && prevLength == currLength { - return SkipFunc - } - err = errors.New("must not read any JSON tokens when skipping") - } - // TODO: Avoid wrapping semantic, syntactic, or I/O errors. - return &SemanticError{action: "unmarshal", GoType: t, Err: err} - } - return nil - }, - maySkip: true, - } - return &Unmarshalers{fncVals: []typedUnmarshaler{typFnc}, fromAny: castableToFromAny(t)} -} - -// assertCastableTo asserts that "to" is a valid type to be casted to. -// These are the Go types that type-specific arshalers may operate upon. -// -// Let AllTypes be the universal set of all possible Go types. -// This function generally asserts that: -// -// len([from for from in AllTypes if castableTo(from, to)]) > 0 -// -// otherwise it panics. -// -// As a special-case if marshal is false, then we forbid any non-pointer or -// non-interface type since it is almost always a bug trying to unmarshal -// into something where the end-user caller did not pass in an addressable value -// since they will not observe the mutations. -func assertCastableTo(to reflect.Type, marshal bool) { - switch to.Kind() { - case reflect.Interface: - return - case reflect.Pointer: - // Only allow unnamed pointers to be consistent with the fact that - // taking the address of a value produces an unnamed pointer type. - if to.Name() == "" { - return - } - default: - // Technically, non-pointer types are permissible for unmarshal. - // However, they are often a bug since the receiver would be immutable. - // Thus, only allow them for marshaling. - if marshal { - return - } - } - if marshal { - panic(fmt.Sprintf("input type %v must be an interface type, an unnamed pointer type, or a non-pointer type", to)) - } else { - panic(fmt.Sprintf("input type %v must be an interface type or an unnamed pointer type", to)) - } -} - -// castableTo checks whether values of type "from" can be casted to type "to". -// Nil pointer or interface "from" values are never considered castable. -// -// This function must be kept in sync with addressableValue.castTo. -func castableTo(from, to reflect.Type) bool { - switch to.Kind() { - case reflect.Interface: - // TODO: This breaks when ordinary interfaces can have type sets - // since interfaces now exist where only the value form of a type (T) - // implements the interface, but not the pointer variant (*T). - // See https://go.dev/issue/45346. - return reflect.PointerTo(from).Implements(to) - case reflect.Pointer: - // Common case for unmarshaling. - // From must be a concrete or interface type. - return reflect.PointerTo(from) == to - default: - // Common case for marshaling. - // From must be a concrete type. - return from == to - } -} - -// castTo casts va to the specified type. -// If the type is an interface, then the underlying type will always -// be a non-nil pointer to a concrete type. -// -// Requirement: castableTo(va.Type(), to) must hold. -func (va addressableValue) castTo(to reflect.Type) reflect.Value { - switch to.Kind() { - case reflect.Interface: - return va.Addr().Convert(to) - case reflect.Pointer: - return va.Addr() - default: - return va.Value - } -} - -// castableToFromAny reports whether "to" can be casted to from any -// of the dynamic types used to represent arbitrary JSON. -func castableToFromAny(to reflect.Type) bool { - for _, from := range []reflect.Type{anyType, boolType, stringType, float64Type, mapStringAnyType, sliceAnyType} { - if castableTo(from, to) { - return true - } - } - return false -} - -func wrapSkipFunc(err error, what string) error { - if err == SkipFunc { - return errors.New(what + " cannot be skipped") - } - return err -} diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_inlined.go b/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_inlined.go deleted file mode 100644 index 258a98247..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_inlined.go +++ /dev/null @@ -1,213 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package json - -import ( - "bytes" - "errors" - "reflect" -) - -// This package supports "inlining" a Go struct field, where the contents -// of the serialized field (which must be a JSON object) are treated as if -// they are part of the parent Go struct (which represents a JSON object). -// -// Generally, inlined fields are of a Go struct type, where the fields of the -// nested struct are virtually hoisted up to the parent struct using rules -// similar to how Go embedding works (but operating within the JSON namespace). -// -// However, inlined fields may also be of a Go map type with a string key -// or a RawValue. Such inlined fields are called "fallback" fields since they -// represent any arbitrary JSON object member. Explicitly named fields take -// precedence over the inlined fallback. Only one inlined fallback is allowed. - -var rawValueType = reflect.TypeOf((*RawValue)(nil)).Elem() - -// marshalInlinedFallbackAll marshals all the members in an inlined fallback. -func marshalInlinedFallbackAll(mo MarshalOptions, enc *Encoder, va addressableValue, f *structField, insertUnquotedName func([]byte) bool) error { - v := addressableValue{va.Field(f.index[0])} // addressable if struct value is addressable - if len(f.index) > 1 { - v = v.fieldByIndex(f.index[1:], false) - if !v.IsValid() { - return nil // implies a nil inlined field - } - } - v = v.indirect(false) - if !v.IsValid() { - return nil - } - - if v.Type() == rawValueType { - b := v.Interface().(RawValue) - if len(b) == 0 { // TODO: Should this be nil? What if it were all whitespace? - return nil - } - - dec := getBufferedDecoder(b, DecodeOptions{AllowDuplicateNames: true, AllowInvalidUTF8: true}) - defer putBufferedDecoder(dec) - - tok, err := dec.ReadToken() - if err != nil { - return &SemanticError{action: "marshal", GoType: rawValueType, Err: err} - } - if tok.Kind() != '{' { - err := errors.New("inlined raw value must be a JSON object") - return &SemanticError{action: "marshal", JSONKind: tok.Kind(), GoType: rawValueType, Err: err} - } - for dec.PeekKind() != '}' { - // Parse the JSON object name. - var flags valueFlags - val, err := dec.readValue(&flags) - if err != nil { - return &SemanticError{action: "marshal", GoType: rawValueType, Err: err} - } - if insertUnquotedName != nil { - name := unescapeStringMayCopy(val, flags.isVerbatim()) - if !insertUnquotedName(name) { - return &SyntacticError{str: "duplicate name " + string(val) + " in object"} - } - } - if err := enc.WriteValue(val); err != nil { - return err - } - - // Parse the JSON object value. - val, err = dec.readValue(&flags) - if err != nil { - return &SemanticError{action: "marshal", GoType: rawValueType, Err: err} - } - if err := enc.WriteValue(val); err != nil { - return err - } - } - if _, err := dec.ReadToken(); err != nil { - return &SemanticError{action: "marshal", GoType: rawValueType, Err: err} - } - if err := dec.checkEOF(); err != nil { - return &SemanticError{action: "marshal", GoType: rawValueType, Err: err} - } - return nil - } else { - m := v // must be a map[string]V - n := m.Len() - if n == 0 { - return nil - } - mk := newAddressableValue(stringType) - mv := newAddressableValue(m.Type().Elem()) - marshalKey := func(mk addressableValue) error { - b, err := appendString(enc.UnusedBuffer(), mk.String(), !enc.options.AllowInvalidUTF8, nil) - if err != nil { - return err - } - if insertUnquotedName != nil { - isVerbatim := bytes.IndexByte(b, '\\') < 0 - name := unescapeStringMayCopy(b, isVerbatim) - if !insertUnquotedName(name) { - return &SyntacticError{str: "duplicate name " + string(b) + " in object"} - } - } - return enc.WriteValue(b) - } - marshalVal := f.fncs.marshal - if mo.Marshalers != nil { - marshalVal, _ = mo.Marshalers.lookup(marshalVal, mv.Type()) - } - if !mo.Deterministic || n <= 1 { - for iter := m.MapRange(); iter.Next(); { - mk.SetIterKey(iter) - if err := marshalKey(mk); err != nil { - return err - } - mv.Set(iter.Value()) - if err := marshalVal(mo, enc, mv); err != nil { - return err - } - } - } else { - names := getStrings(n) - for i, iter := 0, m.Value.MapRange(); i < n && iter.Next(); i++ { - mk.SetIterKey(iter) - (*names)[i] = mk.String() - } - names.Sort() - for _, name := range *names { - mk.SetString(name) - if err := marshalKey(mk); err != nil { - return err - } - // TODO(https://go.dev/issue/57061): Use mv.SetMapIndexOf. - mv.Set(m.MapIndex(mk.Value)) - if err := marshalVal(mo, enc, mv); err != nil { - return err - } - } - putStrings(names) - } - return nil - } -} - -// unmarshalInlinedFallbackNext unmarshals only the next member in an inlined fallback. -func unmarshalInlinedFallbackNext(uo UnmarshalOptions, dec *Decoder, va addressableValue, f *structField, quotedName, unquotedName []byte) error { - v := addressableValue{va.Field(f.index[0])} // addressable if struct value is addressable - if len(f.index) > 1 { - v = v.fieldByIndex(f.index[1:], true) - } - v = v.indirect(true) - - if v.Type() == rawValueType { - b := v.Addr().Interface().(*RawValue) - if len(*b) == 0 { // TODO: Should this be nil? What if it were all whitespace? - *b = append(*b, '{') - } else { - *b = trimSuffixWhitespace(*b) - if hasSuffixByte(*b, '}') { - // TODO: When merging into an object for the first time, - // should we verify that it is valid? - *b = trimSuffixByte(*b, '}') - *b = trimSuffixWhitespace(*b) - if !hasSuffixByte(*b, ',') && !hasSuffixByte(*b, '{') { - *b = append(*b, ',') - } - } else { - err := errors.New("inlined raw value must be a JSON object") - return &SemanticError{action: "unmarshal", GoType: rawValueType, Err: err} - } - } - *b = append(*b, quotedName...) - *b = append(*b, ':') - rawValue, err := dec.ReadValue() - if err != nil { - return err - } - *b = append(*b, rawValue...) - *b = append(*b, '}') - return nil - } else { - name := string(unquotedName) // TODO: Intern this? - - m := v // must be a map[string]V - if m.IsNil() { - m.Set(reflect.MakeMap(m.Type())) - } - mk := reflect.ValueOf(name) - mv := newAddressableValue(v.Type().Elem()) // TODO: Cache across calls? - if v2 := m.MapIndex(mk); v2.IsValid() { - mv.Set(v2) - } - - unmarshal := f.fncs.unmarshal - if uo.Unmarshalers != nil { - unmarshal, _ = uo.Unmarshalers.lookup(unmarshal, mv.Type()) - } - err := unmarshal(uo, dec, mv) - m.SetMapIndex(mk, mv.Value) - if err != nil { - return err - } - return nil - } -} diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_methods.go b/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_methods.go deleted file mode 100644 index 20899c868..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_methods.go +++ /dev/null @@ -1,229 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package json - -import ( - "encoding" - "errors" - "reflect" -) - -// Interfaces for custom serialization. -var ( - jsonMarshalerV1Type = reflect.TypeOf((*MarshalerV1)(nil)).Elem() - jsonMarshalerV2Type = reflect.TypeOf((*MarshalerV2)(nil)).Elem() - jsonUnmarshalerV1Type = reflect.TypeOf((*UnmarshalerV1)(nil)).Elem() - jsonUnmarshalerV2Type = reflect.TypeOf((*UnmarshalerV2)(nil)).Elem() - textMarshalerType = reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem() - textUnmarshalerType = reflect.TypeOf((*encoding.TextUnmarshaler)(nil)).Elem() -) - -// MarshalerV1 is implemented by types that can marshal themselves. -// It is recommended that types implement MarshalerV2 unless the implementation -// is trying to avoid a hard dependency on the "jsontext" package. -// -// It is recommended that implementations return a buffer that is safe -// for the caller to retain and potentially mutate. -type MarshalerV1 interface { - MarshalJSON() ([]byte, error) -} - -// MarshalerV2 is implemented by types that can marshal themselves. -// It is recommended that types implement MarshalerV2 instead of MarshalerV1 -// since this is both more performant and flexible. -// If a type implements both MarshalerV1 and MarshalerV2, -// then MarshalerV2 takes precedence. In such a case, both implementations -// should aim to have equivalent behavior for the default marshal options. -// -// The implementation must write only one JSON value to the Encoder and -// must not retain the pointer to Encoder. -type MarshalerV2 interface { - MarshalNextJSON(MarshalOptions, *Encoder) error - - // TODO: Should users call the MarshalOptions.MarshalNext method or - // should/can they call this method directly? Does it matter? -} - -// UnmarshalerV1 is implemented by types that can unmarshal themselves. -// It is recommended that types implement UnmarshalerV2 unless -// the implementation is trying to avoid a hard dependency on this package. -// -// The input can be assumed to be a valid encoding of a JSON value -// if called from unmarshal functionality in this package. -// UnmarshalJSON must copy the JSON data if it is retained after returning. -// It is recommended that UnmarshalJSON implement merge semantics when -// unmarshaling into a pre-populated value. -// -// Implementations must not retain or mutate the input []byte. -type UnmarshalerV1 interface { - UnmarshalJSON([]byte) error -} - -// UnmarshalerV2 is implemented by types that can unmarshal themselves. -// It is recommended that types implement UnmarshalerV2 instead of UnmarshalerV1 -// since this is both more performant and flexible. -// If a type implements both UnmarshalerV1 and UnmarshalerV2, -// then UnmarshalerV2 takes precedence. In such a case, both implementations -// should aim to have equivalent behavior for the default unmarshal options. -// -// The implementation must read only one JSON value from the Decoder. -// It is recommended that UnmarshalNextJSON implement merge semantics when -// unmarshaling into a pre-populated value. -// -// Implementations must not retain the pointer to Decoder. -type UnmarshalerV2 interface { - UnmarshalNextJSON(UnmarshalOptions, *Decoder) error - - // TODO: Should users call the UnmarshalOptions.UnmarshalNext method or - // should/can they call this method directly? Does it matter? -} - -func makeMethodArshaler(fncs *arshaler, t reflect.Type) *arshaler { - // Avoid injecting method arshaler on the pointer or interface version - // to avoid ever calling the method on a nil pointer or interface receiver. - // Let it be injected on the value receiver (which is always addressable). - if t.Kind() == reflect.Pointer || t.Kind() == reflect.Interface { - return fncs - } - - // Handle custom marshaler. - switch which, needAddr := implementsWhich(t, jsonMarshalerV2Type, jsonMarshalerV1Type, textMarshalerType); which { - case jsonMarshalerV2Type: - fncs.nonDefault = true - fncs.marshal = func(mo MarshalOptions, enc *Encoder, va addressableValue) error { - prevDepth, prevLength := enc.tokens.depthLength() - err := va.addrWhen(needAddr).Interface().(MarshalerV2).MarshalNextJSON(mo, enc) - currDepth, currLength := enc.tokens.depthLength() - if (prevDepth != currDepth || prevLength+1 != currLength) && err == nil { - err = errors.New("must write exactly one JSON value") - } - if err != nil { - err = wrapSkipFunc(err, "marshal method") - // TODO: Avoid wrapping semantic or I/O errors. - return &SemanticError{action: "marshal", GoType: t, Err: err} - } - return nil - } - case jsonMarshalerV1Type: - fncs.nonDefault = true - fncs.marshal = func(mo MarshalOptions, enc *Encoder, va addressableValue) error { - marshaler := va.addrWhen(needAddr).Interface().(MarshalerV1) - val, err := marshaler.MarshalJSON() - if err != nil { - err = wrapSkipFunc(err, "marshal method") - // TODO: Avoid wrapping semantic errors. - return &SemanticError{action: "marshal", GoType: t, Err: err} - } - if err := enc.WriteValue(val); err != nil { - // TODO: Avoid wrapping semantic or I/O errors. - return &SemanticError{action: "marshal", JSONKind: RawValue(val).Kind(), GoType: t, Err: err} - } - return nil - } - case textMarshalerType: - fncs.nonDefault = true - fncs.marshal = func(mo MarshalOptions, enc *Encoder, va addressableValue) error { - marshaler := va.addrWhen(needAddr).Interface().(encoding.TextMarshaler) - s, err := marshaler.MarshalText() - if err != nil { - err = wrapSkipFunc(err, "marshal method") - // TODO: Avoid wrapping semantic errors. - return &SemanticError{action: "marshal", JSONKind: '"', GoType: t, Err: err} - } - val := enc.UnusedBuffer() - val, err = appendString(val, string(s), true, nil) - if err != nil { - return &SemanticError{action: "marshal", JSONKind: '"', GoType: t, Err: err} - } - if err := enc.WriteValue(val); err != nil { - // TODO: Avoid wrapping syntactic or I/O errors. - return &SemanticError{action: "marshal", JSONKind: '"', GoType: t, Err: err} - } - return nil - } - } - - // Handle custom unmarshaler. - switch which, needAddr := implementsWhich(t, jsonUnmarshalerV2Type, jsonUnmarshalerV1Type, textUnmarshalerType); which { - case jsonUnmarshalerV2Type: - fncs.nonDefault = true - fncs.unmarshal = func(uo UnmarshalOptions, dec *Decoder, va addressableValue) error { - prevDepth, prevLength := dec.tokens.depthLength() - err := va.addrWhen(needAddr).Interface().(UnmarshalerV2).UnmarshalNextJSON(uo, dec) - currDepth, currLength := dec.tokens.depthLength() - if (prevDepth != currDepth || prevLength+1 != currLength) && err == nil { - err = errors.New("must read exactly one JSON value") - } - if err != nil { - err = wrapSkipFunc(err, "unmarshal method") - // TODO: Avoid wrapping semantic, syntactic, or I/O errors. - return &SemanticError{action: "unmarshal", GoType: t, Err: err} - } - return nil - } - case jsonUnmarshalerV1Type: - fncs.nonDefault = true - fncs.unmarshal = func(uo UnmarshalOptions, dec *Decoder, va addressableValue) error { - val, err := dec.ReadValue() - if err != nil { - return err // must be a syntactic or I/O error - } - unmarshaler := va.addrWhen(needAddr).Interface().(UnmarshalerV1) - if err := unmarshaler.UnmarshalJSON(val); err != nil { - err = wrapSkipFunc(err, "unmarshal method") - // TODO: Avoid wrapping semantic, syntactic, or I/O errors. - return &SemanticError{action: "unmarshal", JSONKind: val.Kind(), GoType: t, Err: err} - } - return nil - } - case textUnmarshalerType: - fncs.nonDefault = true - fncs.unmarshal = func(uo UnmarshalOptions, dec *Decoder, va addressableValue) error { - var flags valueFlags - val, err := dec.readValue(&flags) - if err != nil { - return err // must be a syntactic or I/O error - } - if val.Kind() != '"' { - err = errors.New("JSON value must be string type") - return &SemanticError{action: "unmarshal", JSONKind: val.Kind(), GoType: t, Err: err} - } - s := unescapeStringMayCopy(val, flags.isVerbatim()) - unmarshaler := va.addrWhen(needAddr).Interface().(encoding.TextUnmarshaler) - if err := unmarshaler.UnmarshalText(s); err != nil { - err = wrapSkipFunc(err, "unmarshal method") - // TODO: Avoid wrapping semantic, syntactic, or I/O errors. - return &SemanticError{action: "unmarshal", JSONKind: val.Kind(), GoType: t, Err: err} - } - return nil - } - } - - return fncs -} - -// implementsWhich is like t.Implements(ifaceType) for a list of interfaces, -// but checks whether either t or reflect.PointerTo(t) implements the interface. -// It returns the first interface type that matches and whether a value of t -// needs to be addressed first before it implements the interface. -func implementsWhich(t reflect.Type, ifaceTypes ...reflect.Type) (which reflect.Type, needAddr bool) { - for _, ifaceType := range ifaceTypes { - switch { - case t.Implements(ifaceType): - return ifaceType, false - case reflect.PointerTo(t).Implements(ifaceType): - return ifaceType, true - } - } - return nil, false -} - -// addrWhen returns va.Addr if addr is specified, otherwise it returns itself. -func (va addressableValue) addrWhen(addr bool) reflect.Value { - if addr { - return va.Addr() - } - return va.Value -} diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_time.go b/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_time.go deleted file mode 100644 index fc8d5b007..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/arshal_time.go +++ /dev/null @@ -1,241 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package json - -import ( - "errors" - "fmt" - "reflect" - "strings" - "time" -) - -var ( - timeDurationType = reflect.TypeOf((*time.Duration)(nil)).Elem() - timeTimeType = reflect.TypeOf((*time.Time)(nil)).Elem() -) - -func makeTimeArshaler(fncs *arshaler, t reflect.Type) *arshaler { - // Ideally, time types would implement MarshalerV2 and UnmarshalerV2, - // but that would incur a dependency on package json from package time. - // Given how widely used time is, it is more acceptable that we incur a - // dependency on time from json. - // - // Injecting the arshaling functionality like this will not be identical - // to actually declaring methods on the time types since embedding of the - // time types will not be able to forward this functionality. - switch t { - case timeDurationType: - fncs.nonDefault = true - marshalNanos := fncs.marshal - fncs.marshal = func(mo MarshalOptions, enc *Encoder, va addressableValue) error { - if mo.format != "" && mo.formatDepth == enc.tokens.depth() { - if mo.format == "nanos" { - mo.format = "" - return marshalNanos(mo, enc, va) - } else { - return newInvalidFormatError("marshal", t, mo.format) - } - } - - td := va.Interface().(time.Duration) - b := enc.UnusedBuffer() - b = append(b, '"') - b = append(b, td.String()...) // never contains special characters - b = append(b, '"') - return enc.WriteValue(b) - } - unmarshalNanos := fncs.unmarshal - fncs.unmarshal = func(uo UnmarshalOptions, dec *Decoder, va addressableValue) error { - // TODO: Should there be a flag that specifies that we can unmarshal - // from either form since there would be no ambiguity? - if uo.format != "" && uo.formatDepth == dec.tokens.depth() { - if uo.format == "nanos" { - uo.format = "" - return unmarshalNanos(uo, dec, va) - } else { - return newInvalidFormatError("unmarshal", t, uo.format) - } - } - - var flags valueFlags - td := va.Addr().Interface().(*time.Duration) - val, err := dec.readValue(&flags) - if err != nil { - return err - } - switch k := val.Kind(); k { - case 'n': - *td = time.Duration(0) - return nil - case '"': - val = unescapeStringMayCopy(val, flags.isVerbatim()) - td2, err := time.ParseDuration(string(val)) - if err != nil { - return &SemanticError{action: "unmarshal", JSONKind: k, GoType: t, Err: err} - } - *td = td2 - return nil - default: - return &SemanticError{action: "unmarshal", JSONKind: k, GoType: t} - } - } - case timeTimeType: - fncs.nonDefault = true - fncs.marshal = func(mo MarshalOptions, enc *Encoder, va addressableValue) error { - format := time.RFC3339Nano - isRFC3339 := true - if mo.format != "" && mo.formatDepth == enc.tokens.depth() { - var err error - format, isRFC3339, err = checkTimeFormat(mo.format) - if err != nil { - return &SemanticError{action: "marshal", GoType: t, Err: err} - } - } - - tt := va.Interface().(time.Time) - b := enc.UnusedBuffer() - b = append(b, '"') - b = tt.AppendFormat(b, format) - b = append(b, '"') - if isRFC3339 { - // Not all Go timestamps can be represented as valid RFC 3339. - // Explicitly check for these edge cases. - // See https://go.dev/issue/4556 and https://go.dev/issue/54580. - var err error - switch b := b[len(`"`) : len(b)-len(`"`)]; { - case b[len("9999")] != '-': // year must be exactly 4 digits wide - err = errors.New("year outside of range [0,9999]") - case b[len(b)-1] != 'Z': - c := b[len(b)-len("Z07:00")] - if ('0' <= c && c <= '9') || parseDec2(b[len(b)-len("07:00"):]) >= 24 { - err = errors.New("timezone hour outside of range [0,23]") - } - } - if err != nil { - return &SemanticError{action: "marshal", GoType: t, Err: err} - } - return enc.WriteValue(b) // RFC 3339 never needs JSON escaping - } - // The format may contain special characters that need escaping. - // Verify that the result is a valid JSON string (common case), - // otherwise escape the string correctly (slower case). - if consumeSimpleString(b) != len(b) { - b, _ = appendString(nil, string(b[len(`"`):len(b)-len(`"`)]), true, nil) - } - return enc.WriteValue(b) - } - fncs.unmarshal = func(uo UnmarshalOptions, dec *Decoder, va addressableValue) error { - format := time.RFC3339 - isRFC3339 := true - if uo.format != "" && uo.formatDepth == dec.tokens.depth() { - var err error - format, isRFC3339, err = checkTimeFormat(uo.format) - if err != nil { - return &SemanticError{action: "unmarshal", GoType: t, Err: err} - } - } - - var flags valueFlags - tt := va.Addr().Interface().(*time.Time) - val, err := dec.readValue(&flags) - if err != nil { - return err - } - k := val.Kind() - switch k { - case 'n': - *tt = time.Time{} - return nil - case '"': - val = unescapeStringMayCopy(val, flags.isVerbatim()) - tt2, err := time.Parse(format, string(val)) - if isRFC3339 && err == nil { - // TODO(https://go.dev/issue/54580): RFC 3339 specifies - // the exact grammar of a valid timestamp. However, - // the parsing functionality in "time" is too loose and - // incorrectly accepts invalid timestamps as valid. - // Remove these manual checks when "time" checks it for us. - newParseError := func(layout, value, layoutElem, valueElem, message string) error { - return &time.ParseError{Layout: layout, Value: value, LayoutElem: layoutElem, ValueElem: valueElem, Message: message} - } - switch { - case val[len("2006-01-02T")+1] == ':': // hour must be two digits - err = newParseError(format, string(val), "15", string(val[len("2006-01-02T"):][:1]), "") - case val[len("2006-01-02T15:04:05")] == ',': // sub-second separator must be a period - err = newParseError(format, string(val), ".", ",", "") - case val[len(val)-1] != 'Z': - switch { - case parseDec2(val[len(val)-len("07:00"):]) >= 24: // timezone hour must be in range - err = newParseError(format, string(val), "Z07:00", string(val[len(val)-len("Z07:00"):]), ": timezone hour out of range") - case parseDec2(val[len(val)-len("00"):]) >= 60: // timezone minute must be in range - err = newParseError(format, string(val), "Z07:00", string(val[len(val)-len("Z07:00"):]), ": timezone minute out of range") - } - } - } - if err != nil { - return &SemanticError{action: "unmarshal", JSONKind: k, GoType: t, Err: err} - } - *tt = tt2 - return nil - default: - return &SemanticError{action: "unmarshal", JSONKind: k, GoType: t} - } - } - } - return fncs -} - -func checkTimeFormat(format string) (string, bool, error) { - // We assume that an exported constant in the time package will - // always start with an uppercase ASCII letter. - if len(format) > 0 && 'A' <= format[0] && format[0] <= 'Z' { - switch format { - case "ANSIC": - return time.ANSIC, false, nil - case "UnixDate": - return time.UnixDate, false, nil - case "RubyDate": - return time.RubyDate, false, nil - case "RFC822": - return time.RFC822, false, nil - case "RFC822Z": - return time.RFC822Z, false, nil - case "RFC850": - return time.RFC850, false, nil - case "RFC1123": - return time.RFC1123, false, nil - case "RFC1123Z": - return time.RFC1123Z, false, nil - case "RFC3339": - return time.RFC3339, true, nil - case "RFC3339Nano": - return time.RFC3339Nano, true, nil - case "Kitchen": - return time.Kitchen, false, nil - case "Stamp": - return time.Stamp, false, nil - case "StampMilli": - return time.StampMilli, false, nil - case "StampMicro": - return time.StampMicro, false, nil - case "StampNano": - return time.StampNano, false, nil - default: - // Reject any format that is an exported Go identifier in case - // new format constants are added to the time package. - if strings.TrimFunc(format, isLetterOrDigit) == "" { - return "", false, fmt.Errorf("undefined format layout: %v", format) - } - } - } - return format, false, nil -} - -// parseDec2 parses b as an unsigned, base-10, 2-digit number. -// It panics if len(b) < 2. The result is undefined if digits are not base-10. -func parseDec2(b []byte) byte { - return 10*(b[0]-'0') + (b[1] - '0') -} diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/decode.go b/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/decode.go deleted file mode 100644 index 0d68b3233..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/decode.go +++ /dev/null @@ -1,1655 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package json - -import ( - "bytes" - "errors" - "io" - "math" - "strconv" - "unicode/utf16" - "unicode/utf8" -) - -// NOTE: The logic for decoding is complicated by the fact that reading from -// an io.Reader into a temporary buffer means that the buffer may contain a -// truncated portion of some valid input, requiring the need to fetch more data. -// -// This file is structured in the following way: -// -// - consumeXXX functions parse an exact JSON token from a []byte. -// If the buffer appears truncated, then it returns io.ErrUnexpectedEOF. -// The consumeSimpleXXX functions are so named because they only handle -// a subset of the grammar for the JSON token being parsed. -// They do not handle the full grammar to keep these functions inlineable. -// -// - Decoder.consumeXXX methods parse the next JSON token from Decoder.buf, -// automatically fetching more input if necessary. These methods take -// a position relative to the start of Decoder.buf as an argument and -// return the end of the consumed JSON token as a position, -// also relative to the start of Decoder.buf. -// -// - In the event of an I/O errors or state machine violations, -// the implementation avoids mutating the state of Decoder -// (aside from the book-keeping needed to implement Decoder.fetch). -// For this reason, only Decoder.ReadToken and Decoder.ReadValue are -// responsible for updated Decoder.prevStart and Decoder.prevEnd. -// -// - For performance, much of the implementation uses the pattern of calling -// the inlineable consumeXXX functions first, and if more work is necessary, -// then it calls the slower Decoder.consumeXXX methods. -// TODO: Revisit this pattern if the Go compiler provides finer control -// over exactly which calls are inlined or not. - -// DecodeOptions configures how JSON decoding operates. -// The zero value is equivalent to the default settings, -// which is compliant with both RFC 7493 and RFC 8259. -type DecodeOptions struct { - requireKeyedLiterals - nonComparable - - // AllowDuplicateNames specifies that JSON objects may contain - // duplicate member names. Disabling the duplicate name check may provide - // computational and performance benefits, but breaks compliance with - // RFC 7493, section 2.3. The input will still be compliant with RFC 8259, - // which leaves the handling of duplicate names as unspecified behavior. - AllowDuplicateNames bool - - // AllowInvalidUTF8 specifies that JSON strings may contain invalid UTF-8, - // which will be mangled as the Unicode replacement character, U+FFFD. - // This causes the decoder to break compliance with - // RFC 7493, section 2.1, and RFC 8259, section 8.1. - AllowInvalidUTF8 bool -} - -// Decoder is a streaming decoder for raw JSON tokens and values. -// It is used to read a stream of top-level JSON values, -// each separated by optional whitespace characters. -// -// ReadToken and ReadValue calls may be interleaved. -// For example, the following JSON value: -// -// {"name":"value","array":[null,false,true,3.14159],"object":{"k":"v"}} -// -// can be parsed with the following calls (ignoring errors for brevity): -// -// d.ReadToken() // { -// d.ReadToken() // "name" -// d.ReadToken() // "value" -// d.ReadValue() // "array" -// d.ReadToken() // [ -// d.ReadToken() // null -// d.ReadToken() // false -// d.ReadValue() // true -// d.ReadToken() // 3.14159 -// d.ReadToken() // ] -// d.ReadValue() // "object" -// d.ReadValue() // {"k":"v"} -// d.ReadToken() // } -// -// The above is one of many possible sequence of calls and -// may not represent the most sensible method to call for any given token/value. -// For example, it is probably more common to call ReadToken to obtain a -// string token for object names. -type Decoder struct { - state - decodeBuffer - options DecodeOptions - - stringCache *stringCache // only used when unmarshaling -} - -// decodeBuffer is a buffer split into 4 segments: -// -// - buf[0:prevEnd] // already read portion of the buffer -// - buf[prevStart:prevEnd] // previously read value -// - buf[prevEnd:len(buf)] // unread portion of the buffer -// - buf[len(buf):cap(buf)] // unused portion of the buffer -// -// Invariants: -// -// 0 ≤ prevStart ≤ prevEnd ≤ len(buf) ≤ cap(buf) -type decodeBuffer struct { - peekPos int // non-zero if valid offset into buf for start of next token - peekErr error // implies peekPos is -1 - - buf []byte // may alias rd if it is a bytes.Buffer - prevStart int - prevEnd int - - // baseOffset is added to prevStart and prevEnd to obtain - // the absolute offset relative to the start of io.Reader stream. - baseOffset int64 - - rd io.Reader -} - -// NewDecoder constructs a new streaming decoder reading from r. -// -// If r is a bytes.Buffer, then the decoder parses directly from the buffer -// without first copying the contents to an intermediate buffer. -// Additional writes to the buffer must not occur while the decoder is in use. -func NewDecoder(r io.Reader) *Decoder { - return DecodeOptions{}.NewDecoder(r) -} - -// NewDecoder constructs a new streaming decoder reading from r -// configured with the provided options. -func (o DecodeOptions) NewDecoder(r io.Reader) *Decoder { - d := new(Decoder) - o.ResetDecoder(d, r) - return d -} - -// ResetDecoder resets a decoder such that it is reading afresh from r and -// configured with the provided options. -func (o DecodeOptions) ResetDecoder(d *Decoder, r io.Reader) { - if d == nil { - panic("json: invalid nil Decoder") - } - if r == nil { - panic("json: invalid nil io.Reader") - } - d.reset(nil, r, o) -} - -func (d *Decoder) reset(b []byte, r io.Reader, o DecodeOptions) { - d.state.reset() - d.decodeBuffer = decodeBuffer{buf: b, rd: r} - d.options = o -} - -// Reset resets a decoder such that it is reading afresh from r but -// keep any pre-existing decoder options. -func (d *Decoder) Reset(r io.Reader) { - d.options.ResetDecoder(d, r) -} - -var errBufferWriteAfterNext = errors.New("invalid bytes.Buffer.Write call after calling bytes.Buffer.Next") - -// fetch reads at least 1 byte from the underlying io.Reader. -// It returns io.ErrUnexpectedEOF if zero bytes were read and io.EOF was seen. -func (d *Decoder) fetch() error { - if d.rd == nil { - return io.ErrUnexpectedEOF - } - - // Inform objectNameStack that we are about to fetch new buffer content. - d.names.copyQuotedBuffer(d.buf) - - // Specialize bytes.Buffer for better performance. - if bb, ok := d.rd.(*bytes.Buffer); ok { - switch { - case bb.Len() == 0: - return io.ErrUnexpectedEOF - case len(d.buf) == 0: - d.buf = bb.Next(bb.Len()) // "read" all data in the buffer - return nil - default: - // This only occurs if a partially filled bytes.Buffer was provided - // and more data is written to it while Decoder is reading from it. - // This practice will lead to data corruption since future writes - // may overwrite the contents of the current buffer. - // - // The user is trying to use a bytes.Buffer as a pipe, - // but a bytes.Buffer is poor implementation of a pipe, - // the purpose-built io.Pipe should be used instead. - return &ioError{action: "read", err: errBufferWriteAfterNext} - } - } - - // Allocate initial buffer if empty. - if cap(d.buf) == 0 { - d.buf = make([]byte, 0, 64) - } - - // Check whether to grow the buffer. - const maxBufferSize = 4 << 10 - const growthSizeFactor = 2 // higher value is faster - const growthRateFactor = 2 // higher value is slower - // By default, grow if below the maximum buffer size. - grow := cap(d.buf) <= maxBufferSize/growthSizeFactor - // Growing can be expensive, so only grow - // if a sufficient number of bytes have been processed. - grow = grow && int64(cap(d.buf)) < d.previousOffsetEnd()/growthRateFactor - // If prevStart==0, then fetch was called in order to fetch more data - // to finish consuming a large JSON value contiguously. - // Grow if less than 25% of the remaining capacity is available. - // Note that this may cause the input buffer to exceed maxBufferSize. - grow = grow || (d.prevStart == 0 && len(d.buf) >= 3*cap(d.buf)/4) - - if grow { - // Allocate a new buffer and copy the contents of the old buffer over. - // TODO: Provide a hard limit on the maximum internal buffer size? - buf := make([]byte, 0, cap(d.buf)*growthSizeFactor) - d.buf = append(buf, d.buf[d.prevStart:]...) - } else { - // Move unread portion of the data to the front. - n := copy(d.buf[:cap(d.buf)], d.buf[d.prevStart:]) - d.buf = d.buf[:n] - } - d.baseOffset += int64(d.prevStart) - d.prevEnd -= d.prevStart - d.prevStart = 0 - - // Read more data into the internal buffer. - for { - n, err := d.rd.Read(d.buf[len(d.buf):cap(d.buf)]) - switch { - case n > 0: - d.buf = d.buf[:len(d.buf)+n] - return nil // ignore errors if any bytes are read - case err == io.EOF: - return io.ErrUnexpectedEOF - case err != nil: - return &ioError{action: "read", err: err} - default: - continue // Read returned (0, nil) - } - } -} - -const invalidateBufferByte = '#' // invalid starting character for JSON grammar - -// invalidatePreviousRead invalidates buffers returned by Peek and Read calls -// so that the first byte is an invalid character. -// This Hyrum-proofs the API against faulty application code that assumes -// values returned by ReadValue remain valid past subsequent Read calls. -func (d *decodeBuffer) invalidatePreviousRead() { - // Avoid mutating the buffer if d.rd is nil which implies that d.buf - // is provided by the user code and may not expect mutations. - isBytesBuffer := func(r io.Reader) bool { - _, ok := r.(*bytes.Buffer) - return ok - } - if d.rd != nil && !isBytesBuffer(d.rd) && d.prevStart < d.prevEnd && uint(d.prevStart) < uint(len(d.buf)) { - d.buf[d.prevStart] = invalidateBufferByte - d.prevStart = d.prevEnd - } -} - -// needMore reports whether there are no more unread bytes. -func (d *decodeBuffer) needMore(pos int) bool { - // NOTE: The arguments and logic are kept simple to keep this inlineable. - return pos == len(d.buf) -} - -// injectSyntacticErrorWithPosition wraps a SyntacticError with the position, -// otherwise it returns the error as is. -// It takes a position relative to the start of the start of d.buf. -func (d *decodeBuffer) injectSyntacticErrorWithPosition(err error, pos int) error { - if serr, ok := err.(*SyntacticError); ok { - return serr.withOffset(d.baseOffset + int64(pos)) - } - return err -} - -func (d *decodeBuffer) previousOffsetStart() int64 { return d.baseOffset + int64(d.prevStart) } -func (d *decodeBuffer) previousOffsetEnd() int64 { return d.baseOffset + int64(d.prevEnd) } -func (d *decodeBuffer) previousBuffer() []byte { return d.buf[d.prevStart:d.prevEnd] } -func (d *decodeBuffer) unreadBuffer() []byte { return d.buf[d.prevEnd:len(d.buf)] } - -// PeekKind retrieves the next token kind, but does not advance the read offset. -// It returns 0 if there are no more tokens. -func (d *Decoder) PeekKind() Kind { - // Check whether we have a cached peek result. - if d.peekPos > 0 { - return Kind(d.buf[d.peekPos]).normalize() - } - - var err error - d.invalidatePreviousRead() - pos := d.prevEnd - - // Consume leading whitespace. - pos += consumeWhitespace(d.buf[pos:]) - if d.needMore(pos) { - if pos, err = d.consumeWhitespace(pos); err != nil { - if err == io.ErrUnexpectedEOF && d.tokens.depth() == 1 { - err = io.EOF // EOF possibly if no Tokens present after top-level value - } - d.peekPos, d.peekErr = -1, err - return invalidKind - } - } - - // Consume colon or comma. - var delim byte - if c := d.buf[pos]; c == ':' || c == ',' { - delim = c - pos += 1 - pos += consumeWhitespace(d.buf[pos:]) - if d.needMore(pos) { - if pos, err = d.consumeWhitespace(pos); err != nil { - d.peekPos, d.peekErr = -1, err - return invalidKind - } - } - } - next := Kind(d.buf[pos]).normalize() - if d.tokens.needDelim(next) != delim { - pos = d.prevEnd // restore position to right after leading whitespace - pos += consumeWhitespace(d.buf[pos:]) - err = d.tokens.checkDelim(delim, next) - err = d.injectSyntacticErrorWithPosition(err, pos) - d.peekPos, d.peekErr = -1, err - return invalidKind - } - - // This may set peekPos to zero, which is indistinguishable from - // the uninitialized state. While a small hit to performance, it is correct - // since ReadValue and ReadToken will disregard the cached result and - // recompute the next kind. - d.peekPos, d.peekErr = pos, nil - return next -} - -// SkipValue is semantically equivalent to calling ReadValue and discarding -// the result except that memory is not wasted trying to hold the entire result. -func (d *Decoder) SkipValue() error { - switch d.PeekKind() { - case '{', '[': - // For JSON objects and arrays, keep skipping all tokens - // until the depth matches the starting depth. - depth := d.tokens.depth() - for { - if _, err := d.ReadToken(); err != nil { - return err - } - if depth >= d.tokens.depth() { - return nil - } - } - default: - // Trying to skip a value when the next token is a '}' or ']' - // will result in an error being returned here. - if _, err := d.ReadValue(); err != nil { - return err - } - return nil - } -} - -// ReadToken reads the next Token, advancing the read offset. -// The returned token is only valid until the next Peek, Read, or Skip call. -// It returns io.EOF if there are no more tokens. -func (d *Decoder) ReadToken() (Token, error) { - // Determine the next kind. - var err error - var next Kind - pos := d.peekPos - if pos != 0 { - // Use cached peek result. - if d.peekErr != nil { - err := d.peekErr - d.peekPos, d.peekErr = 0, nil // possibly a transient I/O error - return Token{}, err - } - next = Kind(d.buf[pos]).normalize() - d.peekPos = 0 // reset cache - } else { - d.invalidatePreviousRead() - pos = d.prevEnd - - // Consume leading whitespace. - pos += consumeWhitespace(d.buf[pos:]) - if d.needMore(pos) { - if pos, err = d.consumeWhitespace(pos); err != nil { - if err == io.ErrUnexpectedEOF && d.tokens.depth() == 1 { - err = io.EOF // EOF possibly if no Tokens present after top-level value - } - return Token{}, err - } - } - - // Consume colon or comma. - var delim byte - if c := d.buf[pos]; c == ':' || c == ',' { - delim = c - pos += 1 - pos += consumeWhitespace(d.buf[pos:]) - if d.needMore(pos) { - if pos, err = d.consumeWhitespace(pos); err != nil { - return Token{}, err - } - } - } - next = Kind(d.buf[pos]).normalize() - if d.tokens.needDelim(next) != delim { - pos = d.prevEnd // restore position to right after leading whitespace - pos += consumeWhitespace(d.buf[pos:]) - err = d.tokens.checkDelim(delim, next) - return Token{}, d.injectSyntacticErrorWithPosition(err, pos) - } - } - - // Handle the next token. - var n int - switch next { - case 'n': - if consumeNull(d.buf[pos:]) == 0 { - pos, err = d.consumeLiteral(pos, "null") - if err != nil { - return Token{}, d.injectSyntacticErrorWithPosition(err, pos) - } - } else { - pos += len("null") - } - if err = d.tokens.appendLiteral(); err != nil { - return Token{}, d.injectSyntacticErrorWithPosition(err, pos-len("null")) // report position at start of literal - } - d.prevStart, d.prevEnd = pos, pos - return Null, nil - - case 'f': - if consumeFalse(d.buf[pos:]) == 0 { - pos, err = d.consumeLiteral(pos, "false") - if err != nil { - return Token{}, d.injectSyntacticErrorWithPosition(err, pos) - } - } else { - pos += len("false") - } - if err = d.tokens.appendLiteral(); err != nil { - return Token{}, d.injectSyntacticErrorWithPosition(err, pos-len("false")) // report position at start of literal - } - d.prevStart, d.prevEnd = pos, pos - return False, nil - - case 't': - if consumeTrue(d.buf[pos:]) == 0 { - pos, err = d.consumeLiteral(pos, "true") - if err != nil { - return Token{}, d.injectSyntacticErrorWithPosition(err, pos) - } - } else { - pos += len("true") - } - if err = d.tokens.appendLiteral(); err != nil { - return Token{}, d.injectSyntacticErrorWithPosition(err, pos-len("true")) // report position at start of literal - } - d.prevStart, d.prevEnd = pos, pos - return True, nil - - case '"': - var flags valueFlags // TODO: Preserve this in Token? - if n = consumeSimpleString(d.buf[pos:]); n == 0 { - oldAbsPos := d.baseOffset + int64(pos) - pos, err = d.consumeString(&flags, pos) - newAbsPos := d.baseOffset + int64(pos) - n = int(newAbsPos - oldAbsPos) - if err != nil { - return Token{}, d.injectSyntacticErrorWithPosition(err, pos) - } - } else { - pos += n - } - if !d.options.AllowDuplicateNames && d.tokens.last.needObjectName() { - if !d.tokens.last.isValidNamespace() { - return Token{}, errInvalidNamespace - } - if d.tokens.last.isActiveNamespace() && !d.namespaces.last().insertQuoted(d.buf[pos-n:pos], flags.isVerbatim()) { - err = &SyntacticError{str: "duplicate name " + string(d.buf[pos-n:pos]) + " in object"} - return Token{}, d.injectSyntacticErrorWithPosition(err, pos-n) // report position at start of string - } - d.names.replaceLastQuotedOffset(pos - n) // only replace if insertQuoted succeeds - } - if err = d.tokens.appendString(); err != nil { - return Token{}, d.injectSyntacticErrorWithPosition(err, pos-n) // report position at start of string - } - d.prevStart, d.prevEnd = pos-n, pos - return Token{raw: &d.decodeBuffer, num: uint64(d.previousOffsetStart())}, nil - - case '0': - // NOTE: Since JSON numbers are not self-terminating, - // we need to make sure that the next byte is not part of a number. - if n = consumeSimpleNumber(d.buf[pos:]); n == 0 || d.needMore(pos+n) { - oldAbsPos := d.baseOffset + int64(pos) - pos, err = d.consumeNumber(pos) - newAbsPos := d.baseOffset + int64(pos) - n = int(newAbsPos - oldAbsPos) - if err != nil { - return Token{}, d.injectSyntacticErrorWithPosition(err, pos) - } - } else { - pos += n - } - if err = d.tokens.appendNumber(); err != nil { - return Token{}, d.injectSyntacticErrorWithPosition(err, pos-n) // report position at start of number - } - d.prevStart, d.prevEnd = pos-n, pos - return Token{raw: &d.decodeBuffer, num: uint64(d.previousOffsetStart())}, nil - - case '{': - if err = d.tokens.pushObject(); err != nil { - return Token{}, d.injectSyntacticErrorWithPosition(err, pos) - } - if !d.options.AllowDuplicateNames { - d.names.push() - d.namespaces.push() - } - pos += 1 - d.prevStart, d.prevEnd = pos, pos - return ObjectStart, nil - - case '}': - if err = d.tokens.popObject(); err != nil { - return Token{}, d.injectSyntacticErrorWithPosition(err, pos) - } - if !d.options.AllowDuplicateNames { - d.names.pop() - d.namespaces.pop() - } - pos += 1 - d.prevStart, d.prevEnd = pos, pos - return ObjectEnd, nil - - case '[': - if err = d.tokens.pushArray(); err != nil { - return Token{}, d.injectSyntacticErrorWithPosition(err, pos) - } - pos += 1 - d.prevStart, d.prevEnd = pos, pos - return ArrayStart, nil - - case ']': - if err = d.tokens.popArray(); err != nil { - return Token{}, d.injectSyntacticErrorWithPosition(err, pos) - } - pos += 1 - d.prevStart, d.prevEnd = pos, pos - return ArrayEnd, nil - - default: - err = newInvalidCharacterError(d.buf[pos:], "at start of token") - return Token{}, d.injectSyntacticErrorWithPosition(err, pos) - } -} - -type valueFlags uint - -const ( - _ valueFlags = (1 << iota) / 2 // powers of two starting with zero - - stringNonVerbatim // string cannot be naively treated as valid UTF-8 - stringNonCanonical // string not formatted according to RFC 8785, section 3.2.2.2. - // TODO: Track whether a number is a non-integer? -) - -func (f *valueFlags) set(f2 valueFlags) { *f |= f2 } -func (f valueFlags) isVerbatim() bool { return f&stringNonVerbatim == 0 } -func (f valueFlags) isCanonical() bool { return f&stringNonCanonical == 0 } - -// ReadValue returns the next raw JSON value, advancing the read offset. -// The value is stripped of any leading or trailing whitespace. -// The returned value is only valid until the next Peek, Read, or Skip call and -// may not be mutated while the Decoder remains in use. -// If the decoder is currently at the end token for an object or array, -// then it reports a SyntacticError and the internal state remains unchanged. -// It returns io.EOF if there are no more values. -func (d *Decoder) ReadValue() (RawValue, error) { - var flags valueFlags - return d.readValue(&flags) -} -func (d *Decoder) readValue(flags *valueFlags) (RawValue, error) { - // Determine the next kind. - var err error - var next Kind - pos := d.peekPos - if pos != 0 { - // Use cached peek result. - if d.peekErr != nil { - err := d.peekErr - d.peekPos, d.peekErr = 0, nil // possibly a transient I/O error - return nil, err - } - next = Kind(d.buf[pos]).normalize() - d.peekPos = 0 // reset cache - } else { - d.invalidatePreviousRead() - pos = d.prevEnd - - // Consume leading whitespace. - pos += consumeWhitespace(d.buf[pos:]) - if d.needMore(pos) { - if pos, err = d.consumeWhitespace(pos); err != nil { - if err == io.ErrUnexpectedEOF && d.tokens.depth() == 1 { - err = io.EOF // EOF possibly if no Tokens present after top-level value - } - return nil, err - } - } - - // Consume colon or comma. - var delim byte - if c := d.buf[pos]; c == ':' || c == ',' { - delim = c - pos += 1 - pos += consumeWhitespace(d.buf[pos:]) - if d.needMore(pos) { - if pos, err = d.consumeWhitespace(pos); err != nil { - return nil, err - } - } - } - next = Kind(d.buf[pos]).normalize() - if d.tokens.needDelim(next) != delim { - pos = d.prevEnd // restore position to right after leading whitespace - pos += consumeWhitespace(d.buf[pos:]) - err = d.tokens.checkDelim(delim, next) - return nil, d.injectSyntacticErrorWithPosition(err, pos) - } - } - - // Handle the next value. - oldAbsPos := d.baseOffset + int64(pos) - pos, err = d.consumeValue(flags, pos) - newAbsPos := d.baseOffset + int64(pos) - n := int(newAbsPos - oldAbsPos) - if err != nil { - return nil, d.injectSyntacticErrorWithPosition(err, pos) - } - switch next { - case 'n', 't', 'f': - err = d.tokens.appendLiteral() - case '"': - if !d.options.AllowDuplicateNames && d.tokens.last.needObjectName() { - if !d.tokens.last.isValidNamespace() { - err = errInvalidNamespace - break - } - if d.tokens.last.isActiveNamespace() && !d.namespaces.last().insertQuoted(d.buf[pos-n:pos], flags.isVerbatim()) { - err = &SyntacticError{str: "duplicate name " + string(d.buf[pos-n:pos]) + " in object"} - break - } - d.names.replaceLastQuotedOffset(pos - n) // only replace if insertQuoted succeeds - } - err = d.tokens.appendString() - case '0': - err = d.tokens.appendNumber() - case '{': - if err = d.tokens.pushObject(); err != nil { - break - } - if err = d.tokens.popObject(); err != nil { - panic("BUG: popObject should never fail immediately after pushObject: " + err.Error()) - } - case '[': - if err = d.tokens.pushArray(); err != nil { - break - } - if err = d.tokens.popArray(); err != nil { - panic("BUG: popArray should never fail immediately after pushArray: " + err.Error()) - } - } - if err != nil { - return nil, d.injectSyntacticErrorWithPosition(err, pos-n) // report position at start of value - } - d.prevEnd = pos - d.prevStart = pos - n - return d.buf[pos-n : pos : pos], nil -} - -// checkEOF verifies that the input has no more data. -func (d *Decoder) checkEOF() error { - switch pos, err := d.consumeWhitespace(d.prevEnd); err { - case nil: - return newInvalidCharacterError(d.buf[pos:], "after top-level value") - case io.ErrUnexpectedEOF: - return nil - default: - return err - } -} - -// consumeWhitespace consumes all whitespace starting at d.buf[pos:]. -// It returns the new position in d.buf immediately after the last whitespace. -// If it returns nil, there is guaranteed to at least be one unread byte. -// -// The following pattern is common in this implementation: -// -// pos += consumeWhitespace(d.buf[pos:]) -// if d.needMore(pos) { -// if pos, err = d.consumeWhitespace(pos); err != nil { -// return ... -// } -// } -// -// It is difficult to simplify this without sacrificing performance since -// consumeWhitespace must be inlined. The body of the if statement is -// executed only in rare situations where we need to fetch more data. -// Since fetching may return an error, we also need to check the error. -func (d *Decoder) consumeWhitespace(pos int) (newPos int, err error) { - for { - pos += consumeWhitespace(d.buf[pos:]) - if d.needMore(pos) { - absPos := d.baseOffset + int64(pos) - err = d.fetch() // will mutate d.buf and invalidate pos - pos = int(absPos - d.baseOffset) - if err != nil { - return pos, err - } - continue - } - return pos, nil - } -} - -// consumeValue consumes a single JSON value starting at d.buf[pos:]. -// It returns the new position in d.buf immediately after the value. -func (d *Decoder) consumeValue(flags *valueFlags, pos int) (newPos int, err error) { - for { - var n int - var err error - switch next := Kind(d.buf[pos]).normalize(); next { - case 'n': - if n = consumeNull(d.buf[pos:]); n == 0 { - n, err = consumeLiteral(d.buf[pos:], "null") - } - case 'f': - if n = consumeFalse(d.buf[pos:]); n == 0 { - n, err = consumeLiteral(d.buf[pos:], "false") - } - case 't': - if n = consumeTrue(d.buf[pos:]); n == 0 { - n, err = consumeLiteral(d.buf[pos:], "true") - } - case '"': - if n = consumeSimpleString(d.buf[pos:]); n == 0 { - return d.consumeString(flags, pos) - } - case '0': - // NOTE: Since JSON numbers are not self-terminating, - // we need to make sure that the next byte is not part of a number. - if n = consumeSimpleNumber(d.buf[pos:]); n == 0 || d.needMore(pos+n) { - return d.consumeNumber(pos) - } - case '{': - return d.consumeObject(flags, pos) - case '[': - return d.consumeArray(flags, pos) - default: - return pos, newInvalidCharacterError(d.buf[pos:], "at start of value") - } - if err == io.ErrUnexpectedEOF { - absPos := d.baseOffset + int64(pos) - err = d.fetch() // will mutate d.buf and invalidate pos - pos = int(absPos - d.baseOffset) - if err != nil { - return pos, err - } - continue - } - return pos + n, err - } -} - -// consumeLiteral consumes a single JSON literal starting at d.buf[pos:]. -// It returns the new position in d.buf immediately after the literal. -func (d *Decoder) consumeLiteral(pos int, lit string) (newPos int, err error) { - for { - n, err := consumeLiteral(d.buf[pos:], lit) - if err == io.ErrUnexpectedEOF { - absPos := d.baseOffset + int64(pos) - err = d.fetch() // will mutate d.buf and invalidate pos - pos = int(absPos - d.baseOffset) - if err != nil { - return pos, err - } - continue - } - return pos + n, err - } -} - -// consumeString consumes a single JSON string starting at d.buf[pos:]. -// It returns the new position in d.buf immediately after the string. -func (d *Decoder) consumeString(flags *valueFlags, pos int) (newPos int, err error) { - var n int - for { - n, err = consumeStringResumable(flags, d.buf[pos:], n, !d.options.AllowInvalidUTF8) - if err == io.ErrUnexpectedEOF { - absPos := d.baseOffset + int64(pos) - err = d.fetch() // will mutate d.buf and invalidate pos - pos = int(absPos - d.baseOffset) - if err != nil { - return pos, err - } - continue - } - return pos + n, err - } -} - -// consumeNumber consumes a single JSON number starting at d.buf[pos:]. -// It returns the new position in d.buf immediately after the number. -func (d *Decoder) consumeNumber(pos int) (newPos int, err error) { - var n int - var state consumeNumberState - for { - n, state, err = consumeNumberResumable(d.buf[pos:], n, state) - // NOTE: Since JSON numbers are not self-terminating, - // we need to make sure that the next byte is not part of a number. - if err == io.ErrUnexpectedEOF || d.needMore(pos+n) { - mayTerminate := err == nil - absPos := d.baseOffset + int64(pos) - err = d.fetch() // will mutate d.buf and invalidate pos - pos = int(absPos - d.baseOffset) - if err != nil { - if mayTerminate && err == io.ErrUnexpectedEOF { - return pos + n, nil - } - return pos, err - } - continue - } - return pos + n, err - } -} - -// consumeObject consumes a single JSON object starting at d.buf[pos:]. -// It returns the new position in d.buf immediately after the object. -func (d *Decoder) consumeObject(flags *valueFlags, pos int) (newPos int, err error) { - var n int - var names *objectNamespace - if !d.options.AllowDuplicateNames { - d.namespaces.push() - defer d.namespaces.pop() - names = d.namespaces.last() - } - - // Handle before start. - if d.buf[pos] != '{' { - panic("BUG: consumeObject must be called with a buffer that starts with '{'") - } - pos++ - - // Handle after start. - pos += consumeWhitespace(d.buf[pos:]) - if d.needMore(pos) { - if pos, err = d.consumeWhitespace(pos); err != nil { - return pos, err - } - } - if d.buf[pos] == '}' { - pos++ - return pos, nil - } - - for { - // Handle before name. - pos += consumeWhitespace(d.buf[pos:]) - if d.needMore(pos) { - if pos, err = d.consumeWhitespace(pos); err != nil { - return pos, err - } - } - var flags2 valueFlags - if n = consumeSimpleString(d.buf[pos:]); n == 0 { - oldAbsPos := d.baseOffset + int64(pos) - pos, err = d.consumeString(&flags2, pos) - newAbsPos := d.baseOffset + int64(pos) - n = int(newAbsPos - oldAbsPos) - flags.set(flags2) - if err != nil { - return pos, err - } - } else { - pos += n - } - if !d.options.AllowDuplicateNames && !names.insertQuoted(d.buf[pos-n:pos], flags2.isVerbatim()) { - return pos - n, &SyntacticError{str: "duplicate name " + string(d.buf[pos-n:pos]) + " in object"} - } - - // Handle after name. - pos += consumeWhitespace(d.buf[pos:]) - if d.needMore(pos) { - if pos, err = d.consumeWhitespace(pos); err != nil { - return pos, err - } - } - if d.buf[pos] != ':' { - return pos, newInvalidCharacterError(d.buf[pos:], "after object name (expecting ':')") - } - pos++ - - // Handle before value. - pos += consumeWhitespace(d.buf[pos:]) - if d.needMore(pos) { - if pos, err = d.consumeWhitespace(pos); err != nil { - return pos, err - } - } - pos, err = d.consumeValue(flags, pos) - if err != nil { - return pos, err - } - - // Handle after value. - pos += consumeWhitespace(d.buf[pos:]) - if d.needMore(pos) { - if pos, err = d.consumeWhitespace(pos); err != nil { - return pos, err - } - } - switch d.buf[pos] { - case ',': - pos++ - continue - case '}': - pos++ - return pos, nil - default: - return pos, newInvalidCharacterError(d.buf[pos:], "after object value (expecting ',' or '}')") - } - } -} - -// consumeArray consumes a single JSON array starting at d.buf[pos:]. -// It returns the new position in d.buf immediately after the array. -func (d *Decoder) consumeArray(flags *valueFlags, pos int) (newPos int, err error) { - // Handle before start. - if d.buf[pos] != '[' { - panic("BUG: consumeArray must be called with a buffer that starts with '['") - } - pos++ - - // Handle after start. - pos += consumeWhitespace(d.buf[pos:]) - if d.needMore(pos) { - if pos, err = d.consumeWhitespace(pos); err != nil { - return pos, err - } - } - if d.buf[pos] == ']' { - pos++ - return pos, nil - } - - for { - // Handle before value. - pos += consumeWhitespace(d.buf[pos:]) - if d.needMore(pos) { - if pos, err = d.consumeWhitespace(pos); err != nil { - return pos, err - } - } - pos, err = d.consumeValue(flags, pos) - if err != nil { - return pos, err - } - - // Handle after value. - pos += consumeWhitespace(d.buf[pos:]) - if d.needMore(pos) { - if pos, err = d.consumeWhitespace(pos); err != nil { - return pos, err - } - } - switch d.buf[pos] { - case ',': - pos++ - continue - case ']': - pos++ - return pos, nil - default: - return pos, newInvalidCharacterError(d.buf[pos:], "after array value (expecting ',' or ']')") - } - } -} - -// InputOffset returns the current input byte offset. It gives the location -// of the next byte immediately after the most recently returned token or value. -// The number of bytes actually read from the underlying io.Reader may be more -// than this offset due to internal buffering effects. -func (d *Decoder) InputOffset() int64 { - return d.previousOffsetEnd() -} - -// UnreadBuffer returns the data remaining in the unread buffer, -// which may contain zero or more bytes. -// The returned buffer must not be mutated while Decoder continues to be used. -// The buffer contents are valid until the next Peek, Read, or Skip call. -func (d *Decoder) UnreadBuffer() []byte { - return d.unreadBuffer() -} - -// StackDepth returns the depth of the state machine for read JSON data. -// Each level on the stack represents a nested JSON object or array. -// It is incremented whenever an ObjectStart or ArrayStart token is encountered -// and decremented whenever an ObjectEnd or ArrayEnd token is encountered. -// The depth is zero-indexed, where zero represents the top-level JSON value. -func (d *Decoder) StackDepth() int { - // NOTE: Keep in sync with Encoder.StackDepth. - return d.tokens.depth() - 1 -} - -// StackIndex returns information about the specified stack level. -// It must be a number between 0 and StackDepth, inclusive. -// For each level, it reports the kind: -// -// - 0 for a level of zero, -// - '{' for a level representing a JSON object, and -// - '[' for a level representing a JSON array. -// -// It also reports the length of that JSON object or array. -// Each name and value in a JSON object is counted separately, -// so the effective number of members would be half the length. -// A complete JSON object must have an even length. -func (d *Decoder) StackIndex(i int) (Kind, int) { - // NOTE: Keep in sync with Encoder.StackIndex. - switch s := d.tokens.index(i); { - case i > 0 && s.isObject(): - return '{', s.length() - case i > 0 && s.isArray(): - return '[', s.length() - default: - return 0, s.length() - } -} - -// StackPointer returns a JSON Pointer (RFC 6901) to the most recently read value. -// Object names are only present if AllowDuplicateNames is false, otherwise -// object members are represented using their index within the object. -func (d *Decoder) StackPointer() string { - d.names.copyQuotedBuffer(d.buf) - return string(d.appendStackPointer(nil)) -} - -// consumeWhitespace consumes leading JSON whitespace per RFC 7159, section 2. -func consumeWhitespace(b []byte) (n int) { - // NOTE: The arguments and logic are kept simple to keep this inlineable. - for len(b) > n && (b[n] == ' ' || b[n] == '\t' || b[n] == '\r' || b[n] == '\n') { - n++ - } - return n -} - -// consumeNull consumes the next JSON null literal per RFC 7159, section 3. -// It returns 0 if it is invalid, in which case consumeLiteral should be used. -func consumeNull(b []byte) int { - // NOTE: The arguments and logic are kept simple to keep this inlineable. - const literal = "null" - if len(b) >= len(literal) && string(b[:len(literal)]) == literal { - return len(literal) - } - return 0 -} - -// consumeFalse consumes the next JSON false literal per RFC 7159, section 3. -// It returns 0 if it is invalid, in which case consumeLiteral should be used. -func consumeFalse(b []byte) int { - // NOTE: The arguments and logic are kept simple to keep this inlineable. - const literal = "false" - if len(b) >= len(literal) && string(b[:len(literal)]) == literal { - return len(literal) - } - return 0 -} - -// consumeTrue consumes the next JSON true literal per RFC 7159, section 3. -// It returns 0 if it is invalid, in which case consumeLiteral should be used. -func consumeTrue(b []byte) int { - // NOTE: The arguments and logic are kept simple to keep this inlineable. - const literal = "true" - if len(b) >= len(literal) && string(b[:len(literal)]) == literal { - return len(literal) - } - return 0 -} - -// consumeLiteral consumes the next JSON literal per RFC 7159, section 3. -// If the input appears truncated, it returns io.ErrUnexpectedEOF. -func consumeLiteral(b []byte, lit string) (n int, err error) { - for i := 0; i < len(b) && i < len(lit); i++ { - if b[i] != lit[i] { - return i, newInvalidCharacterError(b[i:], "within literal "+lit+" (expecting "+strconv.QuoteRune(rune(lit[i]))+")") - } - } - if len(b) < len(lit) { - return len(b), io.ErrUnexpectedEOF - } - return len(lit), nil -} - -// consumeSimpleString consumes the next JSON string per RFC 7159, section 7 -// but is limited to the grammar for an ASCII string without escape sequences. -// It returns 0 if it is invalid or more complicated than a simple string, -// in which case consumeString should be called. -func consumeSimpleString(b []byte) (n int) { - // NOTE: The arguments and logic are kept simple to keep this inlineable. - if len(b) > 0 && b[0] == '"' { - n++ - for len(b) > n && (' ' <= b[n] && b[n] != '\\' && b[n] != '"' && b[n] < utf8.RuneSelf) { - n++ - } - if len(b) > n && b[n] == '"' { - n++ - return n - } - } - return 0 -} - -// consumeString consumes the next JSON string per RFC 7159, section 7. -// If validateUTF8 is false, then this allows the presence of invalid UTF-8 -// characters within the string itself. -// It reports the number of bytes consumed and whether an error was encountered. -// If the input appears truncated, it returns io.ErrUnexpectedEOF. -func consumeString(flags *valueFlags, b []byte, validateUTF8 bool) (n int, err error) { - return consumeStringResumable(flags, b, 0, validateUTF8) -} - -// consumeStringResumable is identical to consumeString but supports resuming -// from a previous call that returned io.ErrUnexpectedEOF. -func consumeStringResumable(flags *valueFlags, b []byte, resumeOffset int, validateUTF8 bool) (n int, err error) { - // Consume the leading double quote. - switch { - case resumeOffset > 0: - n = resumeOffset // already handled the leading quote - case uint(len(b)) == 0: - return n, io.ErrUnexpectedEOF - case b[0] == '"': - n++ - default: - return n, newInvalidCharacterError(b[n:], `at start of string (expecting '"')`) - } - - // Consume every character in the string. - for uint(len(b)) > uint(n) { - // Optimize for long sequences of unescaped characters. - noEscape := func(c byte) bool { - return c < utf8.RuneSelf && ' ' <= c && c != '\\' && c != '"' - } - for uint(len(b)) > uint(n) && noEscape(b[n]) { - n++ - } - if uint(len(b)) <= uint(n) { - return n, io.ErrUnexpectedEOF - } - - // Check for terminating double quote. - if b[n] == '"' { - n++ - return n, nil - } - - switch r, rn := utf8.DecodeRune(b[n:]); { - // Handle UTF-8 encoded byte sequence. - // Due to specialized handling of ASCII above, we know that - // all normal sequences at this point must be 2 bytes or larger. - case rn > 1: - n += rn - // Handle escape sequence. - case r == '\\': - flags.set(stringNonVerbatim) - resumeOffset = n - if uint(len(b)) < uint(n+2) { - return resumeOffset, io.ErrUnexpectedEOF - } - switch r := b[n+1]; r { - case '/': - // Forward slash is the only character with 3 representations. - // Per RFC 8785, section 3.2.2.2., this must not be escaped. - flags.set(stringNonCanonical) - n += 2 - case '"', '\\', 'b', 'f', 'n', 'r', 't': - n += 2 - case 'u': - if uint(len(b)) < uint(n+6) { - if !hasEscapeSequencePrefix(b[n:]) { - flags.set(stringNonCanonical) - return n, &SyntacticError{str: "invalid escape sequence " + strconv.Quote(string(b[n:])) + " within string"} - } - return resumeOffset, io.ErrUnexpectedEOF - } - v1, ok := parseHexUint16(b[n+2 : n+6]) - if !ok { - flags.set(stringNonCanonical) - return n, &SyntacticError{str: "invalid escape sequence " + strconv.Quote(string(b[n:n+6])) + " within string"} - } - // Only certain control characters can use the \uFFFF notation - // for canonical formatting (per RFC 8785, section 3.2.2.2.). - switch v1 { - // \uFFFF notation not permitted for these characters. - case '\b', '\f', '\n', '\r', '\t': - flags.set(stringNonCanonical) - default: - // \uFFFF notation only permitted for control characters. - if v1 >= ' ' { - flags.set(stringNonCanonical) - } else { - // \uFFFF notation must be lower case. - for _, c := range b[n+2 : n+6] { - if 'A' <= c && c <= 'F' { - flags.set(stringNonCanonical) - } - } - } - } - n += 6 - - if validateUTF8 && utf16.IsSurrogate(rune(v1)) { - if uint(len(b)) >= uint(n+2) && (b[n] != '\\' || b[n+1] != 'u') { - return n, &SyntacticError{str: "invalid unpaired surrogate half within string"} - } - if uint(len(b)) < uint(n+6) { - if !hasEscapeSequencePrefix(b[n:]) { - flags.set(stringNonCanonical) - return n, &SyntacticError{str: "invalid escape sequence " + strconv.Quote(string(b[n:])) + " within string"} - } - return resumeOffset, io.ErrUnexpectedEOF - } - v2, ok := parseHexUint16(b[n+2 : n+6]) - if !ok { - return n, &SyntacticError{str: "invalid escape sequence " + strconv.Quote(string(b[n:n+6])) + " within string"} - } - if utf16.DecodeRune(rune(v1), rune(v2)) == utf8.RuneError { - return n, &SyntacticError{str: "invalid surrogate pair in string"} - } - n += 6 - } - default: - flags.set(stringNonCanonical) - return n, &SyntacticError{str: "invalid escape sequence " + strconv.Quote(string(b[n:n+2])) + " within string"} - } - // Handle invalid UTF-8. - case r == utf8.RuneError: - if !utf8.FullRune(b[n:]) { - return n, io.ErrUnexpectedEOF - } - flags.set(stringNonVerbatim | stringNonCanonical) - if validateUTF8 { - return n, &SyntacticError{str: "invalid UTF-8 within string"} - } - n++ - // Handle invalid control characters. - case r < ' ': - flags.set(stringNonVerbatim | stringNonCanonical) - return n, newInvalidCharacterError(b[n:], "within string (expecting non-control character)") - default: - panic("BUG: unhandled character " + quoteRune(b[n:])) - } - } - return n, io.ErrUnexpectedEOF -} - -// hasEscapeSequencePrefix reports whether b is possibly -// the truncated prefix of a \uFFFF escape sequence. -func hasEscapeSequencePrefix(b []byte) bool { - for i, c := range b { - switch { - case i == 0 && c != '\\': - return false - case i == 1 && c != 'u': - return false - case i >= 2 && i < 6 && !('0' <= c && c <= '9') && !('a' <= c && c <= 'f') && !('A' <= c && c <= 'F'): - return false - } - } - return true -} - -// unescapeString appends the unescaped form of a JSON string in src to dst. -// Any invalid UTF-8 within the string will be replaced with utf8.RuneError. -// The input must be an entire JSON string with no surrounding whitespace. -func unescapeString(dst, src []byte) (v []byte, ok bool) { - // Consume leading double quote. - if uint(len(src)) == 0 || src[0] != '"' { - return dst, false - } - i, n := 1, 1 - - // Consume every character until completion. - for uint(len(src)) > uint(n) { - // Optimize for long sequences of unescaped characters. - noEscape := func(c byte) bool { - return c < utf8.RuneSelf && ' ' <= c && c != '\\' && c != '"' - } - for uint(len(src)) > uint(n) && noEscape(src[n]) { - n++ - } - if uint(len(src)) <= uint(n) { - break - } - - // Check for terminating double quote. - if src[n] == '"' { - dst = append(dst, src[i:n]...) - n++ - return dst, len(src) == n - } - - switch r, rn := utf8.DecodeRune(src[n:]); { - // Handle UTF-8 encoded byte sequence. - // Due to specialized handling of ASCII above, we know that - // all normal sequences at this point must be 2 bytes or larger. - case rn > 1: - n += rn - // Handle escape sequence. - case r == '\\': - dst = append(dst, src[i:n]...) - if r < ' ' { - return dst, false // invalid control character or unescaped quote - } - - // Handle escape sequence. - if uint(len(src)) < uint(n+2) { - return dst, false // truncated escape sequence - } - switch r := src[n+1]; r { - case '"', '\\', '/': - dst = append(dst, r) - n += 2 - case 'b': - dst = append(dst, '\b') - n += 2 - case 'f': - dst = append(dst, '\f') - n += 2 - case 'n': - dst = append(dst, '\n') - n += 2 - case 'r': - dst = append(dst, '\r') - n += 2 - case 't': - dst = append(dst, '\t') - n += 2 - case 'u': - if uint(len(src)) < uint(n+6) { - return dst, false // truncated escape sequence - } - v1, ok := parseHexUint16(src[n+2 : n+6]) - if !ok { - return dst, false // invalid escape sequence - } - n += 6 - - // Check whether this is a surrogate half. - r := rune(v1) - if utf16.IsSurrogate(r) { - r = utf8.RuneError // assume failure unless the following succeeds - if uint(len(src)) >= uint(n+6) && src[n+0] == '\\' && src[n+1] == 'u' { - if v2, ok := parseHexUint16(src[n+2 : n+6]); ok { - if r = utf16.DecodeRune(rune(v1), rune(v2)); r != utf8.RuneError { - n += 6 - } - } - } - } - - dst = utf8.AppendRune(dst, r) - default: - return dst, false // invalid escape sequence - } - i = n - // Handle invalid UTF-8. - case r == utf8.RuneError: - // NOTE: An unescaped string may be longer than the escaped string - // because invalid UTF-8 bytes are being replaced. - dst = append(dst, src[i:n]...) - dst = append(dst, "\uFFFD"...) - n += rn - i = n - // Handle invalid control characters. - case r < ' ': - dst = append(dst, src[i:n]...) - return dst, false // invalid control character or unescaped quote - default: - panic("BUG: unhandled character " + quoteRune(src[n:])) - } - } - dst = append(dst, src[i:n]...) - return dst, false // truncated input -} - -// unescapeStringMayCopy returns the unescaped form of b. -// If there are no escaped characters, the output is simply a subslice of -// the input with the surrounding quotes removed. -// Otherwise, a new buffer is allocated for the output. -func unescapeStringMayCopy(b []byte, isVerbatim bool) []byte { - // NOTE: The arguments and logic are kept simple to keep this inlineable. - if isVerbatim { - return b[len(`"`) : len(b)-len(`"`)] - } - b, _ = unescapeString(make([]byte, 0, len(b)), b) - return b -} - -// consumeSimpleNumber consumes the next JSON number per RFC 7159, section 6 -// but is limited to the grammar for a positive integer. -// It returns 0 if it is invalid or more complicated than a simple integer, -// in which case consumeNumber should be called. -func consumeSimpleNumber(b []byte) (n int) { - // NOTE: The arguments and logic are kept simple to keep this inlineable. - if len(b) > 0 { - if b[0] == '0' { - n++ - } else if '1' <= b[0] && b[0] <= '9' { - n++ - for len(b) > n && ('0' <= b[n] && b[n] <= '9') { - n++ - } - } else { - return 0 - } - if len(b) == n || !(b[n] == '.' || b[n] == 'e' || b[n] == 'E') { - return n - } - } - return 0 -} - -type consumeNumberState uint - -const ( - consumeNumberInit consumeNumberState = iota - beforeIntegerDigits - withinIntegerDigits - beforeFractionalDigits - withinFractionalDigits - beforeExponentDigits - withinExponentDigits -) - -// consumeNumber consumes the next JSON number per RFC 7159, section 6. -// It reports the number of bytes consumed and whether an error was encountered. -// If the input appears truncated, it returns io.ErrUnexpectedEOF. -// -// Note that JSON numbers are not self-terminating. -// If the entire input is consumed, then the caller needs to consider whether -// there may be subsequent unread data that may still be part of this number. -func consumeNumber(b []byte) (n int, err error) { - n, _, err = consumeNumberResumable(b, 0, consumeNumberInit) - return n, err -} - -// consumeNumberResumable is identical to consumeNumber but supports resuming -// from a previous call that returned io.ErrUnexpectedEOF. -func consumeNumberResumable(b []byte, resumeOffset int, state consumeNumberState) (n int, _ consumeNumberState, err error) { - // Jump to the right state when resuming from a partial consumption. - n = resumeOffset - if state > consumeNumberInit { - switch state { - case withinIntegerDigits, withinFractionalDigits, withinExponentDigits: - // Consume leading digits. - for len(b) > n && ('0' <= b[n] && b[n] <= '9') { - n++ - } - if len(b) == n { - return n, state, nil // still within the same state - } - state++ // switches "withinX" to "beforeY" where Y is the state after X - } - switch state { - case beforeIntegerDigits: - goto beforeInteger - case beforeFractionalDigits: - goto beforeFractional - case beforeExponentDigits: - goto beforeExponent - default: - return n, state, nil - } - } - - // Consume required integer component (with optional minus sign). -beforeInteger: - resumeOffset = n - if len(b) > 0 && b[0] == '-' { - n++ - } - switch { - case len(b) == n: - return resumeOffset, beforeIntegerDigits, io.ErrUnexpectedEOF - case b[n] == '0': - n++ - state = beforeFractionalDigits - case '1' <= b[n] && b[n] <= '9': - n++ - for len(b) > n && ('0' <= b[n] && b[n] <= '9') { - n++ - } - state = withinIntegerDigits - default: - return n, state, newInvalidCharacterError(b[n:], "within number (expecting digit)") - } - - // Consume optional fractional component. -beforeFractional: - if len(b) > n && b[n] == '.' { - resumeOffset = n - n++ - switch { - case len(b) == n: - return resumeOffset, beforeFractionalDigits, io.ErrUnexpectedEOF - case '0' <= b[n] && b[n] <= '9': - n++ - default: - return n, state, newInvalidCharacterError(b[n:], "within number (expecting digit)") - } - for len(b) > n && ('0' <= b[n] && b[n] <= '9') { - n++ - } - state = withinFractionalDigits - } - - // Consume optional exponent component. -beforeExponent: - if len(b) > n && (b[n] == 'e' || b[n] == 'E') { - resumeOffset = n - n++ - if len(b) > n && (b[n] == '-' || b[n] == '+') { - n++ - } - switch { - case len(b) == n: - return resumeOffset, beforeExponentDigits, io.ErrUnexpectedEOF - case '0' <= b[n] && b[n] <= '9': - n++ - default: - return n, state, newInvalidCharacterError(b[n:], "within number (expecting digit)") - } - for len(b) > n && ('0' <= b[n] && b[n] <= '9') { - n++ - } - state = withinExponentDigits - } - - return n, state, nil -} - -// parseHexUint16 is similar to strconv.ParseUint, -// but operates directly on []byte and is optimized for base-16. -// See https://go.dev/issue/42429. -func parseHexUint16(b []byte) (v uint16, ok bool) { - if len(b) != 4 { - return 0, false - } - for _, c := range b[:4] { - switch { - case '0' <= c && c <= '9': - c = c - '0' - case 'a' <= c && c <= 'f': - c = 10 + c - 'a' - case 'A' <= c && c <= 'F': - c = 10 + c - 'A' - default: - return 0, false - } - v = v*16 + uint16(c) - } - return v, true -} - -// parseDecUint is similar to strconv.ParseUint, -// but operates directly on []byte and is optimized for base-10. -// If the number is syntactically valid but overflows uint64, -// then it returns (math.MaxUint64, false). -// See https://go.dev/issue/42429. -func parseDecUint(b []byte) (v uint64, ok bool) { - // Overflow logic is based on strconv/atoi.go:138-149 from Go1.15, where: - // - cutoff is equal to math.MaxUint64/10+1, and - // - the n1 > maxVal check is unnecessary - // since maxVal is equivalent to math.MaxUint64. - var n int - var overflow bool - for len(b) > n && ('0' <= b[n] && b[n] <= '9') { - overflow = overflow || v >= math.MaxUint64/10+1 - v *= 10 - - v1 := v + uint64(b[n]-'0') - overflow = overflow || v1 < v - v = v1 - - n++ - } - if n == 0 || len(b) != n { - return 0, false - } - if overflow { - return math.MaxUint64, false - } - return v, true -} - -// parseFloat parses a floating point number according to the Go float grammar. -// Note that the JSON number grammar is a strict subset. -// -// If the number overflows the finite representation of a float, -// then we return MaxFloat since any finite value will always be infinitely -// more accurate at representing another finite value than an infinite value. -func parseFloat(b []byte, bits int) (v float64, ok bool) { - // Fast path for exact integer numbers which fit in the - // 24-bit or 53-bit significand of a float32 or float64. - var negLen int // either 0 or 1 - if len(b) > 0 && b[0] == '-' { - negLen = 1 - } - u, ok := parseDecUint(b[negLen:]) - if ok && ((bits == 32 && u <= 1<<24) || (bits == 64 && u <= 1<<53)) { - return math.Copysign(float64(u), float64(-1*negLen)), true - } - - // Note that the []byte->string conversion unfortunately allocates. - // See https://go.dev/issue/42429 for more information. - fv, err := strconv.ParseFloat(string(b), bits) - if math.IsInf(fv, 0) { - switch { - case bits == 32 && math.IsInf(fv, +1): - return +math.MaxFloat32, true - case bits == 64 && math.IsInf(fv, +1): - return +math.MaxFloat64, true - case bits == 32 && math.IsInf(fv, -1): - return -math.MaxFloat32, true - case bits == 64 && math.IsInf(fv, -1): - return -math.MaxFloat64, true - } - } - return fv, err == nil -} diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/doc.go b/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/doc.go deleted file mode 100644 index e4eefa3de..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/doc.go +++ /dev/null @@ -1,182 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package json implements serialization of JSON -// as specified in RFC 4627, RFC 7159, RFC 7493, RFC 8259, and RFC 8785. -// JSON is a simple data interchange format that can represent -// primitive data types such as booleans, strings, and numbers, -// in addition to structured data types such as objects and arrays. -// -// # Terminology -// -// This package uses the terms "encode" and "decode" for syntactic functionality -// that is concerned with processing JSON based on its grammar, and -// uses the terms "marshal" and "unmarshal" for semantic functionality -// that determines the meaning of JSON values as Go values and vice-versa. -// It aims to provide a clear distinction between functionality that -// is purely concerned with encoding versus that of marshaling. -// For example, one can directly encode a stream of JSON tokens without -// needing to marshal a concrete Go value representing them. -// Similarly, one can decode a stream of JSON tokens without -// needing to unmarshal them into a concrete Go value. -// -// This package uses JSON terminology when discussing JSON, which may differ -// from related concepts in Go or elsewhere in computing literature. -// -// - A JSON "object" refers to an unordered collection of name/value members. -// - A JSON "array" refers to an ordered sequence of elements. -// - A JSON "value" refers to either a literal (i.e., null, false, or true), -// string, number, object, or array. -// -// See RFC 8259 for more information. -// -// # Specifications -// -// Relevant specifications include RFC 4627, RFC 7159, RFC 7493, RFC 8259, -// and RFC 8785. Each RFC is generally a stricter subset of another RFC. -// In increasing order of strictness: -// -// - RFC 4627 and RFC 7159 do not require (but recommend) the use of UTF-8 -// and also do not require (but recommend) that object names be unique. -// - RFC 8259 requires the use of UTF-8, -// but does not require (but recommends) that object names be unique. -// - RFC 7493 requires the use of UTF-8 -// and also requires that object names be unique. -// - RFC 8785 defines a canonical representation. It requires the use of UTF-8 -// and also requires that object names be unique and in a specific ordering. -// It specifies exactly how strings and numbers must be formatted. -// -// The primary difference between RFC 4627 and RFC 7159 is that the former -// restricted top-level values to only JSON objects and arrays, while -// RFC 7159 and subsequent RFCs permit top-level values to additionally be -// JSON nulls, booleans, strings, or numbers. -// -// By default, this package operates on RFC 7493, but can be configured -// to operate according to the other RFC specifications. -// RFC 7493 is a stricter subset of RFC 8259 and fully compliant with it. -// In particular, it makes specific choices about behavior that RFC 8259 -// leaves as undefined in order to ensure greater interoperability. -// -// # JSON Representation of Go structs -// -// A Go struct is naturally represented as a JSON object, -// where each Go struct field corresponds with a JSON object member. -// When marshaling, all Go struct fields are recursively encoded in depth-first -// order as JSON object members except those that are ignored or omitted. -// When unmarshaling, JSON object members are recursively decoded -// into the corresponding Go struct fields. -// Object members that do not match any struct fields, -// also known as “unknown members”, are ignored by default or rejected -// if UnmarshalOptions.RejectUnknownMembers is specified. -// -// The representation of each struct field can be customized in the -// "json" struct field tag, where the tag is a comma separated list of options. -// As a special case, if the entire tag is `json:"-"`, -// then the field is ignored with regard to its JSON representation. -// -// The first option is the JSON object name override for the Go struct field. -// If the name is not specified, then the Go struct field name -// is used as the JSON object name. JSON names containing commas or quotes, -// or names identical to "" or "-", can be specified using -// a single-quoted string literal, where the syntax is identical to -// the Go grammar for a double-quoted string literal, -// but instead uses single quotes as the delimiters. -// By default, unmarshaling uses case-sensitive matching to identify -// the Go struct field associated with a JSON object name. -// -// After the name, the following tag options are supported: -// -// - omitzero: When marshaling, the "omitzero" option specifies that -// the struct field should be omitted if the field value is zero -// as determined by the "IsZero() bool" method if present, -// otherwise based on whether the field is the zero Go value. -// This option has no effect when unmarshaling. -// -// - omitempty: When marshaling, the "omitempty" option specifies that -// the struct field should be omitted if the field value would have been -// encoded as a JSON null, empty string, empty object, or empty array. -// This option has no effect when unmarshaling. -// -// - string: The "string" option specifies that -// MarshalOptions.StringifyNumbers and UnmarshalOptions.StringifyNumbers -// be set when marshaling or unmarshaling a struct field value. -// This causes numeric types to be encoded as a JSON number -// within a JSON string, and to be decoded from either a JSON number or -// a JSON string containing a JSON number. -// This extra level of encoding is often necessary since -// many JSON parsers cannot precisely represent 64-bit integers. -// -// - nocase: When unmarshaling, the "nocase" option specifies that -// if the JSON object name does not exactly match the JSON name -// for any of the struct fields, then it attempts to match the struct field -// using a case-insensitive match that also ignores dashes and underscores. -// If multiple fields match, the first declared field in breadth-first order -// takes precedence. This option has no effect when marshaling. -// -// - inline: The "inline" option specifies that -// the JSON representable content of this field type is to be promoted -// as if they were specified in the parent struct. -// It is the JSON equivalent of Go struct embedding. -// A Go embedded field is implicitly inlined unless an explicit JSON name -// is specified. The inlined field must be a Go struct -// (that does not implement any JSON methods), RawValue, map[string]T, -// or an unnamed pointer to such types. When marshaling, -// inlined fields from a pointer type are omitted if it is nil. -// Inlined fields of type RawValue and map[string]T are called -// “inlined fallbacks” as they can represent all possible -// JSON object members not directly handled by the parent struct. -// Only one inlined fallback field may be specified in a struct, -// while many non-fallback fields may be specified. This option -// must not be specified with any other option (including the JSON name). -// -// - unknown: The "unknown" option is a specialized variant -// of the inlined fallback to indicate that this Go struct field -// contains any number of unknown JSON object members. The field type -// must be a RawValue, map[string]T, or an unnamed pointer to such types. -// If MarshalOptions.DiscardUnknownMembers is specified when marshaling, -// the contents of this field are ignored. -// If UnmarshalOptions.RejectUnknownMembers is specified when unmarshaling, -// any unknown object members are rejected regardless of whether -// an inlined fallback with the "unknown" option exists. This option -// must not be specified with any other option (including the JSON name). -// -// - format: The "format" option specifies a format flag -// used to specialize the formatting of the field value. -// The option is a key-value pair specified as "format:value" where -// the value must be either a literal consisting of letters and numbers -// (e.g., "format:RFC3339") or a single-quoted string literal -// (e.g., "format:'2006-01-02'"). The interpretation of the format flag -// is determined by the struct field type. -// -// The "omitzero" and "omitempty" options are mostly semantically identical. -// The former is defined in terms of the Go type system, -// while the latter in terms of the JSON type system. -// Consequently they behave differently in some circumstances. -// For example, only a nil slice or map is omitted under "omitzero", while -// an empty slice or map is omitted under "omitempty" regardless of nilness. -// The "omitzero" option is useful for types with a well-defined zero value -// (e.g., netip.Addr) or have an IsZero method (e.g., time.Time). -// -// Every Go struct corresponds to a list of JSON representable fields -// which is constructed by performing a breadth-first search over -// all struct fields (excluding unexported or ignored fields), -// where the search recursively descends into inlined structs. -// The set of non-inlined fields in a struct must have unique JSON names. -// If multiple fields all have the same JSON name, then the one -// at shallowest depth takes precedence and the other fields at deeper depths -// are excluded from the list of JSON representable fields. -// If multiple fields at the shallowest depth have the same JSON name, -// then all of those fields are excluded from the list. This is analogous to -// Go visibility rules for struct field selection with embedded struct types. -// -// Marshaling or unmarshaling a non-empty struct -// without any JSON representable fields results in a SemanticError. -// Unexported fields must not have any `json` tags except for `json:"-"`. -package json - -// requireKeyedLiterals can be embedded in a struct to require keyed literals. -type requireKeyedLiterals struct{} - -// nonComparable can be embedded in a struct to prevent comparability. -type nonComparable [0]func() diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/encode.go b/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/encode.go deleted file mode 100644 index 5b81ca15a..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/encode.go +++ /dev/null @@ -1,1170 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package json - -import ( - "bytes" - "io" - "math" - "math/bits" - "strconv" - "unicode/utf16" - "unicode/utf8" -) - -// EncodeOptions configures how JSON encoding operates. -// The zero value is equivalent to the default settings, -// which is compliant with both RFC 7493 and RFC 8259. -type EncodeOptions struct { - requireKeyedLiterals - nonComparable - - // multiline specifies whether the encoder should emit multiline output. - multiline bool - - // omitTopLevelNewline specifies whether to omit the newline - // that is appended after every top-level JSON value when streaming. - omitTopLevelNewline bool - - // AllowDuplicateNames specifies that JSON objects may contain - // duplicate member names. Disabling the duplicate name check may provide - // performance benefits, but breaks compliance with RFC 7493, section 2.3. - // The output will still be compliant with RFC 8259, - // which leaves the handling of duplicate names as unspecified behavior. - AllowDuplicateNames bool - - // AllowInvalidUTF8 specifies that JSON strings may contain invalid UTF-8, - // which will be mangled as the Unicode replacement character, U+FFFD. - // This causes the encoder to break compliance with - // RFC 7493, section 2.1, and RFC 8259, section 8.1. - AllowInvalidUTF8 bool - - // preserveRawStrings specifies that WriteToken and WriteValue should not - // reformat any JSON string, but keep the formatting verbatim. - preserveRawStrings bool - - // canonicalizeNumbers specifies that WriteToken and WriteValue should - // reformat any JSON numbers according to RFC 8785, section 3.2.2.3. - canonicalizeNumbers bool - - // EscapeRune reports whether the provided character should be escaped - // as a hexadecimal Unicode codepoint (e.g., \ufffd). - // If nil, the shortest and simplest encoding will be used, - // which is also the formatting specified by RFC 8785, section 3.2.2.2. - EscapeRune func(rune) bool - - // Indent (if non-empty) specifies that the encoder should emit multiline - // output where each element in a JSON object or array begins on a new, - // indented line beginning with the indent prefix followed by one or more - // copies of indent according to the indentation nesting. - // It may only be composed of space or tab characters. - Indent string - - // IndentPrefix is prepended to each line within a JSON object or array. - // The purpose of the indent prefix is to encode data that can more easily - // be embedded inside other formatted JSON data. - // It may only be composed of space or tab characters. - // It is ignored if Indent is empty. - IndentPrefix string -} - -// Encoder is a streaming encoder from raw JSON tokens and values. -// It is used to write a stream of top-level JSON values, -// each terminated with a newline character. -// -// WriteToken and WriteValue calls may be interleaved. -// For example, the following JSON value: -// -// {"name":"value","array":[null,false,true,3.14159],"object":{"k":"v"}} -// -// can be composed with the following calls (ignoring errors for brevity): -// -// e.WriteToken(ObjectStart) // { -// e.WriteToken(String("name")) // "name" -// e.WriteToken(String("value")) // "value" -// e.WriteValue(RawValue(`"array"`)) // "array" -// e.WriteToken(ArrayStart) // [ -// e.WriteToken(Null) // null -// e.WriteToken(False) // false -// e.WriteValue(RawValue("true")) // true -// e.WriteToken(Float(3.14159)) // 3.14159 -// e.WriteToken(ArrayEnd) // ] -// e.WriteValue(RawValue(`"object"`)) // "object" -// e.WriteValue(RawValue(`{"k":"v"}`)) // {"k":"v"} -// e.WriteToken(ObjectEnd) // } -// -// The above is one of many possible sequence of calls and -// may not represent the most sensible method to call for any given token/value. -// For example, it is probably more common to call WriteToken with a string -// for object names. -type Encoder struct { - state - encodeBuffer - options EncodeOptions - - seenPointers seenPointers // only used when marshaling -} - -// encodeBuffer is a buffer split into 2 segments: -// -// - buf[0:len(buf)] // written (but unflushed) portion of the buffer -// - buf[len(buf):cap(buf)] // unused portion of the buffer -type encodeBuffer struct { - buf []byte // may alias wr if it is a bytes.Buffer - - // baseOffset is added to len(buf) to obtain the absolute offset - // relative to the start of io.Writer stream. - baseOffset int64 - - wr io.Writer - - // maxValue is the approximate maximum RawValue size passed to WriteValue. - maxValue int - // unusedCache is the buffer returned by the UnusedBuffer method. - unusedCache []byte - // bufStats is statistics about buffer utilization. - // It is only used with pooled encoders in pools.go. - bufStats bufferStatistics -} - -// NewEncoder constructs a new streaming encoder writing to w. -func NewEncoder(w io.Writer) *Encoder { - return EncodeOptions{}.NewEncoder(w) -} - -// NewEncoder constructs a new streaming encoder writing to w -// configured with the provided options. -// It flushes the internal buffer when the buffer is sufficiently full or -// when a top-level value has been written. -// -// If w is a bytes.Buffer, then the encoder appends directly into the buffer -// without copying the contents from an intermediate buffer. -func (o EncodeOptions) NewEncoder(w io.Writer) *Encoder { - e := new(Encoder) - o.ResetEncoder(e, w) - return e -} - -// ResetEncoder resets an encoder such that it is writing afresh to w and -// configured with the provided options. -func (o EncodeOptions) ResetEncoder(e *Encoder, w io.Writer) { - if e == nil { - panic("json: invalid nil Encoder") - } - if w == nil { - panic("json: invalid nil io.Writer") - } - e.reset(nil, w, o) -} - -func (e *Encoder) reset(b []byte, w io.Writer, o EncodeOptions) { - if len(o.Indent) > 0 { - o.multiline = true - if s := trimLeftSpaceTab(o.IndentPrefix); len(s) > 0 { - panic("json: invalid character " + quoteRune([]byte(s)) + " in indent prefix") - } - if s := trimLeftSpaceTab(o.Indent); len(s) > 0 { - panic("json: invalid character " + quoteRune([]byte(s)) + " in indent") - } - } - e.state.reset() - e.encodeBuffer = encodeBuffer{buf: b, wr: w, bufStats: e.bufStats} - e.options = o - if bb, ok := w.(*bytes.Buffer); ok && bb != nil { - e.buf = bb.Bytes()[bb.Len():] // alias the unused buffer of bb - } -} - -// Reset resets an encoder such that it is writing afresh to w but -// keeps any pre-existing encoder options. -func (e *Encoder) Reset(w io.Writer) { - e.options.ResetEncoder(e, w) -} - -// needFlush determines whether to flush at this point. -func (e *Encoder) needFlush() bool { - // NOTE: This function is carefully written to be inlineable. - - // Avoid flushing if e.wr is nil since there is no underlying writer. - // Flush if less than 25% of the capacity remains. - // Flushing at some constant fraction ensures that the buffer stops growing - // so long as the largest Token or Value fits within that unused capacity. - return e.wr != nil && (e.tokens.depth() == 1 || len(e.buf) > 3*cap(e.buf)/4) -} - -// flush flushes the buffer to the underlying io.Writer. -// It may append a trailing newline after the top-level value. -func (e *Encoder) flush() error { - if e.wr == nil || e.avoidFlush() { - return nil - } - - // In streaming mode, always emit a newline after the top-level value. - if e.tokens.depth() == 1 && !e.options.omitTopLevelNewline { - e.buf = append(e.buf, '\n') - } - - // Inform objectNameStack that we are about to flush the buffer content. - e.names.copyQuotedBuffer(e.buf) - - // Specialize bytes.Buffer for better performance. - if bb, ok := e.wr.(*bytes.Buffer); ok { - // If e.buf already aliases the internal buffer of bb, - // then the Write call simply increments the internal offset, - // otherwise Write operates as expected. - // See https://go.dev/issue/42986. - n, _ := bb.Write(e.buf) // never fails unless bb is nil - e.baseOffset += int64(n) - - // If the internal buffer of bytes.Buffer is too small, - // append operations elsewhere in the Encoder may grow the buffer. - // This would be semantically correct, but hurts performance. - // As such, ensure 25% of the current length is always available - // to reduce the probability that other appends must allocate. - if avail := bb.Cap() - bb.Len(); avail < bb.Len()/4 { - bb.Grow(avail + 1) - } - - e.buf = bb.Bytes()[bb.Len():] // alias the unused buffer of bb - return nil - } - - // Flush the internal buffer to the underlying io.Writer. - n, err := e.wr.Write(e.buf) - e.baseOffset += int64(n) - if err != nil { - // In the event of an error, preserve the unflushed portion. - // Thus, write errors aren't fatal so long as the io.Writer - // maintains consistent state after errors. - if n > 0 { - e.buf = e.buf[:copy(e.buf, e.buf[n:])] - } - return &ioError{action: "write", err: err} - } - e.buf = e.buf[:0] - - // Check whether to grow the buffer. - // Note that cap(e.buf) may already exceed maxBufferSize since - // an append elsewhere already grew it to store a large token. - const maxBufferSize = 4 << 10 - const growthSizeFactor = 2 // higher value is faster - const growthRateFactor = 2 // higher value is slower - // By default, grow if below the maximum buffer size. - grow := cap(e.buf) <= maxBufferSize/growthSizeFactor - // Growing can be expensive, so only grow - // if a sufficient number of bytes have been processed. - grow = grow && int64(cap(e.buf)) < e.previousOffsetEnd()/growthRateFactor - if grow { - e.buf = make([]byte, 0, cap(e.buf)*growthSizeFactor) - } - - return nil -} - -func (e *encodeBuffer) previousOffsetEnd() int64 { return e.baseOffset + int64(len(e.buf)) } -func (e *encodeBuffer) unflushedBuffer() []byte { return e.buf } - -// avoidFlush indicates whether to avoid flushing to ensure there is always -// enough in the buffer to unwrite the last object member if it were empty. -func (e *Encoder) avoidFlush() bool { - switch { - case e.tokens.last.length() == 0: - // Never flush after ObjectStart or ArrayStart since we don't know yet - // if the object or array will end up being empty. - return true - case e.tokens.last.needObjectValue(): - // Never flush before the object value since we don't know yet - // if the object value will end up being empty. - return true - case e.tokens.last.needObjectName() && len(e.buf) >= 2: - // Never flush after the object value if it does turn out to be empty. - switch string(e.buf[len(e.buf)-2:]) { - case `ll`, `""`, `{}`, `[]`: // last two bytes of every empty value - return true - } - } - return false -} - -// unwriteEmptyObjectMember unwrites the last object member if it is empty -// and reports whether it performed an unwrite operation. -func (e *Encoder) unwriteEmptyObjectMember(prevName *string) bool { - if last := e.tokens.last; !last.isObject() || !last.needObjectName() || last.length() == 0 { - panic("BUG: must be called on an object after writing a value") - } - - // The flushing logic is modified to never flush a trailing empty value. - // The encoder never writes trailing whitespace eagerly. - b := e.unflushedBuffer() - - // Detect whether the last value was empty. - var n int - if len(b) >= 3 { - switch string(b[len(b)-2:]) { - case "ll": // last two bytes of `null` - n = len(`null`) - case `""`: - // It is possible for a non-empty string to have `""` as a suffix - // if the second to the last quote was escaped. - if b[len(b)-3] == '\\' { - return false // e.g., `"\""` is not empty - } - n = len(`""`) - case `{}`: - n = len(`{}`) - case `[]`: - n = len(`[]`) - } - } - if n == 0 { - return false - } - - // Unwrite the value, whitespace, colon, name, whitespace, and comma. - b = b[:len(b)-n] - b = trimSuffixWhitespace(b) - b = trimSuffixByte(b, ':') - b = trimSuffixString(b) - b = trimSuffixWhitespace(b) - b = trimSuffixByte(b, ',') - e.buf = b // store back truncated unflushed buffer - - // Undo state changes. - e.tokens.last.decrement() // for object member value - e.tokens.last.decrement() // for object member name - if !e.options.AllowDuplicateNames { - if e.tokens.last.isActiveNamespace() { - e.namespaces.last().removeLast() - } - e.names.clearLast() - if prevName != nil { - e.names.copyQuotedBuffer(e.buf) // required by objectNameStack.replaceLastUnquotedName - e.names.replaceLastUnquotedName(*prevName) - } - } - return true -} - -// unwriteOnlyObjectMemberName unwrites the only object member name -// and returns the unquoted name. -func (e *Encoder) unwriteOnlyObjectMemberName() string { - if last := e.tokens.last; !last.isObject() || last.length() != 1 { - panic("BUG: must be called on an object after writing first name") - } - - // Unwrite the name and whitespace. - b := trimSuffixString(e.buf) - isVerbatim := bytes.IndexByte(e.buf[len(b):], '\\') < 0 - name := string(unescapeStringMayCopy(e.buf[len(b):], isVerbatim)) - e.buf = trimSuffixWhitespace(b) - - // Undo state changes. - e.tokens.last.decrement() - if !e.options.AllowDuplicateNames { - if e.tokens.last.isActiveNamespace() { - e.namespaces.last().removeLast() - } - e.names.clearLast() - } - return name -} - -func trimSuffixWhitespace(b []byte) []byte { - // NOTE: The arguments and logic are kept simple to keep this inlineable. - n := len(b) - 1 - for n >= 0 && (b[n] == ' ' || b[n] == '\t' || b[n] == '\r' || b[n] == '\n') { - n-- - } - return b[:n+1] -} - -func trimSuffixString(b []byte) []byte { - // NOTE: The arguments and logic are kept simple to keep this inlineable. - if len(b) > 0 && b[len(b)-1] == '"' { - b = b[:len(b)-1] - } - for len(b) >= 2 && !(b[len(b)-1] == '"' && b[len(b)-2] != '\\') { - b = b[:len(b)-1] // trim all characters except an unescaped quote - } - if len(b) > 0 && b[len(b)-1] == '"' { - b = b[:len(b)-1] - } - return b -} - -func hasSuffixByte(b []byte, c byte) bool { - // NOTE: The arguments and logic are kept simple to keep this inlineable. - return len(b) > 0 && b[len(b)-1] == c -} - -func trimSuffixByte(b []byte, c byte) []byte { - // NOTE: The arguments and logic are kept simple to keep this inlineable. - if len(b) > 0 && b[len(b)-1] == c { - return b[:len(b)-1] - } - return b -} - -// WriteToken writes the next token and advances the internal write offset. -// -// The provided token kind must be consistent with the JSON grammar. -// For example, it is an error to provide a number when the encoder -// is expecting an object name (which is always a string), or -// to provide an end object delimiter when the encoder is finishing an array. -// If the provided token is invalid, then it reports a SyntacticError and -// the internal state remains unchanged. -func (e *Encoder) WriteToken(t Token) error { - k := t.Kind() - b := e.buf // use local variable to avoid mutating e in case of error - - // Append any delimiters or optional whitespace. - b = e.tokens.mayAppendDelim(b, k) - if e.options.multiline { - b = e.appendWhitespace(b, k) - } - - // Append the token to the output and to the state machine. - var err error - switch k { - case 'n': - b = append(b, "null"...) - err = e.tokens.appendLiteral() - case 'f': - b = append(b, "false"...) - err = e.tokens.appendLiteral() - case 't': - b = append(b, "true"...) - err = e.tokens.appendLiteral() - case '"': - n0 := len(b) // offset before calling t.appendString - if b, err = t.appendString(b, !e.options.AllowInvalidUTF8, e.options.preserveRawStrings, e.options.EscapeRune); err != nil { - break - } - if !e.options.AllowDuplicateNames && e.tokens.last.needObjectName() { - if !e.tokens.last.isValidNamespace() { - err = errInvalidNamespace - break - } - if e.tokens.last.isActiveNamespace() && !e.namespaces.last().insertQuoted(b[n0:], false) { - err = &SyntacticError{str: "duplicate name " + string(b[n0:]) + " in object"} - break - } - e.names.replaceLastQuotedOffset(n0) // only replace if insertQuoted succeeds - } - err = e.tokens.appendString() - case '0': - if b, err = t.appendNumber(b, e.options.canonicalizeNumbers); err != nil { - break - } - err = e.tokens.appendNumber() - case '{': - b = append(b, '{') - if err = e.tokens.pushObject(); err != nil { - break - } - if !e.options.AllowDuplicateNames { - e.names.push() - e.namespaces.push() - } - case '}': - b = append(b, '}') - if err = e.tokens.popObject(); err != nil { - break - } - if !e.options.AllowDuplicateNames { - e.names.pop() - e.namespaces.pop() - } - case '[': - b = append(b, '[') - err = e.tokens.pushArray() - case ']': - b = append(b, ']') - err = e.tokens.popArray() - default: - return &SyntacticError{str: "invalid json.Token"} - } - if err != nil { - return err - } - - // Finish off the buffer and store it back into e. - e.buf = b - if e.needFlush() { - return e.flush() - } - return nil -} - -const ( - rawIntNumber = -1 - rawUintNumber = -2 -) - -// writeNumber is specialized version of WriteToken, but optimized for numbers. -// As a special-case, if bits is -1 or -2, it will treat v as -// the raw-encoded bits of an int64 or uint64, respectively. -// It is only called from arshal_default.go. -func (e *Encoder) writeNumber(v float64, bits int, quote bool) error { - b := e.buf // use local variable to avoid mutating e in case of error - - // Append any delimiters or optional whitespace. - b = e.tokens.mayAppendDelim(b, '0') - if e.options.multiline { - b = e.appendWhitespace(b, '0') - } - - if quote { - // Append the value to the output. - n0 := len(b) // offset before appending the number - b = append(b, '"') - switch bits { - case rawIntNumber: - b = strconv.AppendInt(b, int64(math.Float64bits(v)), 10) - case rawUintNumber: - b = strconv.AppendUint(b, uint64(math.Float64bits(v)), 10) - default: - b = appendNumber(b, v, bits) - } - b = append(b, '"') - - // Escape the string if necessary. - if e.options.EscapeRune != nil { - b2 := append(e.unusedCache, b[n0+len(`"`):len(b)-len(`"`)]...) - b, _ = appendString(b[:n0], string(b2), false, e.options.EscapeRune) - e.unusedCache = b2[:0] - } - - // Update the state machine. - if !e.options.AllowDuplicateNames && e.tokens.last.needObjectName() { - if !e.tokens.last.isValidNamespace() { - return errInvalidNamespace - } - if e.tokens.last.isActiveNamespace() && !e.namespaces.last().insertQuoted(b[n0:], false) { - return &SyntacticError{str: "duplicate name " + string(b[n0:]) + " in object"} - } - e.names.replaceLastQuotedOffset(n0) // only replace if insertQuoted succeeds - } - if err := e.tokens.appendString(); err != nil { - return err - } - } else { - switch bits { - case rawIntNumber: - b = strconv.AppendInt(b, int64(math.Float64bits(v)), 10) - case rawUintNumber: - b = strconv.AppendUint(b, uint64(math.Float64bits(v)), 10) - default: - b = appendNumber(b, v, bits) - } - if err := e.tokens.appendNumber(); err != nil { - return err - } - } - - // Finish off the buffer and store it back into e. - e.buf = b - if e.needFlush() { - return e.flush() - } - return nil -} - -// WriteValue writes the next raw value and advances the internal write offset. -// The Encoder does not simply copy the provided value verbatim, but -// parses it to ensure that it is syntactically valid and reformats it -// according to how the Encoder is configured to format whitespace and strings. -// -// The provided value kind must be consistent with the JSON grammar -// (see examples on Encoder.WriteToken). If the provided value is invalid, -// then it reports a SyntacticError and the internal state remains unchanged. -func (e *Encoder) WriteValue(v RawValue) error { - e.maxValue |= len(v) // bitwise OR is a fast approximation of max - - k := v.Kind() - b := e.buf // use local variable to avoid mutating e in case of error - - // Append any delimiters or optional whitespace. - b = e.tokens.mayAppendDelim(b, k) - if e.options.multiline { - b = e.appendWhitespace(b, k) - } - - // Append the value the output. - var err error - v = v[consumeWhitespace(v):] - n0 := len(b) // offset before calling e.reformatValue - b, v, err = e.reformatValue(b, v, e.tokens.depth()) - if err != nil { - return err - } - v = v[consumeWhitespace(v):] - if len(v) > 0 { - return newInvalidCharacterError(v[0:], "after top-level value") - } - - // Append the kind to the state machine. - switch k { - case 'n', 'f', 't': - err = e.tokens.appendLiteral() - case '"': - if !e.options.AllowDuplicateNames && e.tokens.last.needObjectName() { - if !e.tokens.last.isValidNamespace() { - err = errInvalidNamespace - break - } - if e.tokens.last.isActiveNamespace() && !e.namespaces.last().insertQuoted(b[n0:], false) { - err = &SyntacticError{str: "duplicate name " + string(b[n0:]) + " in object"} - break - } - e.names.replaceLastQuotedOffset(n0) // only replace if insertQuoted succeeds - } - err = e.tokens.appendString() - case '0': - err = e.tokens.appendNumber() - case '{': - if err = e.tokens.pushObject(); err != nil { - break - } - if err = e.tokens.popObject(); err != nil { - panic("BUG: popObject should never fail immediately after pushObject: " + err.Error()) - } - case '[': - if err = e.tokens.pushArray(); err != nil { - break - } - if err = e.tokens.popArray(); err != nil { - panic("BUG: popArray should never fail immediately after pushArray: " + err.Error()) - } - } - if err != nil { - return err - } - - // Finish off the buffer and store it back into e. - e.buf = b - if e.needFlush() { - return e.flush() - } - return nil -} - -// appendWhitespace appends whitespace that immediately precedes the next token. -func (e *Encoder) appendWhitespace(b []byte, next Kind) []byte { - if e.tokens.needDelim(next) == ':' { - return append(b, ' ') - } else { - return e.appendIndent(b, e.tokens.needIndent(next)) - } -} - -// appendIndent appends the appropriate number of indentation characters -// for the current nested level, n. -func (e *Encoder) appendIndent(b []byte, n int) []byte { - if n == 0 { - return b - } - b = append(b, '\n') - b = append(b, e.options.IndentPrefix...) - for ; n > 1; n-- { - b = append(b, e.options.Indent...) - } - return b -} - -// reformatValue parses a JSON value from the start of src and -// appends it to the end of dst, reformatting whitespace and strings as needed. -// It returns the updated versions of dst and src. -func (e *Encoder) reformatValue(dst []byte, src RawValue, depth int) ([]byte, RawValue, error) { - // TODO: Should this update valueFlags as input? - if len(src) == 0 { - return dst, src, io.ErrUnexpectedEOF - } - var n int - var err error - switch k := Kind(src[0]).normalize(); k { - case 'n': - if n = consumeNull(src); n == 0 { - n, err = consumeLiteral(src, "null") - } - case 'f': - if n = consumeFalse(src); n == 0 { - n, err = consumeLiteral(src, "false") - } - case 't': - if n = consumeTrue(src); n == 0 { - n, err = consumeLiteral(src, "true") - } - case '"': - if n := consumeSimpleString(src); n > 0 && e.options.EscapeRune == nil { - dst, src = append(dst, src[:n]...), src[n:] // copy simple strings verbatim - return dst, src, nil - } - return reformatString(dst, src, !e.options.AllowInvalidUTF8, e.options.preserveRawStrings, e.options.EscapeRune) - case '0': - if n := consumeSimpleNumber(src); n > 0 && !e.options.canonicalizeNumbers { - dst, src = append(dst, src[:n]...), src[n:] // copy simple numbers verbatim - return dst, src, nil - } - return reformatNumber(dst, src, e.options.canonicalizeNumbers) - case '{': - return e.reformatObject(dst, src, depth) - case '[': - return e.reformatArray(dst, src, depth) - default: - return dst, src, newInvalidCharacterError(src, "at start of value") - } - if err != nil { - return dst, src, err - } - dst, src = append(dst, src[:n]...), src[n:] - return dst, src, nil -} - -// reformatObject parses a JSON object from the start of src and -// appends it to the end of src, reformatting whitespace and strings as needed. -// It returns the updated versions of dst and src. -func (e *Encoder) reformatObject(dst []byte, src RawValue, depth int) ([]byte, RawValue, error) { - // Append object start. - if src[0] != '{' { - panic("BUG: reformatObject must be called with a buffer that starts with '{'") - } - dst, src = append(dst, '{'), src[1:] - - // Append (possible) object end. - src = src[consumeWhitespace(src):] - if len(src) == 0 { - return dst, src, io.ErrUnexpectedEOF - } - if src[0] == '}' { - dst, src = append(dst, '}'), src[1:] - return dst, src, nil - } - - var err error - var names *objectNamespace - if !e.options.AllowDuplicateNames { - e.namespaces.push() - defer e.namespaces.pop() - names = e.namespaces.last() - } - depth++ - for { - // Append optional newline and indentation. - if e.options.multiline { - dst = e.appendIndent(dst, depth) - } - - // Append object name. - src = src[consumeWhitespace(src):] - if len(src) == 0 { - return dst, src, io.ErrUnexpectedEOF - } - n0 := len(dst) // offset before calling reformatString - n := consumeSimpleString(src) - if n > 0 && e.options.EscapeRune == nil { - dst, src = append(dst, src[:n]...), src[n:] // copy simple strings verbatim - } else { - dst, src, err = reformatString(dst, src, !e.options.AllowInvalidUTF8, e.options.preserveRawStrings, e.options.EscapeRune) - } - if err != nil { - return dst, src, err - } - if !e.options.AllowDuplicateNames && !names.insertQuoted(dst[n0:], false) { - return dst, src, &SyntacticError{str: "duplicate name " + string(dst[n0:]) + " in object"} - } - - // Append colon. - src = src[consumeWhitespace(src):] - if len(src) == 0 { - return dst, src, io.ErrUnexpectedEOF - } - if src[0] != ':' { - return dst, src, newInvalidCharacterError(src, "after object name (expecting ':')") - } - dst, src = append(dst, ':'), src[1:] - if e.options.multiline { - dst = append(dst, ' ') - } - - // Append object value. - src = src[consumeWhitespace(src):] - if len(src) == 0 { - return dst, src, io.ErrUnexpectedEOF - } - dst, src, err = e.reformatValue(dst, src, depth) - if err != nil { - return dst, src, err - } - - // Append comma or object end. - src = src[consumeWhitespace(src):] - if len(src) == 0 { - return dst, src, io.ErrUnexpectedEOF - } - switch src[0] { - case ',': - dst, src = append(dst, ','), src[1:] - continue - case '}': - if e.options.multiline { - dst = e.appendIndent(dst, depth-1) - } - dst, src = append(dst, '}'), src[1:] - return dst, src, nil - default: - return dst, src, newInvalidCharacterError(src, "after object value (expecting ',' or '}')") - } - } -} - -// reformatArray parses a JSON array from the start of src and -// appends it to the end of dst, reformatting whitespace and strings as needed. -// It returns the updated versions of dst and src. -func (e *Encoder) reformatArray(dst []byte, src RawValue, depth int) ([]byte, RawValue, error) { - // Append array start. - if src[0] != '[' { - panic("BUG: reformatArray must be called with a buffer that starts with '['") - } - dst, src = append(dst, '['), src[1:] - - // Append (possible) array end. - src = src[consumeWhitespace(src):] - if len(src) == 0 { - return dst, src, io.ErrUnexpectedEOF - } - if src[0] == ']' { - dst, src = append(dst, ']'), src[1:] - return dst, src, nil - } - - var err error - depth++ - for { - // Append optional newline and indentation. - if e.options.multiline { - dst = e.appendIndent(dst, depth) - } - - // Append array value. - src = src[consumeWhitespace(src):] - if len(src) == 0 { - return dst, src, io.ErrUnexpectedEOF - } - dst, src, err = e.reformatValue(dst, src, depth) - if err != nil { - return dst, src, err - } - - // Append comma or array end. - src = src[consumeWhitespace(src):] - if len(src) == 0 { - return dst, src, io.ErrUnexpectedEOF - } - switch src[0] { - case ',': - dst, src = append(dst, ','), src[1:] - continue - case ']': - if e.options.multiline { - dst = e.appendIndent(dst, depth-1) - } - dst, src = append(dst, ']'), src[1:] - return dst, src, nil - default: - return dst, src, newInvalidCharacterError(src, "after array value (expecting ',' or ']')") - } - } -} - -// OutputOffset returns the current output byte offset. It gives the location -// of the next byte immediately after the most recently written token or value. -// The number of bytes actually written to the underlying io.Writer may be less -// than this offset due to internal buffering effects. -func (e *Encoder) OutputOffset() int64 { - return e.previousOffsetEnd() -} - -// UnusedBuffer returns a zero-length buffer with a possible non-zero capacity. -// This buffer is intended to be used to populate a RawValue -// being passed to an immediately succeeding WriteValue call. -// -// Example usage: -// -// b := d.UnusedBuffer() -// b = append(b, '"') -// b = appendString(b, v) // append the string formatting of v -// b = append(b, '"') -// ... := d.WriteValue(b) -// -// It is the user's responsibility to ensure that the value is valid JSON. -func (e *Encoder) UnusedBuffer() []byte { - // NOTE: We don't return e.buf[len(e.buf):cap(e.buf)] since WriteValue would - // need to take special care to avoid mangling the data while reformatting. - // WriteValue can't easily identify whether the input RawValue aliases e.buf - // without using unsafe.Pointer. Thus, we just return a different buffer. - // Should this ever alias e.buf, we need to consider how it operates with - // the specialized performance optimization for bytes.Buffer. - n := 1 << bits.Len(uint(e.maxValue|63)) // fast approximation for max length - if cap(e.unusedCache) < n { - e.unusedCache = make([]byte, 0, n) - } - return e.unusedCache -} - -// StackDepth returns the depth of the state machine for written JSON data. -// Each level on the stack represents a nested JSON object or array. -// It is incremented whenever an ObjectStart or ArrayStart token is encountered -// and decremented whenever an ObjectEnd or ArrayEnd token is encountered. -// The depth is zero-indexed, where zero represents the top-level JSON value. -func (e *Encoder) StackDepth() int { - // NOTE: Keep in sync with Decoder.StackDepth. - return e.tokens.depth() - 1 -} - -// StackIndex returns information about the specified stack level. -// It must be a number between 0 and StackDepth, inclusive. -// For each level, it reports the kind: -// -// - 0 for a level of zero, -// - '{' for a level representing a JSON object, and -// - '[' for a level representing a JSON array. -// -// It also reports the length of that JSON object or array. -// Each name and value in a JSON object is counted separately, -// so the effective number of members would be half the length. -// A complete JSON object must have an even length. -func (e *Encoder) StackIndex(i int) (Kind, int) { - // NOTE: Keep in sync with Decoder.StackIndex. - switch s := e.tokens.index(i); { - case i > 0 && s.isObject(): - return '{', s.length() - case i > 0 && s.isArray(): - return '[', s.length() - default: - return 0, s.length() - } -} - -// StackPointer returns a JSON Pointer (RFC 6901) to the most recently written value. -// Object names are only present if AllowDuplicateNames is false, otherwise -// object members are represented using their index within the object. -func (e *Encoder) StackPointer() string { - e.names.copyQuotedBuffer(e.buf) - return string(e.appendStackPointer(nil)) -} - -// appendString appends src to dst as a JSON string per RFC 7159, section 7. -// -// If validateUTF8 is specified, this rejects input that contains invalid UTF-8 -// otherwise invalid bytes are replaced with the Unicode replacement character. -// If escapeRune is provided, it specifies which runes to escape using -// hexadecimal sequences. If nil, the shortest representable form is used, -// which is also the canonical form for strings (RFC 8785, section 3.2.2.2). -// -// Note that this API allows full control over the formatting of strings -// except for whether a forward solidus '/' may be formatted as '\/' and -// the casing of hexadecimal Unicode escape sequences. -func appendString(dst []byte, src string, validateUTF8 bool, escapeRune func(rune) bool) ([]byte, error) { - appendEscapedASCII := func(dst []byte, c byte) []byte { - switch c { - case '"', '\\': - dst = append(dst, '\\', c) - case '\b': - dst = append(dst, "\\b"...) - case '\f': - dst = append(dst, "\\f"...) - case '\n': - dst = append(dst, "\\n"...) - case '\r': - dst = append(dst, "\\r"...) - case '\t': - dst = append(dst, "\\t"...) - default: - dst = append(dst, "\\u"...) - dst = appendHexUint16(dst, uint16(c)) - } - return dst - } - appendEscapedUnicode := func(dst []byte, r rune) []byte { - if r1, r2 := utf16.EncodeRune(r); r1 != '\ufffd' && r2 != '\ufffd' { - dst = append(dst, "\\u"...) - dst = appendHexUint16(dst, uint16(r1)) - dst = append(dst, "\\u"...) - dst = appendHexUint16(dst, uint16(r2)) - } else { - dst = append(dst, "\\u"...) - dst = appendHexUint16(dst, uint16(r)) - } - return dst - } - - // Optimize for when escapeRune is nil. - if escapeRune == nil { - var i, n int - dst = append(dst, '"') - for uint(len(src)) > uint(n) { - // Handle single-byte ASCII. - if c := src[n]; c < utf8.RuneSelf { - n++ - if c < ' ' || c == '"' || c == '\\' { - dst = append(dst, src[i:n-1]...) - dst = appendEscapedASCII(dst, c) - i = n - } - continue - } - - // Handle multi-byte Unicode. - _, rn := utf8.DecodeRuneInString(src[n:]) - n += rn - if rn == 1 { // must be utf8.RuneError since we already checked for single-byte ASCII - dst = append(dst, src[i:n-rn]...) - if validateUTF8 { - return dst, &SyntacticError{str: "invalid UTF-8 within string"} - } - dst = append(dst, "\ufffd"...) - i = n - } - } - dst = append(dst, src[i:n]...) - dst = append(dst, '"') - return dst, nil - } - - // Slower implementation for when escapeRune is non-nil. - var i, n int - dst = append(dst, '"') - for uint(len(src)) > uint(n) { - switch r, rn := utf8.DecodeRuneInString(src[n:]); { - case r == utf8.RuneError && rn == 1: - dst = append(dst, src[i:n]...) - if validateUTF8 { - return dst, &SyntacticError{str: "invalid UTF-8 within string"} - } - if escapeRune('\ufffd') { - dst = append(dst, `\ufffd`...) - } else { - dst = append(dst, "\ufffd"...) - } - n += rn - i = n - case escapeRune(r): - dst = append(dst, src[i:n]...) - dst = appendEscapedUnicode(dst, r) - n += rn - i = n - case r < ' ' || r == '"' || r == '\\': - dst = append(dst, src[i:n]...) - dst = appendEscapedASCII(dst, byte(r)) - n += rn - i = n - default: - n += rn - } - } - dst = append(dst, src[i:n]...) - dst = append(dst, '"') - return dst, nil -} - -// reformatString consumes a JSON string from src and appends it to dst, -// reformatting it if necessary for the given escapeRune parameter. -// It returns the appended output and the remainder of the input. -func reformatString(dst, src []byte, validateUTF8, preserveRaw bool, escapeRune func(rune) bool) ([]byte, []byte, error) { - // TODO: Should this update valueFlags as input? - var flags valueFlags - n, err := consumeString(&flags, src, validateUTF8) - if err != nil { - return dst, src[n:], err - } - if preserveRaw || (escapeRune == nil && flags.isCanonical()) { - dst = append(dst, src[:n]...) // copy the string verbatim - return dst, src[n:], nil - } - - // TODO: Implement a direct, raw-to-raw reformat for strings. - // If the escapeRune option would have resulted in no changes to the output, - // it would be faster to simply append src to dst without going through - // an intermediary representation in a separate buffer. - b, _ := unescapeString(make([]byte, 0, n), src[:n]) - dst, _ = appendString(dst, string(b), validateUTF8, escapeRune) - return dst, src[n:], nil -} - -// appendNumber appends src to dst as a JSON number per RFC 7159, section 6. -// It formats numbers similar to the ES6 number-to-string conversion. -// See https://go.dev/issue/14135. -// -// The output is identical to ECMA-262, 6th edition, section 7.1.12.1 and with -// RFC 8785, section 3.2.2.3 for 64-bit floating-point numbers except for -0, -// which is formatted as -0 instead of just 0. -// -// For 32-bit floating-point numbers, -// the output is a 32-bit equivalent of the algorithm. -// Note that ECMA-262 specifies no algorithm for 32-bit numbers. -func appendNumber(dst []byte, src float64, bits int) []byte { - if bits == 32 { - src = float64(float32(src)) - } - - abs := math.Abs(src) - fmt := byte('f') - if abs != 0 { - if bits == 64 && (float64(abs) < 1e-6 || float64(abs) >= 1e21) || - bits == 32 && (float32(abs) < 1e-6 || float32(abs) >= 1e21) { - fmt = 'e' - } - } - dst = strconv.AppendFloat(dst, src, fmt, -1, bits) - if fmt == 'e' { - // Clean up e-09 to e-9. - n := len(dst) - if n >= 4 && dst[n-4] == 'e' && dst[n-3] == '-' && dst[n-2] == '0' { - dst[n-2] = dst[n-1] - dst = dst[:n-1] - } - } - return dst -} - -// reformatNumber consumes a JSON string from src and appends it to dst, -// canonicalizing it if specified. -// It returns the appended output and the remainder of the input. -func reformatNumber(dst, src []byte, canonicalize bool) ([]byte, []byte, error) { - n, err := consumeNumber(src) - if err != nil { - return dst, src[n:], err - } - if !canonicalize { - dst = append(dst, src[:n]...) // copy the number verbatim - return dst, src[n:], nil - } - - // Canonicalize the number per RFC 8785, section 3.2.2.3. - // As an optimization, we can copy integer numbers below 2⁵³ verbatim. - const maxExactIntegerDigits = 16 // len(strconv.AppendUint(nil, 1<<53, 10)) - if n < maxExactIntegerDigits && consumeSimpleNumber(src[:n]) == n { - dst = append(dst, src[:n]...) // copy the number verbatim - return dst, src[n:], nil - } - fv, _ := strconv.ParseFloat(string(src[:n]), 64) - switch { - case fv == 0: - fv = 0 // normalize negative zero as just zero - case math.IsInf(fv, +1): - fv = +math.MaxFloat64 - case math.IsInf(fv, -1): - fv = -math.MaxFloat64 - } - return appendNumber(dst, fv, 64), src[n:], nil -} - -// appendHexUint16 appends src to dst as a 4-byte hexadecimal number. -func appendHexUint16(dst []byte, src uint16) []byte { - dst = append(dst, "0000"[1+(bits.Len16(src)-1)/4:]...) - dst = strconv.AppendUint(dst, uint64(src), 16) - return dst -} diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/errors.go b/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/errors.go deleted file mode 100644 index 35be8601e..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/errors.go +++ /dev/null @@ -1,183 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package json - -import ( - "errors" - "reflect" - "strconv" - "strings" - "unicode/utf8" -) - -const errorPrefix = "json: " - -// Error matches errors returned by this package according to errors.Is. -const Error = jsonError("json error") - -type jsonError string - -func (e jsonError) Error() string { - return string(e) -} -func (e jsonError) Is(target error) bool { - return e == target || target == Error -} - -type ioError struct { - action string // either "read" or "write" - err error -} - -func (e *ioError) Error() string { - return errorPrefix + e.action + " error: " + e.err.Error() -} -func (e *ioError) Unwrap() error { - return e.err -} -func (e *ioError) Is(target error) bool { - return e == target || target == Error || errors.Is(e.err, target) -} - -// SemanticError describes an error determining the meaning -// of JSON data as Go data or vice-versa. -// -// The contents of this error as produced by this package may change over time. -type SemanticError struct { - requireKeyedLiterals - nonComparable - - action string // either "marshal" or "unmarshal" - - // ByteOffset indicates that an error occurred after this byte offset. - ByteOffset int64 - // JSONPointer indicates that an error occurred within this JSON value - // as indicated using the JSON Pointer notation (see RFC 6901). - JSONPointer string - - // JSONKind is the JSON kind that could not be handled. - JSONKind Kind // may be zero if unknown - // GoType is the Go type that could not be handled. - GoType reflect.Type // may be nil if unknown - - // Err is the underlying error. - Err error // may be nil -} - -func (e *SemanticError) Error() string { - var sb strings.Builder - sb.WriteString(errorPrefix) - - // Hyrum-proof the error message by deliberately switching between - // two equivalent renderings of the same error message. - // The randomization is tied to the Hyrum-proofing already applied - // on map iteration in Go. - for phrase := range map[string]struct{}{"cannot": {}, "unable to": {}} { - sb.WriteString(phrase) - break // use whichever phrase we get in the first iteration - } - - // Format action. - var preposition string - switch e.action { - case "marshal": - sb.WriteString(" marshal") - preposition = " from" - case "unmarshal": - sb.WriteString(" unmarshal") - preposition = " into" - default: - sb.WriteString(" handle") - preposition = " with" - } - - // Format JSON kind. - var omitPreposition bool - switch e.JSONKind { - case 'n': - sb.WriteString(" JSON null") - case 'f', 't': - sb.WriteString(" JSON boolean") - case '"': - sb.WriteString(" JSON string") - case '0': - sb.WriteString(" JSON number") - case '{', '}': - sb.WriteString(" JSON object") - case '[', ']': - sb.WriteString(" JSON array") - default: - omitPreposition = true - } - - // Format Go type. - if e.GoType != nil { - if !omitPreposition { - sb.WriteString(preposition) - } - sb.WriteString(" Go value of type ") - sb.WriteString(e.GoType.String()) - } - - // Format where. - switch { - case e.JSONPointer != "": - sb.WriteString(" within JSON value at ") - sb.WriteString(strconv.Quote(e.JSONPointer)) - case e.ByteOffset > 0: - sb.WriteString(" after byte offset ") - sb.WriteString(strconv.FormatInt(e.ByteOffset, 10)) - } - - // Format underlying error. - if e.Err != nil { - sb.WriteString(": ") - sb.WriteString(e.Err.Error()) - } - - return sb.String() -} -func (e *SemanticError) Is(target error) bool { - return e == target || target == Error || errors.Is(e.Err, target) -} -func (e *SemanticError) Unwrap() error { - return e.Err -} - -// SyntacticError is a description of a syntactic error that occurred when -// encoding or decoding JSON according to the grammar. -// -// The contents of this error as produced by this package may change over time. -type SyntacticError struct { - requireKeyedLiterals - nonComparable - - // ByteOffset indicates that an error occurred after this byte offset. - ByteOffset int64 - str string -} - -func (e *SyntacticError) Error() string { - return errorPrefix + e.str -} -func (e *SyntacticError) Is(target error) bool { - return e == target || target == Error -} -func (e *SyntacticError) withOffset(pos int64) error { - return &SyntacticError{ByteOffset: pos, str: e.str} -} - -func newInvalidCharacterError(prefix []byte, where string) *SyntacticError { - what := quoteRune(prefix) - return &SyntacticError{str: "invalid character " + what + " " + where} -} - -func quoteRune(b []byte) string { - r, n := utf8.DecodeRune(b) - if r == utf8.RuneError && n == 1 { - return `'\x` + strconv.FormatUint(uint64(b[0]), 16) + `'` - } - return strconv.QuoteRune(r) -} diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/fields.go b/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/fields.go deleted file mode 100644 index c0ee36166..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/fields.go +++ /dev/null @@ -1,509 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package json - -import ( - "errors" - "fmt" - "io" - "reflect" - "sort" - "strconv" - "strings" - "unicode" - "unicode/utf8" -) - -var errIgnoredField = errors.New("ignored field") - -type isZeroer interface { - IsZero() bool -} - -var isZeroerType = reflect.TypeOf((*isZeroer)(nil)).Elem() - -type structFields struct { - flattened []structField // listed in depth-first ordering - byActualName map[string]*structField - byFoldedName map[string][]*structField - inlinedFallback *structField -} - -type structField struct { - id int // unique numeric ID in breadth-first ordering - index []int // index into a struct according to reflect.Type.FieldByIndex - typ reflect.Type - fncs *arshaler - isZero func(addressableValue) bool - isEmpty func(addressableValue) bool - fieldOptions -} - -func makeStructFields(root reflect.Type) (structFields, *SemanticError) { - var fs structFields - fs.byActualName = make(map[string]*structField, root.NumField()) - fs.byFoldedName = make(map[string][]*structField, root.NumField()) - - // ambiguous is a sentinel value to indicate that at least two fields - // at the same depth have the same name, and thus cancel each other out. - // This follows the same rules as selecting a field on embedded structs - // where the shallowest field takes precedence. If more than one field - // exists at the shallowest depth, then the selection is illegal. - // See https://go.dev/ref/spec#Selectors. - ambiguous := new(structField) - - // Setup a queue for a breath-first search. - var queueIndex int - type queueEntry struct { - typ reflect.Type - index []int - visitChildren bool // whether to recursively visit inlined field in this struct - } - queue := []queueEntry{{root, nil, true}} - seen := map[reflect.Type]bool{root: true} - - // Perform a breadth-first search over all reachable fields. - // This ensures that len(f.index) will be monotonically increasing. - for queueIndex < len(queue) { - qe := queue[queueIndex] - queueIndex++ - - t := qe.typ - inlinedFallbackIndex := -1 // index of last inlined fallback field in current struct - namesIndex := make(map[string]int) // index of each field with a given JSON object name in current struct - var hasAnyJSONTag bool // whether any Go struct field has a `json` tag - var hasAnyJSONField bool // whether any JSON serializable fields exist in current struct - for i := 0; i < t.NumField(); i++ { - sf := t.Field(i) - _, hasTag := sf.Tag.Lookup("json") - hasAnyJSONTag = hasAnyJSONTag || hasTag - options, err := parseFieldOptions(sf) - if err != nil { - if err == errIgnoredField { - continue - } - return structFields{}, &SemanticError{GoType: t, Err: err} - } - hasAnyJSONField = true - f := structField{ - // Allocate a new slice (len=N+1) to hold both - // the parent index (len=N) and the current index (len=1). - // Do this to avoid clobbering the memory of the parent index. - index: append(append(make([]int, 0, len(qe.index)+1), qe.index...), i), - typ: sf.Type, - fieldOptions: options, - } - if sf.Anonymous && !f.hasName { - f.inline = true // implied by use of Go embedding without an explicit name - } - if f.inline || f.unknown { - // Handle an inlined field that serializes to/from - // zero or more JSON object members. - - if f.inline && f.unknown { - err := fmt.Errorf("Go struct field %s cannot have both `inline` and `unknown` specified", sf.Name) - return structFields{}, &SemanticError{GoType: t, Err: err} - } - switch f.fieldOptions { - case fieldOptions{name: f.name, quotedName: f.quotedName, inline: true}: - case fieldOptions{name: f.name, quotedName: f.quotedName, unknown: true}: - default: - err := fmt.Errorf("Go struct field %s cannot have any options other than `inline` or `unknown` specified", sf.Name) - return structFields{}, &SemanticError{GoType: t, Err: err} - } - - // Unwrap one level of pointer indirection similar to how Go - // only allows embedding either T or *T, but not **T. - tf := f.typ - if tf.Kind() == reflect.Pointer && tf.Name() == "" { - tf = tf.Elem() - } - // Reject any types with custom serialization otherwise - // it becomes impossible to know what sub-fields to inline. - if which, _ := implementsWhich(tf, - jsonMarshalerV2Type, jsonMarshalerV1Type, textMarshalerType, - jsonUnmarshalerV2Type, jsonUnmarshalerV1Type, textUnmarshalerType, - ); which != nil && tf != rawValueType { - err := fmt.Errorf("inlined Go struct field %s of type %s must not implement JSON marshal or unmarshal methods", sf.Name, tf) - return structFields{}, &SemanticError{GoType: t, Err: err} - } - - // Handle an inlined field that serializes to/from - // a finite number of JSON object members backed by a Go struct. - if tf.Kind() == reflect.Struct { - if f.unknown { - err := fmt.Errorf("inlined Go struct field %s of type %s with `unknown` tag must be a Go map of string key or a json.RawValue", sf.Name, tf) - return structFields{}, &SemanticError{GoType: t, Err: err} - } - if qe.visitChildren { - queue = append(queue, queueEntry{tf, f.index, !seen[tf]}) - } - seen[tf] = true - continue - } - - // Handle an inlined field that serializes to/from any number of - // JSON object members back by a Go map or RawValue. - switch { - case tf == rawValueType: - f.fncs = nil // specially handled in arshal_inlined.go - case tf.Kind() == reflect.Map && tf.Key() == stringType: - f.fncs = lookupArshaler(tf.Elem()) - default: - err := fmt.Errorf("inlined Go struct field %s of type %s must be a Go struct, Go map of string key, or json.RawValue", sf.Name, tf) - return structFields{}, &SemanticError{GoType: t, Err: err} - } - - // Reject multiple inlined fallback fields within the same struct. - if inlinedFallbackIndex >= 0 { - err := fmt.Errorf("inlined Go struct fields %s and %s cannot both be a Go map or json.RawValue", t.Field(inlinedFallbackIndex).Name, sf.Name) - return structFields{}, &SemanticError{GoType: t, Err: err} - } - inlinedFallbackIndex = i - - // Multiple inlined fallback fields across different structs - // follow the same precedence rules as Go struct embedding. - if fs.inlinedFallback == nil { - fs.inlinedFallback = &f // store first occurrence at lowest depth - } else if len(fs.inlinedFallback.index) == len(f.index) { - fs.inlinedFallback = ambiguous // at least two occurrences at same depth - } - } else { - // Handle normal Go struct field that serializes to/from - // a single JSON object member. - - // Provide a function that uses a type's IsZero method. - switch { - case sf.Type.Kind() == reflect.Interface && sf.Type.Implements(isZeroerType): - f.isZero = func(va addressableValue) bool { - // Avoid panics calling IsZero on a nil interface or - // non-nil interface with nil pointer. - return va.IsNil() || (va.Elem().Kind() == reflect.Pointer && va.Elem().IsNil()) || va.Interface().(isZeroer).IsZero() - } - case sf.Type.Kind() == reflect.Pointer && sf.Type.Implements(isZeroerType): - f.isZero = func(va addressableValue) bool { - // Avoid panics calling IsZero on nil pointer. - return va.IsNil() || va.Interface().(isZeroer).IsZero() - } - case sf.Type.Implements(isZeroerType): - f.isZero = func(va addressableValue) bool { return va.Interface().(isZeroer).IsZero() } - case reflect.PointerTo(sf.Type).Implements(isZeroerType): - f.isZero = func(va addressableValue) bool { return va.Addr().Interface().(isZeroer).IsZero() } - } - - // Provide a function that can determine whether the value would - // serialize as an empty JSON value. - switch sf.Type.Kind() { - case reflect.String, reflect.Map, reflect.Array, reflect.Slice: - f.isEmpty = func(va addressableValue) bool { return va.Len() == 0 } - case reflect.Pointer, reflect.Interface: - f.isEmpty = func(va addressableValue) bool { return va.IsNil() } - } - - f.id = len(fs.flattened) - f.fncs = lookupArshaler(sf.Type) - fs.flattened = append(fs.flattened, f) - - // Reject user-specified names with invalid UTF-8. - if !utf8.ValidString(f.name) { - err := fmt.Errorf("Go struct field %s has JSON object name %q with invalid UTF-8", sf.Name, f.name) - return structFields{}, &SemanticError{GoType: t, Err: err} - } - // Reject multiple fields with same name within the same struct. - if j, ok := namesIndex[f.name]; ok { - err := fmt.Errorf("Go struct fields %s and %s conflict over JSON object name %q", t.Field(j).Name, sf.Name, f.name) - return structFields{}, &SemanticError{GoType: t, Err: err} - } - namesIndex[f.name] = i - - // Multiple fields of the same name across different structs - // follow the same precedence rules as Go struct embedding. - if f2 := fs.byActualName[f.name]; f2 == nil { - fs.byActualName[f.name] = &fs.flattened[len(fs.flattened)-1] // store first occurrence at lowest depth - } else if len(f2.index) == len(f.index) { - fs.byActualName[f.name] = ambiguous // at least two occurrences at same depth - } - } - } - - // NOTE: New users to the json package are occasionally surprised that - // unexported fields are ignored. This occurs by necessity due to our - // inability to directly introspect such fields with Go reflection - // without the use of unsafe. - // - // To reduce friction here, refuse to serialize any Go struct that - // has no JSON serializable fields, has at least one Go struct field, - // and does not have any `json` tags present. For example, - // errors returned by errors.New would fail to serialize. - isEmptyStruct := t.NumField() == 0 - if !isEmptyStruct && !hasAnyJSONTag && !hasAnyJSONField { - err := errors.New("Go struct has no exported fields") - return structFields{}, &SemanticError{GoType: t, Err: err} - } - } - - // Remove all fields that are duplicates. - // This may move elements forward to fill the holes from removed fields. - var n int - for _, f := range fs.flattened { - switch f2 := fs.byActualName[f.name]; { - case f2 == ambiguous: - delete(fs.byActualName, f.name) - case f2 == nil: - continue // may be nil due to previous delete - // TODO(https://go.dev/issue/45955): Use slices.Equal. - case reflect.DeepEqual(f.index, f2.index): - f.id = n - fs.flattened[n] = f - fs.byActualName[f.name] = &fs.flattened[n] // fix pointer to new location - n++ - } - } - fs.flattened = fs.flattened[:n] - if fs.inlinedFallback == ambiguous { - fs.inlinedFallback = nil - } - if len(fs.flattened) != len(fs.byActualName) { - panic(fmt.Sprintf("BUG: flattened list of fields mismatches fields mapped by name: %d != %d", len(fs.flattened), len(fs.byActualName))) - } - - // Sort the fields according to a depth-first ordering. - // This operation will cause pointers in byActualName to become incorrect, - // which we will correct in another loop shortly thereafter. - sort.Slice(fs.flattened, func(i, j int) bool { - si := fs.flattened[i].index - sj := fs.flattened[j].index - for len(si) > 0 && len(sj) > 0 { - switch { - case si[0] < sj[0]: - return true - case si[0] > sj[0]: - return false - default: - si = si[1:] - sj = sj[1:] - } - } - return len(si) < len(sj) - }) - - // Recompute the mapping of fields in the byActualName map. - // Pre-fold all names so that we can lookup folded names quickly. - for i, f := range fs.flattened { - foldedName := string(foldName([]byte(f.name))) - fs.byActualName[f.name] = &fs.flattened[i] - fs.byFoldedName[foldedName] = append(fs.byFoldedName[foldedName], &fs.flattened[i]) - } - for foldedName, fields := range fs.byFoldedName { - if len(fields) > 1 { - // The precedence order for conflicting nocase names - // is by breadth-first order, rather than depth-first order. - sort.Slice(fields, func(i, j int) bool { - return fields[i].id < fields[j].id - }) - fs.byFoldedName[foldedName] = fields - } - } - - return fs, nil -} - -type fieldOptions struct { - name string - quotedName string // quoted name per RFC 8785, section 3.2.2.2. - hasName bool - nocase bool - inline bool - unknown bool - omitzero bool - omitempty bool - string bool - format string -} - -// parseFieldOptions parses the `json` tag in a Go struct field as -// a structured set of options configuring parameters such as -// the JSON member name and other features. -// As a special case, it returns errIgnoredField if the field is ignored. -func parseFieldOptions(sf reflect.StructField) (out fieldOptions, err error) { - tag, hasTag := sf.Tag.Lookup("json") - - // Check whether this field is explicitly ignored. - if tag == "-" { - return fieldOptions{}, errIgnoredField - } - - // Check whether this field is unexported. - if !sf.IsExported() { - // In contrast to v1, v2 no longer forwards exported fields from - // embedded fields of unexported types since Go reflection does not - // allow the same set of operations that are available in normal cases - // of purely exported fields. - // See https://go.dev/issue/21357 and https://go.dev/issue/24153. - if sf.Anonymous { - return fieldOptions{}, fmt.Errorf("embedded Go struct field %s of an unexported type must be explicitly ignored with a `json:\"-\"` tag", sf.Type.Name()) - } - // Tag options specified on an unexported field suggests user error. - if hasTag { - return fieldOptions{}, fmt.Errorf("unexported Go struct field %s cannot have non-ignored `json:%q` tag", sf.Name, tag) - } - return fieldOptions{}, errIgnoredField - } - - // Determine the JSON member name for this Go field. A user-specified name - // may be provided as either an identifier or a single-quoted string. - // The single-quoted string allows arbitrary characters in the name. - // See https://go.dev/issue/2718 and https://go.dev/issue/3546. - out.name = sf.Name // always starts with an uppercase character - if len(tag) > 0 && !strings.HasPrefix(tag, ",") { - // For better compatibility with v1, accept almost any unescaped name. - n := len(tag) - len(strings.TrimLeftFunc(tag, func(r rune) bool { - return !strings.ContainsRune(",\\'\"`", r) // reserve comma, backslash, and quotes - })) - opt := tag[:n] - if n == 0 { - // Allow a single quoted string for arbitrary names. - opt, n, err = consumeTagOption(tag) - if err != nil { - return fieldOptions{}, fmt.Errorf("Go struct field %s has malformed `json` tag: %v", sf.Name, err) - } - } - out.hasName = true - out.name = opt - tag = tag[n:] - } - b, _ := appendString(nil, out.name, false, nil) - out.quotedName = string(b) - - // Handle any additional tag options (if any). - var wasFormat bool - seenOpts := make(map[string]bool) - for len(tag) > 0 { - // Consume comma delimiter. - if tag[0] != ',' { - return fieldOptions{}, fmt.Errorf("Go struct field %s has malformed `json` tag: invalid character %q before next option (expecting ',')", sf.Name, tag[0]) - } - tag = tag[len(","):] - if len(tag) == 0 { - return fieldOptions{}, fmt.Errorf("Go struct field %s has malformed `json` tag: invalid trailing ',' character", sf.Name) - } - - // Consume and process the tag option. - opt, n, err := consumeTagOption(tag) - if err != nil { - return fieldOptions{}, fmt.Errorf("Go struct field %s has malformed `json` tag: %v", sf.Name, err) - } - rawOpt := tag[:n] - tag = tag[n:] - switch { - case wasFormat: - return fieldOptions{}, fmt.Errorf("Go struct field %s has `format` tag option that was not specified last", sf.Name) - case strings.HasPrefix(rawOpt, "'") && strings.TrimFunc(opt, isLetterOrDigit) == "": - return fieldOptions{}, fmt.Errorf("Go struct field %s has unnecessarily quoted appearance of `%s` tag option; specify `%s` instead", sf.Name, rawOpt, opt) - } - switch opt { - case "nocase": - out.nocase = true - case "inline": - out.inline = true - case "unknown": - out.unknown = true - case "omitzero": - out.omitzero = true - case "omitempty": - out.omitempty = true - case "string": - out.string = true - case "format": - if !strings.HasPrefix(tag, ":") { - return fieldOptions{}, fmt.Errorf("Go struct field %s is missing value for `format` tag option", sf.Name) - } - tag = tag[len(":"):] - opt, n, err := consumeTagOption(tag) - if err != nil { - return fieldOptions{}, fmt.Errorf("Go struct field %s has malformed value for `format` tag option: %v", sf.Name, err) - } - tag = tag[n:] - out.format = opt - wasFormat = true - default: - // Reject keys that resemble one of the supported options. - // This catches invalid mutants such as "omitEmpty" or "omit_empty". - normOpt := strings.ReplaceAll(strings.ToLower(opt), "_", "") - switch normOpt { - case "nocase", "inline", "unknown", "omitzero", "omitempty", "string", "format": - return fieldOptions{}, fmt.Errorf("Go struct field %s has invalid appearance of `%s` tag option; specify `%s` instead", sf.Name, opt, normOpt) - } - - // NOTE: Everything else is ignored. This does not mean it is - // forward compatible to insert arbitrary tag options since - // a future version of this package may understand that tag. - } - - // Reject duplicates. - if seenOpts[opt] { - return fieldOptions{}, fmt.Errorf("Go struct field %s has duplicate appearance of `%s` tag option", sf.Name, rawOpt) - } - seenOpts[opt] = true - } - return out, nil -} - -func consumeTagOption(in string) (string, int, error) { - switch r, _ := utf8.DecodeRuneInString(in); { - // Option as a Go identifier. - case r == '_' || unicode.IsLetter(r): - n := len(in) - len(strings.TrimLeftFunc(in, isLetterOrDigit)) - return in[:n], n, nil - // Option as a single-quoted string. - case r == '\'': - // The grammar is nearly identical to a double-quoted Go string literal, - // but uses single quotes as the terminators. The reason for a custom - // grammar is because both backtick and double quotes cannot be used - // verbatim in a struct tag. - // - // Convert a single-quoted string to a double-quote string and rely on - // strconv.Unquote to handle the rest. - var inEscape bool - b := []byte{'"'} - n := len(`'`) - for len(in) > n { - r, rn := utf8.DecodeRuneInString(in[n:]) - switch { - case inEscape: - if r == '\'' { - b = b[:len(b)-1] // remove escape character: `\'` => `'` - } - inEscape = false - case r == '\\': - inEscape = true - case r == '"': - b = append(b, '\\') // insert escape character: `"` => `\"` - case r == '\'': - b = append(b, '"') - n += len(`'`) - out, err := strconv.Unquote(string(b)) - if err != nil { - return "", 0, fmt.Errorf("invalid single-quoted string: %s", in[:n]) - } - return out, n, nil - } - b = append(b, in[n:][:rn]...) - n += rn - } - if n > 10 { - n = 10 // limit the amount of context printed in the error - } - return "", 0, fmt.Errorf("single-quoted string not terminated: %s...", in[:n]) - case len(in) == 0: - return "", 0, io.ErrUnexpectedEOF - default: - return "", 0, fmt.Errorf("invalid character %q at start of option (expecting Unicode letter or single quote)", r) - } -} - -func isLetterOrDigit(r rune) bool { - return r == '_' || unicode.IsLetter(r) || unicode.IsNumber(r) -} diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/fold.go b/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/fold.go deleted file mode 100644 index 9ab735814..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/fold.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package json - -import ( - "unicode" - "unicode/utf8" -) - -// foldName returns a folded string such that foldName(x) == foldName(y) -// is similar to strings.EqualFold(x, y), but ignores underscore and dashes. -// This allows foldName to match common naming conventions. -func foldName(in []byte) []byte { - // This is inlinable to take advantage of "function outlining". - // See https://blog.filippo.io/efficient-go-apis-with-the-inliner/ - var arr [32]byte // large enough for most JSON names - return appendFoldedName(arr[:0], in) -} -func appendFoldedName(out, in []byte) []byte { - for i := 0; i < len(in); { - // Handle single-byte ASCII. - if c := in[i]; c < utf8.RuneSelf { - if c != '_' && c != '-' { - if 'a' <= c && c <= 'z' { - c -= 'a' - 'A' - } - out = append(out, c) - } - i++ - continue - } - // Handle multi-byte Unicode. - r, n := utf8.DecodeRune(in[i:]) - out = utf8.AppendRune(out, foldRune(r)) - i += n - } - return out -} - -// foldRune is a variation on unicode.SimpleFold that returns the same rune -// for all runes in the same fold set. -// -// Invariant: -// -// foldRune(x) == foldRune(y) ⇔ strings.EqualFold(string(x), string(y)) -func foldRune(r rune) rune { - for { - r2 := unicode.SimpleFold(r) - if r2 <= r { - return r2 // smallest character in the fold set - } - r = r2 - } -} diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/intern.go b/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/intern.go deleted file mode 100644 index 700a56db0..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/intern.go +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package json - -import ( - "encoding/binary" - "math/bits" -) - -// stringCache is a cache for strings converted from a []byte. -type stringCache [256]string // 256*unsafe.Sizeof(string("")) => 4KiB - -// make returns the string form of b. -// It returns a pre-allocated string from c if present, otherwise -// it allocates a new string, inserts it into the cache, and returns it. -func (c *stringCache) make(b []byte) string { - const ( - minCachedLen = 2 // single byte strings are already interned by the runtime - maxCachedLen = 256 // large enough for UUIDs, IPv6 addresses, SHA-256 checksums, etc. - ) - if c == nil || len(b) < minCachedLen || len(b) > maxCachedLen { - return string(b) - } - - // Compute a hash from the fixed-width prefix and suffix of the string. - // This ensures hashing a string is a constant time operation. - var h uint32 - switch { - case len(b) >= 8: - lo := binary.LittleEndian.Uint64(b[:8]) - hi := binary.LittleEndian.Uint64(b[len(b)-8:]) - h = hash64(uint32(lo), uint32(lo>>32)) ^ hash64(uint32(hi), uint32(hi>>32)) - case len(b) >= 4: - lo := binary.LittleEndian.Uint32(b[:4]) - hi := binary.LittleEndian.Uint32(b[len(b)-4:]) - h = hash64(lo, hi) - case len(b) >= 2: - lo := binary.LittleEndian.Uint16(b[:2]) - hi := binary.LittleEndian.Uint16(b[len(b)-2:]) - h = hash64(uint32(lo), uint32(hi)) - } - - // Check the cache for the string. - i := h % uint32(len(*c)) - if s := (*c)[i]; s == string(b) { - return s - } - s := string(b) - (*c)[i] = s - return s -} - -// hash64 returns the hash of two uint32s as a single uint32. -func hash64(lo, hi uint32) uint32 { - // If avalanche=true, this is identical to XXH32 hash on a 8B string: - // var b [8]byte - // binary.LittleEndian.PutUint32(b[:4], lo) - // binary.LittleEndian.PutUint32(b[4:], hi) - // return xxhash.Sum32(b[:]) - const ( - prime1 = 0x9e3779b1 - prime2 = 0x85ebca77 - prime3 = 0xc2b2ae3d - prime4 = 0x27d4eb2f - prime5 = 0x165667b1 - ) - h := prime5 + uint32(8) - h += lo * prime3 - h = bits.RotateLeft32(h, 17) * prime4 - h += hi * prime3 - h = bits.RotateLeft32(h, 17) * prime4 - // Skip final mix (avalanche) step of XXH32 for performance reasons. - // Empirical testing shows that the improvements in unbiased distribution - // does not outweigh the extra cost in computational complexity. - const avalanche = false - if avalanche { - h ^= h >> 15 - h *= prime2 - h ^= h >> 13 - h *= prime3 - h ^= h >> 16 - } - return h -} diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/pools.go b/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/pools.go deleted file mode 100644 index 60e93270f..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/pools.go +++ /dev/null @@ -1,182 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package json - -import ( - "bytes" - "io" - "math/bits" - "sort" - "sync" -) - -// TODO(https://go.dev/issue/47657): Use sync.PoolOf. - -var ( - // This owns the internal buffer since there is no io.Writer to output to. - // Since the buffer can get arbitrarily large in normal usage, - // there is statistical tracking logic to determine whether to recycle - // the internal buffer or not based on a history of utilization. - bufferedEncoderPool = &sync.Pool{New: func() any { return new(Encoder) }} - - // This owns the internal buffer, but it is only used to temporarily store - // buffered JSON before flushing it to the underlying io.Writer. - // In a sufficiently efficient streaming mode, we do not expect the buffer - // to grow arbitrarily large. Thus, we avoid recycling large buffers. - streamingEncoderPool = &sync.Pool{New: func() any { return new(Encoder) }} - - // This does not own the internal buffer since - // it is taken directly from the provided bytes.Buffer. - bytesBufferEncoderPool = &sync.Pool{New: func() any { return new(Encoder) }} -) - -// bufferStatistics is statistics to track buffer utilization. -// It is used to determine whether to recycle a buffer or not -// to avoid https://go.dev/issue/23199. -type bufferStatistics struct { - strikes int // number of times the buffer was under-utilized - prevLen int // length of previous buffer -} - -func getBufferedEncoder(o EncodeOptions) *Encoder { - e := bufferedEncoderPool.Get().(*Encoder) - if e.buf == nil { - // Round up to nearest 2ⁿ to make best use of malloc size classes. - // See runtime/sizeclasses.go on Go1.15. - // Logical OR with 63 to ensure 64 as the minimum buffer size. - n := 1 << bits.Len(uint(e.bufStats.prevLen|63)) - e.buf = make([]byte, 0, n) - } - e.reset(e.buf[:0], nil, o) - return e -} -func putBufferedEncoder(e *Encoder) { - // Recycle large buffers only if sufficiently utilized. - // If a buffer is under-utilized enough times sequentially, - // then it is discarded, ensuring that a single large buffer - // won't be kept alive by a continuous stream of small usages. - // - // The worst case utilization is computed as: - // MIN_UTILIZATION_THRESHOLD / (1 + MAX_NUM_STRIKES) - // - // For the constants chosen below, this is (25%)/(1+4) ⇒ 5%. - // This may seem low, but it ensures a lower bound on - // the absolute worst-case utilization. Without this check, - // this would be theoretically 0%, which is infinitely worse. - // - // See https://go.dev/issue/27735. - switch { - case cap(e.buf) <= 4<<10: // always recycle buffers smaller than 4KiB - e.bufStats.strikes = 0 - case cap(e.buf)/4 <= len(e.buf): // at least 25% utilization - e.bufStats.strikes = 0 - case e.bufStats.strikes < 4: // at most 4 strikes - e.bufStats.strikes++ - default: // discard the buffer; too large and too often under-utilized - e.bufStats.strikes = 0 - e.bufStats.prevLen = len(e.buf) // heuristic for size to allocate next time - e.buf = nil - } - bufferedEncoderPool.Put(e) -} - -func getStreamingEncoder(w io.Writer, o EncodeOptions) *Encoder { - if _, ok := w.(*bytes.Buffer); ok { - e := bytesBufferEncoderPool.Get().(*Encoder) - e.reset(nil, w, o) // buffer taken from bytes.Buffer - return e - } else { - e := streamingEncoderPool.Get().(*Encoder) - e.reset(e.buf[:0], w, o) // preserve existing buffer - return e - } -} -func putStreamingEncoder(e *Encoder) { - if _, ok := e.wr.(*bytes.Buffer); ok { - bytesBufferEncoderPool.Put(e) - } else { - if cap(e.buf) > 64<<10 { - e.buf = nil // avoid pinning arbitrarily large amounts of memory - } - streamingEncoderPool.Put(e) - } -} - -var ( - // This does not own the internal buffer since it is externally provided. - bufferedDecoderPool = &sync.Pool{New: func() any { return new(Decoder) }} - - // This owns the internal buffer, but it is only used to temporarily store - // buffered JSON fetched from the underlying io.Reader. - // In a sufficiently efficient streaming mode, we do not expect the buffer - // to grow arbitrarily large. Thus, we avoid recycling large buffers. - streamingDecoderPool = &sync.Pool{New: func() any { return new(Decoder) }} - - // This does not own the internal buffer since - // it is taken directly from the provided bytes.Buffer. - bytesBufferDecoderPool = bufferedDecoderPool -) - -func getBufferedDecoder(b []byte, o DecodeOptions) *Decoder { - d := bufferedDecoderPool.Get().(*Decoder) - d.reset(b, nil, o) - return d -} -func putBufferedDecoder(d *Decoder) { - bufferedDecoderPool.Put(d) -} - -func getStreamingDecoder(r io.Reader, o DecodeOptions) *Decoder { - if _, ok := r.(*bytes.Buffer); ok { - d := bytesBufferDecoderPool.Get().(*Decoder) - d.reset(nil, r, o) // buffer taken from bytes.Buffer - return d - } else { - d := streamingDecoderPool.Get().(*Decoder) - d.reset(d.buf[:0], r, o) // preserve existing buffer - return d - } -} -func putStreamingDecoder(d *Decoder) { - if _, ok := d.rd.(*bytes.Buffer); ok { - bytesBufferDecoderPool.Put(d) - } else { - if cap(d.buf) > 64<<10 { - d.buf = nil // avoid pinning arbitrarily large amounts of memory - } - streamingDecoderPool.Put(d) - } -} - -var stringsPools = &sync.Pool{New: func() any { return new(stringSlice) }} - -type stringSlice []string - -// getStrings returns a non-nil pointer to a slice with length n. -func getStrings(n int) *stringSlice { - s := stringsPools.Get().(*stringSlice) - if cap(*s) < n { - *s = make([]string, n) - } - *s = (*s)[:n] - return s -} - -func putStrings(s *stringSlice) { - if cap(*s) > 1<<10 { - *s = nil // avoid pinning arbitrarily large amounts of memory - } - stringsPools.Put(s) -} - -// Sort sorts the string slice according to RFC 8785, section 3.2.3. -func (ss *stringSlice) Sort() { - // TODO(https://go.dev/issue/47619): Use slices.SortFunc instead. - sort.Sort(ss) -} - -func (ss *stringSlice) Len() int { return len(*ss) } -func (ss *stringSlice) Less(i, j int) bool { return lessUTF16((*ss)[i], (*ss)[j]) } -func (ss *stringSlice) Swap(i, j int) { (*ss)[i], (*ss)[j] = (*ss)[j], (*ss)[i] } diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/state.go b/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/state.go deleted file mode 100644 index ee14c753f..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/state.go +++ /dev/null @@ -1,747 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package json - -import ( - "math" - "strconv" -) - -var ( - errMissingName = &SyntacticError{str: "missing string for object name"} - errMissingColon = &SyntacticError{str: "missing character ':' after object name"} - errMissingValue = &SyntacticError{str: "missing value after object name"} - errMissingComma = &SyntacticError{str: "missing character ',' after object or array value"} - errMismatchDelim = &SyntacticError{str: "mismatching structural token for object or array"} -) - -const errInvalidNamespace = jsonError("object namespace is in an invalid state") - -type state struct { - // tokens validates whether the next token kind is valid. - tokens stateMachine - - // names is a stack of object names. - // Not used if AllowDuplicateNames is true. - names objectNameStack - - // namespaces is a stack of object namespaces. - // For performance reasons, Encoder or Decoder may not update this - // if Marshal or Unmarshal is able to track names in a more efficient way. - // See makeMapArshaler and makeStructArshaler. - // Not used if AllowDuplicateNames is true. - namespaces objectNamespaceStack -} - -func (s *state) reset() { - s.tokens.reset() - s.names.reset() - s.namespaces.reset() -} - -// appendStackPointer appends a JSON Pointer (RFC 6901) to the current value. -// The returned pointer is only accurate if s.names is populated, -// otherwise it uses the numeric index as the object member name. -// -// Invariant: Must call s.names.copyQuotedBuffer beforehand. -func (s state) appendStackPointer(b []byte) []byte { - var objectDepth int - for i := 1; i < s.tokens.depth(); i++ { - e := s.tokens.index(i) - if e.length() == 0 { - break // empty object or array - } - b = append(b, '/') - switch { - case e.isObject(): - if objectDepth < s.names.length() { - for _, c := range s.names.getUnquoted(objectDepth) { - // Per RFC 6901, section 3, escape '~' and '/' characters. - switch c { - case '~': - b = append(b, "~0"...) - case '/': - b = append(b, "~1"...) - default: - b = append(b, c) - } - } - } else { - // Since the names stack is unpopulated, the name is unknown. - // As a best-effort replacement, use the numeric member index. - // While inaccurate, it produces a syntactically valid pointer. - b = strconv.AppendUint(b, uint64((e.length()-1)/2), 10) - } - objectDepth++ - case e.isArray(): - b = strconv.AppendUint(b, uint64(e.length()-1), 10) - } - } - return b -} - -// stateMachine is a push-down automaton that validates whether -// a sequence of tokens is valid or not according to the JSON grammar. -// It is useful for both encoding and decoding. -// -// It is a stack where each entry represents a nested JSON object or array. -// The stack has a minimum depth of 1 where the first level is a -// virtual JSON array to handle a stream of top-level JSON values. -// The top-level virtual JSON array is special in that it doesn't require commas -// between each JSON value. -// -// For performance, most methods are carefully written to be inlineable. -// The zero value is a valid state machine ready for use. -type stateMachine struct { - stack []stateEntry - last stateEntry -} - -// reset resets the state machine. -// The machine always starts with a minimum depth of 1. -func (m *stateMachine) reset() { - m.stack = m.stack[:0] - if cap(m.stack) > 1<<10 { - m.stack = nil - } - m.last = stateTypeArray -} - -// depth is the current nested depth of JSON objects and arrays. -// It is one-indexed (i.e., top-level values have a depth of 1). -func (m stateMachine) depth() int { - return len(m.stack) + 1 -} - -// index returns a reference to the ith entry. -// It is only valid until the next push method call. -func (m *stateMachine) index(i int) *stateEntry { - if i == len(m.stack) { - return &m.last - } - return &m.stack[i] -} - -// depthLength reports the current nested depth and -// the length of the last JSON object or array. -func (m stateMachine) depthLength() (int, int) { - return m.depth(), m.last.length() -} - -// appendLiteral appends a JSON literal as the next token in the sequence. -// If an error is returned, the state is not mutated. -func (m *stateMachine) appendLiteral() error { - switch { - case m.last.needObjectName(): - return errMissingName - case !m.last.isValidNamespace(): - return errInvalidNamespace - default: - m.last.increment() - return nil - } -} - -// appendString appends a JSON string as the next token in the sequence. -// If an error is returned, the state is not mutated. -func (m *stateMachine) appendString() error { - switch { - case !m.last.isValidNamespace(): - return errInvalidNamespace - default: - m.last.increment() - return nil - } -} - -// appendNumber appends a JSON number as the next token in the sequence. -// If an error is returned, the state is not mutated. -func (m *stateMachine) appendNumber() error { - return m.appendLiteral() -} - -// pushObject appends a JSON start object token as next in the sequence. -// If an error is returned, the state is not mutated. -func (m *stateMachine) pushObject() error { - switch { - case m.last.needObjectName(): - return errMissingName - case !m.last.isValidNamespace(): - return errInvalidNamespace - default: - m.last.increment() - m.stack = append(m.stack, m.last) - m.last = stateTypeObject - return nil - } -} - -// popObject appends a JSON end object token as next in the sequence. -// If an error is returned, the state is not mutated. -func (m *stateMachine) popObject() error { - switch { - case !m.last.isObject(): - return errMismatchDelim - case m.last.needObjectValue(): - return errMissingValue - case !m.last.isValidNamespace(): - return errInvalidNamespace - default: - m.last = m.stack[len(m.stack)-1] - m.stack = m.stack[:len(m.stack)-1] - return nil - } -} - -// pushArray appends a JSON start array token as next in the sequence. -// If an error is returned, the state is not mutated. -func (m *stateMachine) pushArray() error { - switch { - case m.last.needObjectName(): - return errMissingName - case !m.last.isValidNamespace(): - return errInvalidNamespace - default: - m.last.increment() - m.stack = append(m.stack, m.last) - m.last = stateTypeArray - return nil - } -} - -// popArray appends a JSON end array token as next in the sequence. -// If an error is returned, the state is not mutated. -func (m *stateMachine) popArray() error { - switch { - case !m.last.isArray() || len(m.stack) == 0: // forbid popping top-level virtual JSON array - return errMismatchDelim - case !m.last.isValidNamespace(): - return errInvalidNamespace - default: - m.last = m.stack[len(m.stack)-1] - m.stack = m.stack[:len(m.stack)-1] - return nil - } -} - -// needIndent reports whether indent whitespace should be injected. -// A zero value means that no whitespace should be injected. -// A positive value means '\n', indentPrefix, and (n-1) copies of indentBody -// should be appended to the output immediately before the next token. -func (m stateMachine) needIndent(next Kind) (n int) { - willEnd := next == '}' || next == ']' - switch { - case m.depth() == 1: - return 0 // top-level values are never indented - case m.last.length() == 0 && willEnd: - return 0 // an empty object or array is never indented - case m.last.length() == 0 || m.last.needImplicitComma(next): - return m.depth() - case willEnd: - return m.depth() - 1 - default: - return 0 - } -} - -// mayAppendDelim appends a colon or comma that may precede the next token. -func (m stateMachine) mayAppendDelim(b []byte, next Kind) []byte { - switch { - case m.last.needImplicitColon(): - return append(b, ':') - case m.last.needImplicitComma(next) && len(m.stack) != 0: // comma not needed for top-level values - return append(b, ',') - default: - return b - } -} - -// needDelim reports whether a colon or comma token should be implicitly emitted -// before the next token of the specified kind. -// A zero value means no delimiter should be emitted. -func (m stateMachine) needDelim(next Kind) (delim byte) { - switch { - case m.last.needImplicitColon(): - return ':' - case m.last.needImplicitComma(next) && len(m.stack) != 0: // comma not needed for top-level values - return ',' - default: - return 0 - } -} - -// checkDelim reports whether the specified delimiter should be there given -// the kind of the next token that appears immediately afterwards. -func (m stateMachine) checkDelim(delim byte, next Kind) error { - switch needDelim := m.needDelim(next); { - case needDelim == delim: - return nil - case needDelim == ':': - return errMissingColon - case needDelim == ',': - return errMissingComma - default: - return newInvalidCharacterError([]byte{delim}, "before next token") - } -} - -// invalidateDisabledNamespaces marks all disabled namespaces as invalid. -// -// For efficiency, Marshal and Unmarshal may disable namespaces since there are -// more efficient ways to track duplicate names. However, if an error occurs, -// the namespaces in Encoder or Decoder will be left in an inconsistent state. -// Mark the namespaces as invalid so that future method calls on -// Encoder or Decoder will return an error. -func (m *stateMachine) invalidateDisabledNamespaces() { - for i := 0; i < m.depth(); i++ { - e := m.index(i) - if !e.isActiveNamespace() { - e.invalidateNamespace() - } - } -} - -// stateEntry encodes several artifacts within a single unsigned integer: -// - whether this represents a JSON object or array, -// - whether this object should check for duplicate names, and -// - how many elements are in this JSON object or array. -type stateEntry uint64 - -const ( - // The type mask (1 bit) records whether this is a JSON object or array. - stateTypeMask stateEntry = 0x8000_0000_0000_0000 - stateTypeObject stateEntry = 0x8000_0000_0000_0000 - stateTypeArray stateEntry = 0x0000_0000_0000_0000 - - // The name check mask (2 bit) records whether to update - // the namespaces for the current JSON object and - // whether the namespace is valid. - stateNamespaceMask stateEntry = 0x6000_0000_0000_0000 - stateDisableNamespace stateEntry = 0x4000_0000_0000_0000 - stateInvalidNamespace stateEntry = 0x2000_0000_0000_0000 - - // The count mask (61 bits) records the number of elements. - stateCountMask stateEntry = 0x1fff_ffff_ffff_ffff - stateCountLSBMask stateEntry = 0x0000_0000_0000_0001 - stateCountOdd stateEntry = 0x0000_0000_0000_0001 - stateCountEven stateEntry = 0x0000_0000_0000_0000 -) - -// length reports the number of elements in the JSON object or array. -// Each name and value in an object entry is treated as a separate element. -func (e stateEntry) length() int { - return int(e & stateCountMask) -} - -// isObject reports whether this is a JSON object. -func (e stateEntry) isObject() bool { - return e&stateTypeMask == stateTypeObject -} - -// isArray reports whether this is a JSON array. -func (e stateEntry) isArray() bool { - return e&stateTypeMask == stateTypeArray -} - -// needObjectName reports whether the next token must be a JSON string, -// which is necessary for JSON object names. -func (e stateEntry) needObjectName() bool { - return e&(stateTypeMask|stateCountLSBMask) == stateTypeObject|stateCountEven -} - -// needImplicitColon reports whether an colon should occur next, -// which always occurs after JSON object names. -func (e stateEntry) needImplicitColon() bool { - return e.needObjectValue() -} - -// needObjectValue reports whether the next token must be a JSON value, -// which is necessary after every JSON object name. -func (e stateEntry) needObjectValue() bool { - return e&(stateTypeMask|stateCountLSBMask) == stateTypeObject|stateCountOdd -} - -// needImplicitComma reports whether an comma should occur next, -// which always occurs after a value in a JSON object or array -// before the next value (or name). -func (e stateEntry) needImplicitComma(next Kind) bool { - return !e.needObjectValue() && e.length() > 0 && next != '}' && next != ']' -} - -// increment increments the number of elements for the current object or array. -// This assumes that overflow won't practically be an issue since -// 1< 0. -func (e *stateEntry) decrement() { - (*e)-- -} - -// disableNamespace disables the JSON object namespace such that the -// Encoder or Decoder no longer updates the namespace. -func (e *stateEntry) disableNamespace() { - *e |= stateDisableNamespace -} - -// isActiveNamespace reports whether the JSON object namespace is actively -// being updated and used for duplicate name checks. -func (e stateEntry) isActiveNamespace() bool { - return e&(stateDisableNamespace) == 0 -} - -// invalidateNamespace marks the JSON object namespace as being invalid. -func (e *stateEntry) invalidateNamespace() { - *e |= stateInvalidNamespace -} - -// isValidNamespace reports whether the JSON object namespace is valid. -func (e stateEntry) isValidNamespace() bool { - return e&(stateInvalidNamespace) == 0 -} - -// objectNameStack is a stack of names when descending into a JSON object. -// In contrast to objectNamespaceStack, this only has to remember a single name -// per JSON object. -// -// This data structure may contain offsets to encodeBuffer or decodeBuffer. -// It violates clean abstraction of layers, but is significantly more efficient. -// This ensures that popping and pushing in the common case is a trivial -// push/pop of an offset integer. -// -// The zero value is an empty names stack ready for use. -type objectNameStack struct { - // offsets is a stack of offsets for each name. - // A non-negative offset is the ending offset into the local names buffer. - // A negative offset is the bit-wise inverse of a starting offset into - // a remote buffer (e.g., encodeBuffer or decodeBuffer). - // A math.MinInt offset at the end implies that the last object is empty. - // Invariant: Positive offsets always occur before negative offsets. - offsets []int - // unquotedNames is a back-to-back concatenation of names. - unquotedNames []byte -} - -func (ns *objectNameStack) reset() { - ns.offsets = ns.offsets[:0] - ns.unquotedNames = ns.unquotedNames[:0] - if cap(ns.offsets) > 1<<6 { - ns.offsets = nil // avoid pinning arbitrarily large amounts of memory - } - if cap(ns.unquotedNames) > 1<<10 { - ns.unquotedNames = nil // avoid pinning arbitrarily large amounts of memory - } -} - -func (ns *objectNameStack) length() int { - return len(ns.offsets) -} - -// getUnquoted retrieves the ith unquoted name in the namespace. -// It returns an empty string if the last object is empty. -// -// Invariant: Must call copyQuotedBuffer beforehand. -func (ns *objectNameStack) getUnquoted(i int) []byte { - ns.ensureCopiedBuffer() - if i == 0 { - return ns.unquotedNames[:ns.offsets[0]] - } else { - return ns.unquotedNames[ns.offsets[i-1]:ns.offsets[i-0]] - } -} - -// invalidOffset indicates that the last JSON object currently has no name. -const invalidOffset = math.MinInt - -// push descends into a nested JSON object. -func (ns *objectNameStack) push() { - ns.offsets = append(ns.offsets, invalidOffset) -} - -// replaceLastQuotedOffset replaces the last name with the starting offset -// to the quoted name in some remote buffer. All offsets provided must be -// relative to the same buffer until copyQuotedBuffer is called. -func (ns *objectNameStack) replaceLastQuotedOffset(i int) { - // Use bit-wise inversion instead of naive multiplication by -1 to avoid - // ambiguity regarding zero (which is a valid offset into the names field). - // Bit-wise inversion is mathematically equivalent to -i-1, - // such that 0 becomes -1, 1 becomes -2, and so forth. - // This ensures that remote offsets are always negative. - ns.offsets[len(ns.offsets)-1] = ^i -} - -// replaceLastUnquotedName replaces the last name with the provided name. -// -// Invariant: Must call copyQuotedBuffer beforehand. -func (ns *objectNameStack) replaceLastUnquotedName(s string) { - ns.ensureCopiedBuffer() - var startOffset int - if len(ns.offsets) > 1 { - startOffset = ns.offsets[len(ns.offsets)-2] - } - ns.unquotedNames = append(ns.unquotedNames[:startOffset], s...) - ns.offsets[len(ns.offsets)-1] = len(ns.unquotedNames) -} - -// clearLast removes any name in the last JSON object. -// It is semantically equivalent to ns.push followed by ns.pop. -func (ns *objectNameStack) clearLast() { - ns.offsets[len(ns.offsets)-1] = invalidOffset -} - -// pop ascends out of a nested JSON object. -func (ns *objectNameStack) pop() { - ns.offsets = ns.offsets[:len(ns.offsets)-1] -} - -// copyQuotedBuffer copies names from the remote buffer into the local names -// buffer so that there are no more offset references into the remote buffer. -// This allows the remote buffer to change contents without affecting -// the names that this data structure is trying to remember. -func (ns *objectNameStack) copyQuotedBuffer(b []byte) { - // Find the first negative offset. - var i int - for i = len(ns.offsets) - 1; i >= 0 && ns.offsets[i] < 0; i-- { - continue - } - - // Copy each name from the remote buffer into the local buffer. - for i = i + 1; i < len(ns.offsets); i++ { - if i == len(ns.offsets)-1 && ns.offsets[i] == invalidOffset { - if i == 0 { - ns.offsets[i] = 0 - } else { - ns.offsets[i] = ns.offsets[i-1] - } - break // last JSON object had a push without any names - } - - // As a form of Hyrum proofing, we write an invalid character into the - // buffer to make misuse of Decoder.ReadToken more obvious. - // We need to undo that mutation here. - quotedName := b[^ns.offsets[i]:] - if quotedName[0] == invalidateBufferByte { - quotedName[0] = '"' - } - - // Append the unquoted name to the local buffer. - var startOffset int - if i > 0 { - startOffset = ns.offsets[i-1] - } - if n := consumeSimpleString(quotedName); n > 0 { - ns.unquotedNames = append(ns.unquotedNames[:startOffset], quotedName[len(`"`):n-len(`"`)]...) - } else { - ns.unquotedNames, _ = unescapeString(ns.unquotedNames[:startOffset], quotedName) - } - ns.offsets[i] = len(ns.unquotedNames) - } -} - -func (ns *objectNameStack) ensureCopiedBuffer() { - if len(ns.offsets) > 0 && ns.offsets[len(ns.offsets)-1] < 0 { - panic("BUG: copyQuotedBuffer not called beforehand") - } -} - -// objectNamespaceStack is a stack of object namespaces. -// This data structure assists in detecting duplicate names. -type objectNamespaceStack []objectNamespace - -// reset resets the object namespace stack. -func (nss *objectNamespaceStack) reset() { - if cap(*nss) > 1<<10 { - *nss = nil - } - *nss = (*nss)[:0] -} - -// push starts a new namespace for a nested JSON object. -func (nss *objectNamespaceStack) push() { - if cap(*nss) > len(*nss) { - *nss = (*nss)[:len(*nss)+1] - nss.last().reset() - } else { - *nss = append(*nss, objectNamespace{}) - } -} - -// last returns a pointer to the last JSON object namespace. -func (nss objectNamespaceStack) last() *objectNamespace { - return &nss[len(nss)-1] -} - -// pop terminates the namespace for a nested JSON object. -func (nss *objectNamespaceStack) pop() { - *nss = (*nss)[:len(*nss)-1] -} - -// objectNamespace is the namespace for a JSON object. -// In contrast to objectNameStack, this needs to remember a all names -// per JSON object. -// -// The zero value is an empty namespace ready for use. -type objectNamespace struct { - // It relies on a linear search over all the names before switching - // to use a Go map for direct lookup. - - // endOffsets is a list of offsets to the end of each name in buffers. - // The length of offsets is the number of names in the namespace. - endOffsets []uint - // allUnquotedNames is a back-to-back concatenation of every name in the namespace. - allUnquotedNames []byte - // mapNames is a Go map containing every name in the namespace. - // Only valid if non-nil. - mapNames map[string]struct{} -} - -// reset resets the namespace to be empty. -func (ns *objectNamespace) reset() { - ns.endOffsets = ns.endOffsets[:0] - ns.allUnquotedNames = ns.allUnquotedNames[:0] - ns.mapNames = nil - if cap(ns.endOffsets) > 1<<6 { - ns.endOffsets = nil // avoid pinning arbitrarily large amounts of memory - } - if cap(ns.allUnquotedNames) > 1<<10 { - ns.allUnquotedNames = nil // avoid pinning arbitrarily large amounts of memory - } -} - -// length reports the number of names in the namespace. -func (ns *objectNamespace) length() int { - return len(ns.endOffsets) -} - -// getUnquoted retrieves the ith unquoted name in the namespace. -func (ns *objectNamespace) getUnquoted(i int) []byte { - if i == 0 { - return ns.allUnquotedNames[:ns.endOffsets[0]] - } else { - return ns.allUnquotedNames[ns.endOffsets[i-1]:ns.endOffsets[i-0]] - } -} - -// lastUnquoted retrieves the last name in the namespace. -func (ns *objectNamespace) lastUnquoted() []byte { - return ns.getUnquoted(ns.length() - 1) -} - -// insertQuoted inserts a name and reports whether it was inserted, -// which only occurs if name is not already in the namespace. -// The provided name must be a valid JSON string. -func (ns *objectNamespace) insertQuoted(name []byte, isVerbatim bool) bool { - if isVerbatim { - name = name[len(`"`) : len(name)-len(`"`)] - } - return ns.insert(name, !isVerbatim) -} -func (ns *objectNamespace) insertUnquoted(name []byte) bool { - return ns.insert(name, false) -} -func (ns *objectNamespace) insert(name []byte, quoted bool) bool { - var allNames []byte - if quoted { - allNames, _ = unescapeString(ns.allUnquotedNames, name) - } else { - allNames = append(ns.allUnquotedNames, name...) - } - name = allNames[len(ns.allUnquotedNames):] - - // Switch to a map if the buffer is too large for linear search. - // This does not add the current name to the map. - if ns.mapNames == nil && (ns.length() > 64 || len(ns.allUnquotedNames) > 1024) { - ns.mapNames = make(map[string]struct{}) - var startOffset uint - for _, endOffset := range ns.endOffsets { - name := ns.allUnquotedNames[startOffset:endOffset] - ns.mapNames[string(name)] = struct{}{} // allocates a new string - startOffset = endOffset - } - } - - if ns.mapNames == nil { - // Perform linear search over the buffer to find matching names. - // It provides O(n) lookup, but does not require any allocations. - var startOffset uint - for _, endOffset := range ns.endOffsets { - if string(ns.allUnquotedNames[startOffset:endOffset]) == string(name) { - return false - } - startOffset = endOffset - } - } else { - // Use the map if it is populated. - // It provides O(1) lookup, but requires a string allocation per name. - if _, ok := ns.mapNames[string(name)]; ok { - return false - } - ns.mapNames[string(name)] = struct{}{} // allocates a new string - } - - ns.allUnquotedNames = allNames - ns.endOffsets = append(ns.endOffsets, uint(len(ns.allUnquotedNames))) - return true -} - -// removeLast removes the last name in the namespace. -func (ns *objectNamespace) removeLast() { - if ns.mapNames != nil { - delete(ns.mapNames, string(ns.lastUnquoted())) - } - if ns.length()-1 == 0 { - ns.endOffsets = ns.endOffsets[:0] - ns.allUnquotedNames = ns.allUnquotedNames[:0] - } else { - ns.endOffsets = ns.endOffsets[:ns.length()-1] - ns.allUnquotedNames = ns.allUnquotedNames[:ns.endOffsets[ns.length()-1]] - } -} - -type uintSet64 uint64 - -func (s uintSet64) has(i uint) bool { return s&(1< 0 } -func (s *uintSet64) set(i uint) { *s |= 1 << i } - -// uintSet is a set of unsigned integers. -// It is optimized for most integers being close to zero. -type uintSet struct { - lo uintSet64 - hi []uintSet64 -} - -// has reports whether i is in the set. -func (s *uintSet) has(i uint) bool { - if i < 64 { - return s.lo.has(i) - } else { - i -= 64 - iHi, iLo := int(i/64), i%64 - return iHi < len(s.hi) && s.hi[iHi].has(iLo) - } -} - -// insert inserts i into the set and reports whether it was the first insertion. -func (s *uintSet) insert(i uint) bool { - // TODO: Make this inlineable at least for the lower 64-bit case. - if i < 64 { - has := s.lo.has(i) - s.lo.set(i) - return !has - } else { - i -= 64 - iHi, iLo := int(i/64), i%64 - if iHi >= len(s.hi) { - s.hi = append(s.hi, make([]uintSet64, iHi+1-len(s.hi))...) - s.hi = s.hi[:cap(s.hi)] - } - has := s.hi[iHi].has(iLo) - s.hi[iHi].set(iLo) - return !has - } -} diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/token.go b/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/token.go deleted file mode 100644 index 9acba7dad..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/token.go +++ /dev/null @@ -1,522 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package json - -import ( - "math" - "strconv" -) - -// NOTE: Token is analogous to v1 json.Token. - -const ( - maxInt64 = math.MaxInt64 - minInt64 = math.MinInt64 - maxUint64 = math.MaxUint64 - minUint64 = 0 // for consistency and readability purposes - - invalidTokenPanic = "invalid json.Token; it has been voided by a subsequent json.Decoder call" -) - -// Token represents a lexical JSON token, which may be one of the following: -// - a JSON literal (i.e., null, true, or false) -// - a JSON string (e.g., "hello, world!") -// - a JSON number (e.g., 123.456) -// - a start or end delimiter for a JSON object (i.e., { or } ) -// - a start or end delimiter for a JSON array (i.e., [ or ] ) -// -// A Token cannot represent entire array or object values, while a RawValue can. -// There is no Token to represent commas and colons since -// these structural tokens can be inferred from the surrounding context. -type Token struct { - nonComparable - - // Tokens can exist in either a "raw" or an "exact" form. - // Tokens produced by the Decoder are in the "raw" form. - // Tokens returned by constructors are usually in the "exact" form. - // The Encoder accepts Tokens in either the "raw" or "exact" form. - // - // The following chart shows the possible values for each Token type: - // ╔═════════════════╦════════════╤════════════╤════════════╗ - // ║ Token type ║ raw field │ str field │ num field ║ - // ╠═════════════════╬════════════╪════════════╪════════════╣ - // ║ null (raw) ║ "null" │ "" │ 0 ║ - // ║ false (raw) ║ "false" │ "" │ 0 ║ - // ║ true (raw) ║ "true" │ "" │ 0 ║ - // ║ string (raw) ║ non-empty │ "" │ offset ║ - // ║ string (string) ║ nil │ non-empty │ 0 ║ - // ║ number (raw) ║ non-empty │ "" │ offset ║ - // ║ number (float) ║ nil │ "f" │ non-zero ║ - // ║ number (int64) ║ nil │ "i" │ non-zero ║ - // ║ number (uint64) ║ nil │ "u" │ non-zero ║ - // ║ object (delim) ║ "{" or "}" │ "" │ 0 ║ - // ║ array (delim) ║ "[" or "]" │ "" │ 0 ║ - // ╚═════════════════╩════════════╧════════════╧════════════╝ - // - // Notes: - // - For tokens stored in "raw" form, the num field contains the - // absolute offset determined by raw.previousOffsetStart(). - // The buffer itself is stored in raw.previousBuffer(). - // - JSON literals and structural characters are always in the "raw" form. - // - JSON strings and numbers can be in either "raw" or "exact" forms. - // - The exact zero value of JSON strings and numbers in the "exact" forms - // have ambiguous representation. Thus, they are always represented - // in the "raw" form. - - // raw contains a reference to the raw decode buffer. - // If non-nil, then its value takes precedence over str and num. - // It is only valid if num == raw.previousOffsetStart(). - raw *decodeBuffer - - // str is the unescaped JSON string if num is zero. - // Otherwise, it is "f", "i", or "u" if num should be interpreted - // as a float64, int64, or uint64, respectively. - str string - - // num is a float64, int64, or uint64 stored as a uint64 value. - // It is non-zero for any JSON number in the "exact" form. - num uint64 -} - -// TODO: Does representing 1-byte delimiters as *decodeBuffer cause performance issues? - -var ( - Null Token = rawToken("null") - False Token = rawToken("false") - True Token = rawToken("true") - - ObjectStart Token = rawToken("{") - ObjectEnd Token = rawToken("}") - ArrayStart Token = rawToken("[") - ArrayEnd Token = rawToken("]") - - zeroString Token = rawToken(`""`) - zeroNumber Token = rawToken(`0`) - - nanString Token = String("NaN") - pinfString Token = String("Infinity") - ninfString Token = String("-Infinity") -) - -func rawToken(s string) Token { - return Token{raw: &decodeBuffer{buf: []byte(s), prevStart: 0, prevEnd: len(s)}} -} - -// Bool constructs a Token representing a JSON boolean. -func Bool(b bool) Token { - if b { - return True - } - return False -} - -// String constructs a Token representing a JSON string. -// The provided string should contain valid UTF-8, otherwise invalid characters -// may be mangled as the Unicode replacement character. -func String(s string) Token { - if len(s) == 0 { - return zeroString - } - return Token{str: s} -} - -// Float constructs a Token representing a JSON number. -// The values NaN, +Inf, and -Inf will be represented -// as a JSON string with the values "NaN", "Infinity", and "-Infinity". -func Float(n float64) Token { - switch { - case math.Float64bits(n) == 0: - return zeroNumber - case math.IsNaN(n): - return nanString - case math.IsInf(n, +1): - return pinfString - case math.IsInf(n, -1): - return ninfString - } - return Token{str: "f", num: math.Float64bits(n)} -} - -// Int constructs a Token representing a JSON number from an int64. -func Int(n int64) Token { - if n == 0 { - return zeroNumber - } - return Token{str: "i", num: uint64(n)} -} - -// Uint constructs a Token representing a JSON number from a uint64. -func Uint(n uint64) Token { - if n == 0 { - return zeroNumber - } - return Token{str: "u", num: uint64(n)} -} - -// Clone makes a copy of the Token such that its value remains valid -// even after a subsequent Decoder.Read call. -func (t Token) Clone() Token { - // TODO: Allow caller to avoid any allocations? - if raw := t.raw; raw != nil { - // Avoid copying globals. - if t.raw.prevStart == 0 { - switch t.raw { - case Null.raw: - return Null - case False.raw: - return False - case True.raw: - return True - case ObjectStart.raw: - return ObjectStart - case ObjectEnd.raw: - return ObjectEnd - case ArrayStart.raw: - return ArrayStart - case ArrayEnd.raw: - return ArrayEnd - } - } - - if uint64(raw.previousOffsetStart()) != t.num { - panic(invalidTokenPanic) - } - // TODO(https://go.dev/issue/45038): Use bytes.Clone. - buf := append([]byte(nil), raw.previousBuffer()...) - return Token{raw: &decodeBuffer{buf: buf, prevStart: 0, prevEnd: len(buf)}} - } - return t -} - -// Bool returns the value for a JSON boolean. -// It panics if the token kind is not a JSON boolean. -func (t Token) Bool() bool { - switch t.raw { - case True.raw: - return true - case False.raw: - return false - default: - panic("invalid JSON token kind: " + t.Kind().String()) - } -} - -// appendString appends a JSON string to dst and returns it. -// It panics if t is not a JSON string. -func (t Token) appendString(dst []byte, validateUTF8, preserveRaw bool, escapeRune func(rune) bool) ([]byte, error) { - if raw := t.raw; raw != nil { - // Handle raw string value. - buf := raw.previousBuffer() - if Kind(buf[0]) == '"' { - if escapeRune == nil && consumeSimpleString(buf) == len(buf) { - return append(dst, buf...), nil - } - dst, _, err := reformatString(dst, buf, validateUTF8, preserveRaw, escapeRune) - return dst, err - } - } else if len(t.str) != 0 && t.num == 0 { - // Handle exact string value. - return appendString(dst, t.str, validateUTF8, escapeRune) - } - - panic("invalid JSON token kind: " + t.Kind().String()) -} - -// String returns the unescaped string value for a JSON string. -// For other JSON kinds, this returns the raw JSON representation. -func (t Token) String() string { - // This is inlinable to take advantage of "function outlining". - // This avoids an allocation for the string(b) conversion - // if the caller does not use the string in an escaping manner. - // See https://blog.filippo.io/efficient-go-apis-with-the-inliner/ - s, b := t.string() - if len(b) > 0 { - return string(b) - } - return s -} -func (t Token) string() (string, []byte) { - if raw := t.raw; raw != nil { - if uint64(raw.previousOffsetStart()) != t.num { - panic(invalidTokenPanic) - } - buf := raw.previousBuffer() - if buf[0] == '"' { - // TODO: Preserve valueFlags in Token? - isVerbatim := consumeSimpleString(buf) == len(buf) - return "", unescapeStringMayCopy(buf, isVerbatim) - } - // Handle tokens that are not JSON strings for fmt.Stringer. - return "", buf - } - if len(t.str) != 0 && t.num == 0 { - return t.str, nil - } - // Handle tokens that are not JSON strings for fmt.Stringer. - if t.num > 0 { - switch t.str[0] { - case 'f': - return string(appendNumber(nil, math.Float64frombits(t.num), 64)), nil - case 'i': - return strconv.FormatInt(int64(t.num), 10), nil - case 'u': - return strconv.FormatUint(uint64(t.num), 10), nil - } - } - return "", nil -} - -// appendNumber appends a JSON number to dst and returns it. -// It panics if t is not a JSON number. -func (t Token) appendNumber(dst []byte, canonicalize bool) ([]byte, error) { - if raw := t.raw; raw != nil { - // Handle raw number value. - buf := raw.previousBuffer() - if Kind(buf[0]).normalize() == '0' { - if !canonicalize { - return append(dst, buf...), nil - } - dst, _, err := reformatNumber(dst, buf, canonicalize) - return dst, err - } - } else if t.num != 0 { - // Handle exact number value. - switch t.str[0] { - case 'f': - return appendNumber(dst, math.Float64frombits(t.num), 64), nil - case 'i': - return strconv.AppendInt(dst, int64(t.num), 10), nil - case 'u': - return strconv.AppendUint(dst, uint64(t.num), 10), nil - } - } - - panic("invalid JSON token kind: " + t.Kind().String()) -} - -// Float returns the floating-point value for a JSON number. -// It returns a NaN, +Inf, or -Inf value for any JSON string -// with the values "NaN", "Infinity", or "-Infinity". -// It panics for all other cases. -func (t Token) Float() float64 { - if raw := t.raw; raw != nil { - // Handle raw number value. - if uint64(raw.previousOffsetStart()) != t.num { - panic(invalidTokenPanic) - } - buf := raw.previousBuffer() - if Kind(buf[0]).normalize() == '0' { - fv, _ := parseFloat(buf, 64) - return fv - } - } else if t.num != 0 { - // Handle exact number value. - switch t.str[0] { - case 'f': - return math.Float64frombits(t.num) - case 'i': - return float64(int64(t.num)) - case 'u': - return float64(uint64(t.num)) - } - } - - // Handle string values with "NaN", "Infinity", or "-Infinity". - if t.Kind() == '"' { - switch t.String() { - case "NaN": - return math.NaN() - case "Infinity": - return math.Inf(+1) - case "-Infinity": - return math.Inf(-1) - } - } - - panic("invalid JSON token kind: " + t.Kind().String()) -} - -// Int returns the signed integer value for a JSON number. -// The fractional component of any number is ignored (truncation toward zero). -// Any number beyond the representation of an int64 will be saturated -// to the closest representable value. -// It panics if the token kind is not a JSON number. -func (t Token) Int() int64 { - if raw := t.raw; raw != nil { - // Handle raw integer value. - if uint64(raw.previousOffsetStart()) != t.num { - panic(invalidTokenPanic) - } - neg := false - buf := raw.previousBuffer() - if len(buf) > 0 && buf[0] == '-' { - neg, buf = true, buf[1:] - } - if numAbs, ok := parseDecUint(buf); ok { - if neg { - if numAbs > -minInt64 { - return minInt64 - } - return -1 * int64(numAbs) - } else { - if numAbs > +maxInt64 { - return maxInt64 - } - return +1 * int64(numAbs) - } - } - } else if t.num != 0 { - // Handle exact integer value. - switch t.str[0] { - case 'i': - return int64(t.num) - case 'u': - if t.num > maxInt64 { - return maxInt64 - } - return int64(t.num) - } - } - - // Handle JSON number that is a floating-point value. - if t.Kind() == '0' { - switch fv := t.Float(); { - case fv >= maxInt64: - return maxInt64 - case fv <= minInt64: - return minInt64 - default: - return int64(fv) // truncation toward zero - } - } - - panic("invalid JSON token kind: " + t.Kind().String()) -} - -// Uint returns the unsigned integer value for a JSON number. -// The fractional component of any number is ignored (truncation toward zero). -// Any number beyond the representation of an uint64 will be saturated -// to the closest representable value. -// It panics if the token kind is not a JSON number. -func (t Token) Uint() uint64 { - // NOTE: This accessor returns 0 for any negative JSON number, - // which might be surprising, but is at least consistent with the behavior - // of saturating out-of-bounds numbers to the closest representable number. - - if raw := t.raw; raw != nil { - // Handle raw integer value. - if uint64(raw.previousOffsetStart()) != t.num { - panic(invalidTokenPanic) - } - neg := false - buf := raw.previousBuffer() - if len(buf) > 0 && buf[0] == '-' { - neg, buf = true, buf[1:] - } - if num, ok := parseDecUint(buf); ok { - if neg { - return minUint64 - } - return num - } - } else if t.num != 0 { - // Handle exact integer value. - switch t.str[0] { - case 'u': - return t.num - case 'i': - if int64(t.num) < minUint64 { - return minUint64 - } - return uint64(int64(t.num)) - } - } - - // Handle JSON number that is a floating-point value. - if t.Kind() == '0' { - switch fv := t.Float(); { - case fv >= maxUint64: - return maxUint64 - case fv <= minUint64: - return minUint64 - default: - return uint64(fv) // truncation toward zero - } - } - - panic("invalid JSON token kind: " + t.Kind().String()) -} - -// Kind returns the token kind. -func (t Token) Kind() Kind { - switch { - case t.raw != nil: - raw := t.raw - if uint64(raw.previousOffsetStart()) != t.num { - panic(invalidTokenPanic) - } - return Kind(t.raw.buf[raw.prevStart]).normalize() - case t.num != 0: - return '0' - case len(t.str) != 0: - return '"' - default: - return invalidKind - } -} - -// Kind represents each possible JSON token kind with a single byte, -// which is conveniently the first byte of that kind's grammar -// with the restriction that numbers always be represented with '0': -// -// - 'n': null -// - 'f': false -// - 't': true -// - '"': string -// - '0': number -// - '{': object start -// - '}': object end -// - '[': array start -// - ']': array end -// -// An invalid kind is usually represented using 0, -// but may be non-zero due to invalid JSON data. -type Kind byte - -const invalidKind Kind = 0 - -// String prints the kind in a humanly readable fashion. -func (k Kind) String() string { - switch k { - case 'n': - return "null" - case 'f': - return "false" - case 't': - return "true" - case '"': - return "string" - case '0': - return "number" - case '{': - return "{" - case '}': - return "}" - case '[': - return "[" - case ']': - return "]" - default: - return "" - } -} - -// normalize coalesces all possible starting characters of a number as just '0'. -func (k Kind) normalize() Kind { - if k == '-' || ('0' <= k && k <= '9') { - return '0' - } - return k -} diff --git a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/value.go b/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/value.go deleted file mode 100644 index e0bd1b31d..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/value.go +++ /dev/null @@ -1,381 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package json - -import ( - "bytes" - "errors" - "io" - "sort" - "sync" - "unicode/utf16" - "unicode/utf8" -) - -// NOTE: RawValue is analogous to v1 json.RawMessage. - -// RawValue represents a single raw JSON value, which may be one of the following: -// - a JSON literal (i.e., null, true, or false) -// - a JSON string (e.g., "hello, world!") -// - a JSON number (e.g., 123.456) -// - an entire JSON object (e.g., {"fizz":"buzz"} ) -// - an entire JSON array (e.g., [1,2,3] ) -// -// RawValue can represent entire array or object values, while Token cannot. -// RawValue may contain leading and/or trailing whitespace. -type RawValue []byte - -// Clone returns a copy of v. -func (v RawValue) Clone() RawValue { - if v == nil { - return nil - } - return append(RawValue{}, v...) -} - -// String returns the string formatting of v. -func (v RawValue) String() string { - if v == nil { - return "null" - } - return string(v) -} - -// IsValid reports whether the raw JSON value is syntactically valid -// according to RFC 7493. -// -// It verifies whether the input is properly encoded as UTF-8, -// that escape sequences within strings decode to valid Unicode codepoints, and -// that all names in each object are unique. -// It does not verify whether numbers are representable within the limits -// of any common numeric type (e.g., float64, int64, or uint64). -func (v RawValue) IsValid() bool { - d := getBufferedDecoder(v, DecodeOptions{}) - defer putBufferedDecoder(d) - _, errVal := d.ReadValue() - _, errEOF := d.ReadToken() - return errVal == nil && errEOF == io.EOF -} - -// Compact removes all whitespace from the raw JSON value. -// -// It does not reformat JSON strings to use any other representation. -// It is guaranteed to succeed if the input is valid. -// If the value is already compacted, then the buffer is not mutated. -func (v *RawValue) Compact() error { - return v.reformat(false, false, "", "") -} - -// Indent reformats the whitespace in the raw JSON value so that each element -// in a JSON object or array begins on a new, indented line beginning with -// prefix followed by one or more copies of indent according to the nesting. -// The value does not begin with the prefix nor any indention, -// to make it easier to embed inside other formatted JSON data. -// -// It does not reformat JSON strings to use any other representation. -// It is guaranteed to succeed if the input is valid. -// If the value is already indented properly, then the buffer is not mutated. -func (v *RawValue) Indent(prefix, indent string) error { - return v.reformat(false, true, prefix, indent) -} - -// Canonicalize canonicalizes the raw JSON value according to the -// JSON Canonicalization Scheme (JCS) as defined by RFC 8785 -// where it produces a stable representation of a JSON value. -// -// The output stability is dependent on the stability of the application data -// (see RFC 8785, Appendix E). It cannot produce stable output from -// fundamentally unstable input. For example, if the JSON value -// contains ephemeral data (e.g., a frequently changing timestamp), -// then the value is still unstable regardless of whether this is called. -// -// Note that JCS treats all JSON numbers as IEEE 754 double precision numbers. -// Any numbers with precision beyond what is representable by that form -// will lose their precision when canonicalized. For example, integer values -// beyond ±2⁵³ will lose their precision. It is recommended that -// int64 and uint64 data types be represented as a JSON string. -// -// It is guaranteed to succeed if the input is valid. -// If the value is already canonicalized, then the buffer is not mutated. -func (v *RawValue) Canonicalize() error { - return v.reformat(true, false, "", "") -} - -// TODO: Instead of implementing the v1 Marshaler/Unmarshaler, -// consider implementing the v2 versions instead. - -// MarshalJSON returns v as the JSON encoding of v. -// It returns the stored value as the raw JSON output without any validation. -// If v is nil, then this returns a JSON null. -func (v RawValue) MarshalJSON() ([]byte, error) { - // NOTE: This matches the behavior of v1 json.RawMessage.MarshalJSON. - if v == nil { - return []byte("null"), nil - } - return v, nil -} - -// UnmarshalJSON sets v as the JSON encoding of b. -// It stores a copy of the provided raw JSON input without any validation. -func (v *RawValue) UnmarshalJSON(b []byte) error { - // NOTE: This matches the behavior of v1 json.RawMessage.UnmarshalJSON. - if v == nil { - return errors.New("json.RawValue: UnmarshalJSON on nil pointer") - } - *v = append((*v)[:0], b...) - return nil -} - -// Kind returns the starting token kind. -// For a valid value, this will never include '}' or ']'. -func (v RawValue) Kind() Kind { - if v := v[consumeWhitespace(v):]; len(v) > 0 { - return Kind(v[0]).normalize() - } - return invalidKind -} - -func (v *RawValue) reformat(canonical, multiline bool, prefix, indent string) error { - var eo EncodeOptions - if canonical { - eo.AllowInvalidUTF8 = false // per RFC 8785, section 3.2.4 - eo.AllowDuplicateNames = false // per RFC 8785, section 3.1 - eo.canonicalizeNumbers = true // per RFC 8785, section 3.2.2.3 - eo.EscapeRune = nil // per RFC 8785, section 3.2.2.2 - eo.multiline = false // per RFC 8785, section 3.2.1 - } else { - if s := trimLeftSpaceTab(prefix); len(s) > 0 { - panic("json: invalid character " + quoteRune([]byte(s)) + " in indent prefix") - } - if s := trimLeftSpaceTab(indent); len(s) > 0 { - panic("json: invalid character " + quoteRune([]byte(s)) + " in indent") - } - eo.AllowInvalidUTF8 = true - eo.AllowDuplicateNames = true - eo.preserveRawStrings = true - eo.multiline = multiline // in case indent is empty - eo.IndentPrefix = prefix - eo.Indent = indent - } - eo.omitTopLevelNewline = true - - // Write the entire value to reformat all tokens and whitespace. - e := getBufferedEncoder(eo) - defer putBufferedEncoder(e) - if err := e.WriteValue(*v); err != nil { - return err - } - - // For canonical output, we may need to reorder object members. - if canonical { - // Obtain a buffered encoder just to use its internal buffer as - // a scratch buffer in reorderObjects for reordering object members. - e2 := getBufferedEncoder(EncodeOptions{}) - defer putBufferedEncoder(e2) - - // Disable redundant checks performed earlier during encoding. - d := getBufferedDecoder(e.buf, DecodeOptions{AllowInvalidUTF8: true, AllowDuplicateNames: true}) - defer putBufferedDecoder(d) - reorderObjects(d, &e2.buf) // per RFC 8785, section 3.2.3 - } - - // Store the result back into the value if different. - if !bytes.Equal(*v, e.buf) { - *v = append((*v)[:0], e.buf...) - } - return nil -} - -func trimLeftSpaceTab(s string) string { - for i, r := range s { - switch r { - case ' ', '\t': - default: - return s[i:] - } - } - return "" -} - -type memberName struct { - // name is the unescaped name. - name []byte - // before and after are byte offsets into Decoder.buf that represents - // the entire name/value pair. It may contain leading commas. - before, after int64 -} - -var memberNamePool = sync.Pool{New: func() any { return new(memberNames) }} - -func getMemberNames() *memberNames { - ns := memberNamePool.Get().(*memberNames) - *ns = (*ns)[:0] - return ns -} -func putMemberNames(ns *memberNames) { - if cap(*ns) < 1<<10 { - for i := range *ns { - (*ns)[i] = memberName{} // avoid pinning name - } - memberNamePool.Put(ns) - } -} - -type memberNames []memberName - -func (m *memberNames) Len() int { return len(*m) } -func (m *memberNames) Less(i, j int) bool { return lessUTF16((*m)[i].name, (*m)[j].name) } -func (m *memberNames) Swap(i, j int) { (*m)[i], (*m)[j] = (*m)[j], (*m)[i] } - -// reorderObjects recursively reorders all object members in place -// according to the ordering specified in RFC 8785, section 3.2.3. -// -// Pre-conditions: -// - The value is valid (i.e., no decoder errors should ever occur). -// - The value is compact (i.e., no whitespace is present). -// - Initial call is provided a Decoder reading from the start of v. -// -// Post-conditions: -// - Exactly one JSON value is read from the Decoder. -// - All fully-parsed JSON objects are reordered by directly moving -// the members in the value buffer. -// -// The runtime is approximately O(n·log(n)) + O(m·log(m)), -// where n is len(v) and m is the total number of object members. -func reorderObjects(d *Decoder, scratch *[]byte) { - switch tok, _ := d.ReadToken(); tok.Kind() { - case '{': - // Iterate and collect the name and offsets for every object member. - members := getMemberNames() - defer putMemberNames(members) - var prevName []byte - isSorted := true - - beforeBody := d.InputOffset() // offset after '{' - for d.PeekKind() != '}' { - beforeName := d.InputOffset() - var flags valueFlags - name, _ := d.readValue(&flags) - name = unescapeStringMayCopy(name, flags.isVerbatim()) - reorderObjects(d, scratch) - afterValue := d.InputOffset() - - if isSorted && len(*members) > 0 { - isSorted = lessUTF16(prevName, []byte(name)) - } - *members = append(*members, memberName{name, beforeName, afterValue}) - prevName = name - } - afterBody := d.InputOffset() // offset before '}' - d.ReadToken() - - // Sort the members; return early if it's already sorted. - if isSorted { - return - } - // TODO(https://go.dev/issue/47619): Use slices.Sort. - sort.Sort(members) - - // Append the reordered members to a new buffer, - // then copy the reordered members back over the original members. - // Avoid swapping in place since each member may be a different size - // where moving a member over a smaller member may corrupt the data - // for subsequent members before they have been moved. - // - // The following invariant must hold: - // sum([m.after-m.before for m in members]) == afterBody-beforeBody - sorted := (*scratch)[:0] - for i, member := range *members { - if d.buf[member.before] == ',' { - member.before++ // trim leading comma - } - sorted = append(sorted, d.buf[member.before:member.after]...) - if i < len(*members)-1 { - sorted = append(sorted, ',') // append trailing comma - } - } - if int(afterBody-beforeBody) != len(sorted) { - panic("BUG: length invariant violated") - } - copy(d.buf[beforeBody:afterBody], sorted) - - // Update scratch buffer to the largest amount ever used. - if len(sorted) > len(*scratch) { - *scratch = sorted - } - case '[': - for d.PeekKind() != ']' { - reorderObjects(d, scratch) - } - d.ReadToken() - } -} - -// lessUTF16 reports whether x is lexicographically less than y according -// to the UTF-16 codepoints of the UTF-8 encoded input strings. -// This implements the ordering specified in RFC 8785, section 3.2.3. -// The inputs must be valid UTF-8, otherwise this may panic. -func lessUTF16[Bytes []byte | string](x, y Bytes) bool { - // NOTE: This is an optimized, allocation-free implementation - // of lessUTF16Simple in fuzz_test.go. FuzzLessUTF16 verifies that the - // two implementations agree on the result of comparing any two strings. - - isUTF16Self := func(r rune) bool { - return ('\u0000' <= r && r <= '\uD7FF') || ('\uE000' <= r && r <= '\uFFFF') - } - - var invalidUTF8 bool - x0, y0 := x, y - for { - if len(x) == 0 || len(y) == 0 { - if len(x) == len(y) && invalidUTF8 { - return string(x0) < string(y0) - } - return len(x) < len(y) - } - - // ASCII fast-path. - if x[0] < utf8.RuneSelf || y[0] < utf8.RuneSelf { - if x[0] != y[0] { - return x[0] < y[0] - } - x, y = x[1:], y[1:] - continue - } - - // Decode next pair of runes as UTF-8. - // TODO(https://go.dev/issue/56948): Use a generic implementation - // of utf8.DecodeRune, or rely on a compiler optimization to statically - // hide the cost of a type switch (https://go.dev/issue/57072). - var rx, ry rune - var nx, ny int - switch any(x).(type) { - case string: - rx, nx = utf8.DecodeRuneInString(string(x)) - ry, ny = utf8.DecodeRuneInString(string(y)) - case []byte: - rx, nx = utf8.DecodeRune([]byte(x)) - ry, ny = utf8.DecodeRune([]byte(y)) - } - - selfx := isUTF16Self(rx) - selfy := isUTF16Self(ry) - switch { - // The x rune is a single UTF-16 codepoint, while - // the y rune is a surrogate pair of UTF-16 codepoints. - case selfx && !selfy: - ry, _ = utf16.EncodeRune(ry) - // The y rune is a single UTF-16 codepoint, while - // the x rune is a surrogate pair of UTF-16 codepoints. - case selfy && !selfx: - rx, _ = utf16.EncodeRune(rx) - } - if rx != ry { - return rx < ry - } - invalidUTF8 = invalidUTF8 || (rx == utf8.RuneError && nx == 1) || (ry == utf8.RuneError && ny == 1) - x, y = x[nx:], y[ny:] - } -} diff --git a/vendor/k8s.io/kube-openapi/pkg/schemaconv/openapi.go b/vendor/k8s.io/kube-openapi/pkg/schemaconv/openapi.go deleted file mode 100644 index 61141a500..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/schemaconv/openapi.go +++ /dev/null @@ -1,260 +0,0 @@ -/* -Copyright 2022 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package schemaconv - -import ( - "errors" - "path" - "strings" - - "k8s.io/kube-openapi/pkg/validation/spec" - "sigs.k8s.io/structured-merge-diff/v4/schema" -) - -// ToSchemaFromOpenAPI converts a directory of OpenAPI schemas to an smd Schema. -// - models: a map from definition name to OpenAPI V3 structural schema for each definition. -// Key in map is used to resolve references in the schema. -// - preserveUnknownFields: flag indicating whether unknown fields in all schemas should be preserved. -// - returns: nil and an error if there is a parse error, or if schema does not satisfy a -// required structural schema invariant for conversion. If no error, returns -// a new smd schema. -// -// Schema should be validated as structural before using with this function, or -// there may be information lost. -func ToSchemaFromOpenAPI(models map[string]*spec.Schema, preserveUnknownFields bool) (*schema.Schema, error) { - c := convert{ - preserveUnknownFields: preserveUnknownFields, - output: &schema.Schema{}, - } - - for name, spec := range models { - // Skip/Ignore top-level references - if len(spec.Ref.String()) > 0 { - continue - } - - var a schema.Atom - - // Hard-coded schemas for now as proto_models implementation functions. - // https://github.com/kubernetes/kube-openapi/issues/364 - if name == quantityResource { - a = schema.Atom{ - Scalar: untypedDef.Atom.Scalar, - } - } else if name == rawExtensionResource { - a = untypedDef.Atom - } else { - c2 := c.push(name, &a) - c2.visitSpec(spec) - c.pop(c2) - } - - c.insertTypeDef(name, a) - } - - if len(c.errorMessages) > 0 { - return nil, errors.New(strings.Join(c.errorMessages, "\n")) - } - - c.addCommonTypes() - return c.output, nil -} - -func (c *convert) visitSpec(m *spec.Schema) { - // Check if this schema opts its descendants into preserve-unknown-fields - if p, ok := m.Extensions["x-kubernetes-preserve-unknown-fields"]; ok && p == true { - c.preserveUnknownFields = true - } - a := c.top() - *a = c.parseSchema(m) -} - -func (c *convert) parseSchema(m *spec.Schema) schema.Atom { - // k8s-generated OpenAPI specs have historically used only one value for - // type and starting with OpenAPIV3 it is only allowed to be - // a single string. - typ := "" - if len(m.Type) > 0 { - typ = m.Type[0] - } - - // Structural Schemas produced by kubernetes follow very specific rules which - // we can use to infer the SMD type: - switch typ { - case "": - // According to Swagger docs: - // https://swagger.io/docs/specification/data-models/data-types/#any - // - // If no type is specified, it is equivalent to accepting any type. - return schema.Atom{ - Scalar: ptr(schema.Scalar("untyped")), - List: c.parseList(m), - Map: c.parseObject(m), - } - - case "object": - return schema.Atom{ - Map: c.parseObject(m), - } - case "array": - return schema.Atom{ - List: c.parseList(m), - } - case "integer", "boolean", "number", "string": - return convertPrimitive(typ, m.Format) - default: - c.reportError("unrecognized type: '%v'", typ) - return schema.Atom{ - Scalar: ptr(schema.Scalar("untyped")), - } - } -} - -func (c *convert) makeOpenAPIRef(specSchema *spec.Schema) schema.TypeRef { - refString := specSchema.Ref.String() - - // Special-case handling for $ref stored inside a single-element allOf - if len(refString) == 0 && len(specSchema.AllOf) == 1 && len(specSchema.AllOf[0].Ref.String()) > 0 { - refString = specSchema.AllOf[0].Ref.String() - } - - if _, n := path.Split(refString); len(n) > 0 { - //!TODO: Refactor the field ElementRelationship override - // we can generate the types with overrides ahead of time rather than - // requiring the hacky runtime support - // (could just create a normalized key struct containing all customizations - // to deduplicate) - mapRelationship, err := getMapElementRelationship(specSchema.Extensions) - if err != nil { - c.reportError(err.Error()) - } - - if len(mapRelationship) > 0 { - return schema.TypeRef{ - NamedType: &n, - ElementRelationship: &mapRelationship, - } - } - - return schema.TypeRef{ - NamedType: &n, - } - - } - var inlined schema.Atom - - // compute the type inline - c2 := c.push("inlined in "+c.currentName, &inlined) - c2.preserveUnknownFields = c.preserveUnknownFields - c2.visitSpec(specSchema) - c.pop(c2) - - return schema.TypeRef{ - Inlined: inlined, - } -} - -func (c *convert) parseObject(s *spec.Schema) *schema.Map { - var fields []schema.StructField - for name, member := range s.Properties { - fields = append(fields, schema.StructField{ - Name: name, - Type: c.makeOpenAPIRef(&member), - Default: member.Default, - }) - } - - // AdditionalProperties informs the schema of any "unknown" keys - // Unknown keys are enforced by the ElementType field. - elementType := func() schema.TypeRef { - if s.AdditionalProperties == nil { - // According to openAPI spec, an object without properties and without - // additionalProperties is assumed to be a free-form object. - if c.preserveUnknownFields || len(s.Properties) == 0 { - return schema.TypeRef{ - NamedType: &deducedName, - } - } - - // If properties are specified, do not implicitly allow unknown - // fields - return schema.TypeRef{} - } else if s.AdditionalProperties.Schema != nil { - // Unknown fields use the referred schema - return c.makeOpenAPIRef(s.AdditionalProperties.Schema) - - } else if s.AdditionalProperties.Allows { - // A boolean instead of a schema was provided. Deduce the - // type from the value provided at runtime. - return schema.TypeRef{ - NamedType: &deducedName, - } - } else { - // Additional Properties are explicitly disallowed by the user. - // Ensure element type is empty. - return schema.TypeRef{} - } - }() - - relationship, err := getMapElementRelationship(s.Extensions) - if err != nil { - c.reportError(err.Error()) - } - - return &schema.Map{ - Fields: fields, - ElementRelationship: relationship, - ElementType: elementType, - } -} - -func (c *convert) parseList(s *spec.Schema) *schema.List { - relationship, mapKeys, err := getListElementRelationship(s.Extensions) - if err != nil { - c.reportError(err.Error()) - } - elementType := func() schema.TypeRef { - if s.Items != nil { - if s.Items.Schema == nil || s.Items.Len() != 1 { - c.reportError("structural schema arrays must have exactly one member subtype") - return schema.TypeRef{ - NamedType: &deducedName, - } - } - - subSchema := s.Items.Schema - if subSchema == nil { - subSchema = &s.Items.Schemas[0] - } - return c.makeOpenAPIRef(subSchema) - } else if len(s.Type) > 0 && len(s.Type[0]) > 0 { - c.reportError("`items` must be specified on arrays") - } - - // A list with no items specified is treated as "untyped". - return schema.TypeRef{ - NamedType: &untypedName, - } - - }() - - return &schema.List{ - ElementRelationship: relationship, - Keys: mapKeys, - ElementType: elementType, - } -} diff --git a/vendor/k8s.io/kube-openapi/pkg/schemaconv/proto_models.go b/vendor/k8s.io/kube-openapi/pkg/schemaconv/proto_models.go deleted file mode 100644 index 2c6fd76a9..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/schemaconv/proto_models.go +++ /dev/null @@ -1,178 +0,0 @@ -/* -Copyright 2022 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package schemaconv - -import ( - "errors" - "path" - "strings" - - "k8s.io/kube-openapi/pkg/util/proto" - "sigs.k8s.io/structured-merge-diff/v4/schema" -) - -// ToSchema converts openapi definitions into a schema suitable for structured -// merge (i.e. kubectl apply v2). -func ToSchema(models proto.Models) (*schema.Schema, error) { - return ToSchemaWithPreserveUnknownFields(models, false) -} - -// ToSchemaWithPreserveUnknownFields converts openapi definitions into a schema suitable for structured -// merge (i.e. kubectl apply v2), it will preserve unknown fields if specified. -func ToSchemaWithPreserveUnknownFields(models proto.Models, preserveUnknownFields bool) (*schema.Schema, error) { - c := convert{ - preserveUnknownFields: preserveUnknownFields, - output: &schema.Schema{}, - } - for _, name := range models.ListModels() { - model := models.LookupModel(name) - - var a schema.Atom - c2 := c.push(name, &a) - model.Accept(c2) - c.pop(c2) - - c.insertTypeDef(name, a) - } - - if len(c.errorMessages) > 0 { - return nil, errors.New(strings.Join(c.errorMessages, "\n")) - } - - c.addCommonTypes() - return c.output, nil -} - -func (c *convert) makeRef(model proto.Schema, preserveUnknownFields bool) schema.TypeRef { - var tr schema.TypeRef - if r, ok := model.(*proto.Ref); ok { - if r.Reference() == "io.k8s.apimachinery.pkg.runtime.RawExtension" { - return schema.TypeRef{ - NamedType: &untypedName, - } - } - // reference a named type - _, n := path.Split(r.Reference()) - tr.NamedType = &n - - mapRelationship, err := getMapElementRelationship(model.GetExtensions()) - - if err != nil { - c.reportError(err.Error()) - } - - // empty string means unset. - if len(mapRelationship) > 0 { - tr.ElementRelationship = &mapRelationship - } - } else { - // compute the type inline - c2 := c.push("inlined in "+c.currentName, &tr.Inlined) - c2.preserveUnknownFields = preserveUnknownFields - model.Accept(c2) - c.pop(c2) - - if tr == (schema.TypeRef{}) { - // emit warning? - tr.NamedType = &untypedName - } - } - return tr -} - -func (c *convert) VisitKind(k *proto.Kind) { - preserveUnknownFields := c.preserveUnknownFields - if p, ok := k.GetExtensions()["x-kubernetes-preserve-unknown-fields"]; ok && p == true { - preserveUnknownFields = true - } - - a := c.top() - a.Map = &schema.Map{} - for _, name := range k.FieldOrder { - member := k.Fields[name] - tr := c.makeRef(member, preserveUnknownFields) - a.Map.Fields = append(a.Map.Fields, schema.StructField{ - Name: name, - Type: tr, - Default: member.GetDefault(), - }) - } - - unions, err := makeUnions(k.GetExtensions()) - if err != nil { - c.reportError(err.Error()) - return - } - // TODO: We should check that the fields and discriminator - // specified in the union are actual fields in the struct. - a.Map.Unions = unions - - if preserveUnknownFields { - a.Map.ElementType = schema.TypeRef{ - NamedType: &deducedName, - } - } - - a.Map.ElementRelationship, err = getMapElementRelationship(k.GetExtensions()) - if err != nil { - c.reportError(err.Error()) - } -} - -func (c *convert) VisitArray(a *proto.Array) { - relationship, mapKeys, err := getListElementRelationship(a.GetExtensions()) - if err != nil { - c.reportError(err.Error()) - } - - atom := c.top() - atom.List = &schema.List{ - ElementType: c.makeRef(a.SubType, c.preserveUnknownFields), - ElementRelationship: relationship, - Keys: mapKeys, - } -} - -func (c *convert) VisitMap(m *proto.Map) { - relationship, err := getMapElementRelationship(m.GetExtensions()) - if err != nil { - c.reportError(err.Error()) - } - - a := c.top() - a.Map = &schema.Map{ - ElementType: c.makeRef(m.SubType, c.preserveUnknownFields), - ElementRelationship: relationship, - } -} - -func (c *convert) VisitPrimitive(p *proto.Primitive) { - a := c.top() - if c.currentName == quantityResource { - a.Scalar = ptr(schema.Scalar("untyped")) - } else { - *a = convertPrimitive(p.Type, p.Format) - } -} - -func (c *convert) VisitArbitrary(a *proto.Arbitrary) { - *c.top() = deducedDef.Atom -} - -func (c *convert) VisitReference(proto.Reference) { - // Do nothing, we handle references specially -} diff --git a/vendor/k8s.io/kube-openapi/pkg/schemaconv/smd.go b/vendor/k8s.io/kube-openapi/pkg/schemaconv/smd.go index 799d866d5..bec0e7809 100644 --- a/vendor/k8s.io/kube-openapi/pkg/schemaconv/smd.go +++ b/vendor/k8s.io/kube-openapi/pkg/schemaconv/smd.go @@ -17,18 +17,43 @@ limitations under the License. package schemaconv import ( + "errors" "fmt" + "path" "sort" + "strings" + "k8s.io/kube-openapi/pkg/util/proto" "sigs.k8s.io/structured-merge-diff/v4/schema" ) const ( - quantityResource = "io.k8s.apimachinery.pkg.api.resource.Quantity" - rawExtensionResource = "io.k8s.apimachinery.pkg.runtime.RawExtension" + quantityResource = "io.k8s.apimachinery.pkg.api.resource.Quantity" ) +// ToSchema converts openapi definitions into a schema suitable for structured +// merge (i.e. kubectl apply v2). +func ToSchema(models proto.Models) (*schema.Schema, error) { + return ToSchemaWithPreserveUnknownFields(models, false) +} + +// ToSchemaWithPreserveUnknownFields converts openapi definitions into a schema suitable for structured +// merge (i.e. kubectl apply v2), it will preserve unknown fields if specified. +func ToSchemaWithPreserveUnknownFields(models proto.Models, preserveUnknownFields bool) (*schema.Schema, error) { + c := convert{ + input: models, + preserveUnknownFields: preserveUnknownFields, + output: &schema.Schema{}, + } + if err := c.convertAll(); err != nil { + return nil, err + } + c.addCommonTypes() + return c.output, nil +} + type convert struct { + input proto.Models preserveUnknownFields bool output *schema.Schema @@ -39,6 +64,7 @@ type convert struct { func (c *convert) push(name string, a *schema.Atom) *convert { return &convert{ + input: c.input, preserveUnknownFields: c.preserveUnknownFields, output: c.output, currentName: name, @@ -52,17 +78,30 @@ func (c *convert) pop(c2 *convert) { c.errorMessages = append(c.errorMessages, c2.errorMessages...) } +func (c *convert) convertAll() error { + for _, name := range c.input.ListModels() { + model := c.input.LookupModel(name) + c.insertTypeDef(name, model) + } + if len(c.errorMessages) > 0 { + return errors.New(strings.Join(c.errorMessages, "\n")) + } + return nil +} + func (c *convert) reportError(format string, args ...interface{}) { c.errorMessages = append(c.errorMessages, c.currentName+": "+fmt.Sprintf(format, args...), ) } -func (c *convert) insertTypeDef(name string, atom schema.Atom) { +func (c *convert) insertTypeDef(name string, model proto.Schema) { def := schema.TypeDef{ Name: name, - Atom: atom, } + c2 := c.push(name, &def.Atom) + model.Accept(c2) + c.pop(c2) if def.Atom == (schema.Atom{}) { // This could happen if there were a top-level reference. return @@ -117,6 +156,46 @@ var deducedDef schema.TypeDef = schema.TypeDef{ }, } +func (c *convert) makeRef(model proto.Schema, preserveUnknownFields bool) schema.TypeRef { + var tr schema.TypeRef + if r, ok := model.(*proto.Ref); ok { + if r.Reference() == "io.k8s.apimachinery.pkg.runtime.RawExtension" { + return schema.TypeRef{ + NamedType: &untypedName, + } + } + // reference a named type + _, n := path.Split(r.Reference()) + tr.NamedType = &n + + ext := model.GetExtensions() + if val, ok := ext["x-kubernetes-map-type"]; ok { + switch val { + case "atomic": + relationship := schema.Atomic + tr.ElementRelationship = &relationship + case "granular": + relationship := schema.Separable + tr.ElementRelationship = &relationship + default: + c.reportError("unknown map type %v", val) + } + } + } else { + // compute the type inline + c2 := c.push("inlined in "+c.currentName, &tr.Inlined) + c2.preserveUnknownFields = preserveUnknownFields + model.Accept(c2) + c.pop(c2) + + if tr == (schema.TypeRef{}) { + // emit warning? + tr.NamedType = &untypedName + } + } + return tr +} + func makeUnions(extensions map[string]interface{}) ([]schema.Union, error) { schemaUnions := []schema.Union{} if iunions, ok := extensions["x-kubernetes-unions"]; ok { @@ -220,6 +299,52 @@ func makeUnion(extensions map[string]interface{}) (schema.Union, error) { return union, nil } +func (c *convert) VisitKind(k *proto.Kind) { + preserveUnknownFields := c.preserveUnknownFields + if p, ok := k.GetExtensions()["x-kubernetes-preserve-unknown-fields"]; ok && p == true { + preserveUnknownFields = true + } + + a := c.top() + a.Map = &schema.Map{} + for _, name := range k.FieldOrder { + member := k.Fields[name] + tr := c.makeRef(member, preserveUnknownFields) + a.Map.Fields = append(a.Map.Fields, schema.StructField{ + Name: name, + Type: tr, + Default: member.GetDefault(), + }) + } + + unions, err := makeUnions(k.GetExtensions()) + if err != nil { + c.reportError(err.Error()) + return + } + // TODO: We should check that the fields and discriminator + // specified in the union are actual fields in the struct. + a.Map.Unions = unions + + if preserveUnknownFields { + a.Map.ElementType = schema.TypeRef{ + NamedType: &deducedName, + } + } + + ext := k.GetExtensions() + if val, ok := ext["x-kubernetes-map-type"]; ok { + switch val { + case "atomic": + a.Map.ElementRelationship = schema.Atomic + case "granular": + a.Map.ElementRelationship = schema.Separable + default: + c.reportError("unknown map type %v", val) + } + } +} + func toStringSlice(o interface{}) (out []string, ok bool) { switch t := o.(type) { case []interface{}: @@ -230,108 +355,117 @@ func toStringSlice(o interface{}) (out []string, ok bool) { } } return out, true - case []string: - return t, true } return nil, false } -func ptr(s schema.Scalar) *schema.Scalar { return &s } - -// Basic conversion functions to convert OpenAPI schema definitions to -// SMD Schema atoms -func convertPrimitive(typ string, format string) (a schema.Atom) { - switch typ { - case "integer": - a.Scalar = ptr(schema.Numeric) - case "number": - a.Scalar = ptr(schema.Numeric) - case "string": - switch format { - case "": - a.Scalar = ptr(schema.String) - case "byte": - // byte really means []byte and is encoded as a string. - a.Scalar = ptr(schema.String) - case "int-or-string": - a.Scalar = ptr(schema.Scalar("untyped")) - case "date-time": - a.Scalar = ptr(schema.Scalar("untyped")) - default: - a.Scalar = ptr(schema.Scalar("untyped")) - } - case "boolean": - a.Scalar = ptr(schema.Boolean) - default: - a.Scalar = ptr(schema.Scalar("untyped")) +func (c *convert) VisitArray(a *proto.Array) { + atom := c.top() + atom.List = &schema.List{ + ElementRelationship: schema.Atomic, } + l := atom.List + l.ElementType = c.makeRef(a.SubType, c.preserveUnknownFields) - return a -} + ext := a.GetExtensions() -func getListElementRelationship(ext map[string]any) (schema.ElementRelationship, []string, error) { if val, ok := ext["x-kubernetes-list-type"]; ok { - switch val { - case "atomic": - return schema.Atomic, nil, nil - case "set": - return schema.Associative, nil, nil - case "map": - keys, ok := ext["x-kubernetes-list-map-keys"] - - if !ok { - return schema.Associative, nil, fmt.Errorf("missing map keys") + if val == "atomic" { + l.ElementRelationship = schema.Atomic + } else if val == "set" { + l.ElementRelationship = schema.Associative + } else if val == "map" { + l.ElementRelationship = schema.Associative + if keys, ok := ext["x-kubernetes-list-map-keys"]; ok { + if keyNames, ok := toStringSlice(keys); ok { + l.Keys = keyNames + } else { + c.reportError("uninterpreted map keys: %#v", keys) + } + } else { + c.reportError("missing map keys") } - - keyNames, ok := toStringSlice(keys) - if !ok { - return schema.Associative, nil, fmt.Errorf("uninterpreted map keys: %#v", keys) + } else { + c.reportError("unknown list type %v", val) + l.ElementRelationship = schema.Atomic + } + } else if val, ok := ext["x-kubernetes-patch-strategy"]; ok { + if val == "merge" || val == "merge,retainKeys" { + l.ElementRelationship = schema.Associative + if key, ok := ext["x-kubernetes-patch-merge-key"]; ok { + if keyName, ok := key.(string); ok { + l.Keys = []string{keyName} + } else { + c.reportError("uninterpreted merge key: %#v", key) + } + } else { + // It's not an error for this to be absent, it + // means it's a set. } + } else if val == "retainKeys" { + } else { + c.reportError("unknown patch strategy %v", val) + l.ElementRelationship = schema.Atomic + } + } +} + +func (c *convert) VisitMap(m *proto.Map) { + a := c.top() + a.Map = &schema.Map{} + a.Map.ElementType = c.makeRef(m.SubType, c.preserveUnknownFields) - return schema.Associative, keyNames, nil + ext := m.GetExtensions() + if val, ok := ext["x-kubernetes-map-type"]; ok { + switch val { + case "atomic": + a.Map.ElementRelationship = schema.Atomic + case "granular": + a.Map.ElementRelationship = schema.Separable default: - return schema.Atomic, nil, fmt.Errorf("unknown list type %v", val) + c.reportError("unknown map type %v", val) } - } else if val, ok := ext["x-kubernetes-patch-strategy"]; ok { - switch val { - case "merge", "merge,retainKeys": - if key, ok := ext["x-kubernetes-patch-merge-key"]; ok { - keyName, ok := key.(string) + } +} - if !ok { - return schema.Associative, nil, fmt.Errorf("uninterpreted merge key: %#v", key) - } +func ptr(s schema.Scalar) *schema.Scalar { return &s } - return schema.Associative, []string{keyName}, nil +func (c *convert) VisitPrimitive(p *proto.Primitive) { + a := c.top() + if c.currentName == quantityResource { + a.Scalar = ptr(schema.Scalar("untyped")) + } else { + switch p.Type { + case proto.Integer: + a.Scalar = ptr(schema.Numeric) + case proto.Number: + a.Scalar = ptr(schema.Numeric) + case proto.String: + switch p.Format { + case "": + a.Scalar = ptr(schema.String) + case "byte": + // byte really means []byte and is encoded as a string. + a.Scalar = ptr(schema.String) + case "int-or-string": + a.Scalar = ptr(schema.Scalar("untyped")) + case "date-time": + a.Scalar = ptr(schema.Scalar("untyped")) + default: + a.Scalar = ptr(schema.Scalar("untyped")) } - // It's not an error for x-kubernetes-patch-merge-key to be absent, - // it means it's a set - return schema.Associative, nil, nil - case "retainKeys": - return schema.Atomic, nil, nil + case proto.Boolean: + a.Scalar = ptr(schema.Boolean) default: - return schema.Atomic, nil, fmt.Errorf("unknown patch strategy %v", val) + a.Scalar = ptr(schema.Scalar("untyped")) } } - - // Treat as atomic by default - return schema.Atomic, nil, nil } -// Returns map element relationship if specified, or empty string if unspecified -func getMapElementRelationship(ext map[string]any) (schema.ElementRelationship, error) { - val, ok := ext["x-kubernetes-map-type"] - if !ok { - // unset Map element relationship - return "", nil - } +func (c *convert) VisitArbitrary(a *proto.Arbitrary) { + *c.top() = deducedDef.Atom +} - switch val { - case "atomic": - return schema.Atomic, nil - case "granular": - return schema.Separable, nil - default: - return "", fmt.Errorf("unknown map type %v", val) - } +func (c *convert) VisitReference(proto.Reference) { + // Do nothing, we handle references specially } diff --git a/vendor/k8s.io/kube-openapi/pkg/spec3/encoding.go b/vendor/k8s.io/kube-openapi/pkg/spec3/encoding.go index 699291f1d..51dac4bdf 100644 --- a/vendor/k8s.io/kube-openapi/pkg/spec3/encoding.go +++ b/vendor/k8s.io/kube-openapi/pkg/spec3/encoding.go @@ -18,10 +18,7 @@ package spec3 import ( "encoding/json" - "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" "k8s.io/kube-openapi/pkg/validation/spec" ) @@ -44,9 +41,6 @@ func (e *Encoding) MarshalJSON() ([]byte, error) { } func (e *Encoding) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshalingV3 { - return jsonv2.Unmarshal(data, e) - } if err := json.Unmarshal(data, &e.EncodingProps); err != nil { return err } @@ -56,20 +50,6 @@ func (e *Encoding) UnmarshalJSON(data []byte) error { return nil } -func (e *Encoding) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - var x struct { - spec.Extensions - EncodingProps - } - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - - e.Extensions = internal.SanitizeExtensions(x.Extensions) - e.EncodingProps = x.EncodingProps - return nil -} - type EncodingProps struct { // Content Type for encoding a specific property ContentType string `json:"contentType,omitempty"` @@ -78,7 +58,7 @@ type EncodingProps struct { // Describes how a specific property value will be serialized depending on its type Style string `json:"style,omitempty"` // When this is true, property values of type array or object generate separate parameters for each value of the array, or key-value-pair of the map. For other types of properties this property has no effect - Explode bool `json:"explode,omitempty"` + Explode string `json:"explode,omitempty"` // AllowReserved determines whether the parameter value SHOULD allow reserved characters, as defined by RFC3986 AllowReserved bool `json:"allowReserved,omitempty"` } diff --git a/vendor/k8s.io/kube-openapi/pkg/spec3/example.go b/vendor/k8s.io/kube-openapi/pkg/spec3/example.go index 03b872717..0f5ab983c 100644 --- a/vendor/k8s.io/kube-openapi/pkg/spec3/example.go +++ b/vendor/k8s.io/kube-openapi/pkg/spec3/example.go @@ -19,11 +19,8 @@ package spec3 import ( "encoding/json" - "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" - "k8s.io/kube-openapi/pkg/validation/spec" + "github.com/go-openapi/swag" ) // Example https://swagger.io/specification/#example-object @@ -52,9 +49,6 @@ func (e *Example) MarshalJSON() ([]byte, error) { } func (e *Example) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshalingV3 { - return jsonv2.Unmarshal(data, e) - } if err := json.Unmarshal(data, &e.Refable); err != nil { return err } @@ -67,23 +61,6 @@ func (e *Example) UnmarshalJSON(data []byte) error { return nil } -func (e *Example) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - var x struct { - spec.Extensions - ExampleProps - } - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - if err := internal.JSONRefFromMap(&e.Ref.Ref, x.Extensions); err != nil { - return err - } - e.Extensions = internal.SanitizeExtensions(x.Extensions) - e.ExampleProps = x.ExampleProps - - return nil -} - type ExampleProps struct { // Summary holds a short description of the example Summary string `json:"summary,omitempty"` diff --git a/vendor/k8s.io/kube-openapi/pkg/spec3/external_documentation.go b/vendor/k8s.io/kube-openapi/pkg/spec3/external_documentation.go index e79956721..117113e7a 100644 --- a/vendor/k8s.io/kube-openapi/pkg/spec3/external_documentation.go +++ b/vendor/k8s.io/kube-openapi/pkg/spec3/external_documentation.go @@ -18,11 +18,8 @@ package spec3 import ( "encoding/json" - - "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" "k8s.io/kube-openapi/pkg/validation/spec" + "github.com/go-openapi/swag" ) type ExternalDocumentation struct { @@ -51,9 +48,6 @@ func (e *ExternalDocumentation) MarshalJSON() ([]byte, error) { } func (e *ExternalDocumentation) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshalingV3 { - return jsonv2.Unmarshal(data, e) - } if err := json.Unmarshal(data, &e.ExternalDocumentationProps); err != nil { return err } @@ -62,16 +56,3 @@ func (e *ExternalDocumentation) UnmarshalJSON(data []byte) error { } return nil } - -func (e *ExternalDocumentation) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - var x struct { - spec.Extensions - ExternalDocumentationProps - } - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - e.Extensions = internal.SanitizeExtensions(x.Extensions) - e.ExternalDocumentationProps = x.ExternalDocumentationProps - return nil -} diff --git a/vendor/k8s.io/kube-openapi/pkg/spec3/fuzz.go b/vendor/k8s.io/kube-openapi/pkg/spec3/fuzz.go deleted file mode 100644 index bc19dd48e..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/spec3/fuzz.go +++ /dev/null @@ -1,254 +0,0 @@ -package spec3 - -import ( - "math/rand" - "strings" - - fuzz "github.com/google/gofuzz" - - "k8s.io/kube-openapi/pkg/validation/spec" -) - -// refChance is the chance that a particular component will use a $ref -// instead of fuzzed. Expressed as a fraction 1/n, currently there is -// a 1/3 chance that a ref will be used. -const refChance = 3 - -const alphaNumChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" - -func randAlphanumString() string { - arr := make([]string, rand.Intn(10)+5) - for i := 0; i < len(arr); i++ { - arr[i] = string(alphaNumChars[rand.Intn(len(alphaNumChars))]) - } - return strings.Join(arr, "") -} - -var OpenAPIV3FuzzFuncs []interface{} = []interface{}{ - func(s *string, c fuzz.Continue) { - // All OpenAPI V3 map keys must follow the corresponding - // regex. Note that this restricts the range for all other - // string values as well. - str := randAlphanumString() - *s = str - }, - func(o *OpenAPI, c fuzz.Continue) { - c.FuzzNoCustom(o) - o.Version = "3.0.0" - }, - func(r *interface{}, c fuzz.Continue) { - switch c.Intn(3) { - case 0: - *r = nil - case 1: - n := c.RandString() + "x" - *r = n - case 2: - n := c.Float64() - *r = n - } - }, - func(v **spec.Info, c fuzz.Continue) { - // Info is never nil - *v = &spec.Info{} - c.FuzzNoCustom(*v) - (*v).Title = c.RandString() + "x" - }, - func(v *Paths, c fuzz.Continue) { - c.Fuzz(&v.VendorExtensible) - num := c.Intn(5) - if num > 0 { - v.Paths = make(map[string]*Path) - } - for i := 0; i < num; i++ { - val := Path{} - c.Fuzz(&val) - v.Paths["/"+c.RandString()] = &val - } - }, - func(v *SecurityScheme, c fuzz.Continue) { - if c.Intn(refChance) == 0 { - c.Fuzz(&v.Refable) - return - } - switch c.Intn(4) { - case 0: - v.Type = "apiKey" - v.Name = c.RandString() + "x" - switch c.Intn(3) { - case 0: - v.In = "query" - case 1: - v.In = "header" - case 2: - v.In = "cookie" - } - case 1: - v.Type = "http" - case 2: - v.Type = "oauth2" - v.Flows = make(map[string]*OAuthFlow) - flow := OAuthFlow{} - flow.AuthorizationUrl = c.RandString() + "x" - v.Flows["implicit"] = &flow - flow.Scopes = make(map[string]string) - flow.Scopes["foo"] = "bar" - case 3: - v.Type = "openIdConnect" - v.OpenIdConnectUrl = "https://" + c.RandString() - } - v.Scheme = "basic" - }, - func(v *spec.Ref, c fuzz.Continue) { - switch c.Intn(7) { - case 0: - *v = spec.MustCreateRef("#/components/schemas/" + randAlphanumString()) - case 1: - *v = spec.MustCreateRef("#/components/responses/" + randAlphanumString()) - case 2: - *v = spec.MustCreateRef("#/components/headers/" + randAlphanumString()) - case 3: - *v = spec.MustCreateRef("#/components/securitySchemes/" + randAlphanumString()) - case 5: - *v = spec.MustCreateRef("#/components/parameters/" + randAlphanumString()) - case 6: - *v = spec.MustCreateRef("#/components/requestBodies/" + randAlphanumString()) - } - }, - func(v *Parameter, c fuzz.Continue) { - if c.Intn(refChance) == 0 { - c.Fuzz(&v.Refable) - return - } - c.Fuzz(&v.ParameterProps) - c.Fuzz(&v.VendorExtensible) - - switch c.Intn(3) { - case 0: - // Header param - v.In = "query" - case 1: - v.In = "header" - case 2: - v.In = "cookie" - } - }, - func(v *RequestBody, c fuzz.Continue) { - if c.Intn(refChance) == 0 { - c.Fuzz(&v.Refable) - return - } - c.Fuzz(&v.RequestBodyProps) - c.Fuzz(&v.VendorExtensible) - }, - func(v *Header, c fuzz.Continue) { - if c.Intn(refChance) == 0 { - c.Fuzz(&v.Refable) - return - } - c.Fuzz(&v.HeaderProps) - c.Fuzz(&v.VendorExtensible) - }, - func(v *ResponsesProps, c fuzz.Continue) { - c.Fuzz(&v.Default) - n := c.Intn(5) - for i := 0; i < n; i++ { - r2 := Response{} - c.Fuzz(&r2) - // HTTP Status code in 100-599 Range - code := c.Intn(500) + 100 - v.StatusCodeResponses = make(map[int]*Response) - v.StatusCodeResponses[code] = &r2 - } - }, - func(v *Response, c fuzz.Continue) { - if c.Intn(refChance) == 0 { - c.Fuzz(&v.Refable) - return - } - c.Fuzz(&v.ResponseProps) - c.Fuzz(&v.VendorExtensible) - }, - func(v *spec.Extensions, c fuzz.Continue) { - numChildren := c.Intn(5) - for i := 0; i < numChildren; i++ { - if *v == nil { - *v = spec.Extensions{} - } - (*v)["x-"+c.RandString()] = c.RandString() - } - }, - func(v *spec.ExternalDocumentation, c fuzz.Continue) { - c.Fuzz(&v.Description) - v.URL = "https://" + randAlphanumString() - }, - func(v *spec.SchemaURL, c fuzz.Continue) { - *v = spec.SchemaURL("https://" + randAlphanumString()) - }, - func(v *spec.SchemaOrBool, c fuzz.Continue) { - *v = spec.SchemaOrBool{} - - if c.RandBool() { - v.Allows = c.RandBool() - } else { - v.Schema = &spec.Schema{} - v.Allows = true - c.Fuzz(&v.Schema) - } - }, - func(v *spec.SchemaOrArray, c fuzz.Continue) { - *v = spec.SchemaOrArray{} - if c.RandBool() { - schema := spec.Schema{} - c.Fuzz(&schema) - v.Schema = &schema - } else { - v.Schemas = []spec.Schema{} - numChildren := c.Intn(5) - for i := 0; i < numChildren; i++ { - schema := spec.Schema{} - c.Fuzz(&schema) - v.Schemas = append(v.Schemas, schema) - } - - } - - }, - func(v *spec.SchemaOrStringArray, c fuzz.Continue) { - if c.RandBool() { - *v = spec.SchemaOrStringArray{} - if c.RandBool() { - c.Fuzz(&v.Property) - } else { - c.Fuzz(&v.Schema) - } - } - }, - func(v *spec.Schema, c fuzz.Continue) { - if c.Intn(refChance) == 0 { - c.Fuzz(&v.Ref) - return - } - if c.RandBool() { - // file schema - c.Fuzz(&v.Default) - c.Fuzz(&v.Description) - c.Fuzz(&v.Example) - c.Fuzz(&v.ExternalDocs) - - c.Fuzz(&v.Format) - c.Fuzz(&v.ReadOnly) - c.Fuzz(&v.Required) - c.Fuzz(&v.Title) - v.Type = spec.StringOrArray{"file"} - - } else { - // normal schema - c.Fuzz(&v.SchemaProps) - c.Fuzz(&v.SwaggerSchemaProps) - c.Fuzz(&v.VendorExtensible) - c.Fuzz(&v.ExtraProps) - } - - }, -} diff --git a/vendor/k8s.io/kube-openapi/pkg/spec3/header.go b/vendor/k8s.io/kube-openapi/pkg/spec3/header.go index ee5a30f79..cead4b15d 100644 --- a/vendor/k8s.io/kube-openapi/pkg/spec3/header.go +++ b/vendor/k8s.io/kube-openapi/pkg/spec3/header.go @@ -20,8 +20,6 @@ import ( "encoding/json" "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" "k8s.io/kube-openapi/pkg/validation/spec" ) @@ -52,9 +50,6 @@ func (h *Header) MarshalJSON() ([]byte, error) { } func (h *Header) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshalingV3 { - return jsonv2.Unmarshal(data, h) - } if err := json.Unmarshal(data, &h.Refable); err != nil { return err } @@ -68,22 +63,6 @@ func (h *Header) UnmarshalJSON(data []byte) error { return nil } -func (h *Header) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - var x struct { - spec.Extensions - HeaderProps - } - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - if err := internal.JSONRefFromMap(&h.Ref.Ref, x.Extensions); err != nil { - return err - } - h.Extensions = internal.SanitizeExtensions(x.Extensions) - h.HeaderProps = x.HeaderProps - return nil -} - // HeaderProps a struct that describes a header object type HeaderProps struct { // Description holds a brief description of the parameter diff --git a/vendor/k8s.io/kube-openapi/pkg/spec3/media_type.go b/vendor/k8s.io/kube-openapi/pkg/spec3/media_type.go index d390e69bc..828fd8dc5 100644 --- a/vendor/k8s.io/kube-openapi/pkg/spec3/media_type.go +++ b/vendor/k8s.io/kube-openapi/pkg/spec3/media_type.go @@ -18,10 +18,7 @@ package spec3 import ( "encoding/json" - "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" "k8s.io/kube-openapi/pkg/validation/spec" ) @@ -47,9 +44,6 @@ func (m *MediaType) MarshalJSON() ([]byte, error) { } func (m *MediaType) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshalingV3 { - return jsonv2.Unmarshal(data, m) - } if err := json.Unmarshal(data, &m.MediaTypeProps); err != nil { return err } @@ -59,24 +53,10 @@ func (m *MediaType) UnmarshalJSON(data []byte) error { return nil } -func (m *MediaType) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - var x struct { - spec.Extensions - MediaTypeProps - } - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - m.Extensions = internal.SanitizeExtensions(x.Extensions) - m.MediaTypeProps = x.MediaTypeProps - - return nil -} - // MediaTypeProps a struct that allows you to specify content format, more at https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#mediaTypeObject type MediaTypeProps struct { // Schema holds the schema defining the type used for the media type - Schema *spec.Schema `json:"schema,omitempty"` + Schema *spec.Schema `json:"schema,omitempty"` // Example of the media type Example interface{} `json:"example,omitempty"` // Examples of the media type. Each example object should match the media type and specific schema if present diff --git a/vendor/k8s.io/kube-openapi/pkg/spec3/operation.go b/vendor/k8s.io/kube-openapi/pkg/spec3/operation.go index 28230610b..de8aa4602 100644 --- a/vendor/k8s.io/kube-openapi/pkg/spec3/operation.go +++ b/vendor/k8s.io/kube-openapi/pkg/spec3/operation.go @@ -19,10 +19,8 @@ package spec3 import ( "encoding/json" - "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" "k8s.io/kube-openapi/pkg/validation/spec" + "github.com/go-openapi/swag" ) // Operation describes a single API operation on a path, more at https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#operationObject @@ -48,28 +46,12 @@ func (o *Operation) MarshalJSON() ([]byte, error) { // UnmarshalJSON hydrates this items instance with the data from JSON func (o *Operation) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshalingV3 { - return jsonv2.Unmarshal(data, o) - } if err := json.Unmarshal(data, &o.OperationProps); err != nil { return err } return json.Unmarshal(data, &o.VendorExtensible) } -func (o *Operation) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - var x struct { - spec.Extensions - OperationProps - } - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - o.Extensions = internal.SanitizeExtensions(x.Extensions) - o.OperationProps = x.OperationProps - return nil -} - // OperationProps describes a single API operation on a path, more at https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#operationObject type OperationProps struct { // Tags holds a list of tags for API documentation control @@ -91,7 +73,7 @@ type OperationProps struct { // Deprecated declares this operation to be deprecated Deprecated bool `json:"deprecated,omitempty"` // SecurityRequirement holds a declaration of which security mechanisms can be used for this operation - SecurityRequirement []map[string][]string `json:"security,omitempty"` + SecurityRequirement []*SecurityRequirement `json:"security,omitempty"` // Servers contains an alternative server array to service this operation Servers []*Server `json:"servers,omitempty"` } diff --git a/vendor/k8s.io/kube-openapi/pkg/spec3/parameter.go b/vendor/k8s.io/kube-openapi/pkg/spec3/parameter.go index 613da71a6..0d7180e50 100644 --- a/vendor/k8s.io/kube-openapi/pkg/spec3/parameter.go +++ b/vendor/k8s.io/kube-openapi/pkg/spec3/parameter.go @@ -20,8 +20,6 @@ import ( "encoding/json" "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" "k8s.io/kube-openapi/pkg/validation/spec" ) @@ -52,10 +50,6 @@ func (p *Parameter) MarshalJSON() ([]byte, error) { } func (p *Parameter) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshalingV3 { - return jsonv2.Unmarshal(data, p) - } - if err := json.Unmarshal(data, &p.Refable); err != nil { return err } @@ -69,22 +63,6 @@ func (p *Parameter) UnmarshalJSON(data []byte) error { return nil } -func (p *Parameter) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - var x struct { - spec.Extensions - ParameterProps - } - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - if err := internal.JSONRefFromMap(&p.Ref.Ref, x.Extensions); err != nil { - return err - } - p.Extensions = internal.SanitizeExtensions(x.Extensions) - p.ParameterProps = x.ParameterProps - return nil -} - // ParameterProps a struct that describes a single operation parameter, more at https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#parameterObject type ParameterProps struct { // Name holds the name of the parameter diff --git a/vendor/k8s.io/kube-openapi/pkg/spec3/path.go b/vendor/k8s.io/kube-openapi/pkg/spec3/path.go index 40d9061ac..bc48c504d 100644 --- a/vendor/k8s.io/kube-openapi/pkg/spec3/path.go +++ b/vendor/k8s.io/kube-openapi/pkg/spec3/path.go @@ -18,13 +18,10 @@ package spec3 import ( "encoding/json" - "fmt" "strings" - "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" "k8s.io/kube-openapi/pkg/validation/spec" + "github.com/go-openapi/swag" ) // Paths describes the available paths and operations for the API, more at https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#pathsObject @@ -48,9 +45,6 @@ func (p *Paths) MarshalJSON() ([]byte, error) { // UnmarshalJSON hydrates this items instance with the data from JSON func (p *Paths) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshalingV3 { - return jsonv2.Unmarshal(data, p) - } var res map[string]json.RawMessage if err := json.Unmarshal(data, &res); err != nil { return err @@ -80,59 +74,6 @@ func (p *Paths) UnmarshalJSON(data []byte) error { return nil } -func (p *Paths) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - tok, err := dec.ReadToken() - if err != nil { - return err - } - switch k := tok.Kind(); k { - case 'n': - *p = Paths{} - return nil - case '{': - for { - tok, err := dec.ReadToken() - if err != nil { - return err - } - - if tok.Kind() == '}' { - return nil - } - - switch k := tok.String(); { - case internal.IsExtensionKey(k): - var ext any - if err := opts.UnmarshalNext(dec, &ext); err != nil { - return err - } - - if p.Extensions == nil { - p.Extensions = make(map[string]any) - } - p.Extensions[k] = ext - case len(k) > 0 && k[0] == '/': - pi := Path{} - if err := opts.UnmarshalNext(dec, &pi); err != nil { - return err - } - - if p.Paths == nil { - p.Paths = make(map[string]*Path) - } - p.Paths[k] = &pi - default: - _, err := dec.ReadValue() // skip value - if err != nil { - return err - } - } - } - default: - return fmt.Errorf("unknown JSON kind: %v", k) - } -} - // Path describes the operations available on a single path, more at https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#pathItemObject // // Note that this struct is actually a thin wrapper around PathProps to make it referable and extensible @@ -160,9 +101,6 @@ func (p *Path) MarshalJSON() ([]byte, error) { } func (p *Path) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshalingV3 { - return jsonv2.Unmarshal(data, p) - } if err := json.Unmarshal(data, &p.Refable); err != nil { return err } @@ -175,24 +113,6 @@ func (p *Path) UnmarshalJSON(data []byte) error { return nil } -func (p *Path) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - var x struct { - spec.Extensions - PathProps - } - - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - if err := internal.JSONRefFromMap(&p.Ref.Ref, x.Extensions); err != nil { - return err - } - p.Extensions = internal.SanitizeExtensions(x.Extensions) - p.PathProps = x.PathProps - - return nil -} - // PathProps describes the operations available on a single path, more at https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#pathItemObject type PathProps struct { // Summary holds a summary for all operations in this path diff --git a/vendor/k8s.io/kube-openapi/pkg/spec3/request_body.go b/vendor/k8s.io/kube-openapi/pkg/spec3/request_body.go index 33267ce67..0adc62826 100644 --- a/vendor/k8s.io/kube-openapi/pkg/spec3/request_body.go +++ b/vendor/k8s.io/kube-openapi/pkg/spec3/request_body.go @@ -19,10 +19,8 @@ package spec3 import ( "encoding/json" - "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" "k8s.io/kube-openapi/pkg/validation/spec" + "github.com/go-openapi/swag" ) // RequestBody describes a single request body, more at https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#requestBodyObject @@ -52,9 +50,6 @@ func (r *RequestBody) MarshalJSON() ([]byte, error) { } func (r *RequestBody) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshalingV3 { - return jsonv2.Unmarshal(data, r) - } if err := json.Unmarshal(data, &r.Refable); err != nil { return err } @@ -76,19 +71,3 @@ type RequestBodyProps struct { // Required determines if the request body is required in the request Required bool `json:"required,omitempty"` } - -func (r *RequestBody) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - var x struct { - spec.Extensions - RequestBodyProps - } - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - if err := internal.JSONRefFromMap(&r.Ref.Ref, x.Extensions); err != nil { - return err - } - r.Extensions = internal.SanitizeExtensions(x.Extensions) - r.RequestBodyProps = x.RequestBodyProps - return nil -} diff --git a/vendor/k8s.io/kube-openapi/pkg/spec3/response.go b/vendor/k8s.io/kube-openapi/pkg/spec3/response.go index 95b388e6c..ccd73369f 100644 --- a/vendor/k8s.io/kube-openapi/pkg/spec3/response.go +++ b/vendor/k8s.io/kube-openapi/pkg/spec3/response.go @@ -18,13 +18,10 @@ package spec3 import ( "encoding/json" - "fmt" "strconv" - "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" "k8s.io/kube-openapi/pkg/validation/spec" + "github.com/go-openapi/swag" ) // Responses holds the list of possible responses as they are returned from executing this operation @@ -49,15 +46,13 @@ func (r *Responses) MarshalJSON() ([]byte, error) { } func (r *Responses) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshalingV3 { - return jsonv2.Unmarshal(data, r) - } if err := json.Unmarshal(data, &r.ResponsesProps); err != nil { return err } if err := json.Unmarshal(data, &r.VendorExtensible); err != nil { return err } + return nil } @@ -83,91 +78,25 @@ func (r ResponsesProps) MarshalJSON() ([]byte, error) { // UnmarshalJSON unmarshals responses from JSON func (r *ResponsesProps) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshalingV3 { - return jsonv2.Unmarshal(data, r) - } - var res map[string]json.RawMessage + var res map[string]*Response if err := json.Unmarshal(data, &res); err != nil { - return err + return nil } if v, ok := res["default"]; ok { - value := Response{} - if err := json.Unmarshal(v, &value); err != nil { - return err - } - r.Default = &value + r.Default = v delete(res, "default") } for k, v := range res { - // Take all integral keys if nk, err := strconv.Atoi(k); err == nil { if r.StatusCodeResponses == nil { r.StatusCodeResponses = map[int]*Response{} } - value := Response{} - if err := json.Unmarshal(v, &value); err != nil { - return err - } - r.StatusCodeResponses[nk] = &value + r.StatusCodeResponses[nk] = v } } return nil } -func (r *Responses) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) (err error) { - tok, err := dec.ReadToken() - if err != nil { - return err - } - switch k := tok.Kind(); k { - case 'n': - *r = Responses{} - return nil - case '{': - for { - tok, err := dec.ReadToken() - if err != nil { - return err - } - if tok.Kind() == '}' { - return nil - } - switch k := tok.String(); { - case internal.IsExtensionKey(k): - var ext any - if err := opts.UnmarshalNext(dec, &ext); err != nil { - return err - } - - if r.Extensions == nil { - r.Extensions = make(map[string]any) - } - r.Extensions[k] = ext - case k == "default": - resp := Response{} - if err := opts.UnmarshalNext(dec, &resp); err != nil { - return err - } - r.ResponsesProps.Default = &resp - default: - if nk, err := strconv.Atoi(k); err == nil { - resp := Response{} - if err := opts.UnmarshalNext(dec, &resp); err != nil { - return err - } - - if r.StatusCodeResponses == nil { - r.StatusCodeResponses = map[int]*Response{} - } - r.StatusCodeResponses[nk] = &resp - } - } - } - default: - return fmt.Errorf("unknown JSON kind: %v", k) - } -} - // Response describes a single response from an API Operation, more at https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#responseObject // // Note that this struct is actually a thin wrapper around ResponseProps to make it referable and extensible @@ -195,9 +124,6 @@ func (r *Response) MarshalJSON() ([]byte, error) { } func (r *Response) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshalingV3 { - return jsonv2.Unmarshal(data, r) - } if err := json.Unmarshal(data, &r.Refable); err != nil { return err } @@ -207,22 +133,7 @@ func (r *Response) UnmarshalJSON(data []byte) error { if err := json.Unmarshal(data, &r.VendorExtensible); err != nil { return err } - return nil -} -func (r *Response) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - var x struct { - spec.Extensions - ResponseProps - } - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - if err := internal.JSONRefFromMap(&r.Ref.Ref, x.Extensions); err != nil { - return err - } - r.Extensions = internal.SanitizeExtensions(x.Extensions) - r.ResponseProps = x.ResponseProps return nil } @@ -238,6 +149,7 @@ type ResponseProps struct { Links map[string]*Link `json:"links,omitempty"` } + // Link represents a possible design-time link for a response, more at https://swagger.io/specification/#link-object type Link struct { spec.Refable @@ -263,9 +175,6 @@ func (r *Link) MarshalJSON() ([]byte, error) { } func (r *Link) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshalingV3 { - return jsonv2.Unmarshal(data, r) - } if err := json.Unmarshal(data, &r.Refable); err != nil { return err } @@ -279,22 +188,6 @@ func (r *Link) UnmarshalJSON(data []byte) error { return nil } -func (l *Link) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - var x struct { - spec.Extensions - LinkProps - } - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - if err := internal.JSONRefFromMap(&l.Ref.Ref, x.Extensions); err != nil { - return err - } - l.Extensions = internal.SanitizeExtensions(x.Extensions) - l.LinkProps = x.LinkProps - return nil -} - // LinkProps describes a single response from an API Operation, more at https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#responseObject type LinkProps struct { // OperationId is the name of an existing, resolvable OAS operation diff --git a/vendor/k8s.io/kube-openapi/pkg/spec3/security_requirement.go b/vendor/k8s.io/kube-openapi/pkg/spec3/security_requirement.go new file mode 100644 index 000000000..0ce8924ef --- /dev/null +++ b/vendor/k8s.io/kube-openapi/pkg/spec3/security_requirement.go @@ -0,0 +1,56 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package spec3 + +import ( + "encoding/json" + + "k8s.io/kube-openapi/pkg/validation/spec" + "github.com/go-openapi/swag" +) + +// SecurityRequirementProps describes the required security schemes to execute an operation, more at https://swagger.io/specification/#security-requirement-object +// +// Note that this struct is actually a thin wrapper around SecurityRequirementProps to make it referable and extensible +type SecurityRequirement struct { + SecurityRequirementProps + spec.VendorExtensible +} + +// MarshalJSON is a custom marshal function that knows how to encode SecurityRequirement as JSON +func (s *SecurityRequirement) MarshalJSON() ([]byte, error) { + b1, err := json.Marshal(s.SecurityRequirementProps) + if err != nil { + return nil, err + } + b2, err := json.Marshal(s.VendorExtensible) + if err != nil { + return nil, err + } + return swag.ConcatJSON(b1, b2), nil +} + +// UnmarshalJSON hydrates this items instance with the data from JSON +func (s *SecurityRequirement) UnmarshalJSON(data []byte) error { + if err := json.Unmarshal(data, &s.SecurityRequirementProps); err != nil { + return err + } + return json.Unmarshal(data, &s.VendorExtensible) +} + +// SecurityRequirementProps describes the required security schemes to execute an operation, more at https://swagger.io/specification/#security-requirement-object +type SecurityRequirementProps map[string][]string diff --git a/vendor/k8s.io/kube-openapi/pkg/spec3/security_scheme.go b/vendor/k8s.io/kube-openapi/pkg/spec3/security_scheme.go index edf7e6de3..9b1352f4e 100644 --- a/vendor/k8s.io/kube-openapi/pkg/spec3/security_scheme.go +++ b/vendor/k8s.io/kube-openapi/pkg/spec3/security_scheme.go @@ -19,8 +19,8 @@ package spec3 import ( "encoding/json" - "github.com/go-openapi/swag" "k8s.io/kube-openapi/pkg/validation/spec" + "github.com/go-openapi/swag" ) // SecurityScheme defines reusable Security Scheme Object, more at https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#securitySchemeObject diff --git a/vendor/k8s.io/kube-openapi/pkg/spec3/server.go b/vendor/k8s.io/kube-openapi/pkg/spec3/server.go index d5df0a781..a505fb221 100644 --- a/vendor/k8s.io/kube-openapi/pkg/spec3/server.go +++ b/vendor/k8s.io/kube-openapi/pkg/spec3/server.go @@ -18,11 +18,9 @@ package spec3 import ( "encoding/json" - - "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" "k8s.io/kube-openapi/pkg/validation/spec" + "github.com/go-openapi/swag" + ) type Server struct { @@ -53,10 +51,6 @@ func (s *Server) MarshalJSON() ([]byte, error) { } func (s *Server) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshalingV3 { - return jsonv2.Unmarshal(data, s) - } - if err := json.Unmarshal(data, &s.ServerProps); err != nil { return err } @@ -66,20 +60,6 @@ func (s *Server) UnmarshalJSON(data []byte) error { return nil } -func (s *Server) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - var x struct { - spec.Extensions - ServerProps - } - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - s.Extensions = internal.SanitizeExtensions(x.Extensions) - s.ServerProps = x.ServerProps - - return nil -} - type ServerVariable struct { ServerVariableProps spec.VendorExtensible @@ -108,9 +88,6 @@ func (s *ServerVariable) MarshalJSON() ([]byte, error) { } func (s *ServerVariable) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshalingV3 { - return jsonv2.Unmarshal(data, s) - } if err := json.Unmarshal(data, &s.ServerVariableProps); err != nil { return err } @@ -119,17 +96,3 @@ func (s *ServerVariable) UnmarshalJSON(data []byte) error { } return nil } - -func (s *ServerVariable) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - var x struct { - spec.Extensions - ServerVariableProps - } - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - s.Extensions = internal.SanitizeExtensions(x.Extensions) - s.ServerVariableProps = x.ServerVariableProps - - return nil -} diff --git a/vendor/k8s.io/kube-openapi/pkg/spec3/spec.go b/vendor/k8s.io/kube-openapi/pkg/spec3/spec.go index bed096fb7..3ff48a3c3 100644 --- a/vendor/k8s.io/kube-openapi/pkg/spec3/spec.go +++ b/vendor/k8s.io/kube-openapi/pkg/spec3/spec.go @@ -17,10 +17,6 @@ limitations under the License. package spec3 import ( - "encoding/json" - - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" "k8s.io/kube-openapi/pkg/validation/spec" ) @@ -39,12 +35,3 @@ type OpenAPI struct { // ExternalDocs holds additional external documentation ExternalDocs *ExternalDocumentation `json:"externalDocs,omitempty"` } - -func (o *OpenAPI) UnmarshalJSON(data []byte) error { - type OpenAPIWithNoFunctions OpenAPI - p := (*OpenAPIWithNoFunctions)(o) - if internal.UseOptimizedJSONUnmarshalingV3 { - return jsonv2.Unmarshal(data, &p) - } - return json.Unmarshal(data, &p) -} diff --git a/vendor/k8s.io/kube-openapi/pkg/util/proto/document_v3.go b/vendor/k8s.io/kube-openapi/pkg/util/proto/document_v3.go index 519dcf2eb..a3f476d5d 100644 --- a/vendor/k8s.io/kube-openapi/pkg/util/proto/document_v3.go +++ b/vendor/k8s.io/kube-openapi/pkg/util/proto/document_v3.go @@ -120,7 +120,7 @@ func (d *Definitions) ParseSchemaV3(s *openapi_v3.Schema, path *Path) (Schema, e switch s.GetType() { case object: for _, extension := range s.GetSpecificationExtension() { - if extension.Name == "x-kubernetes-group-version-kind" { + if extension.Name == "x-kuberentes-group-version-kind" { // Objects with x-kubernetes-group-version-kind are always top // level types. return d.parseV3Kind(s, path) @@ -285,7 +285,7 @@ func parseV3Interface(def *yaml.Node) (interface{}, error) { func (d *Definitions) parseV3BaseSchema(s *openapi_v3.Schema, path *Path) (*BaseSchema, error) { if s == nil { - return nil, fmt.Errorf("cannot initialize BaseSchema from nil") + return nil, fmt.Errorf("cannot initializae BaseSchema from nil") } def, err := parseV3Interface(s.GetDefault().ToRawInfo()) diff --git a/vendor/k8s.io/kube-openapi/pkg/validation/spec/fuzz.go b/vendor/k8s.io/kube-openapi/pkg/validation/spec/fuzz.go deleted file mode 100644 index c66f998f5..000000000 --- a/vendor/k8s.io/kube-openapi/pkg/validation/spec/fuzz.go +++ /dev/null @@ -1,502 +0,0 @@ -/* -Copyright 2022 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package spec - -import ( - "github.com/go-openapi/jsonreference" - "github.com/google/go-cmp/cmp" - fuzz "github.com/google/gofuzz" -) - -var SwaggerFuzzFuncs []interface{} = []interface{}{ - func(v *Responses, c fuzz.Continue) { - c.FuzzNoCustom(v) - if v.Default != nil { - // Check if we hit maxDepth and left an incomplete value - if v.Default.Description == "" { - v.Default = nil - v.StatusCodeResponses = nil - } - } - - // conversion has no way to discern empty statusCodeResponses from - // nil, since "default" is always included in the map. - // So avoid empty responses list - if len(v.StatusCodeResponses) == 0 { - v.StatusCodeResponses = nil - } - }, - func(v *Operation, c fuzz.Continue) { - c.FuzzNoCustom(v) - - if v != nil { - // force non-nil - v.Responses = &Responses{} - c.Fuzz(v.Responses) - - v.Schemes = nil - if c.RandBool() { - v.Schemes = append(v.Schemes, "http") - } - - if c.RandBool() { - v.Schemes = append(v.Schemes, "https") - } - - if c.RandBool() { - v.Schemes = append(v.Schemes, "ws") - } - - if c.RandBool() { - v.Schemes = append(v.Schemes, "wss") - } - - // Gnostic unconditionally makes security values non-null - // So do not fuzz null values into the array. - for i, val := range v.Security { - if val == nil { - v.Security[i] = make(map[string][]string) - } - - for k, v := range val { - if v == nil { - val[k] = make([]string, 0) - } - } - } - } - }, - func(v map[int]Response, c fuzz.Continue) { - n := 0 - c.Fuzz(&n) - if n == 0 { - // Test that fuzzer is not at maxDepth so we do not - // end up with empty elements - return - } - - // Prevent negative numbers - num := c.Intn(4) - for i := 0; i < num+2; i++ { - val := Response{} - c.Fuzz(&val) - - val.Description = c.RandString() + "x" - v[100*(i+1)+c.Intn(100)] = val - } - }, - func(v map[string]PathItem, c fuzz.Continue) { - n := 0 - c.Fuzz(&n) - if n == 0 { - // Test that fuzzer is not at maxDepth so we do not - // end up with empty elements - return - } - - num := c.Intn(5) - for i := 0; i < num+2; i++ { - val := PathItem{} - c.Fuzz(&val) - - // Ref params are only allowed in certain locations, so - // possibly add a few to PathItems - numRefsToAdd := c.Intn(5) - for i := 0; i < numRefsToAdd; i++ { - theRef := Parameter{} - c.Fuzz(&theRef.Refable) - - val.Parameters = append(val.Parameters, theRef) - } - - v["/"+c.RandString()] = val - } - }, - func(v *SchemaOrArray, c fuzz.Continue) { - *v = SchemaOrArray{} - // gnostic parser just doesn't support more - // than one Schema here - v.Schema = &Schema{} - c.Fuzz(&v.Schema) - - }, - func(v *SchemaOrBool, c fuzz.Continue) { - *v = SchemaOrBool{} - - if c.RandBool() { - v.Allows = c.RandBool() - } else { - v.Schema = &Schema{} - v.Allows = true - c.Fuzz(&v.Schema) - } - }, - func(v map[string]Response, c fuzz.Continue) { - n := 0 - c.Fuzz(&n) - if n == 0 { - // Test that fuzzer is not at maxDepth so we do not - // end up with empty elements - return - } - - // Response definitions are not allowed to - // be refs - for i := 0; i < c.Intn(5)+1; i++ { - resp := &Response{} - - c.Fuzz(resp) - resp.Ref = Ref{} - resp.Description = c.RandString() + "x" - - // Response refs are not vendor extensible by gnostic - resp.VendorExtensible.Extensions = nil - v[c.RandString()+"x"] = *resp - } - }, - func(v *Header, c fuzz.Continue) { - if v != nil { - c.FuzzNoCustom(v) - - // descendant Items of Header may not be refs - cur := v.Items - for cur != nil { - cur.Ref = Ref{} - cur = cur.Items - } - } - }, - func(v *Ref, c fuzz.Continue) { - *v = Ref{} - v.Ref, _ = jsonreference.New("http://asd.com/" + c.RandString()) - }, - func(v *Response, c fuzz.Continue) { - *v = Response{} - if c.RandBool() { - v.Ref = Ref{} - v.Ref.Ref, _ = jsonreference.New("http://asd.com/" + c.RandString()) - } else { - c.Fuzz(&v.VendorExtensible) - c.Fuzz(&v.Schema) - c.Fuzz(&v.ResponseProps) - - v.Headers = nil - v.Ref = Ref{} - - n := 0 - c.Fuzz(&n) - if n != 0 { - // Test that fuzzer is not at maxDepth so we do not - // end up with empty elements - num := c.Intn(4) - for i := 0; i < num; i++ { - if v.Headers == nil { - v.Headers = make(map[string]Header) - } - hdr := Header{} - c.Fuzz(&hdr) - if hdr.Type == "" { - // hit maxDepth, just abort trying to make haders - v.Headers = nil - break - } - v.Headers[c.RandString()+"x"] = hdr - } - } else { - v.Headers = nil - } - } - - v.Description = c.RandString() + "x" - - // Gnostic parses empty as nil, so to keep avoid putting empty - if len(v.Headers) == 0 { - v.Headers = nil - } - }, - func(v **Info, c fuzz.Continue) { - // Info is never nil - *v = &Info{} - c.FuzzNoCustom(*v) - - (*v).Title = c.RandString() + "x" - }, - func(v *Extensions, c fuzz.Continue) { - // gnostic parser only picks up x- vendor extensions - numChildren := c.Intn(5) - for i := 0; i < numChildren; i++ { - if *v == nil { - *v = Extensions{} - } - (*v)["x-"+c.RandString()] = c.RandString() - } - }, - func(v *Swagger, c fuzz.Continue) { - c.FuzzNoCustom(v) - - if v.Paths == nil { - // Force paths non-nil since it does not have omitempty in json tag. - // This means a perfect roundtrip (via json) is impossible, - // since we can't tell the difference between empty/unspecified paths - v.Paths = &Paths{} - c.Fuzz(v.Paths) - } - - v.Swagger = "2.0" - - // Gnostic support serializing ID at all - // unavoidable data loss - v.ID = "" - - v.Schemes = nil - if c.RandUint64()%2 == 1 { - v.Schemes = append(v.Schemes, "http") - } - - if c.RandUint64()%2 == 1 { - v.Schemes = append(v.Schemes, "https") - } - - if c.RandUint64()%2 == 1 { - v.Schemes = append(v.Schemes, "ws") - } - - if c.RandUint64()%2 == 1 { - v.Schemes = append(v.Schemes, "wss") - } - - // Gnostic unconditionally makes security values non-null - // So do not fuzz null values into the array. - for i, val := range v.Security { - if val == nil { - v.Security[i] = make(map[string][]string) - } - - for k, v := range val { - if v == nil { - val[k] = make([]string, 0) - } - } - } - }, - func(v *SecurityScheme, c fuzz.Continue) { - v.Description = c.RandString() + "x" - c.Fuzz(&v.VendorExtensible) - - switch c.Intn(3) { - case 0: - v.Type = "basic" - case 1: - v.Type = "apiKey" - switch c.Intn(2) { - case 0: - v.In = "header" - case 1: - v.In = "query" - default: - panic("unreachable") - } - v.Name = "x" + c.RandString() - case 2: - v.Type = "oauth2" - - switch c.Intn(4) { - case 0: - v.Flow = "accessCode" - v.TokenURL = "https://" + c.RandString() - v.AuthorizationURL = "https://" + c.RandString() - case 1: - v.Flow = "application" - v.TokenURL = "https://" + c.RandString() - case 2: - v.Flow = "implicit" - v.AuthorizationURL = "https://" + c.RandString() - case 3: - v.Flow = "password" - v.TokenURL = "https://" + c.RandString() - default: - panic("unreachable") - } - c.Fuzz(&v.Scopes) - default: - panic("unreachable") - } - }, - func(v *interface{}, c fuzz.Continue) { - *v = c.RandString() + "x" - }, - func(v *string, c fuzz.Continue) { - *v = c.RandString() + "x" - }, - func(v *ExternalDocumentation, c fuzz.Continue) { - v.Description = c.RandString() + "x" - v.URL = c.RandString() + "x" - }, - func(v *SimpleSchema, c fuzz.Continue) { - c.FuzzNoCustom(v) - - switch c.Intn(5) { - case 0: - v.Type = "string" - case 1: - v.Type = "number" - case 2: - v.Type = "boolean" - case 3: - v.Type = "integer" - case 4: - v.Type = "array" - default: - panic("unreachable") - } - - switch c.Intn(5) { - case 0: - v.CollectionFormat = "csv" - case 1: - v.CollectionFormat = "ssv" - case 2: - v.CollectionFormat = "tsv" - case 3: - v.CollectionFormat = "pipes" - case 4: - v.CollectionFormat = "" - default: - panic("unreachable") - } - - // None of the types which include SimpleSchema in our definitions - // actually support "example" in the official spec - v.Example = nil - - // unsupported by openapi - v.Nullable = false - }, - func(v *int64, c fuzz.Continue) { - c.Fuzz(v) - - // Gnostic does not differentiate between 0 and non-specified - // so avoid using 0 for fuzzer - if *v == 0 { - *v = 1 - } - }, - func(v *float64, c fuzz.Continue) { - c.Fuzz(v) - - // Gnostic does not differentiate between 0 and non-specified - // so avoid using 0 for fuzzer - if *v == 0.0 { - *v = 1.0 - } - }, - func(v *Parameter, c fuzz.Continue) { - if v == nil { - return - } - c.Fuzz(&v.VendorExtensible) - if c.RandBool() { - // body param - v.Description = c.RandString() + "x" - v.Name = c.RandString() + "x" - v.In = "body" - c.Fuzz(&v.Description) - c.Fuzz(&v.Required) - - v.Schema = &Schema{} - c.Fuzz(&v.Schema) - - } else { - c.Fuzz(&v.SimpleSchema) - c.Fuzz(&v.CommonValidations) - v.AllowEmptyValue = false - v.Description = c.RandString() + "x" - v.Name = c.RandString() + "x" - - switch c.Intn(4) { - case 0: - // Header param - v.In = "header" - case 1: - // Form data param - v.In = "formData" - v.AllowEmptyValue = c.RandBool() - case 2: - // Query param - v.In = "query" - v.AllowEmptyValue = c.RandBool() - case 3: - // Path param - v.In = "path" - v.Required = true - default: - panic("unreachable") - } - - // descendant Items of Parameter may not be refs - cur := v.Items - for cur != nil { - cur.Ref = Ref{} - cur = cur.Items - } - } - }, - func(v *Schema, c fuzz.Continue) { - if c.RandBool() { - // file schema - c.Fuzz(&v.Default) - c.Fuzz(&v.Description) - c.Fuzz(&v.Example) - c.Fuzz(&v.ExternalDocs) - - c.Fuzz(&v.Format) - c.Fuzz(&v.ReadOnly) - c.Fuzz(&v.Required) - c.Fuzz(&v.Title) - v.Type = StringOrArray{"file"} - - } else { - // normal schema - c.Fuzz(&v.SchemaProps) - c.Fuzz(&v.SwaggerSchemaProps) - c.Fuzz(&v.VendorExtensible) - // c.Fuzz(&v.ExtraProps) - // ExtraProps will not roundtrip - gnostic throws out - // unrecognized keys - } - - // Not supported by official openapi v2 spec - // and stripped by k8s apiserver - v.ID = "" - v.AnyOf = nil - v.OneOf = nil - v.Not = nil - v.Nullable = false - v.AdditionalItems = nil - v.Schema = "" - v.PatternProperties = nil - v.Definitions = nil - v.Dependencies = nil - }, -} - -var SwaggerDiffOptions = []cmp.Option{ - // cmp.Diff panics on Ref since jsonreference.Ref uses unexported fields - cmp.Comparer(func(a Ref, b Ref) bool { - return a.String() == b.String() - }), -} diff --git a/vendor/k8s.io/kube-openapi/pkg/validation/spec/gnostic.go b/vendor/k8s.io/kube-openapi/pkg/validation/spec/gnostic.go index 406a09d9d..35fd57920 100644 --- a/vendor/k8s.io/kube-openapi/pkg/validation/spec/gnostic.go +++ b/vendor/k8s.io/kube-openapi/pkg/validation/spec/gnostic.go @@ -219,8 +219,8 @@ func (k *Ref) FromGnostic(g string) error { // Caveats: // // - gnostic v2 documents treats zero as unspecified for numerical fields of -// CommonValidations fields such as Maximum, Minimum, MaximumItems, etc. -// There will always be data loss if one of the values of these fields is set to zero. +//CommonValidations fields such as Maximum, Minimum, MaximumItems, etc. +//There will always be data loss if one of the values of these fields is set to zero. // // Returns: // @@ -1263,8 +1263,6 @@ func (k *Schema) FromGnostic(g *openapi_v2.Schema) (ok bool, err error) { k.AdditionalProperties.Allows = g.AdditionalProperties.GetBoolean() } else { k.AdditionalProperties.Schema = &Schema{} - k.AdditionalProperties.Allows = true - if nok, err := k.AdditionalProperties.Schema.FromGnostic(g.AdditionalProperties.GetSchema()); err != nil { return false, err } else if !nok { diff --git a/vendor/k8s.io/kube-openapi/pkg/validation/spec/header.go b/vendor/k8s.io/kube-openapi/pkg/validation/spec/header.go index 05310c46b..597fc9631 100644 --- a/vendor/k8s.io/kube-openapi/pkg/validation/spec/header.go +++ b/vendor/k8s.io/kube-openapi/pkg/validation/spec/header.go @@ -18,8 +18,6 @@ import ( "encoding/json" "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" ) const ( @@ -43,9 +41,6 @@ type Header struct { // MarshalJSON marshal this to JSON func (h Header) MarshalJSON() ([]byte, error) { - if internal.UseOptimizedJSONMarshaling { - return internal.DeterministicMarshal(h) - } b1, err := json.Marshal(h.CommonValidations) if err != nil { return nil, err @@ -65,26 +60,8 @@ func (h Header) MarshalJSON() ([]byte, error) { return swag.ConcatJSON(b1, b2, b3, b4), nil } -func (h Header) MarshalNextJSON(opts jsonv2.MarshalOptions, enc *jsonv2.Encoder) error { - var x struct { - CommonValidations commonValidationsOmitZero `json:",inline"` - SimpleSchema simpleSchemaOmitZero `json:",inline"` - Extensions - HeaderProps - } - x.CommonValidations = commonValidationsOmitZero(h.CommonValidations) - x.SimpleSchema = simpleSchemaOmitZero(h.SimpleSchema) - x.Extensions = internal.SanitizeExtensions(h.Extensions) - x.HeaderProps = h.HeaderProps - return opts.MarshalNext(enc, x) -} - // UnmarshalJSON unmarshals this header from JSON func (h *Header) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshaling { - return jsonv2.Unmarshal(data, h) - } - if err := json.Unmarshal(data, &h.CommonValidations); err != nil { return err } @@ -96,23 +73,3 @@ func (h *Header) UnmarshalJSON(data []byte) error { } return json.Unmarshal(data, &h.HeaderProps) } - -func (h *Header) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - var x struct { - CommonValidations - SimpleSchema - Extensions - HeaderProps - } - - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - - h.CommonValidations = x.CommonValidations - h.SimpleSchema = x.SimpleSchema - h.Extensions = internal.SanitizeExtensions(x.Extensions) - h.HeaderProps = x.HeaderProps - - return nil -} diff --git a/vendor/k8s.io/kube-openapi/pkg/validation/spec/info.go b/vendor/k8s.io/kube-openapi/pkg/validation/spec/info.go index d667b705b..51a2f5781 100644 --- a/vendor/k8s.io/kube-openapi/pkg/validation/spec/info.go +++ b/vendor/k8s.io/kube-openapi/pkg/validation/spec/info.go @@ -19,8 +19,6 @@ import ( "strings" "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" ) // Extensions vendor specific extensions @@ -89,19 +87,6 @@ func (e Extensions) GetObject(key string, out interface{}) error { return nil } -func (e Extensions) sanitizeWithExtra() (extra map[string]any) { - for k, v := range e { - if !internal.IsExtensionKey(k) { - if extra == nil { - extra = make(map[string]any) - } - extra[k] = v - delete(e, k) - } - } - return extra -} - // VendorExtensible composition block. type VendorExtensible struct { Extensions Extensions @@ -169,9 +154,6 @@ type Info struct { // MarshalJSON marshal this to JSON func (i Info) MarshalJSON() ([]byte, error) { - if internal.UseOptimizedJSONMarshaling { - return internal.DeterministicMarshal(i) - } b1, err := json.Marshal(i.InfoProps) if err != nil { return nil, err @@ -183,37 +165,10 @@ func (i Info) MarshalJSON() ([]byte, error) { return swag.ConcatJSON(b1, b2), nil } -func (i Info) MarshalNextJSON(opts jsonv2.MarshalOptions, enc *jsonv2.Encoder) error { - var x struct { - Extensions - InfoProps - } - x.Extensions = i.Extensions - x.InfoProps = i.InfoProps - return opts.MarshalNext(enc, x) -} - // UnmarshalJSON marshal this from JSON func (i *Info) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshaling { - return jsonv2.Unmarshal(data, i) - } - if err := json.Unmarshal(data, &i.InfoProps); err != nil { return err } return json.Unmarshal(data, &i.VendorExtensible) } - -func (i *Info) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - var x struct { - Extensions - InfoProps - } - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - i.Extensions = internal.SanitizeExtensions(x.Extensions) - i.InfoProps = x.InfoProps - return nil -} diff --git a/vendor/k8s.io/kube-openapi/pkg/validation/spec/items.go b/vendor/k8s.io/kube-openapi/pkg/validation/spec/items.go index 4132467d2..b75aefe16 100644 --- a/vendor/k8s.io/kube-openapi/pkg/validation/spec/items.go +++ b/vendor/k8s.io/kube-openapi/pkg/validation/spec/items.go @@ -18,8 +18,6 @@ import ( "encoding/json" "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" ) const ( @@ -37,18 +35,6 @@ type SimpleSchema struct { Example interface{} `json:"example,omitempty"` } -// Marshaling structure only, always edit along with corresponding -// struct (or compilation will fail). -type simpleSchemaOmitZero struct { - Type string `json:"type,omitempty"` - Nullable bool `json:"nullable,omitzero"` - Format string `json:"format,omitempty"` - Items *Items `json:"items,omitzero"` - CollectionFormat string `json:"collectionFormat,omitempty"` - Default interface{} `json:"default,omitempty"` - Example interface{} `json:"example,omitempty"` -} - // CommonValidations describe common JSON-schema validations type CommonValidations struct { Maximum *float64 `json:"maximum,omitempty"` @@ -65,23 +51,6 @@ type CommonValidations struct { Enum []interface{} `json:"enum,omitempty"` } -// Marshaling structure only, always edit along with corresponding -// struct (or compilation will fail). -type commonValidationsOmitZero struct { - Maximum *float64 `json:"maximum,omitempty"` - ExclusiveMaximum bool `json:"exclusiveMaximum,omitzero"` - Minimum *float64 `json:"minimum,omitempty"` - ExclusiveMinimum bool `json:"exclusiveMinimum,omitzero"` - MaxLength *int64 `json:"maxLength,omitempty"` - MinLength *int64 `json:"minLength,omitempty"` - Pattern string `json:"pattern,omitempty"` - MaxItems *int64 `json:"maxItems,omitempty"` - MinItems *int64 `json:"minItems,omitempty"` - UniqueItems bool `json:"uniqueItems,omitzero"` - MultipleOf *float64 `json:"multipleOf,omitempty"` - Enum []interface{} `json:"enum,omitempty"` -} - // Items a limited subset of JSON-Schema's items object. // It is used by parameter definitions that are not located in "body". // @@ -95,10 +64,6 @@ type Items struct { // UnmarshalJSON hydrates this items instance with the data from JSON func (i *Items) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshaling { - return jsonv2.Unmarshal(data, i) - } - var validations CommonValidations if err := json.Unmarshal(data, &validations); err != nil { return err @@ -122,30 +87,8 @@ func (i *Items) UnmarshalJSON(data []byte) error { return nil } -func (i *Items) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - var x struct { - CommonValidations - SimpleSchema - Extensions - } - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - if err := i.Refable.Ref.fromMap(x.Extensions); err != nil { - return err - } - - i.CommonValidations = x.CommonValidations - i.SimpleSchema = x.SimpleSchema - i.Extensions = internal.SanitizeExtensions(x.Extensions) - return nil -} - // MarshalJSON converts this items object to JSON func (i Items) MarshalJSON() ([]byte, error) { - if internal.UseOptimizedJSONMarshaling { - return internal.DeterministicMarshal(i) - } b1, err := json.Marshal(i.CommonValidations) if err != nil { return nil, err @@ -164,17 +107,3 @@ func (i Items) MarshalJSON() ([]byte, error) { } return swag.ConcatJSON(b4, b3, b1, b2), nil } - -func (i Items) MarshalNextJSON(opts jsonv2.MarshalOptions, enc *jsonv2.Encoder) error { - var x struct { - CommonValidations commonValidationsOmitZero `json:",inline"` - SimpleSchema simpleSchemaOmitZero `json:",inline"` - Ref string `json:"$ref,omitempty"` - Extensions - } - x.CommonValidations = commonValidationsOmitZero(i.CommonValidations) - x.SimpleSchema = simpleSchemaOmitZero(i.SimpleSchema) - x.Ref = i.Refable.Ref.String() - x.Extensions = internal.SanitizeExtensions(i.Extensions) - return opts.MarshalNext(enc, x) -} diff --git a/vendor/k8s.io/kube-openapi/pkg/validation/spec/operation.go b/vendor/k8s.io/kube-openapi/pkg/validation/spec/operation.go index 63eed3460..c7acd8672 100644 --- a/vendor/k8s.io/kube-openapi/pkg/validation/spec/operation.go +++ b/vendor/k8s.io/kube-openapi/pkg/validation/spec/operation.go @@ -18,8 +18,6 @@ import ( "encoding/json" "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" ) // OperationProps describes an operation @@ -42,23 +40,6 @@ type OperationProps struct { Responses *Responses `json:"responses,omitempty"` } -// Marshaling structure only, always edit along with corresponding -// struct (or compilation will fail). -type operationPropsOmitZero struct { - Description string `json:"description,omitempty"` - Consumes []string `json:"consumes,omitempty"` - Produces []string `json:"produces,omitempty"` - Schemes []string `json:"schemes,omitempty"` - Tags []string `json:"tags,omitempty"` - Summary string `json:"summary,omitempty"` - ExternalDocs *ExternalDocumentation `json:"externalDocs,omitzero"` - ID string `json:"operationId,omitempty"` - Deprecated bool `json:"deprecated,omitempty,omitzero"` - Security []map[string][]string `json:"security,omitempty"` - Parameters []Parameter `json:"parameters,omitempty"` - Responses *Responses `json:"responses,omitzero"` -} - // MarshalJSON takes care of serializing operation properties to JSON // // We use a custom marhaller here to handle a special cases related to @@ -94,35 +75,14 @@ type Operation struct { // UnmarshalJSON hydrates this items instance with the data from JSON func (o *Operation) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshaling { - return jsonv2.Unmarshal(data, o) - } - if err := json.Unmarshal(data, &o.OperationProps); err != nil { return err } return json.Unmarshal(data, &o.VendorExtensible) } -func (o *Operation) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - type OperationPropsNoMethods OperationProps // strip MarshalJSON method - var x struct { - Extensions - OperationPropsNoMethods - } - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - o.Extensions = internal.SanitizeExtensions(x.Extensions) - o.OperationProps = OperationProps(x.OperationPropsNoMethods) - return nil -} - // MarshalJSON converts this items object to JSON func (o Operation) MarshalJSON() ([]byte, error) { - if internal.UseOptimizedJSONMarshaling { - return internal.DeterministicMarshal(o) - } b1, err := json.Marshal(o.OperationProps) if err != nil { return nil, err @@ -134,13 +94,3 @@ func (o Operation) MarshalJSON() ([]byte, error) { concated := swag.ConcatJSON(b1, b2) return concated, nil } - -func (o Operation) MarshalNextJSON(opts jsonv2.MarshalOptions, enc *jsonv2.Encoder) error { - var x struct { - Extensions - OperationProps operationPropsOmitZero `json:",inline"` - } - x.Extensions = internal.SanitizeExtensions(o.Extensions) - x.OperationProps = operationPropsOmitZero(o.OperationProps) - return opts.MarshalNext(enc, x) -} diff --git a/vendor/k8s.io/kube-openapi/pkg/validation/spec/parameter.go b/vendor/k8s.io/kube-openapi/pkg/validation/spec/parameter.go index 53d1e0aa9..218513974 100644 --- a/vendor/k8s.io/kube-openapi/pkg/validation/spec/parameter.go +++ b/vendor/k8s.io/kube-openapi/pkg/validation/spec/parameter.go @@ -18,8 +18,6 @@ import ( "encoding/json" "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" ) // ParamProps describes the specific attributes of an operation parameter @@ -36,46 +34,30 @@ type ParamProps struct { AllowEmptyValue bool `json:"allowEmptyValue,omitempty"` } -// Marshaling structure only, always edit along with corresponding -// struct (or compilation will fail). -type paramPropsOmitZero struct { - Description string `json:"description,omitempty"` - Name string `json:"name,omitempty"` - In string `json:"in,omitempty"` - Required bool `json:"required,omitzero"` - Schema *Schema `json:"schema,omitzero"` - AllowEmptyValue bool `json:"allowEmptyValue,omitzero"` -} - // Parameter a unique parameter is defined by a combination of a [name](#parameterName) and [location](#parameterIn). // // There are five possible parameter types. // * Path - Used together with [Path Templating](#pathTemplating), where the parameter value is actually part -// -// of the operation's URL. This does not include the host or base path of the API. For example, in `/items/{itemId}`, -// the path parameter is `itemId`. -// +// of the operation's URL. This does not include the host or base path of the API. For example, in `/items/{itemId}`, +// the path parameter is `itemId`. // * Query - Parameters that are appended to the URL. For example, in `/items?id=###`, the query parameter is `id`. // * Header - Custom headers that are expected as part of the request. // * Body - The payload that's appended to the HTTP request. Since there can only be one payload, there can only be -// -// _one_ body parameter. The name of the body parameter has no effect on the parameter itself and is used for -// documentation purposes only. Since Form parameters are also in the payload, body and form parameters cannot exist -// together for the same operation. -// +// _one_ body parameter. The name of the body parameter has no effect on the parameter itself and is used for +// documentation purposes only. Since Form parameters are also in the payload, body and form parameters cannot exist +// together for the same operation. // * Form - Used to describe the payload of an HTTP request when either `application/x-www-form-urlencoded` or -// -// `multipart/form-data` are used as the content type of the request (in Swagger's definition, -// the [`consumes`](#operationConsumes) property of an operation). This is the only parameter type that can be used -// to send files, thus supporting the `file` type. Since form parameters are sent in the payload, they cannot be -// declared together with a body parameter for the same operation. Form parameters have a different format based on -// the content-type used (for further details, consult http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4). -// * `application/x-www-form-urlencoded` - Similar to the format of Query parameters but as a payload. -// For example, `foo=1&bar=swagger` - both `foo` and `bar` are form parameters. This is normally used for simple -// parameters that are being transferred. -// * `multipart/form-data` - each parameter takes a section in the payload with an internal header. -// For example, for the header `Content-Disposition: form-data; name="submit-name"` the name of the parameter is -// `submit-name`. This type of form parameters is more commonly used for file transfers. +// `multipart/form-data` are used as the content type of the request (in Swagger's definition, +// the [`consumes`](#operationConsumes) property of an operation). This is the only parameter type that can be used +// to send files, thus supporting the `file` type. Since form parameters are sent in the payload, they cannot be +// declared together with a body parameter for the same operation. Form parameters have a different format based on +// the content-type used (for further details, consult http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4). +// * `application/x-www-form-urlencoded` - Similar to the format of Query parameters but as a payload. +// For example, `foo=1&bar=swagger` - both `foo` and `bar` are form parameters. This is normally used for simple +// parameters that are being transferred. +// * `multipart/form-data` - each parameter takes a section in the payload with an internal header. +// For example, for the header `Content-Disposition: form-data; name="submit-name"` the name of the parameter is +// `submit-name`. This type of form parameters is more commonly used for file transfers. // // For more information: http://goo.gl/8us55a#parameterObject type Parameter struct { @@ -88,10 +70,6 @@ type Parameter struct { // UnmarshalJSON hydrates this items instance with the data from JSON func (p *Parameter) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshaling { - return jsonv2.Unmarshal(data, p) - } - if err := json.Unmarshal(data, &p.CommonValidations); err != nil { return err } @@ -107,31 +85,8 @@ func (p *Parameter) UnmarshalJSON(data []byte) error { return json.Unmarshal(data, &p.ParamProps) } -func (p *Parameter) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - var x struct { - CommonValidations - SimpleSchema - Extensions - ParamProps - } - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - if err := p.Refable.Ref.fromMap(x.Extensions); err != nil { - return err - } - p.CommonValidations = x.CommonValidations - p.SimpleSchema = x.SimpleSchema - p.Extensions = internal.SanitizeExtensions(x.Extensions) - p.ParamProps = x.ParamProps - return nil -} - // MarshalJSON converts this items object to JSON func (p Parameter) MarshalJSON() ([]byte, error) { - if internal.UseOptimizedJSONMarshaling { - return internal.DeterministicMarshal(p) - } b1, err := json.Marshal(p.CommonValidations) if err != nil { return nil, err @@ -154,19 +109,3 @@ func (p Parameter) MarshalJSON() ([]byte, error) { } return swag.ConcatJSON(b3, b1, b2, b4, b5), nil } - -func (p Parameter) MarshalNextJSON(opts jsonv2.MarshalOptions, enc *jsonv2.Encoder) error { - var x struct { - CommonValidations commonValidationsOmitZero `json:",inline"` - SimpleSchema simpleSchemaOmitZero `json:",inline"` - ParamProps paramPropsOmitZero `json:",inline"` - Ref string `json:"$ref,omitempty"` - Extensions - } - x.CommonValidations = commonValidationsOmitZero(p.CommonValidations) - x.SimpleSchema = simpleSchemaOmitZero(p.SimpleSchema) - x.Extensions = internal.SanitizeExtensions(p.Extensions) - x.ParamProps = paramPropsOmitZero(p.ParamProps) - x.Ref = p.Refable.Ref.String() - return opts.MarshalNext(enc, x) -} diff --git a/vendor/k8s.io/kube-openapi/pkg/validation/spec/path_item.go b/vendor/k8s.io/kube-openapi/pkg/validation/spec/path_item.go index 1d1588cb9..04de58f00 100644 --- a/vendor/k8s.io/kube-openapi/pkg/validation/spec/path_item.go +++ b/vendor/k8s.io/kube-openapi/pkg/validation/spec/path_item.go @@ -18,8 +18,6 @@ import ( "encoding/json" "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" ) // PathItemProps the path item specific properties @@ -48,10 +46,6 @@ type PathItem struct { // UnmarshalJSON hydrates this items instance with the data from JSON func (p *PathItem) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshaling { - return jsonv2.Unmarshal(data, p) - } - if err := json.Unmarshal(data, &p.Refable); err != nil { return err } @@ -61,29 +55,8 @@ func (p *PathItem) UnmarshalJSON(data []byte) error { return json.Unmarshal(data, &p.PathItemProps) } -func (p *PathItem) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - var x struct { - Extensions - PathItemProps - } - - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - if err := p.Refable.Ref.fromMap(x.Extensions); err != nil { - return err - } - p.Extensions = internal.SanitizeExtensions(x.Extensions) - p.PathItemProps = x.PathItemProps - - return nil -} - // MarshalJSON converts this items object to JSON func (p PathItem) MarshalJSON() ([]byte, error) { - if internal.UseOptimizedJSONMarshaling { - return internal.DeterministicMarshal(p) - } b3, err := json.Marshal(p.Refable) if err != nil { return nil, err @@ -99,15 +72,3 @@ func (p PathItem) MarshalJSON() ([]byte, error) { concated := swag.ConcatJSON(b3, b4, b5) return concated, nil } - -func (p PathItem) MarshalNextJSON(opts jsonv2.MarshalOptions, enc *jsonv2.Encoder) error { - var x struct { - Ref string `json:"$ref,omitempty"` - Extensions - PathItemProps - } - x.Ref = p.Refable.Ref.String() - x.Extensions = internal.SanitizeExtensions(p.Extensions) - x.PathItemProps = p.PathItemProps - return opts.MarshalNext(enc, x) -} diff --git a/vendor/k8s.io/kube-openapi/pkg/validation/spec/paths.go b/vendor/k8s.io/kube-openapi/pkg/validation/spec/paths.go index 18f6a9f42..319aba879 100644 --- a/vendor/k8s.io/kube-openapi/pkg/validation/spec/paths.go +++ b/vendor/k8s.io/kube-openapi/pkg/validation/spec/paths.go @@ -16,12 +16,9 @@ package spec import ( "encoding/json" - "fmt" "strings" "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" ) // Paths holds the relative paths to the individual endpoints. @@ -37,10 +34,6 @@ type Paths struct { // UnmarshalJSON hydrates this items instance with the data from JSON func (p *Paths) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshaling { - return jsonv2.Unmarshal(data, p) - } - var res map[string]json.RawMessage if err := json.Unmarshal(data, &res); err != nil { return err @@ -70,65 +63,8 @@ func (p *Paths) UnmarshalJSON(data []byte) error { return nil } -func (p *Paths) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - tok, err := dec.ReadToken() - if err != nil { - return err - } - var ext any - var pi PathItem - switch k := tok.Kind(); k { - case 'n': - return nil // noop - case '{': - for { - tok, err := dec.ReadToken() - if err != nil { - return err - } - - if tok.Kind() == '}' { - return nil - } - - switch k := tok.String(); { - case internal.IsExtensionKey(k): - ext = nil - if err := opts.UnmarshalNext(dec, &ext); err != nil { - return err - } - - if p.Extensions == nil { - p.Extensions = make(map[string]any) - } - p.Extensions[k] = ext - case len(k) > 0 && k[0] == '/': - pi = PathItem{} - if err := opts.UnmarshalNext(dec, &pi); err != nil { - return err - } - - if p.Paths == nil { - p.Paths = make(map[string]PathItem) - } - p.Paths[k] = pi - default: - _, err := dec.ReadValue() // skip value - if err != nil { - return err - } - } - } - default: - return fmt.Errorf("unknown JSON kind: %v", k) - } -} - // MarshalJSON converts this items object to JSON func (p Paths) MarshalJSON() ([]byte, error) { - if internal.UseOptimizedJSONMarshaling { - return internal.DeterministicMarshal(p) - } b1, err := json.Marshal(p.VendorExtensible) if err != nil { return nil, err @@ -147,18 +83,3 @@ func (p Paths) MarshalJSON() ([]byte, error) { concated := swag.ConcatJSON(b1, b2) return concated, nil } - -func (p Paths) MarshalNextJSON(opts jsonv2.MarshalOptions, enc *jsonv2.Encoder) error { - m := make(map[string]any, len(p.Extensions)+len(p.Paths)) - for k, v := range p.Extensions { - if internal.IsExtensionKey(k) { - m[k] = v - } - } - for k, v := range p.Paths { - if strings.HasPrefix(k, "/") { - m[k] = v - } - } - return opts.MarshalNext(enc, m) -} diff --git a/vendor/k8s.io/kube-openapi/pkg/validation/spec/ref.go b/vendor/k8s.io/kube-openapi/pkg/validation/spec/ref.go index 775b3b0c3..1405bfd8e 100644 --- a/vendor/k8s.io/kube-openapi/pkg/validation/spec/ref.go +++ b/vendor/k8s.io/kube-openapi/pkg/validation/spec/ref.go @@ -21,8 +21,6 @@ import ( "path/filepath" "github.com/go-openapi/jsonreference" - - "k8s.io/kube-openapi/pkg/internal" ) // Refable is a struct for things that accept a $ref property @@ -151,5 +149,19 @@ func (r *Ref) UnmarshalJSON(d []byte) error { } func (r *Ref) fromMap(v map[string]interface{}) error { - return internal.JSONRefFromMap(&r.Ref, v) + if v == nil { + return nil + } + + if vv, ok := v["$ref"]; ok { + if str, ok := vv.(string); ok { + ref, err := jsonreference.New(str) + if err != nil { + return err + } + *r = Ref{Ref: ref} + } + } + + return nil } diff --git a/vendor/k8s.io/kube-openapi/pkg/validation/spec/response.go b/vendor/k8s.io/kube-openapi/pkg/validation/spec/response.go index 3ff1fe132..9fd717ec3 100644 --- a/vendor/k8s.io/kube-openapi/pkg/validation/spec/response.go +++ b/vendor/k8s.io/kube-openapi/pkg/validation/spec/response.go @@ -18,8 +18,6 @@ import ( "encoding/json" "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" ) // ResponseProps properties specific to a response @@ -30,15 +28,6 @@ type ResponseProps struct { Examples map[string]interface{} `json:"examples,omitempty"` } -// Marshaling structure only, always edit along with corresponding -// struct (or compilation will fail). -type responsePropsOmitZero struct { - Description string `json:"description,omitempty"` - Schema *Schema `json:"schema,omitzero"` - Headers map[string]Header `json:"headers,omitempty"` - Examples map[string]interface{} `json:"examples,omitempty"` -} - // Response describes a single response from an API Operation. // // For more information: http://goo.gl/8us55a#responseObject @@ -50,47 +39,17 @@ type Response struct { // UnmarshalJSON hydrates this items instance with the data from JSON func (r *Response) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshaling { - return jsonv2.Unmarshal(data, r) - } - if err := json.Unmarshal(data, &r.ResponseProps); err != nil { return err } if err := json.Unmarshal(data, &r.Refable); err != nil { return err } - if err := json.Unmarshal(data, &r.VendorExtensible); err != nil { - return err - } - - return nil -} - -func (r *Response) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - var x struct { - ResponseProps - Extensions - } - - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - - if err := r.Refable.Ref.fromMap(x.Extensions); err != nil { - return err - } - r.Extensions = internal.SanitizeExtensions(x.Extensions) - r.ResponseProps = x.ResponseProps - - return nil + return json.Unmarshal(data, &r.VendorExtensible) } // MarshalJSON converts this items object to JSON func (r Response) MarshalJSON() ([]byte, error) { - if internal.UseOptimizedJSONMarshaling { - return internal.DeterministicMarshal(r) - } b1, err := json.Marshal(r.ResponseProps) if err != nil { return nil, err @@ -106,18 +65,6 @@ func (r Response) MarshalJSON() ([]byte, error) { return swag.ConcatJSON(b1, b2, b3), nil } -func (r Response) MarshalNextJSON(opts jsonv2.MarshalOptions, enc *jsonv2.Encoder) error { - var x struct { - Ref string `json:"$ref,omitempty"` - Extensions - ResponseProps responsePropsOmitZero `json:",inline"` - } - x.Ref = r.Refable.Ref.String() - x.Extensions = internal.SanitizeExtensions(r.Extensions) - x.ResponseProps = responsePropsOmitZero(r.ResponseProps) - return opts.MarshalNext(enc, x) -} - // NewResponse creates a new response instance func NewResponse() *Response { return new(Response) diff --git a/vendor/k8s.io/kube-openapi/pkg/validation/spec/responses.go b/vendor/k8s.io/kube-openapi/pkg/validation/spec/responses.go index d9ad760a4..b2c3883a9 100644 --- a/vendor/k8s.io/kube-openapi/pkg/validation/spec/responses.go +++ b/vendor/k8s.io/kube-openapi/pkg/validation/spec/responses.go @@ -16,13 +16,10 @@ package spec import ( "encoding/json" - "fmt" "reflect" "strconv" "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" ) // Responses is a container for the expected responses of an operation. @@ -45,10 +42,6 @@ type Responses struct { // UnmarshalJSON hydrates this items instance with the data from JSON func (r *Responses) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshaling { - return jsonv2.Unmarshal(data, r) - } - if err := json.Unmarshal(data, &r.ResponsesProps); err != nil { return err } @@ -63,9 +56,6 @@ func (r *Responses) UnmarshalJSON(data []byte) error { // MarshalJSON converts this items object to JSON func (r Responses) MarshalJSON() ([]byte, error) { - if internal.UseOptimizedJSONMarshaling { - return internal.DeterministicMarshal(r) - } b1, err := json.Marshal(r.ResponsesProps) if err != nil { return nil, err @@ -78,25 +68,6 @@ func (r Responses) MarshalJSON() ([]byte, error) { return concated, nil } -func (r Responses) MarshalNextJSON(opts jsonv2.MarshalOptions, enc *jsonv2.Encoder) error { - type ArbitraryKeys map[string]interface{} - var x struct { - ArbitraryKeys - Default *Response `json:"default,omitempty"` - } - x.ArbitraryKeys = make(map[string]any, len(r.Extensions)+len(r.StatusCodeResponses)) - for k, v := range r.Extensions { - if internal.IsExtensionKey(k) { - x.ArbitraryKeys[k] = v - } - } - for k, v := range r.StatusCodeResponses { - x.ArbitraryKeys[strconv.Itoa(k)] = v - } - x.Default = r.Default - return opts.MarshalNext(enc, x) -} - // ResponsesProps describes all responses for an operation. // It tells what is the default response and maps all responses with a // HTTP status code. @@ -119,90 +90,21 @@ func (r ResponsesProps) MarshalJSON() ([]byte, error) { // UnmarshalJSON unmarshals responses from JSON func (r *ResponsesProps) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshaling { - return jsonv2.Unmarshal(data, r) - } - var res map[string]json.RawMessage + var res map[string]Response if err := json.Unmarshal(data, &res); err != nil { - return err + return nil } if v, ok := res["default"]; ok { - value := Response{} - if err := json.Unmarshal(v, &value); err != nil { - return err - } - r.Default = &value + r.Default = &v delete(res, "default") } for k, v := range res { - // Take all integral keys if nk, err := strconv.Atoi(k); err == nil { if r.StatusCodeResponses == nil { r.StatusCodeResponses = map[int]Response{} } - value := Response{} - if err := json.Unmarshal(v, &value); err != nil { - return err - } - r.StatusCodeResponses[nk] = value + r.StatusCodeResponses[nk] = v } } return nil } - -func (r *Responses) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) (err error) { - tok, err := dec.ReadToken() - if err != nil { - return err - } - var ext any - var resp Response - switch k := tok.Kind(); k { - case 'n': - return nil // noop - case '{': - for { - tok, err := dec.ReadToken() - if err != nil { - return err - } - if tok.Kind() == '}' { - return nil - } - switch k := tok.String(); { - case internal.IsExtensionKey(k): - ext = nil - if err := opts.UnmarshalNext(dec, &ext); err != nil { - return err - } - - if r.Extensions == nil { - r.Extensions = make(map[string]any) - } - r.Extensions[k] = ext - case k == "default": - resp = Response{} - if err := opts.UnmarshalNext(dec, &resp); err != nil { - return err - } - - respCopy := resp - r.ResponsesProps.Default = &respCopy - default: - if nk, err := strconv.Atoi(k); err == nil { - resp = Response{} - if err := opts.UnmarshalNext(dec, &resp); err != nil { - return err - } - - if r.StatusCodeResponses == nil { - r.StatusCodeResponses = map[int]Response{} - } - r.StatusCodeResponses[nk] = resp - } - } - } - default: - return fmt.Errorf("unknown JSON kind: %v", k) - } -} diff --git a/vendor/k8s.io/kube-openapi/pkg/validation/spec/schema.go b/vendor/k8s.io/kube-openapi/pkg/validation/spec/schema.go index dfbb2e05c..b0aeeb0d0 100644 --- a/vendor/k8s.io/kube-openapi/pkg/validation/spec/schema.go +++ b/vendor/k8s.io/kube-openapi/pkg/validation/spec/schema.go @@ -21,8 +21,6 @@ import ( "strings" "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" ) // BooleanProperty creates a boolean property @@ -196,46 +194,6 @@ type SchemaProps struct { Definitions Definitions `json:"definitions,omitempty"` } -// Marshaling structure only, always edit along with corresponding -// struct (or compilation will fail). -type schemaPropsOmitZero struct { - ID string `json:"id,omitempty"` - Ref Ref `json:"-"` - Schema SchemaURL `json:"-"` - Description string `json:"description,omitempty"` - Type StringOrArray `json:"type,omitzero"` - Nullable bool `json:"nullable,omitzero"` - Format string `json:"format,omitempty"` - Title string `json:"title,omitempty"` - Default interface{} `json:"default,omitzero"` - Maximum *float64 `json:"maximum,omitempty"` - ExclusiveMaximum bool `json:"exclusiveMaximum,omitzero"` - Minimum *float64 `json:"minimum,omitempty"` - ExclusiveMinimum bool `json:"exclusiveMinimum,omitzero"` - MaxLength *int64 `json:"maxLength,omitempty"` - MinLength *int64 `json:"minLength,omitempty"` - Pattern string `json:"pattern,omitempty"` - MaxItems *int64 `json:"maxItems,omitempty"` - MinItems *int64 `json:"minItems,omitempty"` - UniqueItems bool `json:"uniqueItems,omitzero"` - MultipleOf *float64 `json:"multipleOf,omitempty"` - Enum []interface{} `json:"enum,omitempty"` - MaxProperties *int64 `json:"maxProperties,omitempty"` - MinProperties *int64 `json:"minProperties,omitempty"` - Required []string `json:"required,omitempty"` - Items *SchemaOrArray `json:"items,omitzero"` - AllOf []Schema `json:"allOf,omitempty"` - OneOf []Schema `json:"oneOf,omitempty"` - AnyOf []Schema `json:"anyOf,omitempty"` - Not *Schema `json:"not,omitzero"` - Properties map[string]Schema `json:"properties,omitempty"` - AdditionalProperties *SchemaOrBool `json:"additionalProperties,omitzero"` - PatternProperties map[string]Schema `json:"patternProperties,omitempty"` - Dependencies Dependencies `json:"dependencies,omitempty"` - AdditionalItems *SchemaOrBool `json:"additionalItems,omitzero"` - Definitions Definitions `json:"definitions,omitempty"` -} - // SwaggerSchemaProps are additional properties supported by swagger schemas, but not JSON-schema (draft 4) type SwaggerSchemaProps struct { Discriminator string `json:"discriminator,omitempty"` @@ -244,15 +202,6 @@ type SwaggerSchemaProps struct { Example interface{} `json:"example,omitempty"` } -// Marshaling structure only, always edit along with corresponding -// struct (or compilation will fail). -type swaggerSchemaPropsOmitZero struct { - Discriminator string `json:"discriminator,omitempty"` - ReadOnly bool `json:"readOnly,omitzero"` - ExternalDocs *ExternalDocumentation `json:"externalDocs,omitzero"` - Example interface{} `json:"example,omitempty"` -} - // Schema the schema object allows the definition of input and output data types. // These types can be objects, but also primitives and arrays. // This object is based on the [JSON Schema Specification Draft 4](http://json-schema.org/) @@ -483,9 +432,6 @@ func (s *Schema) WithExternalDocs(description, url string) *Schema { // MarshalJSON marshal this to JSON func (s Schema) MarshalJSON() ([]byte, error) { - if internal.UseOptimizedJSONMarshaling { - return internal.DeterministicMarshal(s) - } b1, err := json.Marshal(s.SchemaProps) if err != nil { return nil, fmt.Errorf("schema props %v", err) @@ -517,37 +463,8 @@ func (s Schema) MarshalJSON() ([]byte, error) { return swag.ConcatJSON(b1, b2, b3, b4, b5, b6), nil } -func (s Schema) MarshalNextJSON(opts jsonv2.MarshalOptions, enc *jsonv2.Encoder) error { - type ArbitraryKeys map[string]interface{} - var x struct { - ArbitraryKeys - SchemaProps schemaPropsOmitZero `json:",inline"` - SwaggerSchemaProps swaggerSchemaPropsOmitZero `json:",inline"` - Schema string `json:"$schema,omitempty"` - Ref string `json:"$ref,omitempty"` - } - x.ArbitraryKeys = make(map[string]any, len(s.Extensions)+len(s.ExtraProps)) - for k, v := range s.Extensions { - if internal.IsExtensionKey(k) { - x.ArbitraryKeys[k] = v - } - } - for k, v := range s.ExtraProps { - x.ArbitraryKeys[k] = v - } - x.SchemaProps = schemaPropsOmitZero(s.SchemaProps) - x.SwaggerSchemaProps = swaggerSchemaPropsOmitZero(s.SwaggerSchemaProps) - x.Ref = s.Ref.String() - x.Schema = string(s.Schema) - return opts.MarshalNext(enc, x) -} - // UnmarshalJSON marshal this from JSON func (s *Schema) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshaling { - return jsonv2.Unmarshal(data, s) - } - props := struct { SchemaProps SwaggerSchemaProps @@ -594,38 +511,3 @@ func (s *Schema) UnmarshalJSON(data []byte) error { return nil } - -func (s *Schema) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - var x struct { - Extensions - SchemaProps - SwaggerSchemaProps - } - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - - if err := x.Ref.fromMap(x.Extensions); err != nil { - return err - } - - if err := x.Schema.fromMap(x.Extensions); err != nil { - return err - } - - delete(x.Extensions, "$ref") - delete(x.Extensions, "$schema") - - for _, pn := range swag.DefaultJSONNameProvider.GetJSONNames(s) { - delete(x.Extensions, pn) - } - if len(x.Extensions) == 0 { - x.Extensions = nil - } - - s.ExtraProps = x.Extensions.sanitizeWithExtra() - s.Extensions = internal.SanitizeExtensions(x.Extensions) - s.SchemaProps = x.SchemaProps - s.SwaggerSchemaProps = x.SwaggerSchemaProps - return nil -} diff --git a/vendor/k8s.io/kube-openapi/pkg/validation/spec/security_scheme.go b/vendor/k8s.io/kube-openapi/pkg/validation/spec/security_scheme.go index e2b7da14c..563b9b95e 100644 --- a/vendor/k8s.io/kube-openapi/pkg/validation/spec/security_scheme.go +++ b/vendor/k8s.io/kube-openapi/pkg/validation/spec/security_scheme.go @@ -18,8 +18,6 @@ import ( "encoding/json" "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" ) // SecuritySchemeProps describes a swagger security scheme in the securityDefinitions section @@ -46,9 +44,6 @@ type SecurityScheme struct { // MarshalJSON marshal this to JSON func (s SecurityScheme) MarshalJSON() ([]byte, error) { - if internal.UseOptimizedJSONMarshaling { - return internal.DeterministicMarshal(s) - } b1, err := json.Marshal(s.SecuritySchemeProps) if err != nil { return nil, err @@ -60,16 +55,6 @@ func (s SecurityScheme) MarshalJSON() ([]byte, error) { return swag.ConcatJSON(b1, b2), nil } -func (s SecurityScheme) MarshalNextJSON(opts jsonv2.MarshalOptions, enc *jsonv2.Encoder) error { - var x struct { - Extensions - SecuritySchemeProps - } - x.Extensions = internal.SanitizeExtensions(s.Extensions) - x.SecuritySchemeProps = s.SecuritySchemeProps - return opts.MarshalNext(enc, x) -} - // UnmarshalJSON marshal this from JSON func (s *SecurityScheme) UnmarshalJSON(data []byte) error { if err := json.Unmarshal(data, &s.SecuritySchemeProps); err != nil { @@ -77,16 +62,3 @@ func (s *SecurityScheme) UnmarshalJSON(data []byte) error { } return json.Unmarshal(data, &s.VendorExtensible) } - -func (s *SecurityScheme) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - var x struct { - Extensions - SecuritySchemeProps - } - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - s.Extensions = internal.SanitizeExtensions(x.Extensions) - s.SecuritySchemeProps = x.SecuritySchemeProps - return nil -} diff --git a/vendor/k8s.io/kube-openapi/pkg/validation/spec/swagger.go b/vendor/k8s.io/kube-openapi/pkg/validation/spec/swagger.go index c8f3beaa3..be66d1ddd 100644 --- a/vendor/k8s.io/kube-openapi/pkg/validation/spec/swagger.go +++ b/vendor/k8s.io/kube-openapi/pkg/validation/spec/swagger.go @@ -19,8 +19,6 @@ import ( "fmt" "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" ) // Swagger this is the root document object for the API specification. @@ -35,9 +33,6 @@ type Swagger struct { // MarshalJSON marshals this swagger structure to json func (s Swagger) MarshalJSON() ([]byte, error) { - if internal.UseOptimizedJSONMarshaling { - return internal.DeterministicMarshal(s) - } b1, err := json.Marshal(s.SwaggerProps) if err != nil { return nil, err @@ -49,22 +44,8 @@ func (s Swagger) MarshalJSON() ([]byte, error) { return swag.ConcatJSON(b1, b2), nil } -// MarshalJSON marshals this swagger structure to json -func (s Swagger) MarshalNextJSON(opts jsonv2.MarshalOptions, enc *jsonv2.Encoder) error { - var x struct { - Extensions - SwaggerProps - } - x.Extensions = internal.SanitizeExtensions(s.Extensions) - x.SwaggerProps = s.SwaggerProps - return opts.MarshalNext(enc, x) -} - // UnmarshalJSON unmarshals a swagger spec from json func (s *Swagger) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshaling { - return jsonv2.Unmarshal(data, s) - } var sw Swagger if err := json.Unmarshal(data, &sw.SwaggerProps); err != nil { return err @@ -76,23 +57,6 @@ func (s *Swagger) UnmarshalJSON(data []byte) error { return nil } -func (s *Swagger) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - // Note: If you're willing to make breaking changes, it is possible to - // optimize this and other usages of this pattern: - // https://github.com/kubernetes/kube-openapi/pull/319#discussion_r983165948 - var x struct { - Extensions - SwaggerProps - } - - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - s.Extensions = internal.SanitizeExtensions(x.Extensions) - s.SwaggerProps = x.SwaggerProps - return nil -} - // SwaggerProps captures the top-level properties of an Api specification // // NOTE: validation rules @@ -132,9 +96,6 @@ var jsFalse = []byte("false") // MarshalJSON convert this object to JSON func (s SchemaOrBool) MarshalJSON() ([]byte, error) { - if internal.UseOptimizedJSONMarshaling { - return internal.DeterministicMarshal(s) - } if s.Schema != nil { return json.Marshal(s.Schema) } @@ -145,59 +106,23 @@ func (s SchemaOrBool) MarshalJSON() ([]byte, error) { return jsTrue, nil } -// MarshalJSON convert this object to JSON -func (s SchemaOrBool) MarshalNextJSON(opts jsonv2.MarshalOptions, enc *jsonv2.Encoder) error { - if s.Schema != nil { - return opts.MarshalNext(enc, s.Schema) - } - - if s.Schema == nil && !s.Allows { - return enc.WriteToken(jsonv2.False) - } - return enc.WriteToken(jsonv2.True) -} - // UnmarshalJSON converts this bool or schema object from a JSON structure func (s *SchemaOrBool) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshaling { - return jsonv2.Unmarshal(data, s) - } - var nw SchemaOrBool - if len(data) > 0 && data[0] == '{' { - var sch Schema - if err := json.Unmarshal(data, &sch); err != nil { - return err + if len(data) >= 4 { + if data[0] == '{' { + var sch Schema + if err := json.Unmarshal(data, &sch); err != nil { + return err + } + nw.Schema = &sch } - nw.Schema = &sch - nw.Allows = true - } else { - json.Unmarshal(data, &nw.Allows) + nw.Allows = !(data[0] == 'f' && data[1] == 'a' && data[2] == 'l' && data[3] == 's' && data[4] == 'e') } *s = nw return nil } -func (s *SchemaOrBool) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - switch k := dec.PeekKind(); k { - case '{': - err := opts.UnmarshalNext(dec, &s.Schema) - if err != nil { - return err - } - s.Allows = true - return nil - case 't', 'f': - err := opts.UnmarshalNext(dec, &s.Allows) - if err != nil { - return err - } - return nil - default: - return fmt.Errorf("expected object or bool, not '%v'", k.String()) - } -} - // SchemaOrStringArray represents a schema or a string array type SchemaOrStringArray struct { Schema *Schema @@ -206,9 +131,6 @@ type SchemaOrStringArray struct { // MarshalJSON converts this schema object or array into JSON structure func (s SchemaOrStringArray) MarshalJSON() ([]byte, error) { - if internal.UseOptimizedJSONMarshaling { - return internal.DeterministicMarshal(s) - } if len(s.Property) > 0 { return json.Marshal(s.Property) } @@ -218,23 +140,8 @@ func (s SchemaOrStringArray) MarshalJSON() ([]byte, error) { return []byte("null"), nil } -// MarshalJSON converts this schema object or array into JSON structure -func (s SchemaOrStringArray) MarshalNextJSON(opts jsonv2.MarshalOptions, enc *jsonv2.Encoder) error { - if len(s.Property) > 0 { - return opts.MarshalNext(enc, s.Property) - } - if s.Schema != nil { - return opts.MarshalNext(enc, s.Schema) - } - return enc.WriteToken(jsonv2.Null) -} - // UnmarshalJSON converts this schema object or array from a JSON structure func (s *SchemaOrStringArray) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshaling { - return jsonv2.Unmarshal(data, s) - } - var first byte if len(data) > 1 { first = data[0] @@ -256,18 +163,6 @@ func (s *SchemaOrStringArray) UnmarshalJSON(data []byte) error { return nil } -func (s *SchemaOrStringArray) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - switch dec.PeekKind() { - case '{': - return opts.UnmarshalNext(dec, &s.Schema) - case '[': - return opts.UnmarshalNext(dec, &s.Property) - default: - _, err := dec.ReadValue() - return err - } -} - // Definitions contains the models explicitly defined in this spec // An object to hold data types that can be consumed and produced by operations. // These data types can be primitives, arrays or models. @@ -298,10 +193,6 @@ func (s StringOrArray) Contains(value string) bool { // UnmarshalJSON unmarshals this string or array object from a JSON array or JSON string func (s *StringOrArray) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshaling { - return jsonv2.Unmarshal(data, s) - } - var first byte if len(data) > 1 { first = data[0] @@ -332,23 +223,6 @@ func (s *StringOrArray) UnmarshalJSON(data []byte) error { } } -func (s *StringOrArray) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - switch k := dec.PeekKind(); k { - case '[': - *s = StringOrArray{} - return opts.UnmarshalNext(dec, (*[]string)(s)) - case '"': - *s = StringOrArray{""} - return opts.UnmarshalNext(dec, &(*s)[0]) - case 'n': - // Throw out null token - _, _ = dec.ReadToken() - return nil - default: - return fmt.Errorf("expected string or array, not '%v'", k.String()) - } -} - // MarshalJSON converts this string or array to a JSON array or JSON string func (s StringOrArray) MarshalJSON() ([]byte, error) { if len(s) == 1 { @@ -382,29 +256,14 @@ func (s *SchemaOrArray) ContainsType(name string) bool { // MarshalJSON converts this schema object or array into JSON structure func (s SchemaOrArray) MarshalJSON() ([]byte, error) { - if internal.UseOptimizedJSONMarshaling { - return internal.DeterministicMarshal(s) - } - if s.Schemas != nil { + if len(s.Schemas) > 0 { return json.Marshal(s.Schemas) } return json.Marshal(s.Schema) } -// MarshalJSON converts this schema object or array into JSON structure -func (s SchemaOrArray) MarshalNextJSON(opts jsonv2.MarshalOptions, enc *jsonv2.Encoder) error { - if s.Schemas != nil { - return opts.MarshalNext(enc, s.Schemas) - } - return opts.MarshalNext(enc, s.Schema) -} - // UnmarshalJSON converts this schema object or array from a JSON structure func (s *SchemaOrArray) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshaling { - return jsonv2.Unmarshal(data, s) - } - var nw SchemaOrArray var first byte if len(data) > 1 { @@ -425,15 +284,3 @@ func (s *SchemaOrArray) UnmarshalJSON(data []byte) error { *s = nw return nil } - -func (s *SchemaOrArray) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - switch dec.PeekKind() { - case '{': - return opts.UnmarshalNext(dec, &s.Schema) - case '[': - return opts.UnmarshalNext(dec, &s.Schemas) - default: - _, err := dec.ReadValue() - return err - } -} diff --git a/vendor/k8s.io/kube-openapi/pkg/validation/spec/tag.go b/vendor/k8s.io/kube-openapi/pkg/validation/spec/tag.go index d105d52ca..ddd1eac7e 100644 --- a/vendor/k8s.io/kube-openapi/pkg/validation/spec/tag.go +++ b/vendor/k8s.io/kube-openapi/pkg/validation/spec/tag.go @@ -18,8 +18,6 @@ import ( "encoding/json" "github.com/go-openapi/swag" - "k8s.io/kube-openapi/pkg/internal" - jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json" ) // TagProps describe a tag entry in the top level tags section of a swagger spec @@ -41,9 +39,6 @@ type Tag struct { // MarshalJSON marshal this to JSON func (t Tag) MarshalJSON() ([]byte, error) { - if internal.UseOptimizedJSONMarshaling { - return internal.DeterministicMarshal(t) - } b1, err := json.Marshal(t.TagProps) if err != nil { return nil, err @@ -55,37 +50,10 @@ func (t Tag) MarshalJSON() ([]byte, error) { return swag.ConcatJSON(b1, b2), nil } -func (t Tag) MarshalNextJSON(opts jsonv2.MarshalOptions, enc *jsonv2.Encoder) error { - var x struct { - Extensions - TagProps - } - x.Extensions = internal.SanitizeExtensions(t.Extensions) - x.TagProps = t.TagProps - return opts.MarshalNext(enc, x) -} - // UnmarshalJSON marshal this from JSON func (t *Tag) UnmarshalJSON(data []byte) error { - if internal.UseOptimizedJSONUnmarshaling { - return jsonv2.Unmarshal(data, t) - } - if err := json.Unmarshal(data, &t.TagProps); err != nil { return err } return json.Unmarshal(data, &t.VendorExtensible) } - -func (t *Tag) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error { - var x struct { - Extensions - TagProps - } - if err := opts.UnmarshalNext(dec, &x); err != nil { - return err - } - t.Extensions = internal.SanitizeExtensions(x.Extensions) - t.TagProps = x.TagProps - return nil -} diff --git a/vendor/modules.txt b/vendor/modules.txt index a0f3a7aa7..57a4c2808 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -550,8 +550,8 @@ github.com/emicklei/go-restful/v3/log # github.com/evanphx/json-patch v5.6.0+incompatible ## explicit github.com/evanphx/json-patch -# github.com/evanphx/json-patch/v5 v5.6.0 -## explicit; go 1.12 +# github.com/evanphx/json-patch/v5 v5.7.0 +## explicit; go 1.18 github.com/evanphx/json-patch/v5 # github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d ## explicit @@ -648,8 +648,8 @@ github.com/go-playground/universal-translator # github.com/go-playground/validator/v10 v10.19.0 ## explicit; go 1.18 github.com/go-playground/validator/v10 -# github.com/go-sql-driver/mysql v1.6.0 -## explicit; go 1.10 +# github.com/go-sql-driver/mysql v1.7.1 +## explicit; go 1.13 github.com/go-sql-driver/mysql # github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 ## explicit; go 1.13 @@ -924,7 +924,7 @@ github.com/influxdata/line-protocol # github.com/jackc/chunkreader/v2 v2.0.1 ## explicit; go 1.12 github.com/jackc/chunkreader/v2 -# github.com/jackc/pgconn v1.11.0 +# github.com/jackc/pgconn v1.12.1 ## explicit; go 1.12 github.com/jackc/pgconn github.com/jackc/pgconn/internal/ctxwatch @@ -935,16 +935,16 @@ github.com/jackc/pgio # github.com/jackc/pgpassfile v1.0.0 ## explicit; go 1.12 github.com/jackc/pgpassfile -# github.com/jackc/pgproto3/v2 v2.2.0 +# github.com/jackc/pgproto3/v2 v2.3.0 ## explicit; go 1.12 github.com/jackc/pgproto3/v2 # github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b ## explicit; go 1.14 github.com/jackc/pgservicefile -# github.com/jackc/pgtype v1.10.0 +# github.com/jackc/pgtype v1.11.0 ## explicit; go 1.13 github.com/jackc/pgtype -# github.com/jackc/pgx/v4 v4.15.0 +# github.com/jackc/pgx/v4 v4.16.1 ## explicit; go 1.13 github.com/jackc/pgx/v4 github.com/jackc/pgx/v4/internal/sanitize @@ -1054,7 +1054,7 @@ github.com/libopenstorage/cloudops/unsupported # github.com/libopenstorage/gossip v0.0.0-20220309192431-44c895e0923e ## explicit github.com/libopenstorage/gossip/types -# github.com/libopenstorage/openstorage v9.4.47+incompatible => github.com/libopenstorage/openstorage v1.0.1-0.20240221210452-7757fdc2b8ff +# github.com/libopenstorage/openstorage v9.4.47+incompatible => github.com/libopenstorage/openstorage v1.0.1-0.20240416193513-1e07b4359307 ## explicit; go 1.17 github.com/libopenstorage/openstorage/api github.com/libopenstorage/openstorage/api/client @@ -1069,22 +1069,20 @@ github.com/libopenstorage/openstorage/pkg/clusterdomain github.com/libopenstorage/openstorage/pkg/correlation github.com/libopenstorage/openstorage/pkg/dbg github.com/libopenstorage/openstorage/pkg/defaultcontext +github.com/libopenstorage/openstorage/pkg/defrag github.com/libopenstorage/openstorage/pkg/diags github.com/libopenstorage/openstorage/pkg/grpcserver github.com/libopenstorage/openstorage/pkg/grpcutil github.com/libopenstorage/openstorage/pkg/job -github.com/libopenstorage/openstorage/pkg/keylock -github.com/libopenstorage/openstorage/pkg/mount github.com/libopenstorage/openstorage/pkg/nodedrain -github.com/libopenstorage/openstorage/pkg/options github.com/libopenstorage/openstorage/pkg/parser github.com/libopenstorage/openstorage/pkg/sched +github.com/libopenstorage/openstorage/pkg/schedule github.com/libopenstorage/openstorage/pkg/storagepool github.com/libopenstorage/openstorage/pkg/units github.com/libopenstorage/openstorage/schedpolicy github.com/libopenstorage/openstorage/secrets -github.com/libopenstorage/openstorage/volume -# github.com/libopenstorage/operator v0.0.0-20240417190906-af0509c9db88 +# github.com/libopenstorage/operator v0.0.0-20240523172951-e085c3099bd7 ## explicit; go 1.21 github.com/libopenstorage/operator/api/px github.com/libopenstorage/operator/drivers/storage @@ -1107,7 +1105,7 @@ github.com/libopenstorage/operator/pkg/util/test # github.com/libopenstorage/secrets v0.0.0-20230207140542-56a42ef89592 ## explicit; go 1.13 github.com/libopenstorage/secrets/aws/credentials -# github.com/libopenstorage/stork v1.4.1-0.20240417024347-acff28bbdb16 +# github.com/libopenstorage/stork v1.4.1-0.20240424105137-8c6fa2a3f934 ## explicit; go 1.21 github.com/libopenstorage/stork/drivers github.com/libopenstorage/stork/drivers/volume @@ -1209,8 +1207,8 @@ github.com/mohae/deepcopy # github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 ## explicit github.com/monochromegane/go-gitignore -# github.com/montanaflynn/stats v0.0.0-20180911141734-db72e6cae808 -## explicit +# github.com/montanaflynn/stats v0.7.0 +## explicit; go 1.13 github.com/montanaflynn/stats # github.com/morikuni/aec v1.0.0 ## explicit @@ -1325,14 +1323,15 @@ github.com/portworx/kvdb/mem # github.com/portworx/pds-api-go-client v0.0.0-20231102112445-993d38984eae ## explicit; go 1.17 github.com/portworx/pds-api-go-client/pds/v1alpha1 -# github.com/portworx/px-backup-api v1.2.2-0.20240229114136-e58baeb9fbe1 +# github.com/portworx/px-backup-api v1.2.2-0.20240513165102-9eda9e2fc169 ## explicit; go 1.19 github.com/portworx/px-backup-api/pkg/apis/v1 github.com/portworx/px-backup-api/pkg/kubeauth github.com/portworx/px-backup-api/pkg/kubeauth/gcp -# github.com/portworx/sched-ops v1.20.4-rc1.0.20240411193047-d17313c6c11b +# github.com/portworx/sched-ops v1.20.4-rc1.0.20240514213912-ff0ae32b859a => github.com/portworx/sched-ops v1.20.4-rc1.0.20240514213912-ff0ae32b859a ## explicit; go 1.19 github.com/portworx/sched-ops/k8s/admissionregistration +github.com/portworx/sched-ops/k8s/anthos github.com/portworx/sched-ops/k8s/apiextensions github.com/portworx/sched-ops/k8s/apps github.com/portworx/sched-ops/k8s/autopilot @@ -1380,22 +1379,22 @@ github.com/prometheus-operator/prometheus-operator/pkg/client/versioned github.com/prometheus-operator/prometheus-operator/pkg/client/versioned/scheme github.com/prometheus-operator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1 github.com/prometheus-operator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1alpha1 -# github.com/prometheus/client_golang v1.15.1 -## explicit; go 1.17 +# github.com/prometheus/client_golang v1.17.0 +## explicit; go 1.19 github.com/prometheus/client_golang/prometheus github.com/prometheus/client_golang/prometheus/collectors github.com/prometheus/client_golang/prometheus/internal github.com/prometheus/client_golang/prometheus/promhttp -# github.com/prometheus/client_model v0.4.0 +# github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 ## explicit; go 1.18 github.com/prometheus/client_model/go -# github.com/prometheus/common v0.42.0 +# github.com/prometheus/common v0.44.0 ## explicit; go 1.18 github.com/prometheus/common/expfmt github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg github.com/prometheus/common/model -# github.com/prometheus/procfs v0.9.0 -## explicit; go 1.18 +# github.com/prometheus/procfs v0.11.1 +## explicit; go 1.19 github.com/prometheus/procfs github.com/prometheus/procfs/internal/fs github.com/prometheus/procfs/internal/util @@ -1403,15 +1402,15 @@ github.com/prometheus/procfs/internal/util ## explicit; go 1.13 github.com/prometheus/statsd_exporter/pkg/mapper github.com/prometheus/statsd_exporter/pkg/mapper/fsm -# github.com/pure-px/apis v0.0.0-20240326194748-e9f7f27de779 +# github.com/pure-px/apis v0.0.3 ## explicit; go 1.21 github.com/pure-px/apis/public/portworx/common/apiv1 github.com/pure-px/apis/public/portworx/pds/backup/apiv1 github.com/pure-px/apis/public/portworx/pds/backupconfig/apiv1 github.com/pure-px/apis/public/portworx/pds/catalog/templatedefinition/apiv1 -github.com/pure-px/apis/public/portworx/pds/deployment/apiv1 -github.com/pure-px/apis/public/portworx/pds/deploymentconfigupdate/apiv1 -github.com/pure-px/apis/public/portworx/pds/deploymenttopology/apiv1 +github.com/pure-px/apis/public/portworx/pds/dataservicedeployment/apiv1 +github.com/pure-px/apis/public/portworx/pds/dataservicedeploymentconfigupdate/apiv1 +github.com/pure-px/apis/public/portworx/pds/dataservicedeploymenttopology/apiv1 github.com/pure-px/apis/public/portworx/pds/restore/apiv1 github.com/pure-px/apis/public/portworx/platform/account/apiv1 github.com/pure-px/apis/public/portworx/platform/backuplocation/apiv1 @@ -1429,13 +1428,13 @@ github.com/pure-px/apis/public/portworx/platform/template/apiv1 github.com/pure-px/apis/public/portworx/platform/tenant/apiv1 github.com/pure-px/apis/public/portworx/platform/tenant/application/apiv1 github.com/pure-px/apis/public/portworx/platform/whoami/apiv1 -# github.com/pure-px/platform-api-go-client v0.0.0-20240422094205-23129136cfd2 +# github.com/pure-px/platform-api-go-client v0.0.0-20240529124619-a3e5f98d62f0 ## explicit; go 1.21.4 github.com/pure-px/platform-api-go-client/pds/v1/backup github.com/pure-px/platform-api-go-client/pds/v1/backupconfig github.com/pure-px/platform-api-go-client/pds/v1/catalog -github.com/pure-px/platform-api-go-client/pds/v1/deployment -github.com/pure-px/platform-api-go-client/pds/v1/deploymentconfigupdate +github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeployment +github.com/pure-px/platform-api-go-client/pds/v1/dataservicedeploymentconfigupdate github.com/pure-px/platform-api-go-client/pds/v1/restore github.com/pure-px/platform-api-go-client/platform/v1/account github.com/pure-px/platform-api-go-client/platform/v1/backuplocation @@ -1721,7 +1720,7 @@ go.starlark.net/syntax # go.uber.org/atomic v1.10.0 ## explicit; go 1.18 go.uber.org/atomic -# go.uber.org/multierr v1.10.0 +# go.uber.org/multierr v1.11.0 ## explicit; go 1.19 go.uber.org/multierr # go.uber.org/zap v1.26.0 @@ -1784,7 +1783,7 @@ golang.org/x/crypto/scrypt golang.org/x/crypto/sha3 golang.org/x/crypto/ssh golang.org/x/crypto/ssh/internal/bcrypt_pbkdf -# golang.org/x/exp v0.0.0-20230728194245-b0cb94b80691 +# golang.org/x/exp v0.0.0-20230905200255-921286631fa9 ## explicit; go 1.20 golang.org/x/exp/constraints golang.org/x/exp/maps @@ -1904,6 +1903,7 @@ google.golang.org/api/compute/v0.alpha google.golang.org/api/compute/v0.beta google.golang.org/api/compute/v1 google.golang.org/api/container/v1 +google.golang.org/api/gkeonprem/v1 google.golang.org/api/googleapi google.golang.org/api/googleapi/transport google.golang.org/api/iamcredentials/v1 @@ -2125,7 +2125,7 @@ helm.sh/helm/v3/pkg/storage/driver helm.sh/helm/v3/pkg/strvals helm.sh/helm/v3/pkg/time helm.sh/helm/v3/pkg/uploader -# k8s.io/api v0.27.1 => k8s.io/api v0.25.1 +# k8s.io/api v0.29.3 => k8s.io/api v0.25.1 ## explicit; go 1.19 k8s.io/api/admission/v1 k8s.io/api/admission/v1beta1 @@ -2176,7 +2176,7 @@ k8s.io/api/scheduling/v1beta1 k8s.io/api/storage/v1 k8s.io/api/storage/v1alpha1 k8s.io/api/storage/v1beta1 -# k8s.io/apiextensions-apiserver v0.26.5 => k8s.io/apiextensions-apiserver v0.25.1 +# k8s.io/apiextensions-apiserver v0.28.4 => k8s.io/apiextensions-apiserver v0.25.1 ## explicit; go 1.19 k8s.io/apiextensions-apiserver/pkg/apis/apiextensions k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1 @@ -2188,7 +2188,7 @@ k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextension k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1/fake k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1beta1 k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1beta1/fake -# k8s.io/apimachinery v0.29.2 => k8s.io/apimachinery v0.25.1 +# k8s.io/apimachinery v0.29.3 => k8s.io/apimachinery v0.25.1 ## explicit; go 1.19 k8s.io/apimachinery/pkg/api/equality k8s.io/apimachinery/pkg/api/errors @@ -2511,7 +2511,6 @@ k8s.io/client-go/util/workqueue ## explicit; go 1.19 k8s.io/component-base/config k8s.io/component-base/config/v1alpha1 -k8s.io/component-base/featuregate k8s.io/component-base/version # k8s.io/component-helpers v0.25.1 => k8s.io/component-helpers v0.25.1 ## explicit; go 1.19 @@ -2529,14 +2528,12 @@ k8s.io/klog/v2/internal/clock k8s.io/klog/v2/internal/dbg k8s.io/klog/v2/internal/serialize k8s.io/klog/v2/internal/severity -# k8s.io/kube-openapi v0.0.0-20230515203736-54b630e78af5 -## explicit; go 1.19 +# k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 => k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 +## explicit; go 1.18 k8s.io/kube-openapi/pkg/builder3/util -k8s.io/kube-openapi/pkg/cached k8s.io/kube-openapi/pkg/common k8s.io/kube-openapi/pkg/handler3 -k8s.io/kube-openapi/pkg/internal -k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json +k8s.io/kube-openapi/pkg/internal/handler k8s.io/kube-openapi/pkg/openapiconv k8s.io/kube-openapi/pkg/schemaconv k8s.io/kube-openapi/pkg/schemamutation @@ -2666,30 +2663,23 @@ oras.land/oras-go/pkg/registry/remote/auth oras.land/oras-go/pkg/registry/remote/internal/errutil oras.land/oras-go/pkg/registry/remote/internal/syncutil oras.land/oras-go/pkg/target -# sigs.k8s.io/cluster-api v1.1.6 -## explicit; go 1.17 -sigs.k8s.io/cluster-api/api/v1beta1 +# sigs.k8s.io/cluster-api v0.2.11 +## explicit; go 1.12 sigs.k8s.io/cluster-api/errors -sigs.k8s.io/cluster-api/feature -sigs.k8s.io/cluster-api/util/version +sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1 # sigs.k8s.io/controller-runtime v0.14.5 => sigs.k8s.io/controller-runtime v0.13.0 ## explicit; go 1.17 -sigs.k8s.io/controller-runtime -sigs.k8s.io/controller-runtime/pkg/builder sigs.k8s.io/controller-runtime/pkg/cache sigs.k8s.io/controller-runtime/pkg/cache/internal sigs.k8s.io/controller-runtime/pkg/certwatcher sigs.k8s.io/controller-runtime/pkg/certwatcher/metrics sigs.k8s.io/controller-runtime/pkg/client sigs.k8s.io/controller-runtime/pkg/client/apiutil -sigs.k8s.io/controller-runtime/pkg/client/config sigs.k8s.io/controller-runtime/pkg/client/fake sigs.k8s.io/controller-runtime/pkg/cluster sigs.k8s.io/controller-runtime/pkg/config sigs.k8s.io/controller-runtime/pkg/config/v1alpha1 sigs.k8s.io/controller-runtime/pkg/controller -sigs.k8s.io/controller-runtime/pkg/controller/controllerutil -sigs.k8s.io/controller-runtime/pkg/conversion sigs.k8s.io/controller-runtime/pkg/event sigs.k8s.io/controller-runtime/pkg/handler sigs.k8s.io/controller-runtime/pkg/healthz @@ -2702,7 +2692,6 @@ sigs.k8s.io/controller-runtime/pkg/internal/recorder sigs.k8s.io/controller-runtime/pkg/leaderelection sigs.k8s.io/controller-runtime/pkg/log sigs.k8s.io/controller-runtime/pkg/manager -sigs.k8s.io/controller-runtime/pkg/manager/signals sigs.k8s.io/controller-runtime/pkg/metrics sigs.k8s.io/controller-runtime/pkg/predicate sigs.k8s.io/controller-runtime/pkg/ratelimiter @@ -2714,7 +2703,6 @@ sigs.k8s.io/controller-runtime/pkg/source sigs.k8s.io/controller-runtime/pkg/source/internal sigs.k8s.io/controller-runtime/pkg/webhook sigs.k8s.io/controller-runtime/pkg/webhook/admission -sigs.k8s.io/controller-runtime/pkg/webhook/conversion sigs.k8s.io/controller-runtime/pkg/webhook/internal/metrics # sigs.k8s.io/gcp-compute-persistent-disk-csi-driver v0.7.0 ## explicit; go 1.13 @@ -2833,7 +2821,8 @@ sigs.k8s.io/yaml/goyaml.v2 # github.com/kubernetes-incubator/external-storage => github.com/libopenstorage/external-storage v0.20.4-openstorage-rc10 # github.com/kubernetes-incubator/external-storage v0.20.4-openstorage-rc10 => github.com/kubernetes-incubator/external-storage v0.25.1-openstorage-rc1 # github.com/libopenstorage/autopilot-api => github.com/libopenstorage/autopilot-api v0.6.1-0.20210301232050-ca2633c6e114 -# github.com/libopenstorage/openstorage => github.com/libopenstorage/openstorage v1.0.1-0.20240221210452-7757fdc2b8ff +# github.com/libopenstorage/openstorage => github.com/libopenstorage/openstorage v1.0.1-0.20240416193513-1e07b4359307 +# github.com/portworx/sched-ops => github.com/portworx/sched-ops v1.20.4-rc1.0.20240514213912-ff0ae32b859a # helm.sh/helm/v3 => helm.sh/helm/v3 v3.10.3 # k8s.io/api => k8s.io/api v0.25.1 # k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.25.1 @@ -2852,6 +2841,7 @@ sigs.k8s.io/yaml/goyaml.v2 # k8s.io/klog/v2 => k8s.io/klog/v2 v2.70.1 # k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.25.1 # k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.25.1 +# k8s.io/kube-openapi => k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 # k8s.io/kube-proxy => k8s.io/kube-proxy v0.25.1 # k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.25.1 # k8s.io/kubectl => k8s.io/kubectl v0.25.1 diff --git a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/cluster_phase_types.go b/vendor/sigs.k8s.io/cluster-api/api/v1beta1/cluster_phase_types.go deleted file mode 100644 index afcd87245..000000000 --- a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/cluster_phase_types.go +++ /dev/null @@ -1,55 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -// ClusterPhase is a string representation of a Cluster Phase. -// -// This type is a high-level indicator of the status of the Cluster as it is provisioned, -// from the API user’s perspective. -// -// The value should not be interpreted by any software components as a reliable indication -// of the actual state of the Cluster, and controllers should not use the Cluster Phase field -// value when making decisions about what action to take. -// -// Controllers should always look at the actual state of the Cluster’s fields to make those decisions. -type ClusterPhase string - -const ( - // ClusterPhasePending is the first state a Cluster is assigned by - // Cluster API Cluster controller after being created. - ClusterPhasePending = ClusterPhase("Pending") - - // ClusterPhaseProvisioning is the state when the Cluster has a provider infrastructure - // object associated and can start provisioning. - ClusterPhaseProvisioning = ClusterPhase("Provisioning") - - // ClusterPhaseProvisioned is the state when its - // infrastructure has been created and configured. - ClusterPhaseProvisioned = ClusterPhase("Provisioned") - - // ClusterPhaseDeleting is the Cluster state when a delete - // request has been sent to the API Server, - // but its infrastructure has not yet been fully deleted. - ClusterPhaseDeleting = ClusterPhase("Deleting") - - // ClusterPhaseFailed is the Cluster state when the system - // might require user intervention. - ClusterPhaseFailed = ClusterPhase("Failed") - - // ClusterPhaseUnknown is returned if the Cluster state cannot be determined. - ClusterPhaseUnknown = ClusterPhase("Unknown") -) diff --git a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/cluster_types.go b/vendor/sigs.k8s.io/cluster-api/api/v1beta1/cluster_types.go deleted file mode 100644 index 930aa96d5..000000000 --- a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/cluster_types.go +++ /dev/null @@ -1,480 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - "fmt" - "net" - "strings" - - "github.com/pkg/errors" - corev1 "k8s.io/api/core/v1" - apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/utils/pointer" - - capierrors "sigs.k8s.io/cluster-api/errors" -) - -const ( - // ClusterFinalizer is the finalizer used by the cluster controller to - // cleanup the cluster resources when a Cluster is being deleted. - ClusterFinalizer = "cluster.cluster.x-k8s.io" -) - -// ANCHOR: ClusterSpec - -// ClusterSpec defines the desired state of Cluster. -type ClusterSpec struct { - // Paused can be used to prevent controllers from processing the Cluster and all its associated objects. - // +optional - Paused bool `json:"paused,omitempty"` - - // Cluster network configuration. - // +optional - ClusterNetwork *ClusterNetwork `json:"clusterNetwork,omitempty"` - - // ControlPlaneEndpoint represents the endpoint used to communicate with the control plane. - // +optional - ControlPlaneEndpoint APIEndpoint `json:"controlPlaneEndpoint,omitempty"` - - // ControlPlaneRef is an optional reference to a provider-specific resource that holds - // the details for provisioning the Control Plane for a Cluster. - // +optional - ControlPlaneRef *corev1.ObjectReference `json:"controlPlaneRef,omitempty"` - - // InfrastructureRef is a reference to a provider-specific resource that holds the details - // for provisioning infrastructure for a cluster in said provider. - // +optional - InfrastructureRef *corev1.ObjectReference `json:"infrastructureRef,omitempty"` - - // This encapsulates the topology for the cluster. - // NOTE: It is required to enable the ClusterTopology - // feature gate flag to activate managed topologies support; - // this feature is highly experimental, and parts of it might still be not implemented. - // +optional - Topology *Topology `json:"topology,omitempty"` -} - -// Topology encapsulates the information of the managed resources. -type Topology struct { - // The name of the ClusterClass object to create the topology. - Class string `json:"class"` - - // The Kubernetes version of the cluster. - Version string `json:"version"` - - // RolloutAfter performs a rollout of the entire cluster one component at a time, - // control plane first and then machine deployments. - // +optional - RolloutAfter *metav1.Time `json:"rolloutAfter,omitempty"` - - // ControlPlane describes the cluster control plane. - // +optional - ControlPlane ControlPlaneTopology `json:"controlPlane,omitempty"` - - // Workers encapsulates the different constructs that form the worker nodes - // for the cluster. - // +optional - Workers *WorkersTopology `json:"workers,omitempty"` - - // Variables can be used to customize the Cluster through - // patches. They must comply to the corresponding - // VariableClasses defined in the ClusterClass. - // +optional - Variables []ClusterVariable `json:"variables,omitempty"` -} - -// ControlPlaneTopology specifies the parameters for the control plane nodes in the cluster. -type ControlPlaneTopology struct { - // Metadata is the metadata applied to the machines of the ControlPlane. - // At runtime this metadata is merged with the corresponding metadata from the ClusterClass. - // - // This field is supported if and only if the control plane provider template - // referenced in the ClusterClass is Machine based. - // +optional - Metadata ObjectMeta `json:"metadata,omitempty"` - - // Replicas is the number of control plane nodes. - // If the value is nil, the ControlPlane object is created without the number of Replicas - // and it's assumed that the control plane controller does not implement support for this field. - // When specified against a control plane provider that lacks support for this field, this value will be ignored. - // +optional - Replicas *int32 `json:"replicas,omitempty"` -} - -// WorkersTopology represents the different sets of worker nodes in the cluster. -type WorkersTopology struct { - // MachineDeployments is a list of machine deployments in the cluster. - // +optional - MachineDeployments []MachineDeploymentTopology `json:"machineDeployments,omitempty"` -} - -// MachineDeploymentTopology specifies the different parameters for a set of worker nodes in the topology. -// This set of nodes is managed by a MachineDeployment object whose lifecycle is managed by the Cluster controller. -type MachineDeploymentTopology struct { - // Metadata is the metadata applied to the machines of the MachineDeployment. - // At runtime this metadata is merged with the corresponding metadata from the ClusterClass. - // +optional - Metadata ObjectMeta `json:"metadata,omitempty"` - - // Class is the name of the MachineDeploymentClass used to create the set of worker nodes. - // This should match one of the deployment classes defined in the ClusterClass object - // mentioned in the `Cluster.Spec.Class` field. - Class string `json:"class"` - - // Name is the unique identifier for this MachineDeploymentTopology. - // The value is used with other unique identifiers to create a MachineDeployment's Name - // (e.g. cluster's name, etc). In case the name is greater than the allowed maximum length, - // the values are hashed together. - Name string `json:"name"` - - // FailureDomain is the failure domain the machines will be created in. - // Must match a key in the FailureDomains map stored on the cluster object. - // +optional - FailureDomain *string `json:"failureDomain,omitempty"` - - // Replicas is the number of worker nodes belonging to this set. - // If the value is nil, the MachineDeployment is created without the number of Replicas (defaulting to zero) - // and it's assumed that an external entity (like cluster autoscaler) is responsible for the management - // of this value. - // +optional - Replicas *int32 `json:"replicas,omitempty"` - - // Variables can be used to customize the MachineDeployment through patches. - // +optional - Variables *MachineDeploymentVariables `json:"variables,omitempty"` -} - -// ClusterVariable can be used to customize the Cluster through -// patches. It must comply to the corresponding -// ClusterClassVariable defined in the ClusterClass. -type ClusterVariable struct { - // Name of the variable. - Name string `json:"name"` - - // Value of the variable. - // Note: the value will be validated against the schema of the corresponding ClusterClassVariable - // from the ClusterClass. - // Note: We have to use apiextensionsv1.JSON instead of a custom JSON type, because controller-tools has a - // hard-coded schema for apiextensionsv1.JSON which cannot be produced by another type via controller-tools, - // i.e. it is not possible to have no type field. - // Ref: https://github.com/kubernetes-sigs/controller-tools/blob/d0e03a142d0ecdd5491593e941ee1d6b5d91dba6/pkg/crd/known_types.go#L106-L111 - Value apiextensionsv1.JSON `json:"value"` -} - -// MachineDeploymentVariables can be used to provide variables for a specific MachineDeployment. -type MachineDeploymentVariables struct { - // Overrides can be used to override Cluster level variables. - // +optional - Overrides []ClusterVariable `json:"overrides,omitempty"` -} - -// ANCHOR_END: ClusterSpec - -// ANCHOR: ClusterNetwork - -// ClusterNetwork specifies the different networking -// parameters for a cluster. -type ClusterNetwork struct { - // APIServerPort specifies the port the API Server should bind to. - // Defaults to 6443. - // +optional - APIServerPort *int32 `json:"apiServerPort,omitempty"` - - // The network ranges from which service VIPs are allocated. - // +optional - Services *NetworkRanges `json:"services,omitempty"` - - // The network ranges from which Pod networks are allocated. - // +optional - Pods *NetworkRanges `json:"pods,omitempty"` - - // Domain name for services. - // +optional - ServiceDomain string `json:"serviceDomain,omitempty"` -} - -// ANCHOR_END: ClusterNetwork - -// ANCHOR: NetworkRanges - -// NetworkRanges represents ranges of network addresses. -type NetworkRanges struct { - CIDRBlocks []string `json:"cidrBlocks"` -} - -func (n *NetworkRanges) String() string { - if n == nil { - return "" - } - return strings.Join(n.CIDRBlocks, ",") -} - -// ANCHOR_END: NetworkRanges - -// ANCHOR: ClusterStatus - -// ClusterStatus defines the observed state of Cluster. -type ClusterStatus struct { - // FailureDomains is a slice of failure domain objects synced from the infrastructure provider. - // +optional - FailureDomains FailureDomains `json:"failureDomains,omitempty"` - - // FailureReason indicates that there is a fatal problem reconciling the - // state, and will be set to a token value suitable for - // programmatic interpretation. - // +optional - FailureReason *capierrors.ClusterStatusError `json:"failureReason,omitempty"` - - // FailureMessage indicates that there is a fatal problem reconciling the - // state, and will be set to a descriptive error message. - // +optional - FailureMessage *string `json:"failureMessage,omitempty"` - - // Phase represents the current phase of cluster actuation. - // E.g. Pending, Running, Terminating, Failed etc. - // +optional - Phase string `json:"phase,omitempty"` - - // InfrastructureReady is the state of the infrastructure provider. - // +optional - InfrastructureReady bool `json:"infrastructureReady"` - - // ControlPlaneReady defines if the control plane is ready. - // +optional - ControlPlaneReady bool `json:"controlPlaneReady"` - - // Conditions defines current service state of the cluster. - // +optional - Conditions Conditions `json:"conditions,omitempty"` - - // ObservedGeneration is the latest generation observed by the controller. - // +optional - ObservedGeneration int64 `json:"observedGeneration,omitempty"` -} - -// ANCHOR_END: ClusterStatus - -// SetTypedPhase sets the Phase field to the string representation of ClusterPhase. -func (c *ClusterStatus) SetTypedPhase(p ClusterPhase) { - c.Phase = string(p) -} - -// GetTypedPhase attempts to parse the Phase field and return -// the typed ClusterPhase representation as described in `machine_phase_types.go`. -func (c *ClusterStatus) GetTypedPhase() ClusterPhase { - switch phase := ClusterPhase(c.Phase); phase { - case - ClusterPhasePending, - ClusterPhaseProvisioning, - ClusterPhaseProvisioned, - ClusterPhaseDeleting, - ClusterPhaseFailed: - return phase - default: - return ClusterPhaseUnknown - } -} - -// ANCHOR: APIEndpoint - -// APIEndpoint represents a reachable Kubernetes API endpoint. -type APIEndpoint struct { - // The hostname on which the API server is serving. - Host string `json:"host"` - - // The port on which the API server is serving. - Port int32 `json:"port"` -} - -// IsZero returns true if both host and port are zero values. -func (v APIEndpoint) IsZero() bool { - return v.Host == "" && v.Port == 0 -} - -// IsValid returns true if both host and port are non-zero values. -func (v APIEndpoint) IsValid() bool { - return v.Host != "" && v.Port != 0 -} - -// String returns a formatted version HOST:PORT of this APIEndpoint. -func (v APIEndpoint) String() string { - return net.JoinHostPort(v.Host, fmt.Sprintf("%d", v.Port)) -} - -// ANCHOR_END: APIEndpoint - -// +kubebuilder:object:root=true -// +kubebuilder:resource:path=clusters,shortName=cl,scope=Namespaced,categories=cluster-api -// +kubebuilder:storageversion -// +kubebuilder:subresource:status -// +kubebuilder:printcolumn:name="Phase",type="string",JSONPath=".status.phase",description="Cluster status such as Pending/Provisioning/Provisioned/Deleting/Failed" -// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp",description="Time duration since creation of Cluster" -// +kubebuilder:printcolumn:name="Version",type="string",JSONPath=".spec.topology.version",description="Kubernetes version associated with this Cluster" - -// Cluster is the Schema for the clusters API. -type Cluster struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - - Spec ClusterSpec `json:"spec,omitempty"` - Status ClusterStatus `json:"status,omitempty"` -} - -// GetConditions returns the set of conditions for this object. -func (c *Cluster) GetConditions() Conditions { - return c.Status.Conditions -} - -// SetConditions sets the conditions on this object. -func (c *Cluster) SetConditions(conditions Conditions) { - c.Status.Conditions = conditions -} - -// GetIPFamily returns a ClusterIPFamily from the configuration provided. -func (c *Cluster) GetIPFamily() (ClusterIPFamily, error) { - var podCIDRs, serviceCIDRs []string - if c.Spec.ClusterNetwork != nil { - if c.Spec.ClusterNetwork.Pods != nil { - podCIDRs = c.Spec.ClusterNetwork.Pods.CIDRBlocks - } - if c.Spec.ClusterNetwork.Services != nil { - serviceCIDRs = c.Spec.ClusterNetwork.Services.CIDRBlocks - } - } - if len(podCIDRs) == 0 && len(serviceCIDRs) == 0 { - return IPv4IPFamily, nil - } - - podsIPFamily, err := ipFamilyForCIDRStrings(podCIDRs) - if err != nil { - return InvalidIPFamily, fmt.Errorf("pods: %s", err) - } - if len(serviceCIDRs) == 0 { - return podsIPFamily, nil - } - - servicesIPFamily, err := ipFamilyForCIDRStrings(serviceCIDRs) - if err != nil { - return InvalidIPFamily, fmt.Errorf("services: %s", err) - } - if len(podCIDRs) == 0 { - return servicesIPFamily, nil - } - - if podsIPFamily == DualStackIPFamily { - return DualStackIPFamily, nil - } else if podsIPFamily != servicesIPFamily { - return InvalidIPFamily, errors.New("pods and services IP family mismatch") - } - - return podsIPFamily, nil -} - -func ipFamilyForCIDRStrings(cidrs []string) (ClusterIPFamily, error) { - if len(cidrs) > 2 { - return InvalidIPFamily, errors.New("too many CIDRs specified") - } - var foundIPv4 bool - var foundIPv6 bool - for _, cidr := range cidrs { - ip, _, err := net.ParseCIDR(cidr) - if err != nil { - return InvalidIPFamily, fmt.Errorf("could not parse CIDR: %s", err) - } - if ip.To4() != nil { - foundIPv4 = true - } else { - foundIPv6 = true - } - } - switch { - case foundIPv4 && foundIPv6: - return DualStackIPFamily, nil - case foundIPv4: - return IPv4IPFamily, nil - case foundIPv6: - return IPv6IPFamily, nil - default: - return InvalidIPFamily, nil - } -} - -// ClusterIPFamily defines the types of supported IP families. -type ClusterIPFamily int - -// Define the ClusterIPFamily constants. -const ( - InvalidIPFamily ClusterIPFamily = iota - IPv4IPFamily - IPv6IPFamily - DualStackIPFamily -) - -func (f ClusterIPFamily) String() string { - return [...]string{"InvalidIPFamily", "IPv4IPFamily", "IPv6IPFamily", "DualStackIPFamily"}[f] -} - -// +kubebuilder:object:root=true - -// ClusterList contains a list of Cluster. -type ClusterList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []Cluster `json:"items"` -} - -func init() { - SchemeBuilder.Register(&Cluster{}, &ClusterList{}) -} - -// FailureDomains is a slice of FailureDomains. -type FailureDomains map[string]FailureDomainSpec - -// FilterControlPlane returns a FailureDomain slice containing only the domains suitable to be used -// for control plane nodes. -func (in FailureDomains) FilterControlPlane() FailureDomains { - res := make(FailureDomains) - for id, spec := range in { - if spec.ControlPlane { - res[id] = spec - } - } - return res -} - -// GetIDs returns a slice containing the ids for failure domains. -func (in FailureDomains) GetIDs() []*string { - ids := make([]*string, 0, len(in)) - for id := range in { - ids = append(ids, pointer.StringPtr(id)) - } - return ids -} - -// FailureDomainSpec is the Schema for Cluster API failure domains. -// It allows controllers to understand how many failure domains a cluster can optionally span across. -type FailureDomainSpec struct { - // ControlPlane determines if this failure domain is suitable for use by control plane machines. - // +optional - ControlPlane bool `json:"controlPlane,omitempty"` - - // Attributes is a free form map of attributes an infrastructure provider might use or require. - // +optional - Attributes map[string]string `json:"attributes,omitempty"` -} diff --git a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/cluster_webhook.go b/vendor/sigs.k8s.io/cluster-api/api/v1beta1/cluster_webhook.go deleted file mode 100644 index 01ce50f5b..000000000 --- a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/cluster_webhook.go +++ /dev/null @@ -1,240 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - "fmt" - "strings" - - "github.com/blang/semver" - apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apimachinery/pkg/util/validation/field" - ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/webhook" - - "sigs.k8s.io/cluster-api/feature" - "sigs.k8s.io/cluster-api/util/version" -) - -// Deprecated: This file, including all public and private methods, will be removed in a future release. -// The Cluster webhook validation implementation and API can now be found in the webhooks package. - -// SetupWebhookWithManager sets up Cluster webhooks. -// Deprecated: This method is going to be removed in a next release. -// Note: We're not using this method anymore and are using webhooks.Cluster.SetupWebhookWithManager instead. -// Note: We don't have to call this func for the conversion webhook as there is only a single conversion webhook instance -// for all resources and we already register it through other types. -func (c *Cluster) SetupWebhookWithManager(mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr). - For(c). - Complete() -} - -var _ webhook.Defaulter = &Cluster{} -var _ webhook.Validator = &Cluster{} - -// Default satisfies the defaulting webhook interface. -// Deprecated: This method is going to be removed in a next release. -// Note: We're not using this method anymore and are using webhooks.Cluster.Default instead. -func (c *Cluster) Default() { - if c.Spec.InfrastructureRef != nil && c.Spec.InfrastructureRef.Namespace == "" { - c.Spec.InfrastructureRef.Namespace = c.Namespace - } - - if c.Spec.ControlPlaneRef != nil && c.Spec.ControlPlaneRef.Namespace == "" { - c.Spec.ControlPlaneRef.Namespace = c.Namespace - } - - // If the Cluster uses a managed topology - if c.Spec.Topology != nil { - // tolerate version strings without a "v" prefix: prepend it if it's not there - if !strings.HasPrefix(c.Spec.Topology.Version, "v") { - c.Spec.Topology.Version = "v" + c.Spec.Topology.Version - } - } -} - -// ValidateCreate implements webhook.Validator so a webhook will be registered for the type. -// Deprecated: This method is going to be removed in a next release. -// Note: We're not using this method anymore and are using webhooks.Cluster.ValidateCreate instead. -func (c *Cluster) ValidateCreate() error { - return c.validate(nil) -} - -// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type. -// Deprecated: This method is going to be removed in a next release. -// Note: We're not using this method anymore and are using webhooks.Cluster.ValidateUpdate instead. -func (c *Cluster) ValidateUpdate(old runtime.Object) error { - oldCluster, ok := old.(*Cluster) - if !ok { - return apierrors.NewBadRequest(fmt.Sprintf("expected a Cluster but got a %T", old)) - } - return c.validate(oldCluster) -} - -// ValidateDelete implements webhook.Validator so a webhook will be registered for the type. -// Deprecated: This method is going to be removed in a next release. -// Note: We're not using this method anymore and are using webhooks.Cluster.ValidateDelete instead. -func (c *Cluster) ValidateDelete() error { - return nil -} - -func (c *Cluster) validate(old *Cluster) error { - var allErrs field.ErrorList - if c.Spec.InfrastructureRef != nil && c.Spec.InfrastructureRef.Namespace != c.Namespace { - allErrs = append( - allErrs, - field.Invalid( - field.NewPath("spec", "infrastructureRef", "namespace"), - c.Spec.InfrastructureRef.Namespace, - "must match metadata.namespace", - ), - ) - } - - if c.Spec.ControlPlaneRef != nil && c.Spec.ControlPlaneRef.Namespace != c.Namespace { - allErrs = append( - allErrs, - field.Invalid( - field.NewPath("spec", "controlPlaneRef", "namespace"), - c.Spec.ControlPlaneRef.Namespace, - "must match metadata.namespace", - ), - ) - } - - // Validate the managed topology, if defined. - if c.Spec.Topology != nil { - if topologyErrs := c.validateTopology(old); len(topologyErrs) > 0 { - allErrs = append(allErrs, topologyErrs...) - } - } - - if len(allErrs) == 0 { - return nil - } - return apierrors.NewInvalid(GroupVersion.WithKind("Cluster").GroupKind(), c.Name, allErrs) -} - -func (c *Cluster) validateTopology(old *Cluster) field.ErrorList { - // NOTE: ClusterClass and managed topologies are behind ClusterTopology feature gate flag; the web hook - // must prevent the usage of Cluster.Topology in case the feature flag is disabled. - if !feature.Gates.Enabled(feature.ClusterTopology) { - return field.ErrorList{ - field.Forbidden( - field.NewPath("spec", "topology"), - "can be set only if the ClusterTopology feature flag is enabled", - ), - } - } - - var allErrs field.ErrorList - - // class should be defined. - if c.Spec.Topology.Class == "" { - allErrs = append( - allErrs, - field.Invalid( - field.NewPath("spec", "topology", "class"), - c.Spec.Topology.Class, - "cannot be empty", - ), - ) - } - - // version should be valid. - if !version.KubeSemver.MatchString(c.Spec.Topology.Version) { - allErrs = append( - allErrs, - field.Invalid( - field.NewPath("spec", "topology", "version"), - c.Spec.Topology.Version, - "must be a valid semantic version", - ), - ) - } - - // MachineDeployment names must be unique. - if c.Spec.Topology.Workers != nil { - names := sets.String{} - for _, md := range c.Spec.Topology.Workers.MachineDeployments { - if names.Has(md.Name) { - allErrs = append(allErrs, - field.Invalid( - field.NewPath("spec", "topology", "workers", "machineDeployments"), - md, - fmt.Sprintf("MachineDeployment names should be unique. MachineDeployment with name %q is defined more than once.", md.Name), - ), - ) - } - names.Insert(md.Name) - } - } - - if old != nil { // On update - // Class could not be mutated. - if c.Spec.Topology.Class != old.Spec.Topology.Class { - allErrs = append( - allErrs, - field.Invalid( - field.NewPath("spec", "topology", "class"), - c.Spec.Topology.Class, - "class cannot be changed", - ), - ) - } - - // Version could only be increased. - inVersion, err := semver.ParseTolerant(c.Spec.Topology.Version) - if err != nil { - allErrs = append( - allErrs, - field.Invalid( - field.NewPath("spec", "topology", "version"), - c.Spec.Topology.Version, - "is not a valid version", - ), - ) - } - oldVersion, err := semver.ParseTolerant(old.Spec.Topology.Version) - if err != nil { - // NOTE: this should never happen. Nevertheless, handling this for extra caution. - allErrs = append( - allErrs, - field.Invalid( - field.NewPath("spec", "topology", "version"), - c.Spec.Topology.Class, - "cannot be compared with the old version", - ), - ) - } - if inVersion.NE(semver.Version{}) && oldVersion.NE(semver.Version{}) && version.Compare(inVersion, oldVersion, version.WithBuildTags()) == -1 { - allErrs = append( - allErrs, - field.Invalid( - field.NewPath("spec", "topology", "version"), - c.Spec.Topology.Version, - "cannot be decreased", - ), - ) - } - } - - return allErrs -} diff --git a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/clusterclass_types.go b/vendor/sigs.k8s.io/cluster-api/api/v1beta1/clusterclass_types.go deleted file mode 100644 index 96844b656..000000000 --- a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/clusterclass_types.go +++ /dev/null @@ -1,451 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - corev1 "k8s.io/api/core/v1" - apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/intstr" -) - -// +kubebuilder:object:root=true -// +kubebuilder:resource:path=clusterclasses,shortName=cc,scope=Namespaced,categories=cluster-api -// +kubebuilder:storageversion -// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp",description="Time duration since creation of ClusterClass" - -// ClusterClass is a template which can be used to create managed topologies. -type ClusterClass struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - - Spec ClusterClassSpec `json:"spec,omitempty"` -} - -// ClusterClassSpec describes the desired state of the ClusterClass. -type ClusterClassSpec struct { - // Infrastructure is a reference to a provider-specific template that holds - // the details for provisioning infrastructure specific cluster - // for the underlying provider. - // The underlying provider is responsible for the implementation - // of the template to an infrastructure cluster. - // +optional - Infrastructure LocalObjectTemplate `json:"infrastructure,omitempty"` - - // ControlPlane is a reference to a local struct that holds the details - // for provisioning the Control Plane for the Cluster. - // +optional - ControlPlane ControlPlaneClass `json:"controlPlane,omitempty"` - - // Workers describes the worker nodes for the cluster. - // It is a collection of node types which can be used to create - // the worker nodes of the cluster. - // +optional - Workers WorkersClass `json:"workers,omitempty"` - - // Variables defines the variables which can be configured - // in the Cluster topology and are then used in patches. - // +optional - Variables []ClusterClassVariable `json:"variables,omitempty"` - - // Patches defines the patches which are applied to customize - // referenced templates of a ClusterClass. - // Note: Patches will be applied in the order of the array. - // +optional - Patches []ClusterClassPatch `json:"patches,omitempty"` -} - -// ControlPlaneClass defines the class for the control plane. -type ControlPlaneClass struct { - // Metadata is the metadata applied to the machines of the ControlPlane. - // At runtime this metadata is merged with the corresponding metadata from the topology. - // - // This field is supported if and only if the control plane provider template - // referenced is Machine based. - // +optional - Metadata ObjectMeta `json:"metadata,omitempty"` - - // LocalObjectTemplate contains the reference to the control plane provider. - LocalObjectTemplate `json:",inline"` - - // MachineInfrastructure defines the metadata and infrastructure information - // for control plane machines. - // - // This field is supported if and only if the control plane provider template - // referenced above is Machine based and supports setting replicas. - // - // +optional - MachineInfrastructure *LocalObjectTemplate `json:"machineInfrastructure,omitempty"` - - // MachineHealthCheck defines a MachineHealthCheck for this ControlPlaneClass. - // This field is supported if and only if the ControlPlane provider template - // referenced above is Machine based and supports setting replicas. - // +optional - MachineHealthCheck *MachineHealthCheckClass `json:"machineHealthCheck,omitempty"` -} - -// WorkersClass is a collection of deployment classes. -type WorkersClass struct { - // MachineDeployments is a list of machine deployment classes that can be used to create - // a set of worker nodes. - // +optional - MachineDeployments []MachineDeploymentClass `json:"machineDeployments,omitempty"` -} - -// MachineDeploymentClass serves as a template to define a set of worker nodes of the cluster -// provisioned using the `ClusterClass`. -type MachineDeploymentClass struct { - // Class denotes a type of worker node present in the cluster, - // this name MUST be unique within a ClusterClass and can be referenced - // in the Cluster to create a managed MachineDeployment. - Class string `json:"class"` - - // Template is a local struct containing a collection of templates for creation of - // MachineDeployment objects representing a set of worker nodes. - Template MachineDeploymentClassTemplate `json:"template"` - - // MachineHealthCheck defines a MachineHealthCheck for this MachineDeploymentClass. - // +optional - MachineHealthCheck *MachineHealthCheckClass `json:"machineHealthCheck,omitempty"` -} - -// MachineDeploymentClassTemplate defines how a MachineDeployment generated from a MachineDeploymentClass -// should look like. -type MachineDeploymentClassTemplate struct { - // Metadata is the metadata applied to the machines of the MachineDeployment. - // At runtime this metadata is merged with the corresponding metadata from the topology. - // +optional - Metadata ObjectMeta `json:"metadata,omitempty"` - - // Bootstrap contains the bootstrap template reference to be used - // for the creation of worker Machines. - Bootstrap LocalObjectTemplate `json:"bootstrap"` - - // Infrastructure contains the infrastructure template reference to be used - // for the creation of worker Machines. - Infrastructure LocalObjectTemplate `json:"infrastructure"` -} - -// MachineHealthCheckClass defines a MachineHealthCheck for a group of Machines. -type MachineHealthCheckClass struct { - // UnhealthyConditions contains a list of the conditions that determine - // whether a node is considered unhealthy. The conditions are combined in a - // logical OR, i.e. if any of the conditions is met, the node is unhealthy. - UnhealthyConditions []UnhealthyCondition `json:"unhealthyConditions,omitempty"` - - // Any further remediation is only allowed if at most "MaxUnhealthy" machines selected by - // "selector" are not healthy. - // +optional - MaxUnhealthy *intstr.IntOrString `json:"maxUnhealthy,omitempty"` - - // Any further remediation is only allowed if the number of machines selected by "selector" as not healthy - // is within the range of "UnhealthyRange". Takes precedence over MaxUnhealthy. - // Eg. "[3-5]" - This means that remediation will be allowed only when: - // (a) there are at least 3 unhealthy machines (and) - // (b) there are at most 5 unhealthy machines - // +optional - UnhealthyRange *string `json:"unhealthyRange,omitempty"` - - // Machines older than this duration without a node will be considered to have - // failed and will be remediated. - // If you wish to disable this feature, set the value explicitly to 0. - // +optional - NodeStartupTimeout *metav1.Duration `json:"nodeStartupTimeout,omitempty"` - - // RemediationTemplate is a reference to a remediation template - // provided by an infrastructure provider. - // - // This field is completely optional, when filled, the MachineHealthCheck controller - // creates a new object from the template referenced and hands off remediation of the machine to - // a controller that lives outside of Cluster API. - // +optional - RemediationTemplate *corev1.ObjectReference `json:"remediationTemplate,omitempty"` -} - -// ClusterClassVariable defines a variable which can -// be configured in the Cluster topology and used in patches. -type ClusterClassVariable struct { - // Name of the variable. - Name string `json:"name"` - - // Required specifies if the variable is required. - // Note: this applies to the variable as a whole and thus the - // top-level object defined in the schema. If nested fields are - // required, this will be specified inside the schema. - Required bool `json:"required"` - - // Schema defines the schema of the variable. - Schema VariableSchema `json:"schema"` -} - -// VariableSchema defines the schema of a variable. -type VariableSchema struct { - // OpenAPIV3Schema defines the schema of a variable via OpenAPI v3 - // schema. The schema is a subset of the schema used in - // Kubernetes CRDs. - OpenAPIV3Schema JSONSchemaProps `json:"openAPIV3Schema"` -} - -// JSONSchemaProps is a JSON-Schema following Specification Draft 4 (http://json-schema.org/). -// This struct has been initially copied from apiextensionsv1.JSONSchemaProps, but all fields -// which are not supported in CAPI have been removed. -type JSONSchemaProps struct { - // Description is a human-readable description of this variable. - Description string `json:"description,omitempty"` - - // Example is an example for this variable. - Example *apiextensionsv1.JSON `json:"example,omitempty"` - - // Type is the type of the variable. - // Valid values are: object, array, string, integer, number or boolean. - Type string `json:"type"` - - // Properties specifies fields of an object. - // NOTE: Can only be set if type is object. - // NOTE: This field uses PreserveUnknownFields and Schemaless, - // because recursive validation is not possible. - // +optional - // +kubebuilder:pruning:PreserveUnknownFields - // +kubebuilder:validation:Schemaless - Properties map[string]JSONSchemaProps `json:"properties,omitempty"` - - // Required specifies which fields of an object are required. - // NOTE: Can only be set if type is object. - // +optional - Required []string `json:"required,omitempty"` - - // Items specifies fields of an array. - // NOTE: Can only be set if type is array. - // NOTE: This field uses PreserveUnknownFields and Schemaless, - // because recursive validation is not possible. - // +optional - // +kubebuilder:pruning:PreserveUnknownFields - // +kubebuilder:validation:Schemaless - Items *JSONSchemaProps `json:"items,omitempty"` - - // MaxItems is the max length of an array variable. - // NOTE: Can only be set if type is array. - // +optional - MaxItems *int64 `json:"maxItems,omitempty"` - - // MinItems is the min length of an array variable. - // NOTE: Can only be set if type is array. - // +optional - MinItems *int64 `json:"minItems,omitempty"` - - // UniqueItems specifies if items in an array must be unique. - // NOTE: Can only be set if type is array. - // +optional - UniqueItems bool `json:"uniqueItems,omitempty"` - - // Format is an OpenAPI v3 format string. Unknown formats are ignored. - // For a list of supported formats please see: (of the k8s.io/apiextensions-apiserver version we're currently using) - // https://github.com/kubernetes/apiextensions-apiserver/blob/master/pkg/apiserver/validation/formats.go - // NOTE: Can only be set if type is string. - // +optional - Format string `json:"format,omitempty"` - - // MaxLength is the max length of a string variable. - // NOTE: Can only be set if type is string. - // +optional - MaxLength *int64 `json:"maxLength,omitempty"` - - // MinLength is the min length of a string variable. - // NOTE: Can only be set if type is string. - // +optional - MinLength *int64 `json:"minLength,omitempty"` - - // Pattern is the regex which a string variable must match. - // NOTE: Can only be set if type is string. - // +optional - Pattern string `json:"pattern,omitempty"` - - // Maximum is the maximum of an integer or number variable. - // If ExclusiveMaximum is false, the variable is valid if it is lower than, or equal to, the value of Maximum. - // If ExclusiveMaximum is true, the variable is valid if it is strictly lower than the value of Maximum. - // NOTE: Can only be set if type is integer or number. - // +optional - Maximum *int64 `json:"maximum,omitempty"` - - // ExclusiveMaximum specifies if the Maximum is exclusive. - // NOTE: Can only be set if type is integer or number. - // +optional - ExclusiveMaximum bool `json:"exclusiveMaximum,omitempty"` - - // Minimum is the minimum of an integer or number variable. - // If ExclusiveMinimum is false, the variable is valid if it is greater than, or equal to, the value of Minimum. - // If ExclusiveMinimum is true, the variable is valid if it is strictly greater than the value of Minimum. - // NOTE: Can only be set if type is integer or number. - // +optional - Minimum *int64 `json:"minimum,omitempty"` - - // ExclusiveMinimum specifies if the Minimum is exclusive. - // NOTE: Can only be set if type is integer or number. - // +optional - ExclusiveMinimum bool `json:"exclusiveMinimum,omitempty"` - - // Enum is the list of valid values of the variable. - // NOTE: Can be set for all types. - // +optional - Enum []apiextensionsv1.JSON `json:"enum,omitempty"` - - // Default is the default value of the variable. - // NOTE: Can be set for all types. - // +optional - Default *apiextensionsv1.JSON `json:"default,omitempty"` -} - -// ClusterClassPatch defines a patch which is applied to customize the referenced templates. -type ClusterClassPatch struct { - // Name of the patch. - Name string `json:"name"` - - // Description is a human-readable description of this patch. - Description string `json:"description,omitempty"` - - // EnabledIf is a Go template to be used to calculate if a patch should be enabled. - // It can reference variables defined in .spec.variables and builtin variables. - // The patch will be enabled if the template evaluates to `true`, otherwise it will - // be disabled. - // If EnabledIf is not set, the patch will be enabled per default. - // +optional - EnabledIf *string `json:"enabledIf,omitempty"` - - // Definitions define the patches inline. - // Note: Patches will be applied in the order of the array. - Definitions []PatchDefinition `json:"definitions"` -} - -// PatchDefinition defines a patch which is applied to customize the referenced templates. -type PatchDefinition struct { - // Selector defines on which templates the patch should be applied. - Selector PatchSelector `json:"selector"` - - // JSONPatches defines the patches which should be applied on the templates - // matching the selector. - // Note: Patches will be applied in the order of the array. - JSONPatches []JSONPatch `json:"jsonPatches"` -} - -// PatchSelector defines on which templates the patch should be applied. -// Note: Matching on APIVersion and Kind is mandatory, to enforce that the patches are -// written for the correct version. The version of the references in the ClusterClass may -// be automatically updated during reconciliation if there is a newer version for the same contract. -// Note: The results of selection based on the individual fields are ANDed. -type PatchSelector struct { - // APIVersion filters templates by apiVersion. - APIVersion string `json:"apiVersion"` - - // Kind filters templates by kind. - Kind string `json:"kind"` - - // MatchResources selects templates based on where they are referenced. - MatchResources PatchSelectorMatch `json:"matchResources"` -} - -// PatchSelectorMatch selects templates based on where they are referenced. -// Note: The selector must match at least one template. -// Note: The results of selection based on the individual fields are ORed. -type PatchSelectorMatch struct { - // ControlPlane selects templates referenced in .spec.ControlPlane. - // Note: this will match the controlPlane and also the controlPlane - // machineInfrastructure (depending on the kind and apiVersion). - // +optional - ControlPlane bool `json:"controlPlane,omitempty"` - - // InfrastructureCluster selects templates referenced in .spec.infrastructure. - // +optional - InfrastructureCluster bool `json:"infrastructureCluster,omitempty"` - - // MachineDeploymentClass selects templates referenced in specific MachineDeploymentClasses in - // .spec.workers.machineDeployments. - // +optional - MachineDeploymentClass *PatchSelectorMatchMachineDeploymentClass `json:"machineDeploymentClass,omitempty"` -} - -// PatchSelectorMatchMachineDeploymentClass selects templates referenced -// in specific MachineDeploymentClasses in .spec.workers.machineDeployments. -type PatchSelectorMatchMachineDeploymentClass struct { - // Names selects templates by class names. - // +optional - Names []string `json:"names,omitempty"` -} - -// JSONPatch defines a JSON patch. -type JSONPatch struct { - // Op defines the operation of the patch. - // Note: Only `add`, `replace` and `remove` are supported. - Op string `json:"op"` - - // Path defines the path of the patch. - // Note: Only the spec of a template can be patched, thus the path has to start with /spec/. - // Note: For now the only allowed array modifications are `append` and `prepend`, i.e.: - // * for op: `add`: only index 0 (prepend) and - (append) are allowed - // * for op: `replace` or `remove`: no indexes are allowed - Path string `json:"path"` - - // Value defines the value of the patch. - // Note: Either Value or ValueFrom is required for add and replace - // operations. Only one of them is allowed to be set at the same time. - // Note: We have to use apiextensionsv1.JSON instead of our JSON type, - // because controller-tools has a hard-coded schema for apiextensionsv1.JSON - // which cannot be produced by another type (unset type field). - // Ref: https://github.com/kubernetes-sigs/controller-tools/blob/d0e03a142d0ecdd5491593e941ee1d6b5d91dba6/pkg/crd/known_types.go#L106-L111 - // +optional - Value *apiextensionsv1.JSON `json:"value,omitempty"` - - // ValueFrom defines the value of the patch. - // Note: Either Value or ValueFrom is required for add and replace - // operations. Only one of them is allowed to be set at the same time. - // +optional - ValueFrom *JSONPatchValue `json:"valueFrom,omitempty"` -} - -// JSONPatchValue defines the value of a patch. -// Note: Only one of the fields is allowed to be set at the same time. -type JSONPatchValue struct { - // Variable is the variable to be used as value. - // Variable can be one of the variables defined in .spec.variables or a builtin variable. - // +optional - Variable *string `json:"variable,omitempty"` - - // Template is the Go template to be used to calculate the value. - // A template can reference variables defined in .spec.variables and builtin variables. - // Note: The template must evaluate to a valid YAML or JSON value. - // +optional - Template *string `json:"template,omitempty"` -} - -// LocalObjectTemplate defines a template for a topology Class. -type LocalObjectTemplate struct { - // Ref is a required reference to a custom resource - // offered by a provider. - Ref *corev1.ObjectReference `json:"ref"` -} - -// +kubebuilder:object:root=true - -// ClusterClassList contains a list of Cluster. -type ClusterClassList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []ClusterClass `json:"items"` -} - -func init() { - SchemeBuilder.Register(&ClusterClass{}, &ClusterClassList{}) -} diff --git a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/clusterclass_webhook.go b/vendor/sigs.k8s.io/cluster-api/api/v1beta1/clusterclass_webhook.go deleted file mode 100644 index ec7d1c40f..000000000 --- a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/clusterclass_webhook.go +++ /dev/null @@ -1,373 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - "fmt" - "strings" - - corev1 "k8s.io/api/core/v1" - apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apimachinery/pkg/util/validation/field" - ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/webhook" - - "sigs.k8s.io/cluster-api/feature" -) - -// Deprecated: This file, including all public and private methods, will be removed in a future release. -// The ClusterClass webhook validation implementation and API can now be found in the webhooks package. - -// SetupWebhookWithManager sets up ClusterClass webhooks. -// Deprecated: This method is going to be removed in a next release. -// Note: We're not using this method anymore and are using webhooks.ClusterClass.SetupWebhookWithManager instead. -// Note: We don't have to call this func for the conversion webhook as there is only a single conversion webhook instance -// for all resources and we already register it through other types. -func (in *ClusterClass) SetupWebhookWithManager(mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr). - For(in). - Complete() -} - -var _ webhook.Validator = &ClusterClass{} -var _ webhook.Defaulter = &ClusterClass{} - -// Default satisfies the defaulting webhook interface. -// Deprecated: This method is going to be removed in a next release. -// Note: We're not using this method anymore and are using webhooks.ClusterClass.Default instead. -func (in *ClusterClass) Default() { - // Default all namespaces in the references to the object namespace. - defaultNamespace(in.Spec.Infrastructure.Ref, in.Namespace) - defaultNamespace(in.Spec.ControlPlane.Ref, in.Namespace) - - if in.Spec.ControlPlane.MachineInfrastructure != nil { - defaultNamespace(in.Spec.ControlPlane.MachineInfrastructure.Ref, in.Namespace) - } - - for i := range in.Spec.Workers.MachineDeployments { - defaultNamespace(in.Spec.Workers.MachineDeployments[i].Template.Bootstrap.Ref, in.Namespace) - defaultNamespace(in.Spec.Workers.MachineDeployments[i].Template.Infrastructure.Ref, in.Namespace) - } -} - -func defaultNamespace(ref *corev1.ObjectReference, namespace string) { - if ref != nil && ref.Namespace == "" { - ref.Namespace = namespace - } -} - -// ValidateCreate implements webhook.Validator so a webhook will be registered for the type. -// Deprecated: This method is going to be removed in a next release. -// Note: We're not using this method anymore and are using webhooks.ClusterClass.ValidateCreate instead. -func (in *ClusterClass) ValidateCreate() error { - return in.validate(nil) -} - -// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type. -// Deprecated: This method is going to be removed in a next release. -// Note: We're not using this method anymore and are using webhooks.ClusterClass.ValidateUpdate instead. -func (in *ClusterClass) ValidateUpdate(old runtime.Object) error { - oldClusterClass, ok := old.(*ClusterClass) - if !ok { - return apierrors.NewBadRequest(fmt.Sprintf("expected a ClusterClass but got a %T", old)) - } - return in.validate(oldClusterClass) -} - -// ValidateDelete implements webhook.Validator so a webhook will be registered for the type. -// Deprecated: This method is going to be removed in a next release. -// Note: We're not using this method anymore and are using webhooks.ClusterClass.ValidateDelete instead. -func (in *ClusterClass) ValidateDelete() error { - return nil -} - -func (in *ClusterClass) validate(old *ClusterClass) error { - // NOTE: ClusterClass and managed topologies are behind ClusterTopology feature gate flag; the web hook - // must prevent creating new objects in case the feature flag is disabled. - if !feature.Gates.Enabled(feature.ClusterTopology) { - return field.Forbidden( - field.NewPath("spec"), - "can be set only if the ClusterTopology feature flag is enabled", - ) - } - - var allErrs field.ErrorList - - // Ensure all references are valid. - allErrs = append(allErrs, in.validateAllRefs()...) - - // Ensure all MachineDeployment classes are unique. - allErrs = append(allErrs, in.Spec.Workers.validateUniqueClasses(field.NewPath("spec", "workers"))...) - - // Ensure spec changes are compatible. - allErrs = append(allErrs, in.validateCompatibleSpecChanges(old)...) - - if len(allErrs) > 0 { - return apierrors.NewInvalid(GroupVersion.WithKind("ClusterClass").GroupKind(), in.Name, allErrs) - } - return nil -} - -func (in *ClusterClass) validateAllRefs() field.ErrorList { - var allErrs field.ErrorList - - allErrs = append(allErrs, in.Spec.Infrastructure.isValid(in.Namespace, field.NewPath("spec", "infrastructure"))...) - allErrs = append(allErrs, in.Spec.ControlPlane.LocalObjectTemplate.isValid(in.Namespace, field.NewPath("spec", "controlPlane"))...) - if in.Spec.ControlPlane.MachineInfrastructure != nil { - allErrs = append(allErrs, in.Spec.ControlPlane.MachineInfrastructure.isValid(in.Namespace, field.NewPath("spec", "controlPlane", "machineInfrastructure"))...) - } - - for i, class := range in.Spec.Workers.MachineDeployments { - allErrs = append(allErrs, class.Template.Bootstrap.isValid(in.Namespace, field.NewPath("spec", "workers", "machineDeployments").Index(i).Child("template", "bootstrap"))...) - allErrs = append(allErrs, class.Template.Infrastructure.isValid(in.Namespace, field.NewPath("spec", "workers", "machineDeployments").Index(i).Child("template", "infrastructure"))...) - } - - return allErrs -} - -func (in *ClusterClass) validateCompatibleSpecChanges(old *ClusterClass) field.ErrorList { - var allErrs field.ErrorList - - // in case of create, no changes to verify - // return early. - if old == nil { - return nil - } - - // Validate changes to MachineDeployments. - allErrs = append(allErrs, in.validateMachineDeploymentsCompatibleChanges(old)...) - - // Validate InfrastructureClusterTemplate changes in a compatible way. - allErrs = append(allErrs, in.Spec.Infrastructure.isCompatibleWith( - old.Spec.Infrastructure, - field.NewPath("spec", "infrastructure"), - )...) - - // Validate control plane changes in a compatible way. - allErrs = append(allErrs, in.Spec.ControlPlane.LocalObjectTemplate.isCompatibleWith( - old.Spec.ControlPlane.LocalObjectTemplate, - field.NewPath("spec", "controlPlane"), - )...) - - if in.Spec.ControlPlane.MachineInfrastructure != nil && old.Spec.ControlPlane.MachineInfrastructure != nil { - allErrs = append(allErrs, in.Spec.ControlPlane.MachineInfrastructure.isCompatibleWith( - *old.Spec.ControlPlane.MachineInfrastructure, - field.NewPath("spec", "controlPlane", "machineInfrastructure"), - )...) - } - - return allErrs -} - -func (in *ClusterClass) validateMachineDeploymentsCompatibleChanges(old *ClusterClass) field.ErrorList { - var allErrs field.ErrorList - - // Ensure no MachineDeployment class was removed. - classes := in.Spec.Workers.classNames() - for _, oldClass := range old.Spec.Workers.MachineDeployments { - if !classes.Has(oldClass.Class) { - allErrs = append(allErrs, - field.Invalid( - field.NewPath("spec", "workers", "machineDeployments"), - in.Spec.Workers.MachineDeployments, - fmt.Sprintf("The %q MachineDeployment class can't be removed.", oldClass.Class), - ), - ) - } - } - - // Ensure previous MachineDeployment class was modified in a compatible way. - for i, class := range in.Spec.Workers.MachineDeployments { - for _, oldClass := range old.Spec.Workers.MachineDeployments { - if class.Class == oldClass.Class { - // NOTE: class.Template.Metadata and class.Template.Bootstrap are allowed to change; - // class.Template.Bootstrap are ensured syntactically correct by validateAllRefs. - - // Validates class.Template.Infrastructure template changes in a compatible way - allErrs = append(allErrs, class.Template.Infrastructure.isCompatibleWith( - oldClass.Template.Infrastructure, - field.NewPath("spec", "workers", "machineDeployments").Index(i).Child("template", "infrastructure"), - )...) - } - } - } - - return allErrs -} - -func (r *LocalObjectTemplate) isValid(namespace string, pathPrefix *field.Path) field.ErrorList { - var allErrs field.ErrorList - - // check if ref is not nil. - if r.Ref == nil { - return field.ErrorList{field.Invalid( - pathPrefix.Child("ref"), - r.Ref.Name, - "cannot be nil", - )} - } - - // check if a name is provided - if r.Ref.Name == "" { - allErrs = append(allErrs, - field.Invalid( - pathPrefix.Child("ref", "name"), - r.Ref.Name, - "cannot be empty", - ), - ) - } - - // validate if namespace matches the provided namespace - if namespace != "" && r.Ref.Namespace != namespace { - allErrs = append( - allErrs, - field.Invalid( - pathPrefix.Child("ref", "namespace"), - r.Ref.Namespace, - fmt.Sprintf("must be '%s'", namespace), - ), - ) - } - - // check if kind is a template - if len(r.Ref.Kind) <= len(TemplateSuffix) || !strings.HasSuffix(r.Ref.Kind, TemplateSuffix) { - allErrs = append(allErrs, - field.Invalid( - pathPrefix.Child("ref", "kind"), - r.Ref.Kind, - fmt.Sprintf("kind must be of form '%s'", TemplateSuffix), - ), - ) - } - - // check if apiVersion is valid - gv, err := schema.ParseGroupVersion(r.Ref.APIVersion) - if err != nil { - allErrs = append(allErrs, - field.Invalid( - pathPrefix.Child("ref", "apiVersion"), - r.Ref.APIVersion, - fmt.Sprintf("must be a valid apiVersion: %v", err), - ), - ) - } - if err == nil && gv.Empty() { - allErrs = append(allErrs, - field.Invalid( - pathPrefix.Child("ref", "apiVersion"), - r.Ref.APIVersion, - "value cannot be empty", - ), - ) - } - - return allErrs -} - -// isCompatibleWith checks if a reference is compatible with the old one. -// NOTE: this func assumes that r.isValid() is called before, thus both ref are defined and syntactically valid; -// also namespace are enforced to be the same of the ClusterClass. -func (r *LocalObjectTemplate) isCompatibleWith(old LocalObjectTemplate, pathPrefix *field.Path) field.ErrorList { - var allErrs field.ErrorList - - // Check for nil Ref here to avoid panic. - if r.Ref == nil || old.Ref == nil { - return allErrs - } - - // Ensure that the API Group and Kind does not change, while instead we allow version to change. - // TODO: In the future we might want to relax this requirement with some sort of opt-in behavior (e.g. annotation). - - gv, err := schema.ParseGroupVersion(r.Ref.APIVersion) - if err != nil { - // NOTE this should never happen. - allErrs = append(allErrs, - field.Invalid( - pathPrefix.Child("ref", "apiVersion"), - r.Ref.APIVersion, - fmt.Sprintf("must be a valid apiVersion: %v", err), - ), - ) - } - - oldGV, err := schema.ParseGroupVersion(old.Ref.APIVersion) - if err != nil { - // NOTE this should never happen. - allErrs = append(allErrs, - field.Invalid( - pathPrefix.Child("ref", "apiVersion"), - old.Ref.APIVersion, - fmt.Sprintf("must be a valid apiVersion: %v", err), - ), - ) - } - - if gv.Group != oldGV.Group { - allErrs = append(allErrs, - field.Invalid( - pathPrefix.Child("ref", "apiVersion"), - r.Ref.APIVersion, - "apiGroup cannot be changed", - ), - ) - } - - if r.Ref.Kind != old.Ref.Kind { - allErrs = append(allErrs, - field.Invalid( - pathPrefix.Child("ref", "kind"), - r.Ref.Kind, - "value cannot be changed", - ), - ) - } - - return allErrs -} - -// classNames returns the set of MachineDeployment class names. -func (w *WorkersClass) classNames() sets.String { - classes := sets.NewString() - for _, class := range w.MachineDeployments { - classes.Insert(class.Class) - } - return classes -} - -func (w *WorkersClass) validateUniqueClasses(pathPrefix *field.Path) field.ErrorList { - var allErrs field.ErrorList - - classes := sets.NewString() - for i, class := range w.MachineDeployments { - if classes.Has(class.Class) { - allErrs = append(allErrs, - field.Invalid( - pathPrefix.Child("machineDeployments").Index(i).Child("class"), - class.Class, - fmt.Sprintf("MachineDeployment class should be unique. MachineDeployment with class %q is defined more than once.", class.Class), - ), - ) - } - classes.Insert(class.Class) - } - - return allErrs -} diff --git a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/common_types.go b/vendor/sigs.k8s.io/cluster-api/api/v1beta1/common_types.go deleted file mode 100644 index 7d19c0e05..000000000 --- a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/common_types.go +++ /dev/null @@ -1,186 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -const ( - // ClusterLabelName is the label set on machines linked to a cluster and - // external objects(bootstrap and infrastructure providers). - ClusterLabelName = "cluster.x-k8s.io/cluster-name" - - // ClusterTopologyOwnedLabel is the label set on all the object which are managed as part of a ClusterTopology. - ClusterTopologyOwnedLabel = "topology.cluster.x-k8s.io/owned" - - // ClusterTopologyManagedFieldsAnnotation is the annotation used to store the list of paths managed - // by the topology controller; changes to those paths will be considered authoritative. - // NOTE: Managed field depends on the last reconciliation of a managed object; this list can - // change during the lifecycle of an object, depending on how the corresponding template + patch/variable - // changes over time. - // NOTE: The topology controller is only concerned about managed paths in the spec; given that - // we are dropping spec. from the result to reduce verbosity of the generated annotation. - // NOTE: Managed paths are relevant only for unstructured objects where it is not possible - // to easily discover which fields have been set by templates + patches/variables at a given reconcile; - // instead, it is not necessary to store managed paths for typed objets (e.g. Cluster, MachineDeployments) - // given that the topology controller explicitly sets a well-known, immutable list of fields at every reconcile. - ClusterTopologyManagedFieldsAnnotation = "topology.cluster.x-k8s.io/managed-field-paths" - - // ClusterTopologyMachineDeploymentLabelName is the label set on the generated MachineDeployment objects - // to track the name of the MachineDeployment topology it represents. - ClusterTopologyMachineDeploymentLabelName = "topology.cluster.x-k8s.io/deployment-name" - - // ProviderLabelName is the label set on components in the provider manifest. - // This label allows to easily identify all the components belonging to a provider; the clusterctl - // tool uses this label for implementing provider's lifecycle operations. - ProviderLabelName = "cluster.x-k8s.io/provider" - - // ClusterNameAnnotation is the annotation set on nodes identifying the name of the cluster the node belongs to. - ClusterNameAnnotation = "cluster.x-k8s.io/cluster-name" - - // ClusterNamespaceAnnotation is the annotation set on nodes identifying the namespace of the cluster the node belongs to. - ClusterNamespaceAnnotation = "cluster.x-k8s.io/cluster-namespace" - - // MachineAnnotation is the annotation set on nodes identifying the machine the node belongs to. - MachineAnnotation = "cluster.x-k8s.io/machine" - - // OwnerKindAnnotation is the annotation set on nodes identifying the owner kind. - OwnerKindAnnotation = "cluster.x-k8s.io/owner-kind" - - // OwnerNameAnnotation is the annotation set on nodes identifying the owner name. - OwnerNameAnnotation = "cluster.x-k8s.io/owner-name" - - // PausedAnnotation is an annotation that can be applied to any Cluster API - // object to prevent a controller from processing a resource. - // - // Controllers working with Cluster API objects must check the existence of this annotation - // on the reconciled object. - PausedAnnotation = "cluster.x-k8s.io/paused" - - // DisableMachineCreate is an annotation that can be used to signal a MachineSet to stop creating new machines. - // It is utilized in the OnDelete MachineDeploymentStrategy to allow the MachineDeployment controller to scale down - // older MachineSets when Machines are deleted and add the new replicas to the latest MachineSet. - DisableMachineCreate = "cluster.x-k8s.io/disable-machine-create" - - // WatchLabel is a label othat can be applied to any Cluster API object. - // - // Controllers which allow for selective reconciliation may check this label and proceed - // with reconciliation of the object only if this label and a configured value is present. - WatchLabel = "cluster.x-k8s.io/watch-filter" - - // DeleteMachineAnnotation marks control plane and worker nodes that will be given priority for deletion - // when KCP or a machineset scales down. This annotation is given top priority on all delete policies. - DeleteMachineAnnotation = "cluster.x-k8s.io/delete-machine" - - // TemplateClonedFromNameAnnotation is the infrastructure machine annotation that stores the name of the infrastructure template resource - // that was cloned for the machine. This annotation is set only during cloning a template. Older/adopted machines will not have this annotation. - TemplateClonedFromNameAnnotation = "cluster.x-k8s.io/cloned-from-name" - - // TemplateClonedFromGroupKindAnnotation is the infrastructure machine annotation that stores the group-kind of the infrastructure template resource - // that was cloned for the machine. This annotation is set only during cloning a template. Older/adopted machines will not have this annotation. - TemplateClonedFromGroupKindAnnotation = "cluster.x-k8s.io/cloned-from-groupkind" - - // MachineSkipRemediationAnnotation is the annotation used to mark the machines that should not be considered for remediation by MachineHealthCheck reconciler. - MachineSkipRemediationAnnotation = "cluster.x-k8s.io/skip-remediation" - - // ClusterSecretType defines the type of secret created by core components. - ClusterSecretType corev1.SecretType = "cluster.x-k8s.io/secret" //nolint:gosec - - // InterruptibleLabel is the label used to mark the nodes that run on interruptible instances. - InterruptibleLabel = "cluster.x-k8s.io/interruptible" - - // ManagedByAnnotation is an annotation that can be applied to InfraCluster resources to signify that - // some external system is managing the cluster infrastructure. - // - // Provider InfraCluster controllers will ignore resources with this annotation. - // An external controller must fulfill the contract of the InfraCluster resource. - // External infrastructure providers should ensure that the annotation, once set, cannot be removed. - ManagedByAnnotation = "cluster.x-k8s.io/managed-by" -) - -const ( - // TemplateSuffix is the object kind suffix used by template types. - TemplateSuffix = "Template" -) - -var ( - // ZeroDuration is a zero value of the metav1.Duration type. - ZeroDuration = metav1.Duration{} -) - -// MachineAddressType describes a valid MachineAddress type. -type MachineAddressType string - -// Define the MachineAddressType constants. -const ( - MachineHostName MachineAddressType = "Hostname" - MachineExternalIP MachineAddressType = "ExternalIP" - MachineInternalIP MachineAddressType = "InternalIP" - MachineExternalDNS MachineAddressType = "ExternalDNS" - MachineInternalDNS MachineAddressType = "InternalDNS" -) - -// MachineAddress contains information for the node's address. -type MachineAddress struct { - // Machine address type, one of Hostname, ExternalIP or InternalIP. - Type MachineAddressType `json:"type"` - - // The machine address. - Address string `json:"address"` -} - -// MachineAddresses is a slice of MachineAddress items to be used by infrastructure providers. -type MachineAddresses []MachineAddress - -// ObjectMeta is metadata that all persisted resources must have, which includes all objects -// users must create. This is a copy of customizable fields from metav1.ObjectMeta. -// -// ObjectMeta is embedded in `Machine.Spec`, `MachineDeployment.Template` and `MachineSet.Template`, -// which are not top-level Kubernetes objects. Given that metav1.ObjectMeta has lots of special cases -// and read-only fields which end up in the generated CRD validation, having it as a subset simplifies -// the API and some issues that can impact user experience. -// -// During the [upgrade to controller-tools@v2](https://github.com/kubernetes-sigs/cluster-api/pull/1054) -// for v1alpha2, we noticed a failure would occur running Cluster API test suite against the new CRDs, -// specifically `spec.metadata.creationTimestamp in body must be of type string: "null"`. -// The investigation showed that `controller-tools@v2` behaves differently than its previous version -// when handling types from [metav1](k8s.io/apimachinery/pkg/apis/meta/v1) package. -// -// In more details, we found that embedded (non-top level) types that embedded `metav1.ObjectMeta` -// had validation properties, including for `creationTimestamp` (metav1.Time). -// The `metav1.Time` type specifies a custom json marshaller that, when IsZero() is true, returns `null` -// which breaks validation because the field isn't marked as nullable. -// -// In future versions, controller-tools@v2 might allow overriding the type and validation for embedded -// types. When that happens, this hack should be revisited. -type ObjectMeta struct { - // Map of string keys and values that can be used to organize and categorize - // (scope and select) objects. May match selectors of replication controllers - // and services. - // More info: http://kubernetes.io/docs/user-guide/labels - // +optional - Labels map[string]string `json:"labels,omitempty"` - - // Annotations is an unstructured key value map stored with a resource that may be - // set by external tools to store and retrieve arbitrary metadata. They are not - // queryable and should be preserved when modifying objects. - // More info: http://kubernetes.io/docs/user-guide/annotations - // +optional - Annotations map[string]string `json:"annotations,omitempty"` -} diff --git a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/condition_consts.go b/vendor/sigs.k8s.io/cluster-api/api/v1beta1/condition_consts.go deleted file mode 100644 index 57fd2b379..000000000 --- a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/condition_consts.go +++ /dev/null @@ -1,280 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -// ANCHOR: CommonConditions - -// Common ConditionTypes used by Cluster API objects. -const ( - // ReadyCondition defines the Ready condition type that summarizes the operational state of a Cluster API object. - ReadyCondition ConditionType = "Ready" -) - -// Common ConditionReason used by Cluster API objects. -const ( - // DeletingReason (Severity=Info) documents a condition not in Status=True because the underlying object it is currently being deleted. - DeletingReason = "Deleting" - - // DeletionFailedReason (Severity=Warning) documents a condition not in Status=True because the underlying object - // encountered problems during deletion. This is a warning because the reconciler will retry deletion. - DeletionFailedReason = "DeletionFailed" - - // DeletedReason (Severity=Info) documents a condition not in Status=True because the underlying object was deleted. - DeletedReason = "Deleted" - - // IncorrectExternalRefReason (Severity=Error) documents a CAPI object with an incorrect external object reference. - IncorrectExternalRefReason = "IncorrectExternalRef" -) - -const ( - // InfrastructureReadyCondition reports a summary of current status of the infrastructure object defined for this cluster/machine/machinepool. - // This condition is mirrored from the Ready condition in the infrastructure ref object, and - // the absence of this condition might signal problems in the reconcile external loops or the fact that - // the infrastructure provider does not implement the Ready condition yet. - InfrastructureReadyCondition ConditionType = "InfrastructureReady" - - // WaitingForInfrastructureFallbackReason (Severity=Info) documents a cluster/machine/machinepool waiting for the underlying infrastructure - // to be available. - // NOTE: This reason is used only as a fallback when the infrastructure object is not reporting its own ready condition. - WaitingForInfrastructureFallbackReason = "WaitingForInfrastructure" -) - -// ANCHOR_END: CommonConditions - -// Conditions and condition Reasons for the Cluster object. - -const ( - // ControlPlaneInitializedCondition reports if the cluster's control plane has been initialized such that the - // cluster's apiserver is reachable and at least one control plane Machine has a node reference. Once this - // condition is marked true, its value is never changed. See the ControlPlaneReady condition for an indication of - // the current readiness of the cluster's control plane. - ControlPlaneInitializedCondition ConditionType = "ControlPlaneInitialized" - - // MissingNodeRefReason (Severity=Info) documents a cluster waiting for at least one control plane Machine to have - // its node reference populated. - MissingNodeRefReason = "MissingNodeRef" - - // WaitingForControlPlaneProviderInitializedReason (Severity=Info) documents a cluster waiting for the control plane - // provider to report successful control plane initialization. - WaitingForControlPlaneProviderInitializedReason = "WaitingForControlPlaneProviderInitialized" - - // ControlPlaneReadyCondition reports the ready condition from the control plane object defined for this cluster. - // This condition is mirrored from the Ready condition in the control plane ref object, and - // the absence of this condition might signal problems in the reconcile external loops or the fact that - // the control plane provider does not implement the Ready condition yet. - ControlPlaneReadyCondition ConditionType = "ControlPlaneReady" - - // WaitingForControlPlaneFallbackReason (Severity=Info) documents a cluster waiting for the control plane - // to be available. - // NOTE: This reason is used only as a fallback when the control plane object is not reporting its own ready condition. - WaitingForControlPlaneFallbackReason = "WaitingForControlPlane" - - // WaitingForControlPlaneAvailableReason (Severity=Info) documents a Cluster API object - // waiting for the control plane machine to be available. - // - // NOTE: Having the control plane machine available is a pre-condition for joining additional control planes - // or workers nodes. - WaitingForControlPlaneAvailableReason = "WaitingForControlPlaneAvailable" -) - -// Conditions and condition Reasons for the Machine object. - -const ( - // BootstrapReadyCondition reports a summary of current status of the bootstrap object defined for this machine. - // This condition is mirrored from the Ready condition in the bootstrap ref object, and - // the absence of this condition might signal problems in the reconcile external loops or the fact that - // the bootstrap provider does not implement the Ready condition yet. - BootstrapReadyCondition ConditionType = "BootstrapReady" - - // WaitingForDataSecretFallbackReason (Severity=Info) documents a machine waiting for the bootstrap data secret - // to be available. - // NOTE: This reason is used only as a fallback when the bootstrap object is not reporting its own ready condition. - WaitingForDataSecretFallbackReason = "WaitingForDataSecret" - - // DrainingSucceededCondition provide evidence of the status of the node drain operation which happens during the machine - // deletion process. - DrainingSucceededCondition ConditionType = "DrainingSucceeded" - - // DrainingReason (Severity=Info) documents a machine node being drained. - DrainingReason = "Draining" - - // DrainingFailedReason (Severity=Warning) documents a machine node drain operation failed. - DrainingFailedReason = "DrainingFailed" - - // PreDrainDeleteHookSucceededCondition reports a machine waiting for a PreDrainDeleteHook before being delete. - PreDrainDeleteHookSucceededCondition ConditionType = "PreDrainDeleteHookSucceeded" - - // PreTerminateDeleteHookSucceededCondition reports a machine waiting for a PreDrainDeleteHook before being delete. - PreTerminateDeleteHookSucceededCondition ConditionType = "PreTerminateDeleteHookSucceeded" - - // WaitingExternalHookReason (Severity=Info) provide evidence that we are waiting for an external hook to complete. - WaitingExternalHookReason = "WaitingExternalHook" - - // VolumeDetachSucceededCondition reports a machine waiting for volumes to be detached. - VolumeDetachSucceededCondition ConditionType = "VolumeDetachSucceeded" - - // WaitingForVolumeDetachReason (Severity=Info) provide evidence that a machine node waiting for volumes to be attached. - WaitingForVolumeDetachReason = "WaitingForVolumeDetach" -) - -const ( - // MachineHealthCheckSucceededCondition is set on machines that have passed a healthcheck by the MachineHealthCheck controller. - // In the event that the health check fails it will be set to False. - MachineHealthCheckSucceededCondition ConditionType = "HealthCheckSucceeded" - - // MachineHealthCheckSuccededCondition is set on machines that have passed a healthcheck by the MachineHealthCheck controller. - // In the event that the health check fails it will be set to False. - // Deprecated: This const is going to be removed in a next release. Use MachineHealthCheckSucceededCondition instead. - MachineHealthCheckSuccededCondition ConditionType = "HealthCheckSucceeded" - - // MachineHasFailureReason is the reason used when a machine has either a FailureReason or a FailureMessage set on its status. - MachineHasFailureReason = "MachineHasFailure" - - // NodeStartupTimeoutReason is the reason used when a machine's node does not appear within the specified timeout. - NodeStartupTimeoutReason = "NodeStartupTimeout" - - // UnhealthyNodeConditionReason is the reason used when a machine's node has one of the MachineHealthCheck's unhealthy conditions. - UnhealthyNodeConditionReason = "UnhealthyNode" -) - -const ( - // MachineOwnerRemediatedCondition is set on machines that have failed a healthcheck by the MachineHealthCheck controller. - // MachineOwnerRemediatedCondition is set to False after a health check fails, but should be changed to True by the owning controller after remediation succeeds. - MachineOwnerRemediatedCondition ConditionType = "OwnerRemediated" - - // WaitingForRemediationReason is the reason used when a machine fails a health check and remediation is needed. - WaitingForRemediationReason = "WaitingForRemediation" - - // RemediationFailedReason is the reason used when a remediation owner fails to remediate an unhealthy machine. - RemediationFailedReason = "RemediationFailed" - - // RemediationInProgressReason is the reason used when an unhealthy machine is being remediated by the remediation owner. - RemediationInProgressReason = "RemediationInProgress" - - // ExternalRemediationTemplateAvailable is set on machinehealthchecks when MachineHealthCheck controller uses external remediation. - // ExternalRemediationTemplateAvailable is set to false if external remediation template is not found. - ExternalRemediationTemplateAvailable ConditionType = "ExternalRemediationTemplateAvailable" - - // ExternalRemediationTemplateNotFound is the reason used when a machine health check fails to find external remediation template. - ExternalRemediationTemplateNotFound = "ExternalRemediationTemplateNotFound" - - // ExternalRemediationRequestAvailable is set on machinehealthchecks when MachineHealthCheck controller uses external remediation. - // ExternalRemediationRequestAvailable is set to false if creating external remediation request fails. - ExternalRemediationRequestAvailable ConditionType = "ExternalRemediationRequestAvailable" - - // ExternalRemediationRequestCreationFailed is the reason used when a machine health check fails to create external remediation request. - ExternalRemediationRequestCreationFailed = "ExternalRemediationRequestCreationFailed" -) - -// Conditions and condition Reasons for the Machine's Node object. -const ( - // MachineNodeHealthyCondition provides info about the operational state of the Kubernetes node hosted on the machine by summarizing node conditions. - // If the conditions defined in a Kubernetes node (i.e., NodeReady, NodeMemoryPressure, NodeDiskPressure, NodePIDPressure, and NodeNetworkUnavailable) are in a healthy state, it will be set to True. - MachineNodeHealthyCondition ConditionType = "NodeHealthy" - - // WaitingForNodeRefReason (Severity=Info) documents a machine.spec.providerId is not assigned yet. - WaitingForNodeRefReason = "WaitingForNodeRef" - - // NodeProvisioningReason (Severity=Info) documents machine in the process of provisioning a node. - // NB. provisioning --> NodeRef == "". - NodeProvisioningReason = "NodeProvisioning" - - // NodeNotFoundReason (Severity=Error) documents a machine's node has previously been observed but is now gone. - // NB. provisioned --> NodeRef != "". - NodeNotFoundReason = "NodeNotFound" - - // NodeConditionsFailedReason (Severity=Warning) documents a node is not in a healthy state due to the failed state of at least 1 Kubelet condition. - NodeConditionsFailedReason = "NodeConditionsFailed" -) - -// Conditions and condition Reasons for the MachineHealthCheck object. - -const ( - // RemediationAllowedCondition is set on MachineHealthChecks to show the status of whether the MachineHealthCheck is - // allowed to remediate any Machines or whether it is blocked from remediating any further. - RemediationAllowedCondition ConditionType = "RemediationAllowed" - - // TooManyUnhealthyReason is the reason used when too many Machines are unhealthy and the MachineHealthCheck is blocked - // from making any further remediations. - TooManyUnhealthyReason = "TooManyUnhealthy" -) - -// Conditions and condition Reasons for MachineDeployments. - -const ( - // MachineDeploymentAvailableCondition means the MachineDeployment is available, that is, at least the minimum available - // machines required (i.e. Spec.Replicas-MaxUnavailable when MachineDeploymentStrategyType = RollingUpdate) are up and running for at least minReadySeconds. - MachineDeploymentAvailableCondition ConditionType = "Available" - - // WaitingForAvailableMachinesReason (Severity=Warning) reflects the fact that the required minimum number of machines for a machinedeployment are not available. - WaitingForAvailableMachinesReason = "WaitingForAvailableMachines" -) - -// Conditions and condition Reasons for MachineSets. - -const ( - // MachinesCreatedCondition documents that the machines controlled by the MachineSet are created. - // When this condition is false, it indicates that there was an error when cloning the infrastructure/bootstrap template or - // when generating the machine object. - MachinesCreatedCondition ConditionType = "MachinesCreated" - - // MachinesReadyCondition reports an aggregate of current status of the machines controlled by the MachineSet. - MachinesReadyCondition ConditionType = "MachinesReady" - - // BootstrapTemplateCloningFailedReason (Severity=Error) documents a MachineSet failing to - // clone the bootstrap template. - BootstrapTemplateCloningFailedReason = "BootstrapTemplateCloningFailed" - - // InfrastructureTemplateCloningFailedReason (Severity=Error) documents a MachineSet failing to - // clone the infrastructure template. - InfrastructureTemplateCloningFailedReason = "InfrastructureTemplateCloningFailed" - - // MachineCreationFailedReason (Severity=Error) documents a MachineSet failing to - // generate a machine object. - MachineCreationFailedReason = "MachineCreationFailed" - - // ResizedCondition documents a MachineSet is resizing the set of controlled machines. - ResizedCondition ConditionType = "Resized" - - // ScalingUpReason (Severity=Info) documents a MachineSet is increasing the number of replicas. - ScalingUpReason = "ScalingUp" - - // ScalingDownReason (Severity=Info) documents a MachineSet is decreasing the number of replicas. - ScalingDownReason = "ScalingDown" -) - -// Conditions and condition reasons for Clusters with a managed Topology. -const ( - // TopologyReconciledCondition provides evidence about the reconciliation of a Cluster topology into - // the managed objects of the Cluster. - // Status false means that for any reason, the values defined in Cluster.spec.topology are not yet applied to - // managed objects on the Cluster; status true means that Cluster.spec.topology have been applied to - // the objects in the Cluster (but this does not imply those objects are already reconciled to the spec provided). - TopologyReconciledCondition ConditionType = "TopologyReconciled" - - // TopologyReconcileFailedReason (Severity=Error) documents the reconciliation of a Cluster topology - // failing due to an error. - TopologyReconcileFailedReason = "TopologyReconcileFailed" - - // TopologyReconciledControlPlaneUpgradePendingReason (Severity=Info) documents reconciliation of a Cluster topology - // not yet completed because Control Plane is not yet updated to match the desired topology spec. - TopologyReconciledControlPlaneUpgradePendingReason = "ControlPlaneUpgradePending" - - // TopologyReconciledMachineDeploymentsUpgradePendingReason (Severity=Info) documents reconciliation of a Cluster topology - // not yet completed because at least one of the MachineDeployments is not yet updated to match the desired topology spec. - TopologyReconciledMachineDeploymentsUpgradePendingReason = "MachineDeploymentsUpgradePending" -) diff --git a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/condition_types.go b/vendor/sigs.k8s.io/cluster-api/api/v1beta1/condition_types.go deleted file mode 100644 index 7f0983e4b..000000000 --- a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/condition_types.go +++ /dev/null @@ -1,94 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// ANCHOR: ConditionSeverity - -// ConditionSeverity expresses the severity of a Condition Type failing. -type ConditionSeverity string - -const ( - // ConditionSeverityError specifies that a condition with `Status=False` is an error. - ConditionSeverityError ConditionSeverity = "Error" - - // ConditionSeverityWarning specifies that a condition with `Status=False` is a warning. - ConditionSeverityWarning ConditionSeverity = "Warning" - - // ConditionSeverityInfo specifies that a condition with `Status=False` is informative. - ConditionSeverityInfo ConditionSeverity = "Info" - - // ConditionSeverityNone should apply only to conditions with `Status=True`. - ConditionSeverityNone ConditionSeverity = "" -) - -// ANCHOR_END: ConditionSeverity - -// ANCHOR: ConditionType - -// ConditionType is a valid value for Condition.Type. -type ConditionType string - -// ANCHOR_END: ConditionType - -// ANCHOR: Condition - -// Condition defines an observation of a Cluster API resource operational state. -type Condition struct { - // Type of condition in CamelCase or in foo.example.com/CamelCase. - // Many .condition.type values are consistent across resources like Available, but because arbitrary conditions - // can be useful (see .node.status.conditions), the ability to deconflict is important. - Type ConditionType `json:"type"` - - // Status of the condition, one of True, False, Unknown. - Status corev1.ConditionStatus `json:"status"` - - // Severity provides an explicit classification of Reason code, so the users or machines can immediately - // understand the current situation and act accordingly. - // The Severity field MUST be set only when Status=False. - // +optional - Severity ConditionSeverity `json:"severity,omitempty"` - - // Last time the condition transitioned from one status to another. - // This should be when the underlying condition changed. If that is not known, then using the time when - // the API field changed is acceptable. - LastTransitionTime metav1.Time `json:"lastTransitionTime"` - - // The reason for the condition's last transition in CamelCase. - // The specific API may choose whether or not this field is considered a guaranteed API. - // This field may not be empty. - // +optional - Reason string `json:"reason,omitempty"` - - // A human readable message indicating details about the transition. - // This field may be empty. - // +optional - Message string `json:"message,omitempty"` -} - -// ANCHOR_END: Condition - -// ANCHOR: Conditions - -// Conditions provide observations of the operational state of a Cluster API resource. -type Conditions []Condition - -// ANCHOR_END: Conditions diff --git a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/conversion.go b/vendor/sigs.k8s.io/cluster-api/api/v1beta1/conversion.go deleted file mode 100644 index cbbc3b35d..000000000 --- a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/conversion.go +++ /dev/null @@ -1,30 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -func (*Cluster) Hub() {} -func (*ClusterList) Hub() {} -func (*ClusterClass) Hub() {} -func (*ClusterClassList) Hub() {} -func (*Machine) Hub() {} -func (*MachineList) Hub() {} -func (*MachineSet) Hub() {} -func (*MachineSetList) Hub() {} -func (*MachineDeployment) Hub() {} -func (*MachineDeploymentList) Hub() {} -func (*MachineHealthCheck) Hub() {} -func (*MachineHealthCheckList) Hub() {} diff --git a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/doc.go b/vendor/sigs.k8s.io/cluster-api/api/v1beta1/doc.go deleted file mode 100644 index 969c92c63..000000000 --- a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/doc.go +++ /dev/null @@ -1,18 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package v1beta1 contains the v1beta1 API implementation. -package v1beta1 diff --git a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/groupversion_info.go b/vendor/sigs.k8s.io/cluster-api/api/v1beta1/groupversion_info.go deleted file mode 100644 index 2d118b8de..000000000 --- a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/groupversion_info.go +++ /dev/null @@ -1,36 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package v1beta1 contains API Schema definitions for the cluster v1beta1 API group -// +kubebuilder:object:generate=true -// +groupName=cluster.x-k8s.io -package v1beta1 - -import ( - "k8s.io/apimachinery/pkg/runtime/schema" - "sigs.k8s.io/controller-runtime/pkg/scheme" -) - -var ( - // GroupVersion is group version used to register these objects. - GroupVersion = schema.GroupVersion{Group: "cluster.x-k8s.io", Version: "v1beta1"} - - // SchemeBuilder is used to add go types to the GroupVersionKind scheme. - SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} - - // AddToScheme adds the types in this group-version to the given scheme. - AddToScheme = SchemeBuilder.AddToScheme -) diff --git a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machine_phase_types.go b/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machine_phase_types.go deleted file mode 100644 index 10e10e246..000000000 --- a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machine_phase_types.go +++ /dev/null @@ -1,64 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -// MachinePhase is a string representation of a Machine Phase. -// -// This type is a high-level indicator of the status of the Machine as it is provisioned, -// from the API user’s perspective. -// -// The value should not be interpreted by any software components as a reliable indication -// of the actual state of the Machine, and controllers should not use the Machine Phase field -// value when making decisions about what action to take. -// -// Controllers should always look at the actual state of the Machine’s fields to make those decisions. -type MachinePhase string - -const ( - // MachinePhasePending is the first state a Machine is assigned by - // Cluster API Machine controller after being created. - MachinePhasePending = MachinePhase("Pending") - - // MachinePhaseProvisioning is the state when the - // Machine infrastructure is being created. - MachinePhaseProvisioning = MachinePhase("Provisioning") - - // MachinePhaseProvisioned is the state when its - // infrastructure has been created and configured. - MachinePhaseProvisioned = MachinePhase("Provisioned") - - // MachinePhaseRunning is the Machine state when it has - // become a Kubernetes Node in a Ready state. - MachinePhaseRunning = MachinePhase("Running") - - // MachinePhaseDeleting is the Machine state when a delete - // request has been sent to the API Server, - // but its infrastructure has not yet been fully deleted. - MachinePhaseDeleting = MachinePhase("Deleting") - - // MachinePhaseDeleted is the Machine state when the object - // and the related infrastructure is deleted and - // ready to be garbage collected by the API Server. - MachinePhaseDeleted = MachinePhase("Deleted") - - // MachinePhaseFailed is the Machine state when the system - // might require user intervention. - MachinePhaseFailed = MachinePhase("Failed") - - // MachinePhaseUnknown is returned if the Machine state cannot be determined. - MachinePhaseUnknown = MachinePhase("Unknown") -) diff --git a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machine_types.go b/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machine_types.go deleted file mode 100644 index b50ce9fba..000000000 --- a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machine_types.go +++ /dev/null @@ -1,270 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - - capierrors "sigs.k8s.io/cluster-api/errors" -) - -const ( - // MachineFinalizer is set on PrepareForCreate callback. - MachineFinalizer = "machine.cluster.x-k8s.io" - - // MachineControlPlaneLabelName is the label set on machines or related objects that are part of a control plane. - MachineControlPlaneLabelName = "cluster.x-k8s.io/control-plane" - - // ExcludeNodeDrainingAnnotation annotation explicitly skips node draining if set. - ExcludeNodeDrainingAnnotation = "machine.cluster.x-k8s.io/exclude-node-draining" - - // MachineSetLabelName is the label set on machines if they're controlled by MachineSet. - MachineSetLabelName = "cluster.x-k8s.io/set-name" - - // MachineDeploymentLabelName is the label set on machines if they're controlled by MachineDeployment. - MachineDeploymentLabelName = "cluster.x-k8s.io/deployment-name" - - // PreDrainDeleteHookAnnotationPrefix annotation specifies the prefix we - // search each annotation for during the pre-drain.delete lifecycle hook - // to pause reconciliation of deletion. These hooks will prevent removal of - // draining the associated node until all are removed. - PreDrainDeleteHookAnnotationPrefix = "pre-drain.delete.hook.machine.cluster.x-k8s.io" - - // PreTerminateDeleteHookAnnotationPrefix annotation specifies the prefix we - // search each annotation for during the pre-terminate.delete lifecycle hook - // to pause reconciliation of deletion. These hooks will prevent removal of - // an instance from an infrastructure provider until all are removed. - PreTerminateDeleteHookAnnotationPrefix = "pre-terminate.delete.hook.machine.cluster.x-k8s.io" -) - -// ANCHOR: MachineSpec - -// MachineSpec defines the desired state of Machine. -type MachineSpec struct { - // ClusterName is the name of the Cluster this object belongs to. - // +kubebuilder:validation:MinLength=1 - ClusterName string `json:"clusterName"` - - // Bootstrap is a reference to a local struct which encapsulates - // fields to configure the Machine’s bootstrapping mechanism. - Bootstrap Bootstrap `json:"bootstrap"` - - // InfrastructureRef is a required reference to a custom resource - // offered by an infrastructure provider. - InfrastructureRef corev1.ObjectReference `json:"infrastructureRef"` - - // Version defines the desired Kubernetes version. - // This field is meant to be optionally used by bootstrap providers. - // +optional - Version *string `json:"version,omitempty"` - - // ProviderID is the identification ID of the machine provided by the provider. - // This field must match the provider ID as seen on the node object corresponding to this machine. - // This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler - // with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out - // machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a - // generic out-of-tree provider for autoscaler, this field is required by autoscaler to be - // able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver - // and then a comparison is done to find out unregistered machines and are marked for delete. - // This field will be set by the actuators and consumed by higher level entities like autoscaler that will - // be interfacing with cluster-api as generic provider. - // +optional - ProviderID *string `json:"providerID,omitempty"` - - // FailureDomain is the failure domain the machine will be created in. - // Must match a key in the FailureDomains map stored on the cluster object. - // +optional - FailureDomain *string `json:"failureDomain,omitempty"` - - // NodeDrainTimeout is the total amount of time that the controller will spend on draining a node. - // The default value is 0, meaning that the node can be drained without any time limitations. - // NOTE: NodeDrainTimeout is different from `kubectl drain --timeout` - // +optional - NodeDrainTimeout *metav1.Duration `json:"nodeDrainTimeout,omitempty"` -} - -// ANCHOR_END: MachineSpec - -// ANCHOR: MachineStatus - -// MachineStatus defines the observed state of Machine. -type MachineStatus struct { - // NodeRef will point to the corresponding Node if it exists. - // +optional - NodeRef *corev1.ObjectReference `json:"nodeRef,omitempty"` - - // NodeInfo is a set of ids/uuids to uniquely identify the node. - // More info: https://kubernetes.io/docs/concepts/nodes/node/#info - // +optional - NodeInfo *corev1.NodeSystemInfo `json:"nodeInfo,omitempty"` - - // LastUpdated identifies when the phase of the Machine last transitioned. - // +optional - LastUpdated *metav1.Time `json:"lastUpdated,omitempty"` - - // FailureReason will be set in the event that there is a terminal problem - // reconciling the Machine and will contain a succinct value suitable - // for machine interpretation. - // - // This field should not be set for transitive errors that a controller - // faces that are expected to be fixed automatically over - // time (like service outages), but instead indicate that something is - // fundamentally wrong with the Machine's spec or the configuration of - // the controller, and that manual intervention is required. Examples - // of terminal errors would be invalid combinations of settings in the - // spec, values that are unsupported by the controller, or the - // responsible controller itself being critically misconfigured. - // - // Any transient errors that occur during the reconciliation of Machines - // can be added as events to the Machine object and/or logged in the - // controller's output. - // +optional - FailureReason *capierrors.MachineStatusError `json:"failureReason,omitempty"` - - // FailureMessage will be set in the event that there is a terminal problem - // reconciling the Machine and will contain a more verbose string suitable - // for logging and human consumption. - // - // This field should not be set for transitive errors that a controller - // faces that are expected to be fixed automatically over - // time (like service outages), but instead indicate that something is - // fundamentally wrong with the Machine's spec or the configuration of - // the controller, and that manual intervention is required. Examples - // of terminal errors would be invalid combinations of settings in the - // spec, values that are unsupported by the controller, or the - // responsible controller itself being critically misconfigured. - // - // Any transient errors that occur during the reconciliation of Machines - // can be added as events to the Machine object and/or logged in the - // controller's output. - // +optional - FailureMessage *string `json:"failureMessage,omitempty"` - - // Addresses is a list of addresses assigned to the machine. - // This field is copied from the infrastructure provider reference. - // +optional - Addresses MachineAddresses `json:"addresses,omitempty"` - - // Phase represents the current phase of machine actuation. - // E.g. Pending, Running, Terminating, Failed etc. - // +optional - Phase string `json:"phase,omitempty"` - - // BootstrapReady is the state of the bootstrap provider. - // +optional - BootstrapReady bool `json:"bootstrapReady"` - - // InfrastructureReady is the state of the infrastructure provider. - // +optional - InfrastructureReady bool `json:"infrastructureReady"` - - // ObservedGeneration is the latest generation observed by the controller. - // +optional - ObservedGeneration int64 `json:"observedGeneration,omitempty"` - - // Conditions defines current service state of the Machine. - // +optional - Conditions Conditions `json:"conditions,omitempty"` -} - -// ANCHOR_END: MachineStatus - -// SetTypedPhase sets the Phase field to the string representation of MachinePhase. -func (m *MachineStatus) SetTypedPhase(p MachinePhase) { - m.Phase = string(p) -} - -// GetTypedPhase attempts to parse the Phase field and return -// the typed MachinePhase representation as described in `machine_phase_types.go`. -func (m *MachineStatus) GetTypedPhase() MachinePhase { - switch phase := MachinePhase(m.Phase); phase { - case - MachinePhasePending, - MachinePhaseProvisioning, - MachinePhaseProvisioned, - MachinePhaseRunning, - MachinePhaseDeleting, - MachinePhaseDeleted, - MachinePhaseFailed: - return phase - default: - return MachinePhaseUnknown - } -} - -// ANCHOR: Bootstrap - -// Bootstrap encapsulates fields to configure the Machine’s bootstrapping mechanism. -type Bootstrap struct { - // ConfigRef is a reference to a bootstrap provider-specific resource - // that holds configuration details. The reference is optional to - // allow users/operators to specify Bootstrap.DataSecretName without - // the need of a controller. - // +optional - ConfigRef *corev1.ObjectReference `json:"configRef,omitempty"` - - // DataSecretName is the name of the secret that stores the bootstrap data script. - // If nil, the Machine should remain in the Pending state. - // +optional - DataSecretName *string `json:"dataSecretName,omitempty"` -} - -// ANCHOR_END: Bootstrap - -// +kubebuilder:object:root=true -// +kubebuilder:resource:path=machines,shortName=ma,scope=Namespaced,categories=cluster-api -// +kubebuilder:subresource:status -// +kubebuilder:storageversion -// +kubebuilder:printcolumn:name="Cluster",type="string",JSONPath=".spec.clusterName",description="Cluster" -// +kubebuilder:printcolumn:name="NodeName",type="string",JSONPath=".status.nodeRef.name",description="Node name associated with this machine" -// +kubebuilder:printcolumn:name="ProviderID",type="string",JSONPath=".spec.providerID",description="Provider ID" -// +kubebuilder:printcolumn:name="Phase",type="string",JSONPath=".status.phase",description="Machine status such as Terminating/Pending/Running/Failed etc" -// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp",description="Time duration since creation of Machine" -// +kubebuilder:printcolumn:name="Version",type="string",JSONPath=".spec.version",description="Kubernetes version associated with this Machine" - -// Machine is the Schema for the machines API. -type Machine struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - - Spec MachineSpec `json:"spec,omitempty"` - Status MachineStatus `json:"status,omitempty"` -} - -// GetConditions returns the set of conditions for this object. -func (m *Machine) GetConditions() Conditions { - return m.Status.Conditions -} - -// SetConditions sets the conditions on this object. -func (m *Machine) SetConditions(conditions Conditions) { - m.Status.Conditions = conditions -} - -// +kubebuilder:object:root=true - -// MachineList contains a list of Machine. -type MachineList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []Machine `json:"items"` -} - -func init() { - SchemeBuilder.Register(&Machine{}, &MachineList{}) -} diff --git a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machine_webhook.go b/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machine_webhook.go deleted file mode 100644 index dd27f8300..000000000 --- a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machine_webhook.go +++ /dev/null @@ -1,135 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - "fmt" - "strings" - - apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/util/validation/field" - ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/webhook" - - "sigs.k8s.io/cluster-api/util/version" -) - -func (m *Machine) SetupWebhookWithManager(mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr). - For(m). - Complete() -} - -// +kubebuilder:webhook:verbs=create;update,path=/validate-cluster-x-k8s-io-v1beta1-machine,mutating=false,failurePolicy=fail,matchPolicy=Equivalent,groups=cluster.x-k8s.io,resources=machines,versions=v1beta1,name=validation.machine.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1;v1beta1 -// +kubebuilder:webhook:verbs=create;update,path=/mutate-cluster-x-k8s-io-v1beta1-machine,mutating=true,failurePolicy=fail,matchPolicy=Equivalent,groups=cluster.x-k8s.io,resources=machines,versions=v1beta1,name=default.machine.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1;v1beta1 - -var _ webhook.Validator = &Machine{} -var _ webhook.Defaulter = &Machine{} - -// Default implements webhook.Defaulter so a webhook will be registered for the type. -func (m *Machine) Default() { - if m.Labels == nil { - m.Labels = make(map[string]string) - } - m.Labels[ClusterLabelName] = m.Spec.ClusterName - - if m.Spec.Bootstrap.ConfigRef != nil && m.Spec.Bootstrap.ConfigRef.Namespace == "" { - m.Spec.Bootstrap.ConfigRef.Namespace = m.Namespace - } - - if m.Spec.InfrastructureRef.Namespace == "" { - m.Spec.InfrastructureRef.Namespace = m.Namespace - } - - if m.Spec.Version != nil && !strings.HasPrefix(*m.Spec.Version, "v") { - normalizedVersion := "v" + *m.Spec.Version - m.Spec.Version = &normalizedVersion - } -} - -// ValidateCreate implements webhook.Validator so a webhook will be registered for the type. -func (m *Machine) ValidateCreate() error { - return m.validate(nil) -} - -// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type. -func (m *Machine) ValidateUpdate(old runtime.Object) error { - oldM, ok := old.(*Machine) - if !ok { - return apierrors.NewBadRequest(fmt.Sprintf("expected a Machine but got a %T", old)) - } - return m.validate(oldM) -} - -// ValidateDelete implements webhook.Validator so a webhook will be registered for the type. -func (m *Machine) ValidateDelete() error { - return nil -} - -func (m *Machine) validate(old *Machine) error { - var allErrs field.ErrorList - if m.Spec.Bootstrap.ConfigRef == nil && m.Spec.Bootstrap.DataSecretName == nil { - allErrs = append( - allErrs, - field.Required( - field.NewPath("spec", "bootstrap", "data"), - "expected either spec.bootstrap.dataSecretName or spec.bootstrap.configRef to be populated", - ), - ) - } - - if m.Spec.Bootstrap.ConfigRef != nil && m.Spec.Bootstrap.ConfigRef.Namespace != m.Namespace { - allErrs = append( - allErrs, - field.Invalid( - field.NewPath("spec", "bootstrap", "configRef", "namespace"), - m.Spec.Bootstrap.ConfigRef.Namespace, - "must match metadata.namespace", - ), - ) - } - - if m.Spec.InfrastructureRef.Namespace != m.Namespace { - allErrs = append( - allErrs, - field.Invalid( - field.NewPath("spec", "infrastructureRef", "namespace"), - m.Spec.InfrastructureRef.Namespace, - "must match metadata.namespace", - ), - ) - } - - if old != nil && old.Spec.ClusterName != m.Spec.ClusterName { - allErrs = append( - allErrs, - field.Invalid(field.NewPath("spec", "clusterName"), m.Spec.ClusterName, "field is immutable"), - ) - } - - if m.Spec.Version != nil { - if !version.KubeSemver.MatchString(*m.Spec.Version) { - allErrs = append(allErrs, field.Invalid(field.NewPath("spec", "version"), *m.Spec.Version, "must be a valid semantic version")) - } - } - - if len(allErrs) == 0 { - return nil - } - return apierrors.NewInvalid(GroupVersion.WithKind("Machine").GroupKind(), m.Name, allErrs) -} diff --git a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machinedeployment_types.go b/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machinedeployment_types.go deleted file mode 100644 index 9d096d73c..000000000 --- a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machinedeployment_types.go +++ /dev/null @@ -1,317 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/intstr" -) - -const ( - // MachineDeploymentTopologyFinalizer is the finalizer used by the topology MachineDeployment controller to - // clean up referenced template resources if necessary when a MachineDeployment is being deleted. - MachineDeploymentTopologyFinalizer = "machinedeployment.topology.cluster.x-k8s.io" -) - -// MachineDeploymentStrategyType defines the type of MachineDeployment rollout strategies. -type MachineDeploymentStrategyType string - -const ( - // RollingUpdateMachineDeploymentStrategyType replaces the old MachineSet by new one using rolling update - // i.e. gradually scale down the old MachineSet and scale up the new one. - RollingUpdateMachineDeploymentStrategyType MachineDeploymentStrategyType = "RollingUpdate" - - // OnDeleteMachineDeploymentStrategyType replaces old MachineSets when the deletion of the associated machines are completed. - OnDeleteMachineDeploymentStrategyType MachineDeploymentStrategyType = "OnDelete" - - // RevisionAnnotation is the revision annotation of a machine deployment's machine sets which records its rollout sequence. - RevisionAnnotation = "machinedeployment.clusters.x-k8s.io/revision" - - // RevisionHistoryAnnotation maintains the history of all old revisions that a machine set has served for a machine deployment. - RevisionHistoryAnnotation = "machinedeployment.clusters.x-k8s.io/revision-history" - - // DesiredReplicasAnnotation is the desired replicas for a machine deployment recorded as an annotation - // in its machine sets. Helps in separating scaling events from the rollout process and for - // determining if the new machine set for a deployment is really saturated. - DesiredReplicasAnnotation = "machinedeployment.clusters.x-k8s.io/desired-replicas" - - // MaxReplicasAnnotation is the maximum replicas a deployment can have at a given point, which - // is machinedeployment.spec.replicas + maxSurge. Used by the underlying machine sets to estimate their - // proportions in case the deployment has surge replicas. - MaxReplicasAnnotation = "machinedeployment.clusters.x-k8s.io/max-replicas" - - // MachineDeploymentUniqueLabel is the label applied to Machines - // in a MachineDeployment containing the hash of the template. - MachineDeploymentUniqueLabel = "machine-template-hash" -) - -// ANCHOR: MachineDeploymentSpec - -// MachineDeploymentSpec defines the desired state of MachineDeployment. -type MachineDeploymentSpec struct { - // ClusterName is the name of the Cluster this object belongs to. - // +kubebuilder:validation:MinLength=1 - ClusterName string `json:"clusterName"` - - // Number of desired machines. Defaults to 1. - // This is a pointer to distinguish between explicit zero and not specified. - // +optional - // +kubebuilder:default=1 - Replicas *int32 `json:"replicas,omitempty"` - - // Label selector for machines. Existing MachineSets whose machines are - // selected by this will be the ones affected by this deployment. - // It must match the machine template's labels. - Selector metav1.LabelSelector `json:"selector"` - - // Template describes the machines that will be created. - Template MachineTemplateSpec `json:"template"` - - // The deployment strategy to use to replace existing machines with - // new ones. - // +optional - Strategy *MachineDeploymentStrategy `json:"strategy,omitempty"` - - // Minimum number of seconds for which a newly created machine should - // be ready. - // Defaults to 0 (machine will be considered available as soon as it - // is ready) - // +optional - MinReadySeconds *int32 `json:"minReadySeconds,omitempty"` - - // The number of old MachineSets to retain to allow rollback. - // This is a pointer to distinguish between explicit zero and not specified. - // Defaults to 1. - // +optional - RevisionHistoryLimit *int32 `json:"revisionHistoryLimit,omitempty"` - - // Indicates that the deployment is paused. - // +optional - Paused bool `json:"paused,omitempty"` - - // The maximum time in seconds for a deployment to make progress before it - // is considered to be failed. The deployment controller will continue to - // process failed deployments and a condition with a ProgressDeadlineExceeded - // reason will be surfaced in the deployment status. Note that progress will - // not be estimated during the time a deployment is paused. Defaults to 600s. - // +optional - ProgressDeadlineSeconds *int32 `json:"progressDeadlineSeconds,omitempty"` -} - -// ANCHOR_END: MachineDeploymentSpec - -// ANCHOR: MachineDeploymentStrategy - -// MachineDeploymentStrategy describes how to replace existing machines -// with new ones. -type MachineDeploymentStrategy struct { - // Type of deployment. - // Default is RollingUpdate. - // +kubebuilder:validation:Enum=RollingUpdate;OnDelete - // +optional - Type MachineDeploymentStrategyType `json:"type,omitempty"` - - // Rolling update config params. Present only if - // MachineDeploymentStrategyType = RollingUpdate. - // +optional - RollingUpdate *MachineRollingUpdateDeployment `json:"rollingUpdate,omitempty"` -} - -// ANCHOR_END: MachineDeploymentStrategy - -// ANCHOR: MachineRollingUpdateDeployment - -// MachineRollingUpdateDeployment is used to control the desired behavior of rolling update. -type MachineRollingUpdateDeployment struct { - // The maximum number of machines that can be unavailable during the update. - // Value can be an absolute number (ex: 5) or a percentage of desired - // machines (ex: 10%). - // Absolute number is calculated from percentage by rounding down. - // This can not be 0 if MaxSurge is 0. - // Defaults to 0. - // Example: when this is set to 30%, the old MachineSet can be scaled - // down to 70% of desired machines immediately when the rolling update - // starts. Once new machines are ready, old MachineSet can be scaled - // down further, followed by scaling up the new MachineSet, ensuring - // that the total number of machines available at all times - // during the update is at least 70% of desired machines. - // +optional - MaxUnavailable *intstr.IntOrString `json:"maxUnavailable,omitempty"` - - // The maximum number of machines that can be scheduled above the - // desired number of machines. - // Value can be an absolute number (ex: 5) or a percentage of - // desired machines (ex: 10%). - // This can not be 0 if MaxUnavailable is 0. - // Absolute number is calculated from percentage by rounding up. - // Defaults to 1. - // Example: when this is set to 30%, the new MachineSet can be scaled - // up immediately when the rolling update starts, such that the total - // number of old and new machines do not exceed 130% of desired - // machines. Once old machines have been killed, new MachineSet can - // be scaled up further, ensuring that total number of machines running - // at any time during the update is at most 130% of desired machines. - // +optional - MaxSurge *intstr.IntOrString `json:"maxSurge,omitempty"` - - // DeletePolicy defines the policy used by the MachineDeployment to identify nodes to delete when downscaling. - // Valid values are "Random, "Newest", "Oldest" - // When no value is supplied, the default DeletePolicy of MachineSet is used - // +kubebuilder:validation:Enum=Random;Newest;Oldest - // +optional - DeletePolicy *string `json:"deletePolicy,omitempty"` -} - -// ANCHOR_END: MachineRollingUpdateDeployment - -// ANCHOR: MachineDeploymentStatus - -// MachineDeploymentStatus defines the observed state of MachineDeployment. -type MachineDeploymentStatus struct { - // The generation observed by the deployment controller. - // +optional - ObservedGeneration int64 `json:"observedGeneration,omitempty"` - - // Selector is the same as the label selector but in the string format to avoid introspection - // by clients. The string will be in the same format as the query-param syntax. - // More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors - // +optional - Selector string `json:"selector,omitempty"` - - // Total number of non-terminated machines targeted by this deployment - // (their labels match the selector). - // +optional - Replicas int32 `json:"replicas"` - - // Total number of non-terminated machines targeted by this deployment - // that have the desired template spec. - // +optional - UpdatedReplicas int32 `json:"updatedReplicas"` - - // Total number of ready machines targeted by this deployment. - // +optional - ReadyReplicas int32 `json:"readyReplicas"` - - // Total number of available machines (ready for at least minReadySeconds) - // targeted by this deployment. - // +optional - AvailableReplicas int32 `json:"availableReplicas"` - - // Total number of unavailable machines targeted by this deployment. - // This is the total number of machines that are still required for - // the deployment to have 100% available capacity. They may either - // be machines that are running but not yet available or machines - // that still have not been created. - // +optional - UnavailableReplicas int32 `json:"unavailableReplicas"` - - // Phase represents the current phase of a MachineDeployment (ScalingUp, ScalingDown, Running, Failed, or Unknown). - // +optional - Phase string `json:"phase,omitempty"` - - // Conditions defines current service state of the MachineDeployment. - // +optional - Conditions Conditions `json:"conditions,omitempty"` -} - -// ANCHOR_END: MachineDeploymentStatus - -// MachineDeploymentPhase indicates the progress of the machine deployment. -type MachineDeploymentPhase string - -const ( - // MachineDeploymentPhaseScalingUp indicates the MachineDeployment is scaling up. - MachineDeploymentPhaseScalingUp = MachineDeploymentPhase("ScalingUp") - - // MachineDeploymentPhaseScalingDown indicates the MachineDeployment is scaling down. - MachineDeploymentPhaseScalingDown = MachineDeploymentPhase("ScalingDown") - - // MachineDeploymentPhaseRunning indicates scaling has completed and all Machines are running. - MachineDeploymentPhaseRunning = MachineDeploymentPhase("Running") - - // MachineDeploymentPhaseFailed indicates there was a problem scaling and user intervention might be required. - MachineDeploymentPhaseFailed = MachineDeploymentPhase("Failed") - - // MachineDeploymentPhaseUnknown indicates the state of the MachineDeployment cannot be determined. - MachineDeploymentPhaseUnknown = MachineDeploymentPhase("Unknown") -) - -// SetTypedPhase sets the Phase field to the string representation of MachineDeploymentPhase. -func (md *MachineDeploymentStatus) SetTypedPhase(p MachineDeploymentPhase) { - md.Phase = string(p) -} - -// GetTypedPhase attempts to parse the Phase field and return -// the typed MachineDeploymentPhase representation. -func (md *MachineDeploymentStatus) GetTypedPhase() MachineDeploymentPhase { - switch phase := MachineDeploymentPhase(md.Phase); phase { - case - MachineDeploymentPhaseScalingDown, - MachineDeploymentPhaseScalingUp, - MachineDeploymentPhaseRunning, - MachineDeploymentPhaseFailed: - return phase - default: - return MachineDeploymentPhaseUnknown - } -} - -// +kubebuilder:object:root=true -// +kubebuilder:resource:path=machinedeployments,shortName=md,scope=Namespaced,categories=cluster-api -// +kubebuilder:storageversion -// +kubebuilder:subresource:status -// +kubebuilder:subresource:scale:specpath=.spec.replicas,statuspath=.status.replicas,selectorpath=.status.selector -// +kubebuilder:printcolumn:name="Cluster",type="string",JSONPath=".spec.clusterName",description="Cluster" -// +kubebuilder:printcolumn:name="Replicas",type="integer",JSONPath=".status.replicas",description="Total number of non-terminated machines targeted by this MachineDeployment" -// +kubebuilder:printcolumn:name="Ready",type="integer",JSONPath=".status.readyReplicas",description="Total number of ready machines targeted by this MachineDeployment" -// +kubebuilder:printcolumn:name="Updated",type=integer,JSONPath=".status.updatedReplicas",description="Total number of non-terminated machines targeted by this deployment that have the desired template spec" -// +kubebuilder:printcolumn:name="Unavailable",type=integer,JSONPath=".status.unavailableReplicas",description="Total number of unavailable machines targeted by this MachineDeployment" -// +kubebuilder:printcolumn:name="Phase",type="string",JSONPath=".status.phase",description="MachineDeployment status such as ScalingUp/ScalingDown/Running/Failed/Unknown" -// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp",description="Time duration since creation of MachineDeployment" -// +kubebuilder:printcolumn:name="Version",type="string",JSONPath=".spec.template.spec.version",description="Kubernetes version associated with this MachineDeployment" - -// MachineDeployment is the Schema for the machinedeployments API. -type MachineDeployment struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - - Spec MachineDeploymentSpec `json:"spec,omitempty"` - Status MachineDeploymentStatus `json:"status,omitempty"` -} - -// +kubebuilder:object:root=true - -// MachineDeploymentList contains a list of MachineDeployment. -type MachineDeploymentList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []MachineDeployment `json:"items"` -} - -func init() { - SchemeBuilder.Register(&MachineDeployment{}, &MachineDeploymentList{}) -} - -// GetConditions returns the set of conditions for the machinedeployment. -func (m *MachineDeployment) GetConditions() Conditions { - return m.Status.Conditions -} - -// SetConditions updates the set of conditions on the machinedeployment. -func (m *MachineDeployment) SetConditions(conditions Conditions) { - m.Status.Conditions = conditions -} diff --git a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machinedeployment_webhook.go b/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machinedeployment_webhook.go deleted file mode 100644 index 0b8b611ae..000000000 --- a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machinedeployment_webhook.go +++ /dev/null @@ -1,203 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - "fmt" - "strings" - - apierrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/util/intstr" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/utils/pointer" - ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/webhook" - - "sigs.k8s.io/cluster-api/util/version" -) - -func (m *MachineDeployment) SetupWebhookWithManager(mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr). - For(m). - Complete() -} - -// +kubebuilder:webhook:verbs=create;update,path=/validate-cluster-x-k8s-io-v1beta1-machinedeployment,mutating=false,failurePolicy=fail,matchPolicy=Equivalent,groups=cluster.x-k8s.io,resources=machinedeployments,versions=v1beta1,name=validation.machinedeployment.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1;v1beta1 -// +kubebuilder:webhook:verbs=create;update,path=/mutate-cluster-x-k8s-io-v1beta1-machinedeployment,mutating=true,failurePolicy=fail,matchPolicy=Equivalent,groups=cluster.x-k8s.io,resources=machinedeployments,versions=v1beta1,name=default.machinedeployment.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1;v1beta1 - -var _ webhook.Defaulter = &MachineDeployment{} -var _ webhook.Validator = &MachineDeployment{} - -// Default implements webhook.Defaulter so a webhook will be registered for the type. -func (m *MachineDeployment) Default() { - PopulateDefaultsMachineDeployment(m) - // tolerate version strings without a "v" prefix: prepend it if it's not there - if m.Spec.Template.Spec.Version != nil && !strings.HasPrefix(*m.Spec.Template.Spec.Version, "v") { - normalizedVersion := "v" + *m.Spec.Template.Spec.Version - m.Spec.Template.Spec.Version = &normalizedVersion - } -} - -// ValidateCreate implements webhook.Validator so a webhook will be registered for the type. -func (m *MachineDeployment) ValidateCreate() error { - return m.validate(nil) -} - -// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type. -func (m *MachineDeployment) ValidateUpdate(old runtime.Object) error { - oldMD, ok := old.(*MachineDeployment) - if !ok { - return apierrors.NewBadRequest(fmt.Sprintf("expected a MachineDeployment but got a %T", old)) - } - return m.validate(oldMD) -} - -// ValidateDelete implements webhook.Validator so a webhook will be registered for the type. -func (m *MachineDeployment) ValidateDelete() error { - return nil -} - -func (m *MachineDeployment) validate(old *MachineDeployment) error { - var allErrs field.ErrorList - selector, err := metav1.LabelSelectorAsSelector(&m.Spec.Selector) - if err != nil { - allErrs = append( - allErrs, - field.Invalid(field.NewPath("spec", "selector"), m.Spec.Selector, err.Error()), - ) - } else if !selector.Matches(labels.Set(m.Spec.Template.Labels)) { - allErrs = append( - allErrs, - field.Invalid( - field.NewPath("spec", "template", "metadata", "labels"), - m.Spec.Template.ObjectMeta.Labels, - fmt.Sprintf("must match spec.selector %q", selector.String()), - ), - ) - } - - if old != nil && old.Spec.ClusterName != m.Spec.ClusterName { - allErrs = append( - allErrs, - field.Invalid(field.NewPath("spec", "clusterName"), m.Spec.ClusterName, "field is immutable"), - ) - } - - if m.Spec.Strategy != nil && m.Spec.Strategy.RollingUpdate != nil { - total := 1 - if m.Spec.Replicas != nil { - total = int(*m.Spec.Replicas) - } - - if m.Spec.Strategy.RollingUpdate.MaxSurge != nil { - if _, err := intstr.GetScaledValueFromIntOrPercent(m.Spec.Strategy.RollingUpdate.MaxSurge, total, true); err != nil { - allErrs = append( - allErrs, - field.Invalid(field.NewPath("spec", "strategy", "rollingUpdate", "maxSurge"), - m.Spec.Strategy.RollingUpdate.MaxSurge, fmt.Sprintf("must be either an int or a percentage: %v", err.Error())), - ) - } - } - - if m.Spec.Strategy.RollingUpdate.MaxUnavailable != nil { - if _, err := intstr.GetScaledValueFromIntOrPercent(m.Spec.Strategy.RollingUpdate.MaxUnavailable, total, true); err != nil { - allErrs = append( - allErrs, - field.Invalid(field.NewPath("spec", "strategy", "rollingUpdate", "maxUnavailable"), - m.Spec.Strategy.RollingUpdate.MaxUnavailable, fmt.Sprintf("must be either an int or a percentage: %v", err.Error())), - ) - } - } - } - - if m.Spec.Template.Spec.Version != nil { - if !version.KubeSemver.MatchString(*m.Spec.Template.Spec.Version) { - allErrs = append(allErrs, field.Invalid(field.NewPath("spec", "template", "spec", "version"), *m.Spec.Template.Spec.Version, "must be a valid semantic version")) - } - } - - if len(allErrs) == 0 { - return nil - } - - return apierrors.NewInvalid(GroupVersion.WithKind("MachineDeployment").GroupKind(), m.Name, allErrs) -} - -// PopulateDefaultsMachineDeployment fills in default field values. -// This is also called during MachineDeployment sync. -func PopulateDefaultsMachineDeployment(d *MachineDeployment) { - if d.Labels == nil { - d.Labels = make(map[string]string) - } - d.Labels[ClusterLabelName] = d.Spec.ClusterName - - if d.Spec.MinReadySeconds == nil { - d.Spec.MinReadySeconds = pointer.Int32Ptr(0) - } - - if d.Spec.RevisionHistoryLimit == nil { - d.Spec.RevisionHistoryLimit = pointer.Int32Ptr(1) - } - - if d.Spec.ProgressDeadlineSeconds == nil { - d.Spec.ProgressDeadlineSeconds = pointer.Int32Ptr(600) - } - - if d.Spec.Selector.MatchLabels == nil { - d.Spec.Selector.MatchLabels = make(map[string]string) - } - - if d.Spec.Strategy == nil { - d.Spec.Strategy = &MachineDeploymentStrategy{} - } - - if d.Spec.Strategy.Type == "" { - d.Spec.Strategy.Type = RollingUpdateMachineDeploymentStrategyType - } - - if d.Spec.Template.Labels == nil { - d.Spec.Template.Labels = make(map[string]string) - } - - // Default RollingUpdate strategy only if strategy type is RollingUpdate. - if d.Spec.Strategy.Type == RollingUpdateMachineDeploymentStrategyType { - if d.Spec.Strategy.RollingUpdate == nil { - d.Spec.Strategy.RollingUpdate = &MachineRollingUpdateDeployment{} - } - if d.Spec.Strategy.RollingUpdate.MaxSurge == nil { - ios1 := intstr.FromInt(1) - d.Spec.Strategy.RollingUpdate.MaxSurge = &ios1 - } - if d.Spec.Strategy.RollingUpdate.MaxUnavailable == nil { - ios0 := intstr.FromInt(0) - d.Spec.Strategy.RollingUpdate.MaxUnavailable = &ios0 - } - } - - // If no selector has been provided, add label and selector for the - // MachineDeployment's name as a default way of providing uniqueness. - if len(d.Spec.Selector.MatchLabels) == 0 && len(d.Spec.Selector.MatchExpressions) == 0 { - d.Spec.Selector.MatchLabels[MachineDeploymentLabelName] = d.Name - d.Spec.Template.Labels[MachineDeploymentLabelName] = d.Name - } - // Make sure selector and template to be in the same cluster. - d.Spec.Selector.MatchLabels[ClusterLabelName] = d.Spec.ClusterName - d.Spec.Template.Labels[ClusterLabelName] = d.Spec.ClusterName -} diff --git a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machinehealthcheck_types.go b/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machinehealthcheck_types.go deleted file mode 100644 index a8d120351..000000000 --- a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machinehealthcheck_types.go +++ /dev/null @@ -1,173 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/intstr" -) - -// ANCHOR: MachineHealthCheckSpec - -// MachineHealthCheckSpec defines the desired state of MachineHealthCheck. -type MachineHealthCheckSpec struct { - // ClusterName is the name of the Cluster this object belongs to. - // +kubebuilder:validation:MinLength=1 - ClusterName string `json:"clusterName"` - - // Label selector to match machines whose health will be exercised - Selector metav1.LabelSelector `json:"selector"` - - // UnhealthyConditions contains a list of the conditions that determine - // whether a node is considered unhealthy. The conditions are combined in a - // logical OR, i.e. if any of the conditions is met, the node is unhealthy. - // - // +kubebuilder:validation:MinItems=1 - UnhealthyConditions []UnhealthyCondition `json:"unhealthyConditions"` - - // Any further remediation is only allowed if at most "MaxUnhealthy" machines selected by - // "selector" are not healthy. - // +optional - MaxUnhealthy *intstr.IntOrString `json:"maxUnhealthy,omitempty"` - - // Any further remediation is only allowed if the number of machines selected by "selector" as not healthy - // is within the range of "UnhealthyRange". Takes precedence over MaxUnhealthy. - // Eg. "[3-5]" - This means that remediation will be allowed only when: - // (a) there are at least 3 unhealthy machines (and) - // (b) there are at most 5 unhealthy machines - // +optional - // +kubebuilder:validation:Pattern=^\[[0-9]+-[0-9]+\]$ - UnhealthyRange *string `json:"unhealthyRange,omitempty"` - - // Machines older than this duration without a node will be considered to have - // failed and will be remediated. - // If not set, this value is defaulted to 10 minutes. - // If you wish to disable this feature, set the value explicitly to 0. - // +optional - NodeStartupTimeout *metav1.Duration `json:"nodeStartupTimeout,omitempty"` - - // RemediationTemplate is a reference to a remediation template - // provided by an infrastructure provider. - // - // This field is completely optional, when filled, the MachineHealthCheck controller - // creates a new object from the template referenced and hands off remediation of the machine to - // a controller that lives outside of Cluster API. - // +optional - RemediationTemplate *corev1.ObjectReference `json:"remediationTemplate,omitempty"` -} - -// ANCHOR_END: MachineHealthCHeckSpec - -// ANCHOR: UnhealthyCondition - -// UnhealthyCondition represents a Node condition type and value with a timeout -// specified as a duration. When the named condition has been in the given -// status for at least the timeout value, a node is considered unhealthy. -type UnhealthyCondition struct { - // +kubebuilder:validation:Type=string - // +kubebuilder:validation:MinLength=1 - Type corev1.NodeConditionType `json:"type"` - - // +kubebuilder:validation:Type=string - // +kubebuilder:validation:MinLength=1 - Status corev1.ConditionStatus `json:"status"` - - Timeout metav1.Duration `json:"timeout"` -} - -// ANCHOR_END: UnhealthyCondition - -// ANCHOR: MachineHealthCheckStatus - -// MachineHealthCheckStatus defines the observed state of MachineHealthCheck. -type MachineHealthCheckStatus struct { - // total number of machines counted by this machine health check - // +kubebuilder:validation:Minimum=0 - // +optional - ExpectedMachines int32 `json:"expectedMachines"` - - // total number of healthy machines counted by this machine health check - // +kubebuilder:validation:Minimum=0 - // +optional - CurrentHealthy int32 `json:"currentHealthy"` - - // RemediationsAllowed is the number of further remediations allowed by this machine health check before - // maxUnhealthy short circuiting will be applied - // +kubebuilder:validation:Minimum=0 - // +optional - RemediationsAllowed int32 `json:"remediationsAllowed"` - - // ObservedGeneration is the latest generation observed by the controller. - // +optional - ObservedGeneration int64 `json:"observedGeneration,omitempty"` - - // Targets shows the current list of machines the machine health check is watching - // +optional - Targets []string `json:"targets,omitempty"` - - // Conditions defines current service state of the MachineHealthCheck. - // +optional - Conditions Conditions `json:"conditions,omitempty"` -} - -// ANCHOR_END: MachineHealthCheckStatus - -// +kubebuilder:object:root=true -// +kubebuilder:resource:path=machinehealthchecks,shortName=mhc;mhcs,scope=Namespaced,categories=cluster-api -// +kubebuilder:storageversion -// +kubebuilder:subresource:status -// +kubebuilder:printcolumn:name="Cluster",type="string",JSONPath=".spec.clusterName",description="Cluster" -// +kubebuilder:printcolumn:name="ExpectedMachines",type="integer",JSONPath=".status.expectedMachines",description="Number of machines currently monitored" -// +kubebuilder:printcolumn:name="MaxUnhealthy",type="string",JSONPath=".spec.maxUnhealthy",description="Maximum number of unhealthy machines allowed" -// +kubebuilder:printcolumn:name="CurrentHealthy",type="integer",JSONPath=".status.currentHealthy",description="Current observed healthy machines" -// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp",description="Time duration since creation of MachineHealthCheck" - -// MachineHealthCheck is the Schema for the machinehealthchecks API. -type MachineHealthCheck struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - - // Specification of machine health check policy - Spec MachineHealthCheckSpec `json:"spec,omitempty"` - - // Most recently observed status of MachineHealthCheck resource - Status MachineHealthCheckStatus `json:"status,omitempty"` -} - -// GetConditions returns the set of conditions for this object. -func (m *MachineHealthCheck) GetConditions() Conditions { - return m.Status.Conditions -} - -// SetConditions sets the conditions on this object. -func (m *MachineHealthCheck) SetConditions(conditions Conditions) { - m.Status.Conditions = conditions -} - -// +kubebuilder:object:root=true - -// MachineHealthCheckList contains a list of MachineHealthCheck. -type MachineHealthCheckList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []MachineHealthCheck `json:"items"` -} - -func init() { - SchemeBuilder.Register(&MachineHealthCheck{}, &MachineHealthCheckList{}) -} diff --git a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machinehealthcheck_webhook.go b/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machinehealthcheck_webhook.go deleted file mode 100644 index 173892788..000000000 --- a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machinehealthcheck_webhook.go +++ /dev/null @@ -1,171 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - "fmt" - "time" - - apierrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/util/intstr" - "k8s.io/apimachinery/pkg/util/validation/field" - ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/webhook" -) - -var ( - // DefaultNodeStartupTimeout is the time allowed for a node to start up. - // Can be made longer as part of spec if required for particular provider. - // 10 minutes should allow the instance to start and the node to join the - // cluster on most providers. - DefaultNodeStartupTimeout = metav1.Duration{Duration: 10 * time.Minute} - // Minimum time allowed for a node to start up. - minNodeStartupTimeout = metav1.Duration{Duration: 30 * time.Second} - // We allow users to disable the nodeStartupTimeout by setting the duration to 0. - disabledNodeStartupTimeout = ZeroDuration -) - -// SetMinNodeStartupTimeout allows users to optionally set a custom timeout -// for the validation webhook. -// -// This function is mostly used within envtest (integration tests), and should -// never be used in a production environment. -func SetMinNodeStartupTimeout(d metav1.Duration) { - minNodeStartupTimeout = d -} - -func (m *MachineHealthCheck) SetupWebhookWithManager(mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr). - For(m). - Complete() -} - -// +kubebuilder:webhook:verbs=create;update,path=/validate-cluster-x-k8s-io-v1beta1-machinehealthcheck,mutating=false,failurePolicy=fail,matchPolicy=Equivalent,groups=cluster.x-k8s.io,resources=machinehealthchecks,versions=v1beta1,name=validation.machinehealthcheck.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1;v1beta1 -// +kubebuilder:webhook:verbs=create;update,path=/mutate-cluster-x-k8s-io-v1beta1-machinehealthcheck,mutating=true,failurePolicy=fail,matchPolicy=Equivalent,groups=cluster.x-k8s.io,resources=machinehealthchecks,versions=v1beta1,name=default.machinehealthcheck.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1;v1beta1 - -var _ webhook.Defaulter = &MachineHealthCheck{} -var _ webhook.Validator = &MachineHealthCheck{} - -// Default implements webhook.Defaulter so a webhook will be registered for the type. -func (m *MachineHealthCheck) Default() { - if m.Labels == nil { - m.Labels = make(map[string]string) - } - m.Labels[ClusterLabelName] = m.Spec.ClusterName - - if m.Spec.MaxUnhealthy == nil { - defaultMaxUnhealthy := intstr.FromString("100%") - m.Spec.MaxUnhealthy = &defaultMaxUnhealthy - } - - if m.Spec.NodeStartupTimeout == nil { - m.Spec.NodeStartupTimeout = &DefaultNodeStartupTimeout - } - - if m.Spec.RemediationTemplate != nil && m.Spec.RemediationTemplate.Namespace == "" { - m.Spec.RemediationTemplate.Namespace = m.Namespace - } -} - -// ValidateCreate implements webhook.Validator so a webhook will be registered for the type. -func (m *MachineHealthCheck) ValidateCreate() error { - return m.validate(nil) -} - -// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type. -func (m *MachineHealthCheck) ValidateUpdate(old runtime.Object) error { - mhc, ok := old.(*MachineHealthCheck) - if !ok { - return apierrors.NewBadRequest(fmt.Sprintf("expected a MachineHealthCheck but got a %T", old)) - } - return m.validate(mhc) -} - -// ValidateDelete implements webhook.Validator so a webhook will be registered for the type. -func (m *MachineHealthCheck) ValidateDelete() error { - return nil -} - -func (m *MachineHealthCheck) validate(old *MachineHealthCheck) error { - var allErrs field.ErrorList - - // Validate selector parses as Selector - selector, err := metav1.LabelSelectorAsSelector(&m.Spec.Selector) - if err != nil { - allErrs = append( - allErrs, - field.Invalid(field.NewPath("spec", "selector"), m.Spec.Selector, err.Error()), - ) - } - - // Validate that the selector isn't empty. - if selector != nil && selector.Empty() { - allErrs = append( - allErrs, - field.Invalid(field.NewPath("spec", "selector"), m.Spec.Selector, "selector must not be empty"), - ) - } - - if clusterName, ok := m.Spec.Selector.MatchLabels[ClusterLabelName]; ok && clusterName != m.Spec.ClusterName { - allErrs = append( - allErrs, - field.Invalid(field.NewPath("spec", "selector"), m.Spec.Selector, "cannot specify a cluster selector other than the one specified by ClusterName")) - } - - if old != nil && old.Spec.ClusterName != m.Spec.ClusterName { - allErrs = append( - allErrs, - field.Invalid(field.NewPath("spec", "clusterName"), m.Spec.ClusterName, "field is immutable"), - ) - } - - if m.Spec.NodeStartupTimeout != nil && - m.Spec.NodeStartupTimeout.Seconds() != disabledNodeStartupTimeout.Seconds() && - m.Spec.NodeStartupTimeout.Seconds() < minNodeStartupTimeout.Seconds() { - allErrs = append( - allErrs, - field.Invalid(field.NewPath("spec", "nodeStartupTimeout"), m.Spec.NodeStartupTimeout.Seconds(), "must be at least 30s"), - ) - } - - if m.Spec.MaxUnhealthy != nil { - if _, err := intstr.GetScaledValueFromIntOrPercent(m.Spec.MaxUnhealthy, 0, false); err != nil { - allErrs = append( - allErrs, - field.Invalid(field.NewPath("spec", "maxUnhealthy"), m.Spec.MaxUnhealthy, fmt.Sprintf("must be either an int or a percentage: %v", err.Error())), - ) - } - } - - if m.Spec.RemediationTemplate != nil && m.Spec.RemediationTemplate.Namespace != m.Namespace { - allErrs = append( - allErrs, - field.Invalid( - field.NewPath("spec", "remediationTemplate", "namespace"), - m.Spec.RemediationTemplate.Namespace, - "must match metadata.namespace", - ), - ) - } - - if len(allErrs) == 0 { - return nil - } - return apierrors.NewInvalid(GroupVersion.WithKind("MachineHealthCheck").GroupKind(), m.Name, allErrs) -} diff --git a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machineset_webhook.go b/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machineset_webhook.go deleted file mode 100644 index 73af85dd5..000000000 --- a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machineset_webhook.go +++ /dev/null @@ -1,133 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - "fmt" - "strings" - - apierrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/util/validation/field" - ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/webhook" - - "sigs.k8s.io/cluster-api/util/version" -) - -func (m *MachineSet) SetupWebhookWithManager(mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr). - For(m). - Complete() -} - -// +kubebuilder:webhook:verbs=create;update,path=/validate-cluster-x-k8s-io-v1beta1-machineset,mutating=false,failurePolicy=fail,matchPolicy=Equivalent,groups=cluster.x-k8s.io,resources=machinesets,versions=v1beta1,name=validation.machineset.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1;v1beta1 -// +kubebuilder:webhook:verbs=create;update,path=/mutate-cluster-x-k8s-io-v1beta1-machineset,mutating=true,failurePolicy=fail,matchPolicy=Equivalent,groups=cluster.x-k8s.io,resources=machinesets,versions=v1beta1,name=default.machineset.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1;v1beta1 - -var _ webhook.Defaulter = &MachineSet{} -var _ webhook.Validator = &MachineSet{} - -// Default sets default MachineSet field values. -func (m *MachineSet) Default() { - if m.Labels == nil { - m.Labels = make(map[string]string) - } - m.Labels[ClusterLabelName] = m.Spec.ClusterName - - if m.Spec.DeletePolicy == "" { - randomPolicy := string(RandomMachineSetDeletePolicy) - m.Spec.DeletePolicy = randomPolicy - } - - if m.Spec.Selector.MatchLabels == nil { - m.Spec.Selector.MatchLabels = make(map[string]string) - } - - if m.Spec.Template.Labels == nil { - m.Spec.Template.Labels = make(map[string]string) - } - - if len(m.Spec.Selector.MatchLabels) == 0 && len(m.Spec.Selector.MatchExpressions) == 0 { - m.Spec.Selector.MatchLabels[MachineSetLabelName] = m.Name - m.Spec.Template.Labels[MachineSetLabelName] = m.Name - } - - if m.Spec.Template.Spec.Version != nil && !strings.HasPrefix(*m.Spec.Template.Spec.Version, "v") { - normalizedVersion := "v" + *m.Spec.Template.Spec.Version - m.Spec.Template.Spec.Version = &normalizedVersion - } -} - -// ValidateCreate implements webhook.Validator so a webhook will be registered for the type. -func (m *MachineSet) ValidateCreate() error { - return m.validate(nil) -} - -// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type. -func (m *MachineSet) ValidateUpdate(old runtime.Object) error { - oldMS, ok := old.(*MachineSet) - if !ok { - return apierrors.NewBadRequest(fmt.Sprintf("expected a MachineSet but got a %T", old)) - } - return m.validate(oldMS) -} - -// ValidateDelete implements webhook.Validator so a webhook will be registered for the type. -func (m *MachineSet) ValidateDelete() error { - return nil -} - -func (m *MachineSet) validate(old *MachineSet) error { - var allErrs field.ErrorList - selector, err := metav1.LabelSelectorAsSelector(&m.Spec.Selector) - if err != nil { - allErrs = append( - allErrs, - field.Invalid(field.NewPath("spec", "selector"), m.Spec.Selector, err.Error()), - ) - } else if !selector.Matches(labels.Set(m.Spec.Template.Labels)) { - allErrs = append( - allErrs, - field.Invalid( - field.NewPath("spec", "template", "metadata", "labels"), - m.Spec.Template.ObjectMeta.Labels, - fmt.Sprintf("must match spec.selector %q", selector.String()), - ), - ) - } - - if old != nil && old.Spec.ClusterName != m.Spec.ClusterName { - allErrs = append( - allErrs, - field.Invalid(field.NewPath("spec", "clusterName"), m.Spec.ClusterName, "field is immutable"), - ) - } - - if m.Spec.Template.Spec.Version != nil { - if !version.KubeSemver.MatchString(*m.Spec.Template.Spec.Version) { - allErrs = append(allErrs, field.Invalid(field.NewPath("spec", "template", "spec", "version"), *m.Spec.Template.Spec.Version, "must be a valid semantic version")) - } - } - - if len(allErrs) == 0 { - return nil - } - - return apierrors.NewInvalid(GroupVersion.WithKind("MachineSet").GroupKind(), m.Name, allErrs) -} diff --git a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/zz_generated.deepcopy.go b/vendor/sigs.k8s.io/cluster-api/api/v1beta1/zz_generated.deepcopy.go deleted file mode 100644 index 958ed279f..000000000 --- a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/zz_generated.deepcopy.go +++ /dev/null @@ -1,1640 +0,0 @@ -//go:build !ignore_autogenerated -// +build !ignore_autogenerated - -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by controller-gen. DO NOT EDIT. - -package v1beta1 - -import ( - "k8s.io/api/core/v1" - apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/util/intstr" - "sigs.k8s.io/cluster-api/errors" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *APIEndpoint) DeepCopyInto(out *APIEndpoint) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new APIEndpoint. -func (in *APIEndpoint) DeepCopy() *APIEndpoint { - if in == nil { - return nil - } - out := new(APIEndpoint) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Bootstrap) DeepCopyInto(out *Bootstrap) { - *out = *in - if in.ConfigRef != nil { - in, out := &in.ConfigRef, &out.ConfigRef - *out = new(v1.ObjectReference) - **out = **in - } - if in.DataSecretName != nil { - in, out := &in.DataSecretName, &out.DataSecretName - *out = new(string) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Bootstrap. -func (in *Bootstrap) DeepCopy() *Bootstrap { - if in == nil { - return nil - } - out := new(Bootstrap) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Cluster) DeepCopyInto(out *Cluster) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Cluster. -func (in *Cluster) DeepCopy() *Cluster { - if in == nil { - return nil - } - out := new(Cluster) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *Cluster) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterClass) DeepCopyInto(out *ClusterClass) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterClass. -func (in *ClusterClass) DeepCopy() *ClusterClass { - if in == nil { - return nil - } - out := new(ClusterClass) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ClusterClass) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterClassList) DeepCopyInto(out *ClusterClassList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]ClusterClass, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterClassList. -func (in *ClusterClassList) DeepCopy() *ClusterClassList { - if in == nil { - return nil - } - out := new(ClusterClassList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ClusterClassList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterClassPatch) DeepCopyInto(out *ClusterClassPatch) { - *out = *in - if in.EnabledIf != nil { - in, out := &in.EnabledIf, &out.EnabledIf - *out = new(string) - **out = **in - } - if in.Definitions != nil { - in, out := &in.Definitions, &out.Definitions - *out = make([]PatchDefinition, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterClassPatch. -func (in *ClusterClassPatch) DeepCopy() *ClusterClassPatch { - if in == nil { - return nil - } - out := new(ClusterClassPatch) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterClassSpec) DeepCopyInto(out *ClusterClassSpec) { - *out = *in - in.Infrastructure.DeepCopyInto(&out.Infrastructure) - in.ControlPlane.DeepCopyInto(&out.ControlPlane) - in.Workers.DeepCopyInto(&out.Workers) - if in.Variables != nil { - in, out := &in.Variables, &out.Variables - *out = make([]ClusterClassVariable, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Patches != nil { - in, out := &in.Patches, &out.Patches - *out = make([]ClusterClassPatch, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterClassSpec. -func (in *ClusterClassSpec) DeepCopy() *ClusterClassSpec { - if in == nil { - return nil - } - out := new(ClusterClassSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterClassVariable) DeepCopyInto(out *ClusterClassVariable) { - *out = *in - in.Schema.DeepCopyInto(&out.Schema) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterClassVariable. -func (in *ClusterClassVariable) DeepCopy() *ClusterClassVariable { - if in == nil { - return nil - } - out := new(ClusterClassVariable) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterList) DeepCopyInto(out *ClusterList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]Cluster, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterList. -func (in *ClusterList) DeepCopy() *ClusterList { - if in == nil { - return nil - } - out := new(ClusterList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ClusterList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterNetwork) DeepCopyInto(out *ClusterNetwork) { - *out = *in - if in.APIServerPort != nil { - in, out := &in.APIServerPort, &out.APIServerPort - *out = new(int32) - **out = **in - } - if in.Services != nil { - in, out := &in.Services, &out.Services - *out = new(NetworkRanges) - (*in).DeepCopyInto(*out) - } - if in.Pods != nil { - in, out := &in.Pods, &out.Pods - *out = new(NetworkRanges) - (*in).DeepCopyInto(*out) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterNetwork. -func (in *ClusterNetwork) DeepCopy() *ClusterNetwork { - if in == nil { - return nil - } - out := new(ClusterNetwork) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterSpec) DeepCopyInto(out *ClusterSpec) { - *out = *in - if in.ClusterNetwork != nil { - in, out := &in.ClusterNetwork, &out.ClusterNetwork - *out = new(ClusterNetwork) - (*in).DeepCopyInto(*out) - } - out.ControlPlaneEndpoint = in.ControlPlaneEndpoint - if in.ControlPlaneRef != nil { - in, out := &in.ControlPlaneRef, &out.ControlPlaneRef - *out = new(v1.ObjectReference) - **out = **in - } - if in.InfrastructureRef != nil { - in, out := &in.InfrastructureRef, &out.InfrastructureRef - *out = new(v1.ObjectReference) - **out = **in - } - if in.Topology != nil { - in, out := &in.Topology, &out.Topology - *out = new(Topology) - (*in).DeepCopyInto(*out) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterSpec. -func (in *ClusterSpec) DeepCopy() *ClusterSpec { - if in == nil { - return nil - } - out := new(ClusterSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterStatus) DeepCopyInto(out *ClusterStatus) { - *out = *in - if in.FailureDomains != nil { - in, out := &in.FailureDomains, &out.FailureDomains - *out = make(FailureDomains, len(*in)) - for key, val := range *in { - (*out)[key] = *val.DeepCopy() - } - } - if in.FailureReason != nil { - in, out := &in.FailureReason, &out.FailureReason - *out = new(errors.ClusterStatusError) - **out = **in - } - if in.FailureMessage != nil { - in, out := &in.FailureMessage, &out.FailureMessage - *out = new(string) - **out = **in - } - if in.Conditions != nil { - in, out := &in.Conditions, &out.Conditions - *out = make(Conditions, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterStatus. -func (in *ClusterStatus) DeepCopy() *ClusterStatus { - if in == nil { - return nil - } - out := new(ClusterStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterVariable) DeepCopyInto(out *ClusterVariable) { - *out = *in - in.Value.DeepCopyInto(&out.Value) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterVariable. -func (in *ClusterVariable) DeepCopy() *ClusterVariable { - if in == nil { - return nil - } - out := new(ClusterVariable) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Condition) DeepCopyInto(out *Condition) { - *out = *in - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Condition. -func (in *Condition) DeepCopy() *Condition { - if in == nil { - return nil - } - out := new(Condition) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in Conditions) DeepCopyInto(out *Conditions) { - { - in := &in - *out = make(Conditions, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Conditions. -func (in Conditions) DeepCopy() Conditions { - if in == nil { - return nil - } - out := new(Conditions) - in.DeepCopyInto(out) - return *out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ControlPlaneClass) DeepCopyInto(out *ControlPlaneClass) { - *out = *in - in.Metadata.DeepCopyInto(&out.Metadata) - in.LocalObjectTemplate.DeepCopyInto(&out.LocalObjectTemplate) - if in.MachineInfrastructure != nil { - in, out := &in.MachineInfrastructure, &out.MachineInfrastructure - *out = new(LocalObjectTemplate) - (*in).DeepCopyInto(*out) - } - if in.MachineHealthCheck != nil { - in, out := &in.MachineHealthCheck, &out.MachineHealthCheck - *out = new(MachineHealthCheckClass) - (*in).DeepCopyInto(*out) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControlPlaneClass. -func (in *ControlPlaneClass) DeepCopy() *ControlPlaneClass { - if in == nil { - return nil - } - out := new(ControlPlaneClass) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ControlPlaneTopology) DeepCopyInto(out *ControlPlaneTopology) { - *out = *in - in.Metadata.DeepCopyInto(&out.Metadata) - if in.Replicas != nil { - in, out := &in.Replicas, &out.Replicas - *out = new(int32) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControlPlaneTopology. -func (in *ControlPlaneTopology) DeepCopy() *ControlPlaneTopology { - if in == nil { - return nil - } - out := new(ControlPlaneTopology) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FailureDomainSpec) DeepCopyInto(out *FailureDomainSpec) { - *out = *in - if in.Attributes != nil { - in, out := &in.Attributes, &out.Attributes - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FailureDomainSpec. -func (in *FailureDomainSpec) DeepCopy() *FailureDomainSpec { - if in == nil { - return nil - } - out := new(FailureDomainSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in FailureDomains) DeepCopyInto(out *FailureDomains) { - { - in := &in - *out = make(FailureDomains, len(*in)) - for key, val := range *in { - (*out)[key] = *val.DeepCopy() - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FailureDomains. -func (in FailureDomains) DeepCopy() FailureDomains { - if in == nil { - return nil - } - out := new(FailureDomains) - in.DeepCopyInto(out) - return *out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *JSONPatch) DeepCopyInto(out *JSONPatch) { - *out = *in - if in.Value != nil { - in, out := &in.Value, &out.Value - *out = new(apiextensionsv1.JSON) - (*in).DeepCopyInto(*out) - } - if in.ValueFrom != nil { - in, out := &in.ValueFrom, &out.ValueFrom - *out = new(JSONPatchValue) - (*in).DeepCopyInto(*out) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new JSONPatch. -func (in *JSONPatch) DeepCopy() *JSONPatch { - if in == nil { - return nil - } - out := new(JSONPatch) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *JSONPatchValue) DeepCopyInto(out *JSONPatchValue) { - *out = *in - if in.Variable != nil { - in, out := &in.Variable, &out.Variable - *out = new(string) - **out = **in - } - if in.Template != nil { - in, out := &in.Template, &out.Template - *out = new(string) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new JSONPatchValue. -func (in *JSONPatchValue) DeepCopy() *JSONPatchValue { - if in == nil { - return nil - } - out := new(JSONPatchValue) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *JSONSchemaProps) DeepCopyInto(out *JSONSchemaProps) { - *out = *in - if in.Example != nil { - in, out := &in.Example, &out.Example - *out = new(apiextensionsv1.JSON) - (*in).DeepCopyInto(*out) - } - if in.Properties != nil { - in, out := &in.Properties, &out.Properties - *out = make(map[string]JSONSchemaProps, len(*in)) - for key, val := range *in { - (*out)[key] = *val.DeepCopy() - } - } - if in.Required != nil { - in, out := &in.Required, &out.Required - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = new(JSONSchemaProps) - (*in).DeepCopyInto(*out) - } - if in.MaxItems != nil { - in, out := &in.MaxItems, &out.MaxItems - *out = new(int64) - **out = **in - } - if in.MinItems != nil { - in, out := &in.MinItems, &out.MinItems - *out = new(int64) - **out = **in - } - if in.MaxLength != nil { - in, out := &in.MaxLength, &out.MaxLength - *out = new(int64) - **out = **in - } - if in.MinLength != nil { - in, out := &in.MinLength, &out.MinLength - *out = new(int64) - **out = **in - } - if in.Maximum != nil { - in, out := &in.Maximum, &out.Maximum - *out = new(int64) - **out = **in - } - if in.Minimum != nil { - in, out := &in.Minimum, &out.Minimum - *out = new(int64) - **out = **in - } - if in.Enum != nil { - in, out := &in.Enum, &out.Enum - *out = make([]apiextensionsv1.JSON, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Default != nil { - in, out := &in.Default, &out.Default - *out = new(apiextensionsv1.JSON) - (*in).DeepCopyInto(*out) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new JSONSchemaProps. -func (in *JSONSchemaProps) DeepCopy() *JSONSchemaProps { - if in == nil { - return nil - } - out := new(JSONSchemaProps) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *LocalObjectTemplate) DeepCopyInto(out *LocalObjectTemplate) { - *out = *in - if in.Ref != nil { - in, out := &in.Ref, &out.Ref - *out = new(v1.ObjectReference) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LocalObjectTemplate. -func (in *LocalObjectTemplate) DeepCopy() *LocalObjectTemplate { - if in == nil { - return nil - } - out := new(LocalObjectTemplate) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Machine) DeepCopyInto(out *Machine) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Machine. -func (in *Machine) DeepCopy() *Machine { - if in == nil { - return nil - } - out := new(Machine) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *Machine) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineAddress) DeepCopyInto(out *MachineAddress) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineAddress. -func (in *MachineAddress) DeepCopy() *MachineAddress { - if in == nil { - return nil - } - out := new(MachineAddress) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in MachineAddresses) DeepCopyInto(out *MachineAddresses) { - { - in := &in - *out = make(MachineAddresses, len(*in)) - copy(*out, *in) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineAddresses. -func (in MachineAddresses) DeepCopy() MachineAddresses { - if in == nil { - return nil - } - out := new(MachineAddresses) - in.DeepCopyInto(out) - return *out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineDeployment) DeepCopyInto(out *MachineDeployment) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineDeployment. -func (in *MachineDeployment) DeepCopy() *MachineDeployment { - if in == nil { - return nil - } - out := new(MachineDeployment) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *MachineDeployment) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineDeploymentClass) DeepCopyInto(out *MachineDeploymentClass) { - *out = *in - in.Template.DeepCopyInto(&out.Template) - if in.MachineHealthCheck != nil { - in, out := &in.MachineHealthCheck, &out.MachineHealthCheck - *out = new(MachineHealthCheckClass) - (*in).DeepCopyInto(*out) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineDeploymentClass. -func (in *MachineDeploymentClass) DeepCopy() *MachineDeploymentClass { - if in == nil { - return nil - } - out := new(MachineDeploymentClass) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineDeploymentClassTemplate) DeepCopyInto(out *MachineDeploymentClassTemplate) { - *out = *in - in.Metadata.DeepCopyInto(&out.Metadata) - in.Bootstrap.DeepCopyInto(&out.Bootstrap) - in.Infrastructure.DeepCopyInto(&out.Infrastructure) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineDeploymentClassTemplate. -func (in *MachineDeploymentClassTemplate) DeepCopy() *MachineDeploymentClassTemplate { - if in == nil { - return nil - } - out := new(MachineDeploymentClassTemplate) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineDeploymentList) DeepCopyInto(out *MachineDeploymentList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]MachineDeployment, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineDeploymentList. -func (in *MachineDeploymentList) DeepCopy() *MachineDeploymentList { - if in == nil { - return nil - } - out := new(MachineDeploymentList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *MachineDeploymentList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineDeploymentSpec) DeepCopyInto(out *MachineDeploymentSpec) { - *out = *in - if in.Replicas != nil { - in, out := &in.Replicas, &out.Replicas - *out = new(int32) - **out = **in - } - in.Selector.DeepCopyInto(&out.Selector) - in.Template.DeepCopyInto(&out.Template) - if in.Strategy != nil { - in, out := &in.Strategy, &out.Strategy - *out = new(MachineDeploymentStrategy) - (*in).DeepCopyInto(*out) - } - if in.MinReadySeconds != nil { - in, out := &in.MinReadySeconds, &out.MinReadySeconds - *out = new(int32) - **out = **in - } - if in.RevisionHistoryLimit != nil { - in, out := &in.RevisionHistoryLimit, &out.RevisionHistoryLimit - *out = new(int32) - **out = **in - } - if in.ProgressDeadlineSeconds != nil { - in, out := &in.ProgressDeadlineSeconds, &out.ProgressDeadlineSeconds - *out = new(int32) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineDeploymentSpec. -func (in *MachineDeploymentSpec) DeepCopy() *MachineDeploymentSpec { - if in == nil { - return nil - } - out := new(MachineDeploymentSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineDeploymentStatus) DeepCopyInto(out *MachineDeploymentStatus) { - *out = *in - if in.Conditions != nil { - in, out := &in.Conditions, &out.Conditions - *out = make(Conditions, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineDeploymentStatus. -func (in *MachineDeploymentStatus) DeepCopy() *MachineDeploymentStatus { - if in == nil { - return nil - } - out := new(MachineDeploymentStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineDeploymentStrategy) DeepCopyInto(out *MachineDeploymentStrategy) { - *out = *in - if in.RollingUpdate != nil { - in, out := &in.RollingUpdate, &out.RollingUpdate - *out = new(MachineRollingUpdateDeployment) - (*in).DeepCopyInto(*out) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineDeploymentStrategy. -func (in *MachineDeploymentStrategy) DeepCopy() *MachineDeploymentStrategy { - if in == nil { - return nil - } - out := new(MachineDeploymentStrategy) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineDeploymentTopology) DeepCopyInto(out *MachineDeploymentTopology) { - *out = *in - in.Metadata.DeepCopyInto(&out.Metadata) - if in.FailureDomain != nil { - in, out := &in.FailureDomain, &out.FailureDomain - *out = new(string) - **out = **in - } - if in.Replicas != nil { - in, out := &in.Replicas, &out.Replicas - *out = new(int32) - **out = **in - } - if in.Variables != nil { - in, out := &in.Variables, &out.Variables - *out = new(MachineDeploymentVariables) - (*in).DeepCopyInto(*out) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineDeploymentTopology. -func (in *MachineDeploymentTopology) DeepCopy() *MachineDeploymentTopology { - if in == nil { - return nil - } - out := new(MachineDeploymentTopology) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineDeploymentVariables) DeepCopyInto(out *MachineDeploymentVariables) { - *out = *in - if in.Overrides != nil { - in, out := &in.Overrides, &out.Overrides - *out = make([]ClusterVariable, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineDeploymentVariables. -func (in *MachineDeploymentVariables) DeepCopy() *MachineDeploymentVariables { - if in == nil { - return nil - } - out := new(MachineDeploymentVariables) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineHealthCheck) DeepCopyInto(out *MachineHealthCheck) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineHealthCheck. -func (in *MachineHealthCheck) DeepCopy() *MachineHealthCheck { - if in == nil { - return nil - } - out := new(MachineHealthCheck) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *MachineHealthCheck) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineHealthCheckClass) DeepCopyInto(out *MachineHealthCheckClass) { - *out = *in - if in.UnhealthyConditions != nil { - in, out := &in.UnhealthyConditions, &out.UnhealthyConditions - *out = make([]UnhealthyCondition, len(*in)) - copy(*out, *in) - } - if in.MaxUnhealthy != nil { - in, out := &in.MaxUnhealthy, &out.MaxUnhealthy - *out = new(intstr.IntOrString) - **out = **in - } - if in.UnhealthyRange != nil { - in, out := &in.UnhealthyRange, &out.UnhealthyRange - *out = new(string) - **out = **in - } - if in.NodeStartupTimeout != nil { - in, out := &in.NodeStartupTimeout, &out.NodeStartupTimeout - *out = new(metav1.Duration) - **out = **in - } - if in.RemediationTemplate != nil { - in, out := &in.RemediationTemplate, &out.RemediationTemplate - *out = new(v1.ObjectReference) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineHealthCheckClass. -func (in *MachineHealthCheckClass) DeepCopy() *MachineHealthCheckClass { - if in == nil { - return nil - } - out := new(MachineHealthCheckClass) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineHealthCheckList) DeepCopyInto(out *MachineHealthCheckList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]MachineHealthCheck, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineHealthCheckList. -func (in *MachineHealthCheckList) DeepCopy() *MachineHealthCheckList { - if in == nil { - return nil - } - out := new(MachineHealthCheckList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *MachineHealthCheckList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineHealthCheckSpec) DeepCopyInto(out *MachineHealthCheckSpec) { - *out = *in - in.Selector.DeepCopyInto(&out.Selector) - if in.UnhealthyConditions != nil { - in, out := &in.UnhealthyConditions, &out.UnhealthyConditions - *out = make([]UnhealthyCondition, len(*in)) - copy(*out, *in) - } - if in.MaxUnhealthy != nil { - in, out := &in.MaxUnhealthy, &out.MaxUnhealthy - *out = new(intstr.IntOrString) - **out = **in - } - if in.UnhealthyRange != nil { - in, out := &in.UnhealthyRange, &out.UnhealthyRange - *out = new(string) - **out = **in - } - if in.NodeStartupTimeout != nil { - in, out := &in.NodeStartupTimeout, &out.NodeStartupTimeout - *out = new(metav1.Duration) - **out = **in - } - if in.RemediationTemplate != nil { - in, out := &in.RemediationTemplate, &out.RemediationTemplate - *out = new(v1.ObjectReference) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineHealthCheckSpec. -func (in *MachineHealthCheckSpec) DeepCopy() *MachineHealthCheckSpec { - if in == nil { - return nil - } - out := new(MachineHealthCheckSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineHealthCheckStatus) DeepCopyInto(out *MachineHealthCheckStatus) { - *out = *in - if in.Targets != nil { - in, out := &in.Targets, &out.Targets - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.Conditions != nil { - in, out := &in.Conditions, &out.Conditions - *out = make(Conditions, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineHealthCheckStatus. -func (in *MachineHealthCheckStatus) DeepCopy() *MachineHealthCheckStatus { - if in == nil { - return nil - } - out := new(MachineHealthCheckStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineList) DeepCopyInto(out *MachineList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]Machine, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineList. -func (in *MachineList) DeepCopy() *MachineList { - if in == nil { - return nil - } - out := new(MachineList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *MachineList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineRollingUpdateDeployment) DeepCopyInto(out *MachineRollingUpdateDeployment) { - *out = *in - if in.MaxUnavailable != nil { - in, out := &in.MaxUnavailable, &out.MaxUnavailable - *out = new(intstr.IntOrString) - **out = **in - } - if in.MaxSurge != nil { - in, out := &in.MaxSurge, &out.MaxSurge - *out = new(intstr.IntOrString) - **out = **in - } - if in.DeletePolicy != nil { - in, out := &in.DeletePolicy, &out.DeletePolicy - *out = new(string) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineRollingUpdateDeployment. -func (in *MachineRollingUpdateDeployment) DeepCopy() *MachineRollingUpdateDeployment { - if in == nil { - return nil - } - out := new(MachineRollingUpdateDeployment) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineSet) DeepCopyInto(out *MachineSet) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineSet. -func (in *MachineSet) DeepCopy() *MachineSet { - if in == nil { - return nil - } - out := new(MachineSet) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *MachineSet) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineSetList) DeepCopyInto(out *MachineSetList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]MachineSet, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineSetList. -func (in *MachineSetList) DeepCopy() *MachineSetList { - if in == nil { - return nil - } - out := new(MachineSetList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *MachineSetList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineSetSpec) DeepCopyInto(out *MachineSetSpec) { - *out = *in - if in.Replicas != nil { - in, out := &in.Replicas, &out.Replicas - *out = new(int32) - **out = **in - } - in.Selector.DeepCopyInto(&out.Selector) - in.Template.DeepCopyInto(&out.Template) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineSetSpec. -func (in *MachineSetSpec) DeepCopy() *MachineSetSpec { - if in == nil { - return nil - } - out := new(MachineSetSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineSetStatus) DeepCopyInto(out *MachineSetStatus) { - *out = *in - if in.FailureReason != nil { - in, out := &in.FailureReason, &out.FailureReason - *out = new(errors.MachineSetStatusError) - **out = **in - } - if in.FailureMessage != nil { - in, out := &in.FailureMessage, &out.FailureMessage - *out = new(string) - **out = **in - } - if in.Conditions != nil { - in, out := &in.Conditions, &out.Conditions - *out = make(Conditions, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineSetStatus. -func (in *MachineSetStatus) DeepCopy() *MachineSetStatus { - if in == nil { - return nil - } - out := new(MachineSetStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineSpec) DeepCopyInto(out *MachineSpec) { - *out = *in - in.Bootstrap.DeepCopyInto(&out.Bootstrap) - out.InfrastructureRef = in.InfrastructureRef - if in.Version != nil { - in, out := &in.Version, &out.Version - *out = new(string) - **out = **in - } - if in.ProviderID != nil { - in, out := &in.ProviderID, &out.ProviderID - *out = new(string) - **out = **in - } - if in.FailureDomain != nil { - in, out := &in.FailureDomain, &out.FailureDomain - *out = new(string) - **out = **in - } - if in.NodeDrainTimeout != nil { - in, out := &in.NodeDrainTimeout, &out.NodeDrainTimeout - *out = new(metav1.Duration) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineSpec. -func (in *MachineSpec) DeepCopy() *MachineSpec { - if in == nil { - return nil - } - out := new(MachineSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineStatus) DeepCopyInto(out *MachineStatus) { - *out = *in - if in.NodeRef != nil { - in, out := &in.NodeRef, &out.NodeRef - *out = new(v1.ObjectReference) - **out = **in - } - if in.NodeInfo != nil { - in, out := &in.NodeInfo, &out.NodeInfo - *out = new(v1.NodeSystemInfo) - **out = **in - } - if in.LastUpdated != nil { - in, out := &in.LastUpdated, &out.LastUpdated - *out = (*in).DeepCopy() - } - if in.FailureReason != nil { - in, out := &in.FailureReason, &out.FailureReason - *out = new(errors.MachineStatusError) - **out = **in - } - if in.FailureMessage != nil { - in, out := &in.FailureMessage, &out.FailureMessage - *out = new(string) - **out = **in - } - if in.Addresses != nil { - in, out := &in.Addresses, &out.Addresses - *out = make(MachineAddresses, len(*in)) - copy(*out, *in) - } - if in.Conditions != nil { - in, out := &in.Conditions, &out.Conditions - *out = make(Conditions, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineStatus. -func (in *MachineStatus) DeepCopy() *MachineStatus { - if in == nil { - return nil - } - out := new(MachineStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MachineTemplateSpec) DeepCopyInto(out *MachineTemplateSpec) { - *out = *in - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineTemplateSpec. -func (in *MachineTemplateSpec) DeepCopy() *MachineTemplateSpec { - if in == nil { - return nil - } - out := new(MachineTemplateSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NetworkRanges) DeepCopyInto(out *NetworkRanges) { - *out = *in - if in.CIDRBlocks != nil { - in, out := &in.CIDRBlocks, &out.CIDRBlocks - *out = make([]string, len(*in)) - copy(*out, *in) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkRanges. -func (in *NetworkRanges) DeepCopy() *NetworkRanges { - if in == nil { - return nil - } - out := new(NetworkRanges) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ObjectMeta) DeepCopyInto(out *ObjectMeta) { - *out = *in - if in.Labels != nil { - in, out := &in.Labels, &out.Labels - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - if in.Annotations != nil { - in, out := &in.Annotations, &out.Annotations - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObjectMeta. -func (in *ObjectMeta) DeepCopy() *ObjectMeta { - if in == nil { - return nil - } - out := new(ObjectMeta) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PatchDefinition) DeepCopyInto(out *PatchDefinition) { - *out = *in - in.Selector.DeepCopyInto(&out.Selector) - if in.JSONPatches != nil { - in, out := &in.JSONPatches, &out.JSONPatches - *out = make([]JSONPatch, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PatchDefinition. -func (in *PatchDefinition) DeepCopy() *PatchDefinition { - if in == nil { - return nil - } - out := new(PatchDefinition) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PatchSelector) DeepCopyInto(out *PatchSelector) { - *out = *in - in.MatchResources.DeepCopyInto(&out.MatchResources) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PatchSelector. -func (in *PatchSelector) DeepCopy() *PatchSelector { - if in == nil { - return nil - } - out := new(PatchSelector) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PatchSelectorMatch) DeepCopyInto(out *PatchSelectorMatch) { - *out = *in - if in.MachineDeploymentClass != nil { - in, out := &in.MachineDeploymentClass, &out.MachineDeploymentClass - *out = new(PatchSelectorMatchMachineDeploymentClass) - (*in).DeepCopyInto(*out) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PatchSelectorMatch. -func (in *PatchSelectorMatch) DeepCopy() *PatchSelectorMatch { - if in == nil { - return nil - } - out := new(PatchSelectorMatch) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PatchSelectorMatchMachineDeploymentClass) DeepCopyInto(out *PatchSelectorMatchMachineDeploymentClass) { - *out = *in - if in.Names != nil { - in, out := &in.Names, &out.Names - *out = make([]string, len(*in)) - copy(*out, *in) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PatchSelectorMatchMachineDeploymentClass. -func (in *PatchSelectorMatchMachineDeploymentClass) DeepCopy() *PatchSelectorMatchMachineDeploymentClass { - if in == nil { - return nil - } - out := new(PatchSelectorMatchMachineDeploymentClass) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Topology) DeepCopyInto(out *Topology) { - *out = *in - if in.RolloutAfter != nil { - in, out := &in.RolloutAfter, &out.RolloutAfter - *out = (*in).DeepCopy() - } - in.ControlPlane.DeepCopyInto(&out.ControlPlane) - if in.Workers != nil { - in, out := &in.Workers, &out.Workers - *out = new(WorkersTopology) - (*in).DeepCopyInto(*out) - } - if in.Variables != nil { - in, out := &in.Variables, &out.Variables - *out = make([]ClusterVariable, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Topology. -func (in *Topology) DeepCopy() *Topology { - if in == nil { - return nil - } - out := new(Topology) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *UnhealthyCondition) DeepCopyInto(out *UnhealthyCondition) { - *out = *in - out.Timeout = in.Timeout -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UnhealthyCondition. -func (in *UnhealthyCondition) DeepCopy() *UnhealthyCondition { - if in == nil { - return nil - } - out := new(UnhealthyCondition) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *VariableSchema) DeepCopyInto(out *VariableSchema) { - *out = *in - in.OpenAPIV3Schema.DeepCopyInto(&out.OpenAPIV3Schema) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VariableSchema. -func (in *VariableSchema) DeepCopy() *VariableSchema { - if in == nil { - return nil - } - out := new(VariableSchema) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *WorkersClass) DeepCopyInto(out *WorkersClass) { - *out = *in - if in.MachineDeployments != nil { - in, out := &in.MachineDeployments, &out.MachineDeployments - *out = make([]MachineDeploymentClass, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkersClass. -func (in *WorkersClass) DeepCopy() *WorkersClass { - if in == nil { - return nil - } - out := new(WorkersClass) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *WorkersTopology) DeepCopyInto(out *WorkersTopology) { - *out = *in - if in.MachineDeployments != nil { - in, out := &in.MachineDeployments, &out.MachineDeployments - *out = make([]MachineDeploymentTopology, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkersTopology. -func (in *WorkersTopology) DeepCopy() *WorkersTopology { - if in == nil { - return nil - } - out := new(WorkersTopology) - in.DeepCopyInto(out) - return out -} diff --git a/vendor/sigs.k8s.io/cluster-api/errors/clusters.go b/vendor/sigs.k8s.io/cluster-api/errors/clusters.go index cab3716d9..5a9fd6b61 100644 --- a/vendor/sigs.k8s.io/cluster-api/errors/clusters.go +++ b/vendor/sigs.k8s.io/cluster-api/errors/clusters.go @@ -20,7 +20,7 @@ import ( "fmt" ) -// ClusterError is a more descriptive kind of error that represents an error condition that +// A more descriptive kind of error that represents an error condition that // should be set in the Cluster.Status. The "Reason" field is meant for short, // enum-style constants meant to be interpreted by clusters. The "Message" // field is meant to be read by humans. @@ -37,7 +37,6 @@ func (e *ClusterError) Error() string { // value, and all arguments are Printf-style varargs fed into Sprintf to // construct the Message. -// InvalidClusterConfiguration creates a new error for when the cluster configuration is invalid. func InvalidClusterConfiguration(format string, args ...interface{}) *ClusterError { return &ClusterError{ Reason: InvalidConfigurationClusterError, @@ -45,7 +44,6 @@ func InvalidClusterConfiguration(format string, args ...interface{}) *ClusterErr } } -// CreateCluster creates a new error for when creating a cluster. func CreateCluster(format string, args ...interface{}) *ClusterError { return &ClusterError{ Reason: CreateClusterError, @@ -53,7 +51,6 @@ func CreateCluster(format string, args ...interface{}) *ClusterError { } } -// DeleteCluster creates a new error for when deleting a cluster. func DeleteCluster(format string, args ...interface{}) *ClusterError { return &ClusterError{ Reason: DeleteClusterError, diff --git a/vendor/sigs.k8s.io/cluster-api/errors/consts.go b/vendor/sigs.k8s.io/cluster-api/errors/consts.go index 93e920f98..de94f507a 100644 --- a/vendor/sigs.k8s.io/cluster-api/errors/consts.go +++ b/vendor/sigs.k8s.io/cluster-api/errors/consts.go @@ -16,22 +16,19 @@ limitations under the License. package errors -// MachineStatusError defines errors states for Machine objects. -type MachineStatusError string - // Constants aren't automatically generated for unversioned packages. -// Instead share the same constant for all versioned packages. +// Instead share the same constant for all versioned packages +type MachineStatusError string const ( - // InvalidConfigurationMachineError represents that the combination - // of configuration in the MachineSpec is not supported by this cluster. - // This is not a transient error, but + // Represents that the combination of configuration in the MachineSpec + // is not supported by this cluster. This is not a transient error, but // indicates a state that must be fixed before progress can be made. // - // Example: the ProviderSpec specifies an instance type that doesn't exist,. + // Example: the ProviderSpec specifies an instance type that doesn't exist, InvalidConfigurationMachineError MachineStatusError = "InvalidConfiguration" - // UnsupportedChangeMachineError indicates that the MachineSpec has been updated in a way that + // This indicates that the MachineSpec has been updated in a way that // is not supported for reconciliation on this cluster. The spec may be // completely valid from a configuration standpoint, but the controller // does not support changing the real world state to match the new @@ -41,11 +38,11 @@ const ( // container runtime from docker to rkt. UnsupportedChangeMachineError MachineStatusError = "UnsupportedChange" - // InsufficientResourcesMachineError generally refers to exceeding one's quota in a cloud provider, + // This generally refers to exceeding one's quota in a cloud provider, // or running out of physical machines in an on-premise environment. InsufficientResourcesMachineError MachineStatusError = "InsufficientResources" - // CreateMachineError indicates an error while trying to create a Node to match this + // There was an error while trying to create a Node to match this // Machine. This may indicate a transient problem that will be fixed // automatically with time, such as a service outage, or a terminal // error during creation that doesn't match a more specific @@ -54,14 +51,14 @@ const ( // Example: timeout trying to connect to GCE. CreateMachineError MachineStatusError = "CreateError" - // UpdateMachineError indicates an error while trying to update a Node that this + // There was an error while trying to update a Node that this // Machine represents. This may indicate a transient problem that will be // fixed automatically with time, such as a service outage, // - // Example: error updating load balancers. + // Example: error updating load balancers UpdateMachineError MachineStatusError = "UpdateError" - // DeleteMachineError indicates an error was encountered while trying to delete the Node that this + // An error was encountered while trying to delete the Node that this // Machine represents. This could be a transient or terminal error, but // will only be observable if the provider's Machine controller has // added a finalizer to the object to more gracefully handle deletions. @@ -69,17 +66,16 @@ const ( // Example: cannot resolve EC2 IP address. DeleteMachineError MachineStatusError = "DeleteError" - // JoinClusterTimeoutMachineError indicates that the machine did not join the cluster + // This error indicates that the machine did not join the cluster // as a new node within the expected timeframe after instance // creation at the provider succeeded // // Example use case: A controller that deletes Machines which do // not result in a Node joining the cluster within a given timeout - // and that are managed by a MachineSet. + // and that are managed by a MachineSet JoinClusterTimeoutMachineError = "JoinClusterTimeoutError" ) -// ClusterStatusError defines errors states for Cluster objects. type ClusterStatusError string const ( @@ -105,54 +101,13 @@ const ( DeleteClusterError ClusterStatusError = "DeleteError" ) -// MachineSetStatusError defines errors states for MachineSet objects. type MachineSetStatusError string const ( - // InvalidConfigurationMachineSetError represents - // the combination of configuration in the MachineTemplateSpec + // Represents that the combination of configuration in the MachineTemplateSpec // is not supported by this cluster. This is not a transient error, but // indicates a state that must be fixed before progress can be made. // // Example: the ProviderSpec specifies an instance type that doesn't exist. InvalidConfigurationMachineSetError MachineSetStatusError = "InvalidConfiguration" ) - -// MachinePoolStatusFailure defines errors states for MachinePool objects. -type MachinePoolStatusFailure string - -const ( - // InvalidConfigurationMachinePoolError represemts - // the combination of configuration in the MachineTemplateSpec - // is not supported by this cluster. This is not a transient error, but - // indicates a state that must be fixed before progress can be made. - // - // Example: the ProviderSpec specifies an instance type that doesn't exist. - InvalidConfigurationMachinePoolError MachinePoolStatusFailure = "InvalidConfiguration" -) - -// KubeadmControlPlaneStatusError defines errors states for KubeadmControlPlane objects. -type KubeadmControlPlaneStatusError string - -const ( - // InvalidConfigurationKubeadmControlPlaneError indicates that the kubeadm control plane - // configuration is invalid. - InvalidConfigurationKubeadmControlPlaneError KubeadmControlPlaneStatusError = "InvalidConfiguration" - - // UnsupportedChangeKubeadmControlPlaneError indicates that the kubeadm control plane - // spec has been updated in an unsupported way that cannot be - // reconciled. - UnsupportedChangeKubeadmControlPlaneError KubeadmControlPlaneStatusError = "UnsupportedChange" - - // CreateKubeadmControlPlaneError indicates that an error was encountered - // when trying to create the kubeadm control plane. - CreateKubeadmControlPlaneError KubeadmControlPlaneStatusError = "CreateError" - - // UpdateKubeadmControlPlaneError indicates that an error was encountered - // when trying to update the kubeadm control plane. - UpdateKubeadmControlPlaneError KubeadmControlPlaneStatusError = "UpdateError" - - // DeleteKubeadmControlPlaneError indicates that an error was encountered - // when trying to delete the kubeadm control plane. - DeleteKubeadmControlPlaneError KubeadmControlPlaneStatusError = "DeleteError" -) diff --git a/vendor/sigs.k8s.io/cluster-api/errors/controllers.go b/vendor/sigs.k8s.io/cluster-api/errors/controllers.go new file mode 100644 index 000000000..b3332556f --- /dev/null +++ b/vendor/sigs.k8s.io/cluster-api/errors/controllers.go @@ -0,0 +1,57 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package errors + +import ( + "fmt" + "time" + + "github.com/pkg/errors" +) + +// HasRequeueAfterError represents that an actuator managed object should +// be requeued for further processing after the given RequeueAfter time has +// passed. +type HasRequeueAfterError interface { + // GetRequeueAfter gets the duration to wait until the managed object is + // requeued for further processing. + GetRequeueAfter() time.Duration +} + +// RequeueAfterError represents that an actuator managed object should be +// requeued for further processing after the given RequeueAfter time has +// passed. +type RequeueAfterError struct { + RequeueAfter time.Duration +} + +// Error implements the error interface +func (e *RequeueAfterError) Error() string { + return fmt.Sprintf("requeue in %v", e.RequeueAfter) +} + +// GetRequeueAfter gets the duration to wait until the managed object is +// requeued for further processing. +func (e *RequeueAfterError) GetRequeueAfter() time.Duration { + return e.RequeueAfter +} + +// IsRequeueAfter returns true if the error satisfies the interface HasRequeueAfterError. +func IsRequeueAfter(err error) bool { + _, ok := errors.Cause(err).(HasRequeueAfterError) + return ok +} diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/controller/controllerutil/doc.go b/vendor/sigs.k8s.io/cluster-api/errors/deployer.go similarity index 81% rename from vendor/sigs.k8s.io/controller-runtime/pkg/controller/controllerutil/doc.go rename to vendor/sigs.k8s.io/cluster-api/errors/deployer.go index ab386b29c..45fb789ad 100644 --- a/vendor/sigs.k8s.io/controller-runtime/pkg/controller/controllerutil/doc.go +++ b/vendor/sigs.k8s.io/cluster-api/errors/deployer.go @@ -14,7 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -/* -Package controllerutil contains utility functions for working with and implementing Controllers. -*/ -package controllerutil +package errors + +import "github.com/pkg/errors" + +var ErrNotImplemented = errors.New("not implemented") diff --git a/vendor/sigs.k8s.io/cluster-api/errors/kubeadmcontrolplane.go b/vendor/sigs.k8s.io/cluster-api/errors/kubeadmcontrolplane.go deleted file mode 100644 index ce4ce7df1..000000000 --- a/vendor/sigs.k8s.io/cluster-api/errors/kubeadmcontrolplane.go +++ /dev/null @@ -1,31 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package errors - -// KubeadmControlPlaneError is a more descriptive kind of error that represents an error condition that -// should be set in the KubeadmControlPlane.Status. The "Reason" field is meant for short, -// enum-style constants meant to be interpreted by control planes. The "Message" -// field is meant to be read by humans. -type KubeadmControlPlaneError struct { - Reason KubeadmControlPlaneStatusError - Message string -} - -// Error satisfies the error interface. -func (e *KubeadmControlPlaneError) Error() string { - return e.Message -} diff --git a/vendor/sigs.k8s.io/cluster-api/errors/machines.go b/vendor/sigs.k8s.io/cluster-api/errors/machines.go index 4cb717fe0..8a499050b 100644 --- a/vendor/sigs.k8s.io/cluster-api/errors/machines.go +++ b/vendor/sigs.k8s.io/cluster-api/errors/machines.go @@ -20,7 +20,7 @@ import ( "fmt" ) -// MachineError is a more descriptive kind of error that represents an error condition that +// A more descriptive kind of error that represents an error condition that // should be set in the Machine.Status. The "Reason" field is meant for short, // enum-style constants meant to be interpreted by machines. The "Message" // field is meant to be read by humans. @@ -37,7 +37,6 @@ func (e *MachineError) Error() string { // value, and all arguments are Printf-style varargs fed into Sprintf to // construct the Message. -// InvalidMachineConfiguration creates a new error when a Machine has invalid configuration. func InvalidMachineConfiguration(msg string, args ...interface{}) *MachineError { return &MachineError{ Reason: InvalidConfigurationMachineError, @@ -45,7 +44,6 @@ func InvalidMachineConfiguration(msg string, args ...interface{}) *MachineError } } -// CreateMachine creates a new error for when creating a Machine. func CreateMachine(msg string, args ...interface{}) *MachineError { return &MachineError{ Reason: CreateMachineError, @@ -53,7 +51,6 @@ func CreateMachine(msg string, args ...interface{}) *MachineError { } } -// UpdateMachine creates a new error for when updating a Machine. func UpdateMachine(msg string, args ...interface{}) *MachineError { return &MachineError{ Reason: UpdateMachineError, @@ -61,7 +58,6 @@ func UpdateMachine(msg string, args ...interface{}) *MachineError { } } -// DeleteMachine creates a new error for when deleting a Machine. func DeleteMachine(msg string, args ...interface{}) *MachineError { return &MachineError{ Reason: DeleteMachineError, diff --git a/vendor/sigs.k8s.io/cluster-api/errors/pointer.go b/vendor/sigs.k8s.io/cluster-api/errors/pointer.go index 94f1aca06..2335cfaef 100644 --- a/vendor/sigs.k8s.io/cluster-api/errors/pointer.go +++ b/vendor/sigs.k8s.io/cluster-api/errors/pointer.go @@ -21,11 +21,6 @@ func MachineStatusErrorPtr(v MachineStatusError) *MachineStatusError { return &v } -// MachinePoolStatusErrorPtr converts a MachinePoolStatusError to a pointer. -func MachinePoolStatusErrorPtr(v MachinePoolStatusFailure) *MachinePoolStatusFailure { - return &v -} - // ClusterStatusErrorPtr converts a MachineStatusError to a pointer. func ClusterStatusErrorPtr(v ClusterStatusError) *ClusterStatusError { return &v diff --git a/vendor/sigs.k8s.io/cluster-api/feature/feature.go b/vendor/sigs.k8s.io/cluster-api/feature/feature.go deleted file mode 100644 index 354e4bf40..000000000 --- a/vendor/sigs.k8s.io/cluster-api/feature/feature.go +++ /dev/null @@ -1,67 +0,0 @@ -/* -Copyright 2020 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package feature implements feature functionality. -package feature - -import ( - "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/component-base/featuregate" -) - -const ( - // Every feature gate should add method here following this template: - // - // // owner: @username - // // alpha: v1.X - // MyFeature featuregate.Feature = "MyFeature". - - // MachinePool is a feature gate for MachinePool functionality. - // - // alpha: v0.3 - MachinePool featuregate.Feature = "MachinePool" - - // ClusterResourceSet is a feature gate for the ClusterResourceSet functionality. - // - // alpha: v0.3 - // beta: v0.4 - ClusterResourceSet featuregate.Feature = "ClusterResourceSet" - - // ClusterTopology is a feature gate for the ClusterClass and managed topologies functionality. - // - // alpha: v0.4 - ClusterTopology featuregate.Feature = "ClusterTopology" - - // KubeadmBootstrapFormatIgnition is a feature gate for the Ignition bootstrap format - // functionality. - // - // alpha: v1.1 - KubeadmBootstrapFormatIgnition featuregate.Feature = "KubeadmBootstrapFormatIgnition" -) - -func init() { - runtime.Must(MutableGates.Add(defaultClusterAPIFeatureGates)) -} - -// defaultClusterAPIFeatureGates consists of all known cluster-api-specific feature keys. -// To add a new feature, define a key for it above and add it here. -var defaultClusterAPIFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{ - // Every feature should be initiated here: - MachinePool: {Default: false, PreRelease: featuregate.Alpha}, - ClusterResourceSet: {Default: true, PreRelease: featuregate.Beta}, - ClusterTopology: {Default: false, PreRelease: featuregate.Alpha}, - KubeadmBootstrapFormatIgnition: {Default: false, PreRelease: featuregate.Alpha}, -} diff --git a/vendor/sigs.k8s.io/cluster-api/feature/gates.go b/vendor/sigs.k8s.io/cluster-api/feature/gates.go deleted file mode 100644 index 1d3d9ec03..000000000 --- a/vendor/sigs.k8s.io/cluster-api/feature/gates.go +++ /dev/null @@ -1,33 +0,0 @@ -/* -Copyright 2020 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package feature - -import ( - "k8s.io/component-base/featuregate" -) - -var ( - // MutableGates is a mutable version of DefaultFeatureGate. - // Only top-level commands/options setup and the k8s.io/component-base/featuregate/testing package should make use of this. - // Tests that need to modify featuregate gates for the duration of their test should use: - // defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features., )() - MutableGates featuregate.MutableFeatureGate = featuregate.NewFeatureGate() - - // Gates is a shared global FeatureGate. - // Top-level commands/options setup that needs to modify this featuregate gate should use DefaultMutableFeatureGate. - Gates featuregate.FeatureGate = MutableGates -) diff --git a/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/cluster_types.go b/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/cluster_types.go new file mode 100644 index 000000000..f15fe5cf2 --- /dev/null +++ b/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/cluster_types.go @@ -0,0 +1,165 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/validation/field" + capierrors "sigs.k8s.io/cluster-api/errors" +) + +const ClusterFinalizer = "cluster.cluster.k8s.io" + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +/// [Cluster] +// Cluster is the Schema for the clusters API +// +k8s:openapi-gen=true +// +kubebuilder:resource:path=clusters,shortName=cl +type Cluster struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec ClusterSpec `json:"spec,omitempty"` + Status ClusterStatus `json:"status,omitempty"` +} + +/// [Cluster] + +/// [ClusterSpec] +// ClusterSpec defines the desired state of Cluster +type ClusterSpec struct { + // Cluster network configuration + // +optional + ClusterNetwork ClusterNetworkingConfig `json:"clusterNetwork"` + + // Provider-specific serialized configuration to use during + // cluster creation. It is recommended that providers maintain + // their own versioned API types that should be + // serialized/deserialized from this field. + // +optional + ProviderSpec ProviderSpec `json:"providerSpec,omitempty"` +} + +/// [ClusterSpec] + +/// [ClusterNetworkingConfig] +// ClusterNetworkingConfig specifies the different networking +// parameters for a cluster. +type ClusterNetworkingConfig struct { + // The network ranges from which service VIPs are allocated. + Services NetworkRanges `json:"services"` + + // The network ranges from which Pod networks are allocated. + Pods NetworkRanges `json:"pods"` + + // Domain name for services. + ServiceDomain string `json:"serviceDomain"` +} + +/// [ClusterNetworkingConfig] + +/// [NetworkRanges] +// NetworkRanges represents ranges of network addresses. +type NetworkRanges struct { + CIDRBlocks []string `json:"cidrBlocks"` +} + +/// [NetworkRanges] + +/// [ClusterStatus] +// ClusterStatus defines the observed state of Cluster +type ClusterStatus struct { + // APIEndpoint represents the endpoint to communicate with the IP. + // +optional + APIEndpoints []APIEndpoint `json:"apiEndpoints,omitempty"` + + // NB: Eventually we will redefine ErrorReason as ClusterStatusError once the + // following issue is fixed. + // https://github.com/kubernetes-incubator/apiserver-builder/issues/176 + + // If set, indicates that there is a problem reconciling the + // state, and will be set to a token value suitable for + // programmatic interpretation. + // +optional + ErrorReason capierrors.ClusterStatusError `json:"errorReason,omitempty"` + + // If set, indicates that there is a problem reconciling the + // state, and will be set to a descriptive error message. + // +optional + ErrorMessage string `json:"errorMessage,omitempty"` + + // Provider-specific status. + // It is recommended that providers maintain their + // own versioned API types that should be + // serialized/deserialized from this field. + // +optional + ProviderStatus *runtime.RawExtension `json:"providerStatus,omitempty"` +} + +/// [ClusterStatus] + +/// [APIEndpoint] +// APIEndpoint represents a reachable Kubernetes API endpoint. +type APIEndpoint struct { + // The hostname on which the API server is serving. + Host string `json:"host"` + + // The port on which the API server is serving. + Port int `json:"port"` +} + +/// [APIEndpoint] + +func (o *Cluster) Validate() field.ErrorList { + errors := field.ErrorList{} + // perform validation here and add to errors using field.Invalid + if o.Spec.ClusterNetwork.ServiceDomain == "" { + errors = append(errors, field.Invalid( + field.NewPath("Spec", "ClusterNetwork", "ServiceDomain"), + o.Spec.ClusterNetwork.ServiceDomain, + "invalid cluster configuration: missing Cluster.Spec.ClusterNetwork.ServiceDomain")) + } + if len(o.Spec.ClusterNetwork.Pods.CIDRBlocks) == 0 { + errors = append(errors, field.Invalid( + field.NewPath("Spec", "ClusterNetwork", "Pods"), + o.Spec.ClusterNetwork.Pods, + "invalid cluster configuration: missing Cluster.Spec.ClusterNetwork.Pods")) + } + if len(o.Spec.ClusterNetwork.Services.CIDRBlocks) == 0 { + errors = append(errors, field.Invalid( + field.NewPath("Spec", "ClusterNetwork", "Services"), + o.Spec.ClusterNetwork.Services, + "invalid cluster configuration: missing Cluster.Spec.ClusterNetwork.Services")) + } + return errors +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ClusterList contains a list of Cluster +type ClusterList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []Cluster `json:"items"` +} + +func init() { + SchemeBuilder.Register(&Cluster{}, &ClusterList{}) +} diff --git a/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/common_types.go b/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/common_types.go new file mode 100644 index 000000000..65155aab9 --- /dev/null +++ b/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/common_types.go @@ -0,0 +1,143 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// ProviderSpec defines the configuration to use during node creation. +type ProviderSpec struct { + + // No more than one of the following may be specified. + + // Value is an inlined, serialized representation of the resource + // configuration. It is recommended that providers maintain their own + // versioned API types that should be serialized/deserialized from this + // field, akin to component config. + // +optional + Value *runtime.RawExtension `json:"value,omitempty"` + + // Source for the provider configuration. Cannot be used if value is + // not empty. + // +optional + ValueFrom *ProviderSpecSource `json:"valueFrom,omitempty"` +} + +// ProviderSpecSource represents a source for the provider-specific +// resource configuration. +type ProviderSpecSource struct { + // The machine class from which the provider config should be sourced. + // +optional + MachineClass *MachineClassRef `json:"machineClass,omitempty"` +} + +// MachineClassRef is a reference to the MachineClass object. Controllers should find the right MachineClass using this reference. +type MachineClassRef struct { + // +optional + *corev1.ObjectReference `json:",inline"` + + // Provider is the name of the cloud-provider which MachineClass is intended for. + // +optional + Provider string `json:"provider,omitempty"` +} + +// ObjectMeta is metadata that all persisted resources must have, which includes all objects +// users must create. This is a copy of customizable fields from metav1.ObjectMeta. +// +// ObjectMeta is embedded in `Machine.Spec`, `MachineDeployment.Template` and `MachineSet.Template`, +// which are not top-level Kubernetes objects. Given that metav1.ObjectMeta has lots of special cases +// and read-only fields which end up in the generated CRD validation, having it as a subset simplifies +// the API and some issues that can impact user experience. +// +// During the [upgrade to controller-tools@v2](https://github.com/kubernetes-sigs/cluster-api/pull/1054) +// for v1alpha2, we noticed a failure would occur running Cluster API test suite against the new CRDs, +// specifically `spec.metadata.creationTimestamp in body must be of type string: "null"`. +// The investigation showed that `controller-tools@v2` behaves differently than its previous version +// when handling types from [metav1](k8s.io/apimachinery/pkg/apis/meta/v1) package. +// +// In more details, we found that embedded (non-top level) types that embedded `metav1.ObjectMeta` +// had validation properties, including for `creationTimestamp` (metav1.Time). +// The `metav1.Time` type specifies a custom json marshaller that, when IsZero() is true, returns `null` +// which breaks validation because the field isn't marked as nullable. +// +// In future versions, controller-tools@v2 might allow overriding the type and validation for embedded +// types. When that happens, this hack should be revisited. +type ObjectMeta struct { + // Name must be unique within a namespace. Is required when creating resources, although + // some resources may allow a client to request the generation of an appropriate name + // automatically. Name is primarily intended for creation idempotence and configuration + // definition. + // Cannot be updated. + // More info: http://kubernetes.io/docs/user-guide/identifiers#names + // +optional + Name string `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"` + + // GenerateName is an optional prefix, used by the server, to generate a unique + // name ONLY IF the Name field has not been provided. + // If this field is used, the name returned to the client will be different + // than the name passed. This value will also be combined with a unique suffix. + // The provided value has the same validation rules as the Name field, + // and may be truncated by the length of the suffix required to make the value + // unique on the server. + // + // If this field is specified and the generated name exists, the server will + // NOT return a 409 - instead, it will either return 201 Created or 500 with Reason + // ServerTimeout indicating a unique name could not be found in the time allotted, and the client + // should retry (optionally after the time indicated in the Retry-After header). + // + // Applied only if Name is not specified. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency + // +optional + GenerateName string `json:"generateName,omitempty" protobuf:"bytes,2,opt,name=generateName"` + + // Namespace defines the space within each name must be unique. An empty namespace is + // equivalent to the "default" namespace, but "default" is the canonical representation. + // Not all objects are required to be scoped to a namespace - the value of this field for + // those objects will be empty. + // + // Must be a DNS_LABEL. + // Cannot be updated. + // More info: http://kubernetes.io/docs/user-guide/namespaces + // +optional + Namespace string `json:"namespace,omitempty" protobuf:"bytes,3,opt,name=namespace"` + + // Map of string keys and values that can be used to organize and categorize + // (scope and select) objects. May match selectors of replication controllers + // and services. + // More info: http://kubernetes.io/docs/user-guide/labels + // +optional + Labels map[string]string `json:"labels,omitempty" protobuf:"bytes,11,rep,name=labels"` + + // Annotations is an unstructured key value map stored with a resource that may be + // set by external tools to store and retrieve arbitrary metadata. They are not + // queryable and should be preserved when modifying objects. + // More info: http://kubernetes.io/docs/user-guide/annotations + // +optional + Annotations map[string]string `json:"annotations,omitempty" protobuf:"bytes,12,rep,name=annotations"` + + // List of objects depended by this object. If ALL objects in the list have + // been deleted, this object will be garbage collected. If this object is managed by a controller, + // then an entry in this list will point to this controller, with the controller field set to true. + // There cannot be more than one managing controller. + // +optional + // +patchMergeKey=uid + // +patchStrategy=merge + OwnerReferences []metav1.OwnerReference `json:"ownerReferences,omitempty" patchStrategy:"merge" patchMergeKey:"uid" protobuf:"bytes,13,rep,name=ownerReferences"` +} diff --git a/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/defaults.go b/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/defaults.go new file mode 100644 index 000000000..cdb6ca58b --- /dev/null +++ b/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/defaults.go @@ -0,0 +1,73 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/intstr" +) + +// PopulateDefaultsMachineDeployment fills in default field values +// Currently it is called after reading objects, but it could be called in an admission webhook also +func PopulateDefaultsMachineDeployment(d *MachineDeployment) { + if d.Spec.Replicas == nil { + d.Spec.Replicas = new(int32) + *d.Spec.Replicas = 1 + } + + if d.Spec.MinReadySeconds == nil { + d.Spec.MinReadySeconds = new(int32) + *d.Spec.MinReadySeconds = 0 + } + + if d.Spec.RevisionHistoryLimit == nil { + d.Spec.RevisionHistoryLimit = new(int32) + *d.Spec.RevisionHistoryLimit = 1 + } + + if d.Spec.ProgressDeadlineSeconds == nil { + d.Spec.ProgressDeadlineSeconds = new(int32) + *d.Spec.ProgressDeadlineSeconds = 600 + } + + if d.Spec.Strategy == nil { + d.Spec.Strategy = &MachineDeploymentStrategy{} + } + + if d.Spec.Strategy.Type == "" { + d.Spec.Strategy.Type = RollingUpdateMachineDeploymentStrategyType + } + + // Default RollingUpdate strategy only if strategy type is RollingUpdate. + if d.Spec.Strategy.Type == RollingUpdateMachineDeploymentStrategyType { + if d.Spec.Strategy.RollingUpdate == nil { + d.Spec.Strategy.RollingUpdate = &MachineRollingUpdateDeployment{} + } + if d.Spec.Strategy.RollingUpdate.MaxSurge == nil { + ios1 := intstr.FromInt(1) + d.Spec.Strategy.RollingUpdate.MaxSurge = &ios1 + } + if d.Spec.Strategy.RollingUpdate.MaxUnavailable == nil { + ios0 := intstr.FromInt(0) + d.Spec.Strategy.RollingUpdate.MaxUnavailable = &ios0 + } + } + + if len(d.Namespace) == 0 { + d.Namespace = metav1.NamespaceDefault + } +} diff --git a/vendor/sigs.k8s.io/cluster-api/errors/doc.go b/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/doc.go similarity index 63% rename from vendor/sigs.k8s.io/cluster-api/errors/doc.go rename to vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/doc.go index 3cecc22a2..5927c8a76 100644 --- a/vendor/sigs.k8s.io/cluster-api/errors/doc.go +++ b/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2021 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,10 @@ See the License for the specific language governing permissions and limitations under the License. */ -// Package errors makes a set of error message handlers available for use by Cluster API Providers. -package errors +// Package v1alpha1 contains API Schema definitions for the cluster v1alpha1 API group +// +k8s:openapi-gen=true +// +k8s:deepcopy-gen=package,register +// +k8s:defaulter-gen=TypeMeta +// +groupName=cluster.k8s.io +// +groupGoName=ClusterDeprecated +package v1alpha1 diff --git a/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/machine_types.go b/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/machine_types.go new file mode 100644 index 000000000..bd2452e09 --- /dev/null +++ b/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/machine_types.go @@ -0,0 +1,247 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + capierrors "sigs.k8s.io/cluster-api/errors" +) + +const ( + // MachineFinalizer is set on PrepareForCreate callback. + MachineFinalizer = "machine.cluster.k8s.io" + + // MachineClusterLabelName is the label set on machines linked to a cluster. + MachineClusterLabelName = "cluster.k8s.io/cluster-name" +) + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +/// [Machine] +// Machine is the Schema for the machines API +// +k8s:openapi-gen=true +// +kubebuilder:resource:path=machines,shortName=ma +type Machine struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec MachineSpec `json:"spec,omitempty"` + Status MachineStatus `json:"status,omitempty"` +} + +/// [Machine] + +/// [MachineSpec] +// MachineSpec defines the desired state of Machine +type MachineSpec struct { + // ObjectMeta will autopopulate the Node created. Use this to + // indicate what labels, annotations, name prefix, etc., should be used + // when creating the Node. + // +optional + ObjectMeta `json:"metadata,omitempty"` + + // The list of the taints to be applied to the corresponding Node in additive + // manner. This list will not overwrite any other taints added to the Node on + // an ongoing basis by other entities. These taints should be actively reconciled + // e.g. if you ask the machine controller to apply a taint and then manually remove + // the taint the machine controller will put it back) but not have the machine controller + // remove any taints + // +optional + Taints []corev1.Taint `json:"taints,omitempty"` + + // ProviderSpec details Provider-specific configuration to use during node creation. + // +optional + ProviderSpec ProviderSpec `json:"providerSpec"` + + // Versions of key software to use. This field is optional at cluster + // creation time, and omitting the field indicates that the cluster + // installation tool should select defaults for the user. These + // defaults may differ based on the cluster installer, but the tool + // should populate the values it uses when persisting Machine objects. + // A Machine spec missing this field at runtime is invalid. + // +optional + Versions MachineVersionInfo `json:"versions,omitempty"` + + // ConfigSource is used to populate in the associated Node for dynamic kubelet config. This + // field already exists in Node, so any updates to it in the Machine + // spec will be automatically copied to the linked NodeRef from the + // status. The rest of dynamic kubelet config support should then work + // as-is. + // +optional + ConfigSource *corev1.NodeConfigSource `json:"configSource,omitempty"` + + // ProviderID is the identification ID of the machine provided by the provider. + // This field must match the provider ID as seen on the node object corresponding to this machine. + // This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler + // with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out + // machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a + // generic out-of-tree provider for autoscaler, this field is required by autoscaler to be + // able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver + // and then a comparison is done to find out unregistered machines and are marked for delete. + // This field will be set by the actuators and consumed by higher level entities like autoscaler that will + // be interfacing with cluster-api as generic provider. + // +optional + ProviderID *string `json:"providerID,omitempty"` +} + +/// [MachineSpec] + +/// [MachineStatus] +// MachineStatus defines the observed state of Machine +type MachineStatus struct { + // NodeRef will point to the corresponding Node if it exists. + // +optional + NodeRef *corev1.ObjectReference `json:"nodeRef,omitempty"` + + // LastUpdated identifies when this status was last observed. + // +optional + LastUpdated *metav1.Time `json:"lastUpdated,omitempty"` + + // Versions specifies the current versions of software on the corresponding Node (if it + // exists). This is provided for a few reasons: + // + // 1) It is more convenient than checking the NodeRef, traversing it to + // the Node, and finding the appropriate field in Node.Status.NodeInfo + // (which uses different field names and formatting). + // 2) It removes some of the dependency on the structure of the Node, + // so that if the structure of Node.Status.NodeInfo changes, only + // machine controllers need to be updated, rather than every client + // of the Machines API. + // 3) There is no other simple way to check the control plane + // version. A client would have to connect directly to the apiserver + // running on the target node in order to find out its version. + // +optional + Versions *MachineVersionInfo `json:"versions,omitempty"` + + // ErrorReason will be set in the event that there is a terminal problem + // reconciling the Machine and will contain a succinct value suitable + // for machine interpretation. + // + // This field should not be set for transitive errors that a controller + // faces that are expected to be fixed automatically over + // time (like service outages), but instead indicate that something is + // fundamentally wrong with the Machine's spec or the configuration of + // the controller, and that manual intervention is required. Examples + // of terminal errors would be invalid combinations of settings in the + // spec, values that are unsupported by the controller, or the + // responsible controller itself being critically misconfigured. + // + // Any transient errors that occur during the reconciliation of Machines + // can be added as events to the Machine object and/or logged in the + // controller's output. + // +optional + ErrorReason *capierrors.MachineStatusError `json:"errorReason,omitempty"` + + // ErrorMessage will be set in the event that there is a terminal problem + // reconciling the Machine and will contain a more verbose string suitable + // for logging and human consumption. + // + // This field should not be set for transitive errors that a controller + // faces that are expected to be fixed automatically over + // time (like service outages), but instead indicate that something is + // fundamentally wrong with the Machine's spec or the configuration of + // the controller, and that manual intervention is required. Examples + // of terminal errors would be invalid combinations of settings in the + // spec, values that are unsupported by the controller, or the + // responsible controller itself being critically misconfigured. + // + // Any transient errors that occur during the reconciliation of Machines + // can be added as events to the Machine object and/or logged in the + // controller's output. + // +optional + ErrorMessage *string `json:"errorMessage,omitempty"` + + // ProviderStatus details a Provider-specific status. + // It is recommended that providers maintain their + // own versioned API types that should be + // serialized/deserialized from this field. + // +optional + ProviderStatus *runtime.RawExtension `json:"providerStatus,omitempty"` + + // Addresses is a list of addresses assigned to the machine. Queried from cloud provider, if available. + // +optional + Addresses []corev1.NodeAddress `json:"addresses,omitempty"` + + // Conditions lists the conditions synced from the node conditions of the corresponding node-object. + // Machine-controller is responsible for keeping conditions up-to-date. + // MachineSet controller will be taking these conditions as a signal to decide if + // machine is healthy or needs to be replaced. + // Refer: https://kubernetes.io/docs/concepts/architecture/nodes/#condition + // +optional + Conditions []corev1.NodeCondition `json:"conditions,omitempty"` + + // LastOperation describes the last-operation performed by the machine-controller. + // This API should be useful as a history in terms of the latest operation performed on the + // specific machine. It should also convey the state of the latest-operation for example if + // it is still on-going, failed or completed successfully. + // +optional + LastOperation *LastOperation `json:"lastOperation,omitempty"` + + // Phase represents the current phase of machine actuation. + // E.g. Pending, Running, Terminating, Failed etc. + // +optional + Phase *string `json:"phase,omitempty"` +} + +// LastOperation represents the detail of the last performed operation on the MachineObject. +type LastOperation struct { + // Description is the human-readable description of the last operation. + Description *string `json:"description,omitempty"` + + // LastUpdated is the timestamp at which LastOperation API was last-updated. + LastUpdated *metav1.Time `json:"lastUpdated,omitempty"` + + // State is the current status of the last performed operation. + // E.g. Processing, Failed, Successful etc + State *string `json:"state,omitempty"` + + // Type is the type of operation which was last performed. + // E.g. Create, Delete, Update etc + Type *string `json:"type,omitempty"` +} + +/// [MachineStatus] + +/// [MachineVersionInfo] +type MachineVersionInfo struct { + // Kubelet is the semantic version of kubelet to run + Kubelet string `json:"kubelet"` + + // ControlPlane is the semantic version of the Kubernetes control plane to + // run. This should only be populated when the machine is a + // control plane. + // +optional + ControlPlane string `json:"controlPlane,omitempty"` +} + +/// [MachineVersionInfo] + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// MachineList contains a list of Machine +type MachineList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []Machine `json:"items"` +} + +func init() { + SchemeBuilder.Register(&Machine{}, &MachineList{}) +} diff --git a/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/machineclass_types.go b/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/machineclass_types.go new file mode 100644 index 000000000..5625d7093 --- /dev/null +++ b/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/machineclass_types.go @@ -0,0 +1,78 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" +) + +// +genclient +// +genclient:noStatus +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +/// [MachineClass] +// MachineClass can be used to templatize and re-use provider configuration +// across multiple Machines / MachineSets / MachineDeployments. +// +k8s:openapi-gen=true +// +kubebuilder:resource:path=machineclasses,shortName=mc +type MachineClass struct { + metav1.TypeMeta `json:",inline"` + // +optional + metav1.ObjectMeta `json:"metadata,omitempty"` + + // The total capacity available on this machine type (cpu/memory/disk). + // + // WARNING: It is up to the creator of the MachineClass to ensure that + // this field is consistent with the underlying machine that will + // be provisioned when this class is used, to inform higher level + // automation (e.g. the cluster autoscaler). + // TODO(hardikdr) Add allocatable field once requirements are clear from autoscaler-clusterapi // integration topic. + // Capacity corev1.ResourceList `json:"capacity"` + + // How much capacity is actually allocatable on this machine. + // Must be equal to or less than the capacity, and when less + // indicates the resources reserved for system overhead. + // + // WARNING: It is up to the creator of the MachineClass to ensure that + // this field is consistent with the underlying machine that will + // be provisioned when this class is used, to inform higher level + // automation (e.g. the cluster autoscaler). + // TODO(hardikdr) Add allocatable field once requirements are clear from autoscaler-clusterapi // integration topic. + // Allocatable corev1.ResourceList `json:"allocatable"` + + // Provider-specific configuration to use during node creation. + ProviderSpec runtime.RawExtension `json:"providerSpec"` + + // TODO: should this use an api.ObjectReference to a 'MachineTemplate' instead? + // A link to the MachineTemplate that will be used to create provider + // specific configuration for Machines of this class. + // MachineTemplate corev1.ObjectReference `json:machineTemplate` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// MachineClassList contains a list of MachineClasses +type MachineClassList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []MachineClass `json:"items"` +} + +func init() { + SchemeBuilder.Register(&MachineClass{}, &MachineClassList{}) +} diff --git a/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/machinedeployment_types.go b/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/machinedeployment_types.go new file mode 100644 index 000000000..bfc74fd39 --- /dev/null +++ b/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/machinedeployment_types.go @@ -0,0 +1,200 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/intstr" +) + +type MachineDeploymentStrategyType string + +const ( + // Replace the old MachineSet by new one using rolling update + // i.e. gradually scale down the old MachineSet and scale up the new one. + RollingUpdateMachineDeploymentStrategyType MachineDeploymentStrategyType = "RollingUpdate" +) + +/// [MachineDeploymentSpec] +// MachineDeploymentSpec defines the desired state of MachineDeployment +type MachineDeploymentSpec struct { + // Number of desired machines. Defaults to 1. + // This is a pointer to distinguish between explicit zero and not specified. + Replicas *int32 `json:"replicas,omitempty"` + + // Label selector for machines. Existing MachineSets whose machines are + // selected by this will be the ones affected by this deployment. + // It must match the machine template's labels. + Selector metav1.LabelSelector `json:"selector"` + + // Template describes the machines that will be created. + Template MachineTemplateSpec `json:"template"` + + // The deployment strategy to use to replace existing machines with + // new ones. + // +optional + Strategy *MachineDeploymentStrategy `json:"strategy,omitempty"` + + // Minimum number of seconds for which a newly created machine should + // be ready. + // Defaults to 0 (machine will be considered available as soon as it + // is ready) + // +optional + MinReadySeconds *int32 `json:"minReadySeconds,omitempty"` + + // The number of old MachineSets to retain to allow rollback. + // This is a pointer to distinguish between explicit zero and not specified. + // Defaults to 1. + // +optional + RevisionHistoryLimit *int32 `json:"revisionHistoryLimit,omitempty"` + + // Indicates that the deployment is paused. + // +optional + Paused bool `json:"paused,omitempty"` + + // The maximum time in seconds for a deployment to make progress before it + // is considered to be failed. The deployment controller will continue to + // process failed deployments and a condition with a ProgressDeadlineExceeded + // reason will be surfaced in the deployment status. Note that progress will + // not be estimated during the time a deployment is paused. Defaults to 600s. + ProgressDeadlineSeconds *int32 `json:"progressDeadlineSeconds,omitempty"` +} + +/// [MachineDeploymentSpec] + +/// [MachineDeploymentStrategy] +// MachineDeploymentStrategy describes how to replace existing machines +// with new ones. +type MachineDeploymentStrategy struct { + // Type of deployment. Currently the only supported strategy is + // "RollingUpdate". + // Default is RollingUpdate. + // +optional + Type MachineDeploymentStrategyType `json:"type,omitempty"` + + // Rolling update config params. Present only if + // MachineDeploymentStrategyType = RollingUpdate. + // +optional + RollingUpdate *MachineRollingUpdateDeployment `json:"rollingUpdate,omitempty"` +} + +/// [MachineDeploymentStrategy] + +/// [MachineRollingUpdateDeployment] +// Spec to control the desired behavior of rolling update. +type MachineRollingUpdateDeployment struct { + // The maximum number of machines that can be unavailable during the update. + // Value can be an absolute number (ex: 5) or a percentage of desired + // machines (ex: 10%). + // Absolute number is calculated from percentage by rounding down. + // This can not be 0 if MaxSurge is 0. + // Defaults to 0. + // Example: when this is set to 30%, the old MachineSet can be scaled + // down to 70% of desired machines immediately when the rolling update + // starts. Once new machines are ready, old MachineSet can be scaled + // down further, followed by scaling up the new MachineSet, ensuring + // that the total number of machines available at all times + // during the update is at least 70% of desired machines. + // +optional + MaxUnavailable *intstr.IntOrString `json:"maxUnavailable,omitempty" protobuf:"bytes,1,opt,name=maxUnavailable"` + + // The maximum number of machines that can be scheduled above the + // desired number of machines. + // Value can be an absolute number (ex: 5) or a percentage of + // desired machines (ex: 10%). + // This can not be 0 if MaxUnavailable is 0. + // Absolute number is calculated from percentage by rounding up. + // Defaults to 1. + // Example: when this is set to 30%, the new MachineSet can be scaled + // up immediately when the rolling update starts, such that the total + // number of old and new machines do not exceed 130% of desired + // machines. Once old machines have been killed, new MachineSet can + // be scaled up further, ensuring that total number of machines running + // at any time during the update is at most 130% of desired machines. + // +optional + MaxSurge *intstr.IntOrString `json:"maxSurge,omitempty" protobuf:"bytes,2,opt,name=maxSurge"` +} + +/// [MachineRollingUpdateDeployment] + +/// [MachineDeploymentStatus] +// MachineDeploymentStatus defines the observed state of MachineDeployment +type MachineDeploymentStatus struct { + // The generation observed by the deployment controller. + // +optional + ObservedGeneration int64 `json:"observedGeneration,omitempty" protobuf:"varint,1,opt,name=observedGeneration"` + + // Total number of non-terminated machines targeted by this deployment + // (their labels match the selector). + // +optional + Replicas int32 `json:"replicas,omitempty" protobuf:"varint,2,opt,name=replicas"` + + // Total number of non-terminated machines targeted by this deployment + // that have the desired template spec. + // +optional + UpdatedReplicas int32 `json:"updatedReplicas,omitempty" protobuf:"varint,3,opt,name=updatedReplicas"` + + // Total number of ready machines targeted by this deployment. + // +optional + ReadyReplicas int32 `json:"readyReplicas,omitempty" protobuf:"varint,7,opt,name=readyReplicas"` + + // Total number of available machines (ready for at least minReadySeconds) + // targeted by this deployment. + // +optional + AvailableReplicas int32 `json:"availableReplicas,omitempty" protobuf:"varint,4,opt,name=availableReplicas"` + + // Total number of unavailable machines targeted by this deployment. + // This is the total number of machines that are still required for + // the deployment to have 100% available capacity. They may either + // be machines that are running but not yet available or machines + // that still have not been created. + // +optional + UnavailableReplicas int32 `json:"unavailableReplicas,omitempty" protobuf:"varint,5,opt,name=unavailableReplicas"` +} + +/// [MachineDeploymentStatus] + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +/// [MachineDeployment] +// MachineDeployment is the Schema for the machinedeployments API +// +k8s:openapi-gen=true +// +kubebuilder:resource:path=machinedeployments,shortName=md +// +kubebuilder:subresource:scale:specpath=.spec.replicas,statuspath=.status.replicas,selectorpath=.status.labelSelector +type MachineDeployment struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec MachineDeploymentSpec `json:"spec,omitempty"` + Status MachineDeploymentStatus `json:"status,omitempty"` +} + +/// [MachineDeployment] + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// MachineDeploymentList contains a list of MachineDeployment +type MachineDeploymentList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []MachineDeployment `json:"items"` +} + +func init() { + SchemeBuilder.Register(&MachineDeployment{}, &MachineDeploymentList{}) +} diff --git a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machineset_types.go b/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/machineset_types.go similarity index 61% rename from vendor/sigs.k8s.io/cluster-api/api/v1beta1/machineset_types.go rename to vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/machineset_types.go index 1c4fc6290..2f61deea9 100644 --- a/vendor/sigs.k8s.io/cluster-api/api/v1beta1/machineset_types.go +++ b/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/machineset_types.go @@ -1,5 +1,5 @@ /* -Copyright 2021 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,36 +14,43 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1beta1 +package v1alpha1 import ( + "log" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1validation "k8s.io/apimachinery/pkg/apis/meta/v1/validation" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/util/validation/field" - capierrors "sigs.k8s.io/cluster-api/errors" ) -const ( - // MachineSetTopologyFinalizer is the finalizer used by the topology MachineDeployment controller to - // clean up referenced template resources if necessary when a MachineSet is being deleted. - MachineSetTopologyFinalizer = "machineset.topology.cluster.x-k8s.io" -) +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +/// [MachineSet] +// MachineSet ensures that a specified number of machines replicas are running at any given time. +// +k8s:openapi-gen=true +// +kubebuilder:resource:path=machinesets,shortName=ms +// +kubebuilder:subresource:scale:specpath=.spec.replicas,statuspath=.status.replicas,selectorpath=.status.labelSelector +type MachineSet struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` -// ANCHOR: MachineSetSpec + Spec MachineSetSpec `json:"spec,omitempty"` + Status MachineSetStatus `json:"status,omitempty"` +} -// MachineSetSpec defines the desired state of MachineSet. -type MachineSetSpec struct { - // ClusterName is the name of the Cluster this object belongs to. - // +kubebuilder:validation:MinLength=1 - ClusterName string `json:"clusterName"` +/// [MachineSet] +/// [MachineSetSpec] +// MachineSetSpec defines the desired state of MachineSet +type MachineSetSpec struct { // Replicas is the number of desired replicas. // This is a pointer to distinguish between explicit zero and unspecified. // Defaults to 1. // +optional - // +kubebuilder:default=1 Replicas *int32 `json:"replicas,omitempty"` // MinReadySeconds is the minimum number of seconds for which a newly created machine should be ready. @@ -54,7 +61,6 @@ type MachineSetSpec struct { // DeletePolicy defines the policy used to identify nodes to delete when downscaling. // Defaults to "Random". Valid values are "Random, "Newest", "Oldest" // +kubebuilder:validation:Enum=Random;Newest;Oldest - // +optional DeletePolicy string `json:"deletePolicy,omitempty"` // Selector is a label query over machines that should match the replica count. @@ -65,91 +71,78 @@ type MachineSetSpec struct { // Template is the object that describes the machine that will be created if // insufficient replicas are detected. - // Object references to custom resources resources are treated as templates. // +optional Template MachineTemplateSpec `json:"template,omitempty"` } -// ANCHOR_END: MachineSetSpec - -// ANCHOR: MachineTemplateSpec - -// MachineTemplateSpec describes the data needed to create a Machine from a template. -type MachineTemplateSpec struct { - // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - // +optional - ObjectMeta `json:"metadata,omitempty"` - - // Specification of the desired behavior of the machine. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status - // +optional - Spec MachineSpec `json:"spec,omitempty"` -} - -// ANCHOR_END: MachineTemplateSpec - // MachineSetDeletePolicy defines how priority is assigned to nodes to delete when // downscaling a MachineSet. Defaults to "Random". type MachineSetDeletePolicy string const ( // RandomMachineSetDeletePolicy prioritizes both Machines that have the annotation - // "cluster.x-k8s.io/delete-machine=yes" and Machines that are unhealthy - // (Status.FailureReason or Status.FailureMessage are set to a non-empty value - // or NodeHealthy type of Status.Conditions is not true). + // "cluster.k8s.io/delete-machine=yes" and Machines that are unhealthy + // (Status.ErrorReason or Status.ErrorMessage are set to a non-empty value). // Finally, it picks Machines at random to delete. RandomMachineSetDeletePolicy MachineSetDeletePolicy = "Random" // NewestMachineSetDeletePolicy prioritizes both Machines that have the annotation - // "cluster.x-k8s.io/delete-machine=yes" and Machines that are unhealthy - // (Status.FailureReason or Status.FailureMessage are set to a non-empty value - // or NodeHealthy type of Status.Conditions is not true). + // "cluster.k8s.io/delete-machine=yes" and Machines that are unhealthy + // (Status.ErrorReason or Status.ErrorMessage are set to a non-empty value). // It then prioritizes the newest Machines for deletion based on the Machine's CreationTimestamp. NewestMachineSetDeletePolicy MachineSetDeletePolicy = "Newest" // OldestMachineSetDeletePolicy prioritizes both Machines that have the annotation - // "cluster.x-k8s.io/delete-machine=yes" and Machines that are unhealthy - // (Status.FailureReason or Status.FailureMessage are set to a non-empty value - // or NodeHealthy type of Status.Conditions is not true). + // "cluster.k8s.io/delete-machine=yes" and Machines that are unhealthy + // (Status.ErrorReason or Status.ErrorMessage are set to a non-empty value). // It then prioritizes the oldest Machines for deletion based on the Machine's CreationTimestamp. OldestMachineSetDeletePolicy MachineSetDeletePolicy = "Oldest" ) -// ANCHOR: MachineSetStatus +/// [MachineSetSpec] // doxygen marker -// MachineSetStatus defines the observed state of MachineSet. -type MachineSetStatus struct { - // Selector is the same as the label selector but in the string format to avoid introspection - // by clients. The string will be in the same format as the query-param syntax. - // More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors +/// [MachineTemplateSpec] // doxygen marker +// MachineTemplateSpec describes the data needed to create a Machine from a template +type MachineTemplateSpec struct { + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional - Selector string `json:"selector,omitempty"` + ObjectMeta `json:"metadata,omitempty"` - // Replicas is the most recently observed number of replicas. + // Specification of the desired behavior of the machine. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional + Spec MachineSpec `json:"spec,omitempty"` +} + +/// [MachineTemplateSpec] + +/// [MachineSetStatus] +// MachineSetStatus defines the observed state of MachineSet +type MachineSetStatus struct { + // Replicas is the most recently observed number of replicas. Replicas int32 `json:"replicas"` // The number of replicas that have labels matching the labels of the machine template of the MachineSet. // +optional - FullyLabeledReplicas int32 `json:"fullyLabeledReplicas"` + FullyLabeledReplicas int32 `json:"fullyLabeledReplicas,omitempty"` // The number of ready replicas for this MachineSet. A machine is considered ready when the node has been created and is "Ready". // +optional - ReadyReplicas int32 `json:"readyReplicas"` + ReadyReplicas int32 `json:"readyReplicas,omitempty"` // The number of available replicas (ready for at least minReadySeconds) for this MachineSet. // +optional - AvailableReplicas int32 `json:"availableReplicas"` + AvailableReplicas int32 `json:"availableReplicas,omitempty"` // ObservedGeneration reflects the generation of the most recently observed MachineSet. // +optional ObservedGeneration int64 `json:"observedGeneration,omitempty"` // In the event that there is a terminal problem reconciling the - // replicas, both FailureReason and FailureMessage will be set. FailureReason + // replicas, both ErrorReason and ErrorMessage will be set. ErrorReason // will be populated with a succinct value suitable for machine - // interpretation, while FailureMessage will contain a more verbose + // interpretation, while ErrorMessage will contain a more verbose // string suitable for logging and human consumption. // // These fields should not be set for transitive errors that a @@ -165,17 +158,13 @@ type MachineSetStatus struct { // can be added as events to the MachineSet object and/or logged in the // controller's output. // +optional - FailureReason *capierrors.MachineSetStatusError `json:"failureReason,omitempty"` + ErrorReason *capierrors.MachineSetStatusError `json:"errorReason,omitempty"` // +optional - FailureMessage *string `json:"failureMessage,omitempty"` - // Conditions defines current service state of the MachineSet. - // +optional - Conditions Conditions `json:"conditions,omitempty"` + ErrorMessage *string `json:"errorMessage,omitempty"` } -// ANCHOR_END: MachineSetStatus +/// [MachineSetStatus] -// Validate validates the MachineSet fields. func (m *MachineSet) Validate() field.ErrorList { errors := field.ErrorList{} @@ -198,40 +187,29 @@ func (m *MachineSet) Validate() field.ErrorList { return errors } -// +kubebuilder:object:root=true -// +kubebuilder:resource:path=machinesets,shortName=ms,scope=Namespaced,categories=cluster-api -// +kubebuilder:storageversion -// +kubebuilder:subresource:status -// +kubebuilder:subresource:scale:specpath=.spec.replicas,statuspath=.status.replicas,selectorpath=.status.selector -// +kubebuilder:printcolumn:name="Cluster",type="string",JSONPath=".spec.clusterName",description="Cluster" -// +kubebuilder:printcolumn:name="Replicas",type="integer",JSONPath=".status.replicas",description="Total number of non-terminated machines targeted by this machineset" -// +kubebuilder:printcolumn:name="Ready",type="integer",JSONPath=".status.readyReplicas",description="Total number of ready machines targeted by this machineset." -// +kubebuilder:printcolumn:name="Available",type="integer",JSONPath=".status.availableReplicas",description="Total number of available machines (ready for at least minReadySeconds)" -// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp",description="Time duration since creation of MachineSet" -// +kubebuilder:printcolumn:name="Version",type="string",JSONPath=".spec.template.spec.version",description="Kubernetes version associated with this MachineSet" - -// MachineSet is the Schema for the machinesets API. -type MachineSet struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` +// DefaultingFunction sets default MachineSet field values +func (m *MachineSet) Default() { + log.Printf("Defaulting fields for MachineSet %s\n", m.Name) - Spec MachineSetSpec `json:"spec,omitempty"` - Status MachineSetStatus `json:"status,omitempty"` -} + if m.Spec.Replicas == nil { + m.Spec.Replicas = new(int32) + *m.Spec.Replicas = 1 + } -// GetConditions returns the set of conditions for the MachineSet. -func (m *MachineSet) GetConditions() Conditions { - return m.Status.Conditions -} + if len(m.Namespace) == 0 { + m.Namespace = metav1.NamespaceDefault + } -// SetConditions updates the set of conditions on the MachineSet. -func (m *MachineSet) SetConditions(conditions Conditions) { - m.Status.Conditions = conditions + if m.Spec.DeletePolicy == "" { + randomPolicy := string(RandomMachineSetDeletePolicy) + log.Printf("Defaulting to %s\n", randomPolicy) + m.Spec.DeletePolicy = randomPolicy + } } -// +kubebuilder:object:root=true +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// MachineSetList contains a list of MachineSet. +// MachineSetList contains a list of MachineSet type MachineSetList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` diff --git a/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/register.go b/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/register.go new file mode 100644 index 000000000..bcbbb139b --- /dev/null +++ b/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/register.go @@ -0,0 +1,48 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// NOTE: Boilerplate only. Ignore this file. + +// Package v1alpha1 contains API Schema definitions for the cluster v1alpha1 API group +// +k8s:openapi-gen=true +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=sigs.k8s.io/cluster-api/pkg/apis/cluster +// +k8s:defaulter-gen=TypeMeta +// +groupName=cluster.k8s.io +// +groupGoName=ClusterDeprecated +package v1alpha1 + +import ( + "k8s.io/apimachinery/pkg/runtime/schema" + "sigs.k8s.io/controller-runtime/pkg/scheme" +) + +var ( + // SchemeGroupVersion is group version used to register these objects. + SchemeGroupVersion = schema.GroupVersion{Group: "cluster.k8s.io", Version: "v1alpha1"} + + // SchemeBuilder is used to add go types to the GroupVersionKind scheme. + SchemeBuilder = &scheme.Builder{GroupVersion: SchemeGroupVersion} + + // AddToScheme adds registered types to the builder. + AddToScheme = SchemeBuilder.AddToScheme +) + +// Required by pkg/client/listers/... +// TODO(pwittrock): Remove this after removing pkg/client/... +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} diff --git a/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/zz_generated.deepcopy.go b/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 000000000..ea3aa720e --- /dev/null +++ b/vendor/sigs.k8s.io/cluster-api/pkg/apis/deprecated/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,834 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by controller-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/intstr" + "sigs.k8s.io/cluster-api/errors" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *APIEndpoint) DeepCopyInto(out *APIEndpoint) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new APIEndpoint. +func (in *APIEndpoint) DeepCopy() *APIEndpoint { + if in == nil { + return nil + } + out := new(APIEndpoint) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Cluster) DeepCopyInto(out *Cluster) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Cluster. +func (in *Cluster) DeepCopy() *Cluster { + if in == nil { + return nil + } + out := new(Cluster) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Cluster) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterList) DeepCopyInto(out *ClusterList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Cluster, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterList. +func (in *ClusterList) DeepCopy() *ClusterList { + if in == nil { + return nil + } + out := new(ClusterList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterNetworkingConfig) DeepCopyInto(out *ClusterNetworkingConfig) { + *out = *in + in.Services.DeepCopyInto(&out.Services) + in.Pods.DeepCopyInto(&out.Pods) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterNetworkingConfig. +func (in *ClusterNetworkingConfig) DeepCopy() *ClusterNetworkingConfig { + if in == nil { + return nil + } + out := new(ClusterNetworkingConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterSpec) DeepCopyInto(out *ClusterSpec) { + *out = *in + in.ClusterNetwork.DeepCopyInto(&out.ClusterNetwork) + in.ProviderSpec.DeepCopyInto(&out.ProviderSpec) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterSpec. +func (in *ClusterSpec) DeepCopy() *ClusterSpec { + if in == nil { + return nil + } + out := new(ClusterSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterStatus) DeepCopyInto(out *ClusterStatus) { + *out = *in + if in.APIEndpoints != nil { + in, out := &in.APIEndpoints, &out.APIEndpoints + *out = make([]APIEndpoint, len(*in)) + copy(*out, *in) + } + if in.ProviderStatus != nil { + in, out := &in.ProviderStatus, &out.ProviderStatus + *out = new(runtime.RawExtension) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterStatus. +func (in *ClusterStatus) DeepCopy() *ClusterStatus { + if in == nil { + return nil + } + out := new(ClusterStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LastOperation) DeepCopyInto(out *LastOperation) { + *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.LastUpdated != nil { + in, out := &in.LastUpdated, &out.LastUpdated + *out = (*in).DeepCopy() + } + if in.State != nil { + in, out := &in.State, &out.State + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LastOperation. +func (in *LastOperation) DeepCopy() *LastOperation { + if in == nil { + return nil + } + out := new(LastOperation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Machine) DeepCopyInto(out *Machine) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Machine. +func (in *Machine) DeepCopy() *Machine { + if in == nil { + return nil + } + out := new(Machine) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Machine) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineClass) DeepCopyInto(out *MachineClass) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.ProviderSpec.DeepCopyInto(&out.ProviderSpec) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineClass. +func (in *MachineClass) DeepCopy() *MachineClass { + if in == nil { + return nil + } + out := new(MachineClass) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MachineClass) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineClassList) DeepCopyInto(out *MachineClassList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]MachineClass, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineClassList. +func (in *MachineClassList) DeepCopy() *MachineClassList { + if in == nil { + return nil + } + out := new(MachineClassList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MachineClassList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineClassRef) DeepCopyInto(out *MachineClassRef) { + *out = *in + if in.ObjectReference != nil { + in, out := &in.ObjectReference, &out.ObjectReference + *out = new(v1.ObjectReference) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineClassRef. +func (in *MachineClassRef) DeepCopy() *MachineClassRef { + if in == nil { + return nil + } + out := new(MachineClassRef) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineDeployment) DeepCopyInto(out *MachineDeployment) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + out.Status = in.Status +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineDeployment. +func (in *MachineDeployment) DeepCopy() *MachineDeployment { + if in == nil { + return nil + } + out := new(MachineDeployment) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MachineDeployment) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineDeploymentList) DeepCopyInto(out *MachineDeploymentList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]MachineDeployment, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineDeploymentList. +func (in *MachineDeploymentList) DeepCopy() *MachineDeploymentList { + if in == nil { + return nil + } + out := new(MachineDeploymentList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MachineDeploymentList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineDeploymentSpec) DeepCopyInto(out *MachineDeploymentSpec) { + *out = *in + if in.Replicas != nil { + in, out := &in.Replicas, &out.Replicas + *out = new(int32) + **out = **in + } + in.Selector.DeepCopyInto(&out.Selector) + in.Template.DeepCopyInto(&out.Template) + if in.Strategy != nil { + in, out := &in.Strategy, &out.Strategy + *out = new(MachineDeploymentStrategy) + (*in).DeepCopyInto(*out) + } + if in.MinReadySeconds != nil { + in, out := &in.MinReadySeconds, &out.MinReadySeconds + *out = new(int32) + **out = **in + } + if in.RevisionHistoryLimit != nil { + in, out := &in.RevisionHistoryLimit, &out.RevisionHistoryLimit + *out = new(int32) + **out = **in + } + if in.ProgressDeadlineSeconds != nil { + in, out := &in.ProgressDeadlineSeconds, &out.ProgressDeadlineSeconds + *out = new(int32) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineDeploymentSpec. +func (in *MachineDeploymentSpec) DeepCopy() *MachineDeploymentSpec { + if in == nil { + return nil + } + out := new(MachineDeploymentSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineDeploymentStatus) DeepCopyInto(out *MachineDeploymentStatus) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineDeploymentStatus. +func (in *MachineDeploymentStatus) DeepCopy() *MachineDeploymentStatus { + if in == nil { + return nil + } + out := new(MachineDeploymentStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineDeploymentStrategy) DeepCopyInto(out *MachineDeploymentStrategy) { + *out = *in + if in.RollingUpdate != nil { + in, out := &in.RollingUpdate, &out.RollingUpdate + *out = new(MachineRollingUpdateDeployment) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineDeploymentStrategy. +func (in *MachineDeploymentStrategy) DeepCopy() *MachineDeploymentStrategy { + if in == nil { + return nil + } + out := new(MachineDeploymentStrategy) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineList) DeepCopyInto(out *MachineList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Machine, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineList. +func (in *MachineList) DeepCopy() *MachineList { + if in == nil { + return nil + } + out := new(MachineList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MachineList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineRollingUpdateDeployment) DeepCopyInto(out *MachineRollingUpdateDeployment) { + *out = *in + if in.MaxUnavailable != nil { + in, out := &in.MaxUnavailable, &out.MaxUnavailable + *out = new(intstr.IntOrString) + **out = **in + } + if in.MaxSurge != nil { + in, out := &in.MaxSurge, &out.MaxSurge + *out = new(intstr.IntOrString) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineRollingUpdateDeployment. +func (in *MachineRollingUpdateDeployment) DeepCopy() *MachineRollingUpdateDeployment { + if in == nil { + return nil + } + out := new(MachineRollingUpdateDeployment) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineSet) DeepCopyInto(out *MachineSet) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineSet. +func (in *MachineSet) DeepCopy() *MachineSet { + if in == nil { + return nil + } + out := new(MachineSet) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MachineSet) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineSetList) DeepCopyInto(out *MachineSetList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]MachineSet, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineSetList. +func (in *MachineSetList) DeepCopy() *MachineSetList { + if in == nil { + return nil + } + out := new(MachineSetList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MachineSetList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineSetSpec) DeepCopyInto(out *MachineSetSpec) { + *out = *in + if in.Replicas != nil { + in, out := &in.Replicas, &out.Replicas + *out = new(int32) + **out = **in + } + in.Selector.DeepCopyInto(&out.Selector) + in.Template.DeepCopyInto(&out.Template) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineSetSpec. +func (in *MachineSetSpec) DeepCopy() *MachineSetSpec { + if in == nil { + return nil + } + out := new(MachineSetSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineSetStatus) DeepCopyInto(out *MachineSetStatus) { + *out = *in + if in.ErrorReason != nil { + in, out := &in.ErrorReason, &out.ErrorReason + *out = new(errors.MachineSetStatusError) + **out = **in + } + if in.ErrorMessage != nil { + in, out := &in.ErrorMessage, &out.ErrorMessage + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineSetStatus. +func (in *MachineSetStatus) DeepCopy() *MachineSetStatus { + if in == nil { + return nil + } + out := new(MachineSetStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineSpec) DeepCopyInto(out *MachineSpec) { + *out = *in + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.Taints != nil { + in, out := &in.Taints, &out.Taints + *out = make([]v1.Taint, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + in.ProviderSpec.DeepCopyInto(&out.ProviderSpec) + out.Versions = in.Versions + if in.ConfigSource != nil { + in, out := &in.ConfigSource, &out.ConfigSource + *out = new(v1.NodeConfigSource) + (*in).DeepCopyInto(*out) + } + if in.ProviderID != nil { + in, out := &in.ProviderID, &out.ProviderID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineSpec. +func (in *MachineSpec) DeepCopy() *MachineSpec { + if in == nil { + return nil + } + out := new(MachineSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineStatus) DeepCopyInto(out *MachineStatus) { + *out = *in + if in.NodeRef != nil { + in, out := &in.NodeRef, &out.NodeRef + *out = new(v1.ObjectReference) + **out = **in + } + if in.LastUpdated != nil { + in, out := &in.LastUpdated, &out.LastUpdated + *out = (*in).DeepCopy() + } + if in.Versions != nil { + in, out := &in.Versions, &out.Versions + *out = new(MachineVersionInfo) + **out = **in + } + if in.ErrorReason != nil { + in, out := &in.ErrorReason, &out.ErrorReason + *out = new(errors.MachineStatusError) + **out = **in + } + if in.ErrorMessage != nil { + in, out := &in.ErrorMessage, &out.ErrorMessage + *out = new(string) + **out = **in + } + if in.ProviderStatus != nil { + in, out := &in.ProviderStatus, &out.ProviderStatus + *out = new(runtime.RawExtension) + (*in).DeepCopyInto(*out) + } + if in.Addresses != nil { + in, out := &in.Addresses, &out.Addresses + *out = make([]v1.NodeAddress, len(*in)) + copy(*out, *in) + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]v1.NodeCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.LastOperation != nil { + in, out := &in.LastOperation, &out.LastOperation + *out = new(LastOperation) + (*in).DeepCopyInto(*out) + } + if in.Phase != nil { + in, out := &in.Phase, &out.Phase + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineStatus. +func (in *MachineStatus) DeepCopy() *MachineStatus { + if in == nil { + return nil + } + out := new(MachineStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineTemplateSpec) DeepCopyInto(out *MachineTemplateSpec) { + *out = *in + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineTemplateSpec. +func (in *MachineTemplateSpec) DeepCopy() *MachineTemplateSpec { + if in == nil { + return nil + } + out := new(MachineTemplateSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineVersionInfo) DeepCopyInto(out *MachineVersionInfo) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineVersionInfo. +func (in *MachineVersionInfo) DeepCopy() *MachineVersionInfo { + if in == nil { + return nil + } + out := new(MachineVersionInfo) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetworkRanges) DeepCopyInto(out *NetworkRanges) { + *out = *in + if in.CIDRBlocks != nil { + in, out := &in.CIDRBlocks, &out.CIDRBlocks + *out = make([]string, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkRanges. +func (in *NetworkRanges) DeepCopy() *NetworkRanges { + if in == nil { + return nil + } + out := new(NetworkRanges) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ObjectMeta) DeepCopyInto(out *ObjectMeta) { + *out = *in + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.OwnerReferences != nil { + in, out := &in.OwnerReferences, &out.OwnerReferences + *out = make([]metav1.OwnerReference, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObjectMeta. +func (in *ObjectMeta) DeepCopy() *ObjectMeta { + if in == nil { + return nil + } + out := new(ObjectMeta) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProviderSpec) DeepCopyInto(out *ProviderSpec) { + *out = *in + if in.Value != nil { + in, out := &in.Value, &out.Value + *out = new(runtime.RawExtension) + (*in).DeepCopyInto(*out) + } + if in.ValueFrom != nil { + in, out := &in.ValueFrom, &out.ValueFrom + *out = new(ProviderSpecSource) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderSpec. +func (in *ProviderSpec) DeepCopy() *ProviderSpec { + if in == nil { + return nil + } + out := new(ProviderSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProviderSpecSource) DeepCopyInto(out *ProviderSpecSource) { + *out = *in + if in.MachineClass != nil { + in, out := &in.MachineClass, &out.MachineClass + *out = new(MachineClassRef) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderSpecSource. +func (in *ProviderSpecSource) DeepCopy() *ProviderSpecSource { + if in == nil { + return nil + } + out := new(ProviderSpecSource) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/sigs.k8s.io/cluster-api/util/version/version.go b/vendor/sigs.k8s.io/cluster-api/util/version/version.go deleted file mode 100644 index c0e49365f..000000000 --- a/vendor/sigs.k8s.io/cluster-api/util/version/version.go +++ /dev/null @@ -1,235 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package version implements version handling. -package version - -import ( - "regexp" - "strconv" - "strings" - - "github.com/blang/semver" - "github.com/pkg/errors" -) - -var ( - // KubeSemver is the regex for Kubernetes versions. It requires the "v" prefix. - KubeSemver = regexp.MustCompile(`^v(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)([-0-9a-zA-Z_\.+]*)?$`) - // KubeSemverTolerant is the regex for Kubernetes versions with an optional "v" prefix. - KubeSemverTolerant = regexp.MustCompile(`^v?(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)([-0-9a-zA-Z_\.+]*)?$`) -) - -// ParseMajorMinorPatch returns a semver.Version from the string provided -// by looking only at major.minor.patch and stripping everything else out. -// It requires the version to have a "v" prefix. -func ParseMajorMinorPatch(version string) (semver.Version, error) { - return parseMajorMinorPatch(version, false) -} - -// ParseMajorMinorPatchTolerant returns a semver.Version from the string provided -// by looking only at major.minor.patch and stripping everything else out. -// It does not require the version to have a "v" prefix. -func ParseMajorMinorPatchTolerant(version string) (semver.Version, error) { - return parseMajorMinorPatch(version, true) -} - -// parseMajorMinorPatch returns a semver.Version from the string provided -// by looking only at major.minor.patch and stripping everything else out. -func parseMajorMinorPatch(version string, tolerant bool) (semver.Version, error) { - groups := KubeSemver.FindStringSubmatch(version) - if tolerant { - groups = KubeSemverTolerant.FindStringSubmatch(version) - } - if len(groups) < 4 { - return semver.Version{}, errors.Errorf("failed to parse major.minor.patch from %q", version) - } - major, err := strconv.ParseUint(groups[1], 10, 64) - if err != nil { - return semver.Version{}, errors.Wrapf(err, "failed to parse major version from %q", version) - } - minor, err := strconv.ParseUint(groups[2], 10, 64) - if err != nil { - return semver.Version{}, errors.Wrapf(err, "failed to parse minor version from %q", version) - } - patch, err := strconv.ParseUint(groups[3], 10, 64) - if err != nil { - return semver.Version{}, errors.Wrapf(err, "failed to parse patch version from %q", version) - } - return semver.Version{ - Major: major, - Minor: minor, - Patch: patch, - }, nil -} - -const ( - numbers = "01234567890" -) - -func containsOnly(s string, set string) bool { - return strings.IndexFunc(s, func(r rune) bool { - return !strings.ContainsRune(set, r) - }) == -1 -} - -type buildIdentifiers []buildIdentifier - -func newBuildIdentifiers(ids []string) buildIdentifiers { - bis := make(buildIdentifiers, 0, len(ids)) - for _, id := range ids { - bis = append(bis, newBuildIdentifier(id)) - } - return bis -} - -// compare compares 2 builidentifiers v and 0. -// -1 == v is less than o. -// 0 == v is equal to o. -// 1 == v is greater than o. -// Note: If everything else is equal the longer build identifier is greater. -func (v buildIdentifiers) compare(o buildIdentifiers) int { - i := 0 - for ; i < len(v) && i < len(o); i++ { - if comp := v[i].compare(o[i]); comp == 0 { - continue - } else { - return comp - } - } - - // if everything is equal till now the longer is greater - if i == len(v) && i == len(o) { //nolint: gocritic - return 0 - } else if i == len(v) && i < len(o) { - return -1 - } else { - return 1 - } -} - -type buildIdentifier struct { - IdentifierInt uint64 - IdentifierStr string - IsNum bool -} - -func newBuildIdentifier(s string) buildIdentifier { - bi := buildIdentifier{} - if containsOnly(s, numbers) { - num, _ := strconv.ParseUint(s, 10, 64) - bi.IdentifierInt = num - bi.IsNum = true - } else { - bi.IdentifierStr = s - bi.IsNum = false - } - return bi -} - -// compare compares v and o. -// -1 == v is less than o. -// 0 == v is equal to o. -// 1 == v is greater than o. -// 2 == v is different than o (it is not possible to identify if lower or greater). -// Note: number is considered lower than string. -func (v buildIdentifier) compare(o buildIdentifier) int { - if v.IsNum && !o.IsNum { - return -1 - } - if !v.IsNum && o.IsNum { - return 1 - } - if v.IsNum && o.IsNum { // both are numbers - switch { - case v.IdentifierInt < o.IdentifierInt: - return -1 - case v.IdentifierInt == o.IdentifierInt: - return 0 - default: - return 1 - } - } else { // both are strings - if v.IdentifierStr == o.IdentifierStr { - return 0 - } - // In order to support random build identifiers, like commit hashes, - // we return 2 when the strings are different to signal the - // build identifiers are different but we can't determine the precedence - return 2 - } -} - -// CompareWithBuildIdentifiers compares two versions a and b. -// Perfoms a standard version compare between a and b. If the versions -// are equal, build identifiers will be used to compare further. -// -1 == a is less than b. -// 0 == a is equal to b. -// 1 == a is greater than b. -// Deprecated: Use Compare(a, b, WithBuildTags()) instead. -func CompareWithBuildIdentifiers(a semver.Version, b semver.Version) int { - if comp := a.Compare(b); comp != 0 { - return comp - } - biA := newBuildIdentifiers(a.Build) - biB := newBuildIdentifiers(b.Build) - return biA.compare(biB) -} - -type comparer struct { - buildTags bool -} - -// CompareOption is a configuration option for Compare. -type CompareOption func(*comparer) - -// WithBuildTags modifies the version comparison to also consider build tags -// when comparing versions. -// Performs a standard version compare between a and b. If the versions -// are equal, build identifiers will be used to compare further; precedence for two build -// identifiers is determined by comparing each dot-separated identifier from left to right -// until a difference is found as follows: -// - Identifiers consisting of only digits are compared numerically. -// - Numeric identifiers always have lower precedence than non-numeric identifiers. -// - Identifiers with letters or hyphens are compared only for equality, otherwise, 2 is returned given -// that it is not possible to identify if lower or greater (non-numeric identifiers could be random build -// identifiers). -// -1 == a is less than b. -// 0 == a is equal to b. -// 1 == a is greater than b. -// 2 == v is different than o (it is not possible to identify if lower or greater). -func WithBuildTags() CompareOption { - return func(c *comparer) { - c.buildTags = true - } -} - -// Compare 2 semver versions. -// Defaults to doing the standard semver comparison when no options are specified. -// The comparison logic can be modified by passing additional compare options. -// Example: using the WithBuildTags() option modifies the compare logic to also -// consider build tags when comparing versions. -func Compare(a, b semver.Version, options ...CompareOption) int { - c := &comparer{} - for _, o := range options { - o(c) - } - - if c.buildTags { - return CompareWithBuildIdentifiers(a, b) - } - return a.Compare(b) -} diff --git a/vendor/sigs.k8s.io/controller-runtime/.gitignore b/vendor/sigs.k8s.io/controller-runtime/.gitignore deleted file mode 100644 index c2c72faf3..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Binaries for programs and plugins -*.exe -*.exe~ -*.dll -*.so -*.dylib - -# Test binary, build with `go test -c` -*.test - -# Output of the go coverage tool, specifically when used with LiteIDE -*.out - -# editor and IDE paraphernalia -.idea -*.swp -*.swo -*~ - -# Vscode files -.vscode - -# Tools binaries. -hack/tools/bin diff --git a/vendor/sigs.k8s.io/controller-runtime/.golangci.yml b/vendor/sigs.k8s.io/controller-runtime/.golangci.yml deleted file mode 100644 index 7d1d3665c..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/.golangci.yml +++ /dev/null @@ -1,143 +0,0 @@ -linters: - disable-all: true - enable: - - asciicheck - - bodyclose - - deadcode - - depguard - - dogsled - - errcheck - - errorlint - - exportloopref - - goconst - - gocritic - - gocyclo - - gofmt - - goimports - - goprintffuncname - - gosec - - gosimple - - govet - - ifshort - - importas - - ineffassign - - misspell - - nakedret - - nilerr - - nolintlint - - prealloc - - revive - - rowserrcheck - - staticcheck - - structcheck - - stylecheck - - typecheck - - unconvert - - unparam - - unused - - varcheck - - whitespace - -linters-settings: - ifshort: - # Maximum length of variable declaration measured in number of characters, after which linter won't suggest using short syntax. - max-decl-chars: 50 - importas: - no-unaliased: true - alias: - # Kubernetes - - pkg: k8s.io/api/core/v1 - alias: corev1 - - pkg: k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1 - alias: apiextensionsv1 - - pkg: k8s.io/apimachinery/pkg/apis/meta/v1 - alias: metav1 - - pkg: k8s.io/apimachinery/pkg/api/errors - alias: apierrors - - pkg: k8s.io/apimachinery/pkg/util/errors - alias: kerrors - # Controller Runtime - - pkg: sigs.k8s.io/controller-runtime - alias: ctrl - staticcheck: - go: "1.19" - stylecheck: - go: "1.19" - depguard: - include-go-root: true - packages: - - io/ioutil # https://go.dev/doc/go1.16#ioutil - -issues: - max-same-issues: 0 - max-issues-per-linter: 0 - # We are disabling default golangci exclusions because we want to help reviewers to focus on reviewing the most relevant - # changes in PRs and avoid nitpicking. - exclude-use-default: false - # List of regexps of issue texts to exclude, empty list by default. - exclude: - # The following are being worked on to remove their exclusion. This list should be reduced or go away all together over time. - # If it is decided they will not be addressed they should be moved above this comment. - - Subprocess launch(ed with variable|ing should be audited) - - (G204|G104|G307) - - "ST1000: at least one file in a package should have a package comment" - exclude-rules: - - linters: - - gosec - text: "G108: Profiling endpoint is automatically exposed on /debug/pprof" - - linters: - - revive - text: "exported: exported method .*\\.(Reconcile|SetupWithManager|SetupWebhookWithManager) should have comment or be unexported" - - linters: - - errcheck - text: Error return value of .((os\.)?std(out|err)\..*|.*Close|.*Flush|os\.Remove(All)?|.*print(f|ln)?|os\.(Un)?Setenv). is not checked - # With Go 1.16, the new embed directive can be used with an un-named import, - # revive (previously, golint) only allows these to be imported in a main.go, which wouldn't work for us. - # This directive allows the embed package to be imported with an underscore everywhere. - - linters: - - revive - source: _ "embed" - # Exclude some packages or code to require comments, for example test code, or fake clients. - - linters: - - revive - text: exported (method|function|type|const) (.+) should have comment or be unexported - source: (func|type).*Fake.* - - linters: - - revive - text: exported (method|function|type|const) (.+) should have comment or be unexported - path: fake_\.go - # Disable unparam "always receives" which might not be really - # useful when building libraries. - - linters: - - unparam - text: always receives - # Dot imports for gomega or ginkgo are allowed - # within test files. - - path: _test\.go - text: should not use dot imports - - path: _test\.go - text: cyclomatic complexity - - path: _test\.go - text: "G107: Potential HTTP request made with variable url" - # Append should be able to assign to a different var/slice. - - linters: - - gocritic - text: "appendAssign: append result not assigned to the same slice" - - linters: - - gocritic - text: "singleCaseSwitch: should rewrite switch statement to if statement" - # It considers all file access to a filename that comes from a variable problematic, - # which is naiv at best. - - linters: - - gosec - text: "G304: Potential file inclusion via variable" - - linters: - - revive - text: "package-comments: should have a package comment" - -run: - timeout: 10m - skip-files: - - "zz_generated.*\\.go$" - - ".*conversion.*\\.go$" - allow-parallel-runners: true diff --git a/vendor/sigs.k8s.io/controller-runtime/CONTRIBUTING.md b/vendor/sigs.k8s.io/controller-runtime/CONTRIBUTING.md deleted file mode 100644 index 2c0ea1f66..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/CONTRIBUTING.md +++ /dev/null @@ -1,19 +0,0 @@ -# Contributing guidelines - -## Sign the CLA - -Kubernetes projects require that you sign a Contributor License Agreement (CLA) before we can accept your pull requests. - -Please see https://git.k8s.io/community/CLA.md for more info - -## Contributing steps - -1. Submit an issue describing your proposed change to the repo in question. -1. The [repo owners](OWNERS) will respond to your issue promptly. -1. If your proposed change is accepted, and you haven't already done so, sign a Contributor License Agreement (see details above). -1. Fork the desired repo, develop and test your code changes. -1. Submit a pull request. - -## Test locally - -Run the command `make test` to test the changes locally. diff --git a/vendor/sigs.k8s.io/controller-runtime/FAQ.md b/vendor/sigs.k8s.io/controller-runtime/FAQ.md deleted file mode 100644 index c21b29e28..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/FAQ.md +++ /dev/null @@ -1,81 +0,0 @@ -# FAQ - -### Q: How do I know which type of object a controller references? - -**A**: Each controller should only reconcile one object type. Other -affected objects should be mapped to a single type of root object, using -the `EnqueueRequestForOwner` or `EnqueueRequestsFromMapFunc` event -handlers, and potentially indices. Then, your Reconcile method should -attempt to reconcile *all* state for that given root objects. - -### Q: How do I have different logic in my reconciler for different types of events (e.g. create, update, delete)? - -**A**: You should not. Reconcile functions should be idempotent, and -should always reconcile state by reading all the state it needs, then -writing updates. This allows your reconciler to correctly respond to -generic events, adjust to skipped or coalesced events, and easily deal -with application startup. The controller will enqueue reconcile requests -for both old and new objects if a mapping changes, but it's your -responsibility to make sure you have enough information to be able clean -up state that's no longer referenced. - -### Q: My cache might be stale if I read from a cache! How should I deal with that? - -**A**: There are several different approaches that can be taken, depending -on your situation. - -- When you can, take advantage of optimistic locking: use deterministic - names for objects you create, so that the Kubernetes API server will - warn you if the object already exists. Many controllers in Kubernetes - take this approach: the StatefulSet controller appends a specific number - to each pod that it creates, while the Deployment controller hashes the - pod template spec and appends that. - -- In the few cases when you cannot take advantage of deterministic names - (e.g. when using generateName), it may be useful in to track which - actions you took, and assume that they need to be repeated if they don't - occur after a given time (e.g. using a requeue result). This is what - the ReplicaSet controller does. - -In general, write your controller with the assumption that information -will eventually be correct, but may be slightly out of date. Make sure -that your reconcile function enforces the entire state of the world each -time it runs. If none of this works for you, you can always construct -a client that reads directly from the API server, but this is generally -considered to be a last resort, and the two approaches above should -generally cover most circumstances. - -### Q: Where's the fake client? How do I use it? - -**A**: The fake client -[exists](https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/client/fake), -but we generally recommend using -[envtest.Environment](https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/envtest#Environment) -to test against a real API server. In our experience, tests using fake -clients gradually re-implement poorly-written impressions of a real API -server, which leads to hard-to-maintain, complex test code. - -### Q: How should I write tests? Any suggestions for getting started? - -- Use the aforementioned - [envtest.Environment](https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/envtest#Environment) - to spin up a real API server instead of trying to mock one out. - -- Structure your tests to check that the state of the world is as you - expect it, *not* that a particular set of API calls were made, when - working with Kubernetes APIs. This will allow you to more easily - refactor and improve the internals of your controllers without changing - your tests. - -- Remember that any time you're interacting with the API server, changes - may have some delay between write time and reconcile time. - -### Q: What are these errors about no Kind being registered for a type? - -**A**: You're probably missing a fully-set-up Scheme. Schemes record the -mapping between Go types and group-version-kinds in Kubernetes. In -general, your application should have its own Scheme containing the types -from the API groups that it needs (be they Kubernetes types or your own). -See the [scheme builder -docs](https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/scheme) for -more information. diff --git a/vendor/sigs.k8s.io/controller-runtime/Makefile b/vendor/sigs.k8s.io/controller-runtime/Makefile deleted file mode 100644 index 36647c697..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/Makefile +++ /dev/null @@ -1,123 +0,0 @@ -#!/usr/bin/env bash - -# Copyright 2020 The Kubernetes Authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# If you update this file, please follow -# https://suva.sh/posts/well-documented-makefiles - -## -------------------------------------- -## General -## -------------------------------------- - -SHELL:=/usr/bin/env bash -.DEFAULT_GOAL:=help - -# Use GOPROXY environment variable if set -GOPROXY := $(shell go env GOPROXY) -ifeq ($(GOPROXY),) -GOPROXY := https://proxy.golang.org -endif -export GOPROXY - -# Active module mode, as we use go modules to manage dependencies -export GO111MODULE=on - -# Tools. -TOOLS_DIR := hack/tools -TOOLS_BIN_DIR := $(TOOLS_DIR)/bin -GOLANGCI_LINT := $(abspath $(TOOLS_BIN_DIR)/golangci-lint) -GO_APIDIFF := $(TOOLS_BIN_DIR)/go-apidiff -CONTROLLER_GEN := $(TOOLS_BIN_DIR)/controller-gen -ENVTEST_DIR := $(abspath tools/setup-envtest) - -# The help will print out all targets with their descriptions organized bellow their categories. The categories are represented by `##@` and the target descriptions by `##`. -# The awk commands is responsible to read the entire set of makefiles included in this invocation, looking for lines of the file as xyz: ## something, and then pretty-format the target and help. Then, if there's a line with ##@ something, that gets pretty-printed as a category. -# More info over the usage of ANSI control characters for terminal formatting: https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters -# More info over awk command: http://linuxcommand.org/lc3_adv_awk.php -.PHONY: help -help: ## Display this help - @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) - -## -------------------------------------- -## Testing -## -------------------------------------- - -.PHONY: test -test: test-tools ## Run the script check-everything.sh which will check all. - TRACE=1 ./hack/check-everything.sh - -.PHONY: test-tools -test-tools: ## tests the tools codebase (setup-envtest) - cd tools/setup-envtest && go test ./... - -## -------------------------------------- -## Binaries -## -------------------------------------- - -$(GO_APIDIFF): $(TOOLS_DIR)/go.mod # Build go-apidiff from tools folder. - cd $(TOOLS_DIR) && go build -tags=tools -o bin/go-apidiff github.com/joelanford/go-apidiff - -$(CONTROLLER_GEN): $(TOOLS_DIR)/go.mod # Build controller-gen from tools folder. - cd $(TOOLS_DIR) && go build -tags=tools -o bin/controller-gen sigs.k8s.io/controller-tools/cmd/controller-gen - -$(GOLANGCI_LINT): .github/workflows/golangci-lint.yml # Download golanci-lint using hack script into tools folder. - hack/ensure-golangci-lint.sh \ - -b $(TOOLS_BIN_DIR) \ - $(shell cat .github/workflows/golangci-lint.yml | grep version | sed 's/.*version: //') - -## -------------------------------------- -## Linting -## -------------------------------------- - -.PHONY: lint -lint: $(GOLANGCI_LINT) ## Lint codebase - $(GOLANGCI_LINT) run -v $(GOLANGCI_LINT_EXTRA_ARGS) - cd tools/setup-envtest; $(GOLANGCI_LINT) run -v $(GOLANGCI_LINT_EXTRA_ARGS) - -.PHONY: lint-fix -lint-fix: $(GOLANGCI_LINT) ## Lint the codebase and run auto-fixers if supported by the linter. - GOLANGCI_LINT_EXTRA_ARGS=--fix $(MAKE) lint - -## -------------------------------------- -## Generate -## -------------------------------------- - -.PHONY: modules -modules: ## Runs go mod to ensure modules are up to date. - go mod tidy - cd $(TOOLS_DIR); go mod tidy - cd $(ENVTEST_DIR); go mod tidy - -.PHONY: generate -generate: $(CONTROLLER_GEN) ## Runs controller-gen for internal types for config file - $(CONTROLLER_GEN) object paths="./pkg/config/v1alpha1/...;./examples/configfile/custom/v1alpha1/..." - -## -------------------------------------- -## Cleanup / Verification -## -------------------------------------- - -.PHONY: clean -clean: ## Cleanup. - $(MAKE) clean-bin - -.PHONY: clean-bin -clean-bin: ## Remove all generated binaries. - rm -rf hack/tools/bin - -.PHONY: verify-modules -verify-modules: modules - @if !(git diff --quiet HEAD -- go.sum go.mod); then \ - echo "go module files are out of date, please run 'make modules'"; exit 1; \ - fi diff --git a/vendor/sigs.k8s.io/controller-runtime/OWNERS b/vendor/sigs.k8s.io/controller-runtime/OWNERS deleted file mode 100644 index 4b1fa044b..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/OWNERS +++ /dev/null @@ -1,10 +0,0 @@ -# See the OWNERS docs: https://git.k8s.io/community/contributors/guide/owners.md - -approvers: - - controller-runtime-admins - - controller-runtime-maintainers - - controller-runtime-approvers -reviewers: - - controller-runtime-admins - - controller-runtime-reviewers - - controller-runtime-approvers diff --git a/vendor/sigs.k8s.io/controller-runtime/OWNERS_ALIASES b/vendor/sigs.k8s.io/controller-runtime/OWNERS_ALIASES deleted file mode 100644 index 82f7a2bef..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/OWNERS_ALIASES +++ /dev/null @@ -1,41 +0,0 @@ -# See the OWNERS docs: https://git.k8s.io/community/contributors/guide/owners.md - -aliases: - # active folks who can be contacted to perform admin-related - # tasks on the repo, or otherwise approve any PRS. - controller-runtime-admins: - - droot - - mengqiy - - pwittrock - - # non-admin folks who have write-access and can approve any PRs in the repo - controller-runtime-maintainers: - - vincepri - - joelanford - - # non-admin folks who can approve any PRs in the repo - controller-runtime-approvers: - - gerred - - shawn-hurley - - alvaroaleman - - # folks who can review and LGTM any PRs in the repo (doesn't - # include approvers & admins -- those count too via the OWNERS - # file) - controller-runtime-reviewers: - - alenkacz - - vincepri - - alexeldeib - - varshaprasad96 - - fillzpp - - # folks to can approve things in the directly-ported - # testing_frameworks portions of the codebase - testing-integration-approvers: - - apelisse - - hoegaarden - - # folks who may have context on ancient history, - # but are no longer directly involved - controller-runtime-emeritus-maintainers: - - directxman12 diff --git a/vendor/sigs.k8s.io/controller-runtime/README.md b/vendor/sigs.k8s.io/controller-runtime/README.md deleted file mode 100644 index cd358b94f..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/README.md +++ /dev/null @@ -1,66 +0,0 @@ -[![Go Report Card](https://goreportcard.com/badge/sigs.k8s.io/controller-runtime)](https://goreportcard.com/report/sigs.k8s.io/controller-runtime) -[![godoc](https://pkg.go.dev/badge/sigs.k8s.io/controller-runtime)](https://pkg.go.dev/sigs.k8s.io/controller-runtime) - -# Kubernetes controller-runtime Project - -The Kubernetes controller-runtime Project is a set of go libraries for building -Controllers. It is leveraged by [Kubebuilder](https://book.kubebuilder.io/) and -[Operator SDK](https://github.com/operator-framework/operator-sdk). Both are -a great place to start for new projects. See -[Kubebuilder's Quick Start](https://book.kubebuilder.io/quick-start.html) to -see how it can be used. - -Documentation: - -- [Package overview](https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg) -- [Basic controller using builder](https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/builder#example-Builder) -- [Creating a manager](https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/manager#example-New) -- [Creating a controller](https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/controller#example-New) -- [Examples](https://github.com/kubernetes-sigs/controller-runtime/blob/master/examples) -- [Designs](https://github.com/kubernetes-sigs/controller-runtime/blob/master/designs) - -# Versioning, Maintenance, and Compatibility - -The full documentation can be found at [VERSIONING.md](VERSIONING.md), but TL;DR: - -Users: - -- We follow [Semantic Versioning (semver)](https://semver.org) -- Use releases with your dependency management to ensure that you get compatible code -- The master branch contains all the latest code, some of which may break compatibility (so "normal" `go get` is not recommended) - -Contributors: - -- All code PR must be labeled with :bug: (patch fixes), :sparkles: (backwards-compatible features), or :warning: (breaking changes) -- Breaking changes will find their way into the next major release, other changes will go into an semi-immediate patch or minor release -- For a quick PR template suggesting the right information, use one of these PR templates: - * [Breaking Changes/Features](/.github/PULL_REQUEST_TEMPLATE/breaking_change.md) - * [Backwards-Compatible Features](/.github/PULL_REQUEST_TEMPLATE/compat_feature.md) - * [Bug fixes](/.github/PULL_REQUEST_TEMPLATE/bug_fix.md) - * [Documentation Changes](/.github/PULL_REQUEST_TEMPLATE/docs.md) - * [Test/Build/Other Changes](/.github/PULL_REQUEST_TEMPLATE/other.md) - -## FAQ - -See [FAQ.md](FAQ.md) - -## Community, discussion, contribution, and support - -Learn how to engage with the Kubernetes community on the [community page](http://kubernetes.io/community/). - -controller-runtime is a subproject of the [kubebuilder](https://github.com/kubernetes-sigs/kubebuilder) project -in sig apimachinery. - -You can reach the maintainers of this project at: - -- Slack channel: [#kubebuilder](http://slack.k8s.io/#kubebuilder) -- Google Group: [kubebuilder@googlegroups.com](https://groups.google.com/forum/#!forum/kubebuilder) - -## Contributing -Contributions are greatly appreciated. The maintainers actively manage the issues list, and try to highlight issues suitable for newcomers. -The project follows the typical GitHub pull request model. See [CONTRIBUTING.md](CONTRIBUTING.md) for more details. -Before starting any work, please either comment on an existing issue, or file a new one. - -## Code of conduct - -Participation in the Kubernetes community is governed by the [Kubernetes Code of Conduct](code-of-conduct.md). diff --git a/vendor/sigs.k8s.io/controller-runtime/RELEASE.md b/vendor/sigs.k8s.io/controller-runtime/RELEASE.md deleted file mode 100644 index 134a73a31..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/RELEASE.md +++ /dev/null @@ -1,47 +0,0 @@ -# Release Process - -The Kubernetes controller-runtime Project is released on an as-needed basis. The process is as follows: - -**Note:** Releases are done from the `release-MAJOR.MINOR` branches. For PATCH releases is not required -to create a new branch you will just need to ensure that all big fixes are cherry-picked into the respective -`release-MAJOR.MINOR` branch. To know more about versioning check https://semver.org/. - -## How to do a release - -### Create the new branch and the release tag - -1. Create a new branch `git checkout -b release-` from master -2. Push the new branch to the remote repository - -### Now, let's generate the changelog - -1. Create the changelog from the new branch `release-` (`git checkout release-`). -You will need to use the [kubebuilder-release-tools][kubebuilder-release-tools] to generate the notes. See [here][release-notes-generation] - -> **Note** -> - You will need to have checkout locally from the remote repository the previous branch -> - Also, ensure that you fetch all tags from the remote `git fetch --all --tags` - -### Draft a new release from GitHub - -1. Create a new tag with the correct version from the new `release-` branch -2. Add the changelog on it and publish. Now, the code source is released ! - -### Add a new Prow test the for the new branch release - -1. Create a new prow test under [github.com/kubernetes/test-infra/tree/master/config/jobs/kubernetes-sigs/controller-runtime](https://github.com/kubernetes/test-infra/tree/master/config/jobs/kubernetes-sigs/controller-runtime) -for the new `release-` branch. (i.e. for the `0.11.0` release see the PR: https://github.com/kubernetes/test-infra/pull/25205) -2. Ping the infra PR in the controller-runtime slack channel for reviews. - -### Announce the new release: - -1. Publish on the Slack channel the new release, i.e: - -```` -:announce: Controller-Runtime v0.12.0 has been released! -This release includes a Kubernetes dependency bump to v1.24. -For more info, see the release page: https://github.com/kubernetes-sigs/controller-runtime/releases. - :tada: Thanks to all our contributors! -```` - -2. An announcement email is sent to `kubebuilder@googlegroups.com` with the subject `[ANNOUNCE] Controller-Runtime $VERSION is released` diff --git a/vendor/sigs.k8s.io/controller-runtime/SECURITY_CONTACTS b/vendor/sigs.k8s.io/controller-runtime/SECURITY_CONTACTS deleted file mode 100644 index 32e6a3b90..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/SECURITY_CONTACTS +++ /dev/null @@ -1,14 +0,0 @@ -# Defined below are the security contacts for this repo. -# -# They are the contact point for the Product Security Team to reach out -# to for triaging and handling of incoming issues. -# -# The below names agree to abide by the -# [Embargo Policy](https://github.com/kubernetes/sig-release/blob/master/security-release-process-documentation/security-release-process.md#embargo-policy) -# and will be removed and replaced if they violate that agreement. -# -# DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE -# INSTRUCTIONS AT https://kubernetes.io/security/ - -pwittrock -droot diff --git a/vendor/sigs.k8s.io/controller-runtime/TMP-LOGGING.md b/vendor/sigs.k8s.io/controller-runtime/TMP-LOGGING.md deleted file mode 100644 index b3cfc6651..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/TMP-LOGGING.md +++ /dev/null @@ -1,169 +0,0 @@ -Logging Guidelines -================== - -controller-runtime uses a kind of logging called *structured logging*. If -you've used a library like Zap or logrus before, you'll be familiar with -the concepts we use. If you've only used a logging library like the "log" -package (in the Go standard library) or "glog" (in Kubernetes), you'll -need to adjust how you think about logging a bit. - -### Getting Started With Structured Logging - -With structured logging, we associate a *constant* log message with some -variable key-value pairs. For instance, suppose we wanted to log that we -were starting reconciliation on a pod. In the Go standard library logger, -we might write: - -```go -log.Printf("starting reconciliation for pod %s/%s", podNamespace, podName) -``` - -In controller-runtime, we'd instead write: - -```go -logger.Info("starting reconciliation", "pod", req.NamespacedNamed) -``` - -or even write - -```go -func (r *Reconciler) Reconcile(req reconcile.Request) (reconcile.Response, error) { - logger := logger.WithValues("pod", req.NamespacedName) - // do some stuff - logger.Info("starting reconciliation") -} -``` - -Notice how we've broken out the information that we want to convey into -a constant message (`"starting reconciliation"`) and some key-value pairs -that convey variable information (`"pod", req.NamespacedName`). We've -there-by added "structure" to our logs, which makes them easier to save -and search later, as well as correlate with metrics and events. - -All of controller-runtime's logging is done via -[logr](https://github.com/go-logr/logr), a generic interface for -structured logging. You can use whichever logging library you want to -implement the actual mechanics of the logging. controller-runtime -provides some helpers to make it easy to use -[Zap](https://go.uber.org/zap) as the implementation. - -You can configure the logging implementation using -`"sigs.k8s.io/controller-runtime/pkg/log".SetLogger`. That -package also contains the convenience functions for setting up Zap. - -You can get a handle to the the "root" logger using -`"sigs.k8s.io/controller-runtime/pkg/log".Log`, and can then call -`WithName` to create individual named loggers. You can call `WithName` -repeatedly to chain names together: - -```go -logger := log.Log.WithName("controller").WithName("replicaset") -// in reconcile... -logger = logger.WithValues("replicaset", req.NamespacedName) -// later on in reconcile... -logger.Info("doing things with pods", "pod", newPod) -``` - -As seen above, you can also call `WithValue` to create a new sub-logger -that always attaches some key-value pairs to a logger. - -Finally, you can use `V(1)` to mark a particular log line as "debug" logs: - -```go -logger.V(1).Info("this is particularly verbose!", "state of the world", -allKubernetesObjectsEverywhere) -``` - -While it's possible to use higher log levels, it's recommended that you -stick with `V(1)` or `V(0)` (which is equivalent to not specifying `V`), -and then filter later based on key-value pairs or messages; different -numbers tend to lose meaning easily over time, and you'll be left -wondering why particular logs lines are at `V(5)` instead of `V(7)`. - -## Logging errors - -Errors should *always* be logged with `log.Error`, which allows logr -implementations to provide special handling of errors (for instance, -providing stack traces in debug mode). - -It's acceptable to log call `log.Error` with a nil error object. This -conveys that an error occurred in some capacity, but that no actual -`error` object was involved. - -Errors returned by the `Reconcile` implementation of the `Reconciler` interface are commonly logged as a `Reconciler error`. -It's a developer choice to create an additional error log in the `Reconcile` implementation so a more specific file name and line for the error are returned. - -## Logging messages - -- Don't put variable content in your messages -- use key-value pairs for - that. Never use `fmt.Sprintf` in your message. - -- Try to match the terminology in your messages with your key-value pairs - -- for instance, if you have a key-value pairs `api version`, use the - term `APIVersion` instead of `GroupVersion` in your message. - -## Logging Kubernetes Objects - -Kubernetes objects should be logged directly, like `log.Info("this is -a Kubernetes object", "pod", somePod)`. controller-runtime provides -a special encoder for Zap that will transform Kubernetes objects into -`name, namespace, apiVersion, kind` objects, when available and not in -development mode. Other logr implementations should implement similar -logic. - -## Logging Structured Values (Key-Value pairs) - -- Use lower-case, space separated keys. For example `object` for objects, - `api version` for `APIVersion` - -- Be consistent across your application, and with controller-runtime when - possible. - -- Try to be brief but descriptive. - -- Match terminology in keys with terminology in the message. - -- Be careful logging non-Kubernetes objects verbatim if they're very - large. - -### Groups, Versions, and Kinds - -- Kinds should not be logged alone (they're meaningless alone). Use - a `GroupKind` object to log them instead, or a `GroupVersionKind` when - version is relevant. - -- If you need to log an API version string, use `api version` as the key - (formatted as with a `GroupVersion`, or as received directly from API - discovery). - -### Objects and Types - -- If code works with a generic Kubernetes `runtime.Object`, use the - `object` key. For specific objects, prefer the resource name as the key - (e.g. `pod` for `v1.Pod` objects). - -- For non-Kubernetes objects, the `object` key may also be used, if you - accept a generic interface. - -- When logging a raw type, log it using the `type` key, with a value of - `fmt.Sprintf("%T", typ)` - -- If there's specific context around a type, the key may be more specific, - but should end with `type` -- for instance, `OwnerType` should be logged - as `owner` in the context of `log.Error(err, "Could not get ObjectKinds - for OwnerType", `owner type`, fmt.Sprintf("%T"))`. When possible, favor - communicating kind instead. - -### Multiple things - -- When logging multiple things, simply pluralize the key. - -### controller-runtime Specifics - -- Reconcile requests should be logged as `request`, although normal code - should favor logging the key. - -- Reconcile keys should be logged as with the same key as if you were - logging the object directly (e.g. `log.Info("reconciling pod", "pod", - req.NamespacedName)`). This ends up having a similar effect to logging - the object directly. diff --git a/vendor/sigs.k8s.io/controller-runtime/VERSIONING.md b/vendor/sigs.k8s.io/controller-runtime/VERSIONING.md deleted file mode 100644 index 18779000e..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/VERSIONING.md +++ /dev/null @@ -1,30 +0,0 @@ -# Versioning and Branching in controller-runtime - -We follow the [common KubeBuilder versioning guidelines][guidelines], and -use the corresponding tooling. - -For the purposes of the aforementioned guidelines, controller-runtime -counts as a "library project", but otherwise follows the guidelines -exactly. - -[guidelines]: https://sigs.k8s.io/kubebuilder-release-tools/VERSIONING.md - -## Compatiblity and Release Support - -For release branches, we generally tend to support backporting one (1) -major release (`release-{X-1}` or `release-0.{Y-1}`), but may go back -further if the need arises and is very pressing (e.g. security updates). - -### Dependency Support - -Note the [guidelines on dependency versions][dep-versions]. Particularly: - -- We **DO** guarantee Kubernetes REST API compability -- if a given - version of controller-runtime stops working with what should be - a supported version of Kubernetes, this is almost certainly a bug. - -- We **DO NOT** guarantee any particular compability matrix between - kubernetes library dependencies (client-go, apimachinery, etc); Such - compability is infeasible due to the way those libraries are versioned. - -[dep-versions]: https://sigs.k8s.io/kubebuilder-release-tools/VERSIONING.md#kubernetes-version-compatibility diff --git a/vendor/sigs.k8s.io/controller-runtime/alias.go b/vendor/sigs.k8s.io/controller-runtime/alias.go deleted file mode 100644 index 29f964dcb..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/alias.go +++ /dev/null @@ -1,150 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package controllerruntime - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime/schema" - "sigs.k8s.io/controller-runtime/pkg/builder" - "sigs.k8s.io/controller-runtime/pkg/client/config" - cfg "sigs.k8s.io/controller-runtime/pkg/config" - "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" - "sigs.k8s.io/controller-runtime/pkg/log" - "sigs.k8s.io/controller-runtime/pkg/manager" - "sigs.k8s.io/controller-runtime/pkg/manager/signals" - "sigs.k8s.io/controller-runtime/pkg/reconcile" - "sigs.k8s.io/controller-runtime/pkg/scheme" -) - -// Builder builds an Application ControllerManagedBy (e.g. Operator) and returns a manager.Manager to start it. -type Builder = builder.Builder - -// Request contains the information necessary to reconcile a Kubernetes object. This includes the -// information to uniquely identify the object - its Name and Namespace. It does NOT contain information about -// any specific Event or the object contents itself. -type Request = reconcile.Request - -// Result contains the result of a Reconciler invocation. -type Result = reconcile.Result - -// Manager initializes shared dependencies such as Caches and Clients, and provides them to Runnables. -// A Manager is required to create Controllers. -type Manager = manager.Manager - -// Options are the arguments for creating a new Manager. -type Options = manager.Options - -// SchemeBuilder builds a new Scheme for mapping go types to Kubernetes GroupVersionKinds. -type SchemeBuilder = scheme.Builder - -// GroupVersion contains the "group" and the "version", which uniquely identifies the API. -type GroupVersion = schema.GroupVersion - -// GroupResource specifies a Group and a Resource, but does not force a version. This is useful for identifying -// concepts during lookup stages without having partially valid types. -type GroupResource = schema.GroupResource - -// TypeMeta describes an individual object in an API response or request -// with strings representing the type of the object and its API schema version. -// Structures that are versioned or persisted should inline TypeMeta. -// -// +k8s:deepcopy-gen=false -type TypeMeta = metav1.TypeMeta - -// ObjectMeta is metadata that all persisted resources must have, which includes all objects -// users must create. -type ObjectMeta = metav1.ObjectMeta - -var ( - // GetConfigOrDie creates a *rest.Config for talking to a Kubernetes apiserver. - // If --kubeconfig is set, will use the kubeconfig file at that location. Otherwise will assume running - // in cluster and use the cluster provided kubeconfig. - // - // Will log an error and exit if there is an error creating the rest.Config. - GetConfigOrDie = config.GetConfigOrDie - - // GetConfig creates a *rest.Config for talking to a Kubernetes apiserver. - // If --kubeconfig is set, will use the kubeconfig file at that location. Otherwise will assume running - // in cluster and use the cluster provided kubeconfig. - // - // Config precedence - // - // * --kubeconfig flag pointing at a file - // - // * KUBECONFIG environment variable pointing at a file - // - // * In-cluster config if running in cluster - // - // * $HOME/.kube/config if exists. - GetConfig = config.GetConfig - - // ConfigFile returns the cfg.File function for deferred config file loading, - // this is passed into Options{}.From() to populate the Options fields for - // the manager. - ConfigFile = cfg.File - - // NewControllerManagedBy returns a new controller builder that will be started by the provided Manager. - NewControllerManagedBy = builder.ControllerManagedBy - - // NewWebhookManagedBy returns a new webhook builder that will be started by the provided Manager. - NewWebhookManagedBy = builder.WebhookManagedBy - - // NewManager returns a new Manager for creating Controllers. - NewManager = manager.New - - // CreateOrUpdate creates or updates the given object obj in the Kubernetes - // cluster. The object's desired state should be reconciled with the existing - // state using the passed in ReconcileFn. obj must be a struct pointer so that - // obj can be updated with the content returned by the Server. - // - // It returns the executed operation and an error. - CreateOrUpdate = controllerutil.CreateOrUpdate - - // SetControllerReference sets owner as a Controller OwnerReference on owned. - // This is used for garbage collection of the owned object and for - // reconciling the owner object on changes to owned (with a Watch + EnqueueRequestForOwner). - // Since only one OwnerReference can be a controller, it returns an error if - // there is another OwnerReference with Controller flag set. - SetControllerReference = controllerutil.SetControllerReference - - // SetupSignalHandler registered for SIGTERM and SIGINT. A stop channel is returned - // which is closed on one of these signals. If a second signal is caught, the program - // is terminated with exit code 1. - SetupSignalHandler = signals.SetupSignalHandler - - // Log is the base logger used by controller-runtime. It delegates - // to another logr.Logger. You *must* call SetLogger to - // get any actual logging. - Log = log.Log - - // LoggerFrom returns a logger with predefined values from a context.Context. - // The logger, when used with controllers, can be expected to contain basic information about the object - // that's being reconciled like: - // - `reconciler group` and `reconciler kind` coming from the For(...) object passed in when building a controller. - // - `name` and `namespace` injected from the reconciliation request. - // - // This is meant to be used with the context supplied in a struct that satisfies the Reconciler interface. - LoggerFrom = log.FromContext - - // LoggerInto takes a context and sets the logger as one of its keys. - // - // This is meant to be used in reconcilers to enrich the logger within a context with additional values. - LoggerInto = log.IntoContext - - // SetLogger sets a concrete logging implementation for all deferred Loggers. - SetLogger = log.SetLogger -) diff --git a/vendor/sigs.k8s.io/controller-runtime/code-of-conduct.md b/vendor/sigs.k8s.io/controller-runtime/code-of-conduct.md deleted file mode 100644 index 0d15c00cf..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/code-of-conduct.md +++ /dev/null @@ -1,3 +0,0 @@ -# Kubernetes Community Code of Conduct - -Please refer to our [Kubernetes Community Code of Conduct](https://git.k8s.io/community/code-of-conduct.md) diff --git a/vendor/sigs.k8s.io/controller-runtime/doc.go b/vendor/sigs.k8s.io/controller-runtime/doc.go deleted file mode 100644 index fa6c532c4..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/doc.go +++ /dev/null @@ -1,128 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package controllerruntime provides tools to construct Kubernetes-style -// controllers that manipulate both Kubernetes CRDs and aggregated/built-in -// Kubernetes APIs. -// -// It defines easy helpers for the common use cases when building CRDs, built -// on top of customizable layers of abstraction. Common cases should be easy, -// and uncommon cases should be possible. In general, controller-runtime tries -// to guide users towards Kubernetes controller best-practices. -// -// # Getting Started -// -// The main entrypoint for controller-runtime is this root package, which -// contains all of the common types needed to get started building controllers: -// -// import ( -// ctrl "sigs.k8s.io/controller-runtime" -// ) -// -// The examples in this package walk through a basic controller setup. The -// kubebuilder book (https://book.kubebuilder.io) has some more in-depth -// walkthroughs. -// -// controller-runtime favors structs with sane defaults over constructors, so -// it's fairly common to see structs being used directly in controller-runtime. -// -// # Organization -// -// A brief-ish walkthrough of the layout of this library can be found below. Each -// package contains more information about how to use it. -// -// Frequently asked questions about using controller-runtime and designing -// controllers can be found at -// https://github.com/kubernetes-sigs/controller-runtime/blob/master/FAQ.md. -// -// # Managers -// -// Every controller and webhook is ultimately run by a Manager (pkg/manager). A -// manager is responsible for running controllers and webhooks, and setting up -// common dependencies (pkg/runtime/inject), like shared caches and clients, as -// well as managing leader election (pkg/leaderelection). Managers are -// generally configured to gracefully shut down controllers on pod termination -// by wiring up a signal handler (pkg/manager/signals). -// -// # Controllers -// -// Controllers (pkg/controller) use events (pkg/event) to eventually trigger -// reconcile requests. They may be constructed manually, but are often -// constructed with a Builder (pkg/builder), which eases the wiring of event -// sources (pkg/source), like Kubernetes API object changes, to event handlers -// (pkg/handler), like "enqueue a reconcile request for the object owner". -// Predicates (pkg/predicate) can be used to filter which events actually -// trigger reconciles. There are pre-written utilities for the common cases, and -// interfaces and helpers for advanced cases. -// -// # Reconcilers -// -// Controller logic is implemented in terms of Reconcilers (pkg/reconcile). A -// Reconciler implements a function which takes a reconcile Request containing -// the name and namespace of the object to reconcile, reconciles the object, -// and returns a Response or an error indicating whether to requeue for a -// second round of processing. -// -// # Clients and Caches -// -// Reconcilers use Clients (pkg/client) to access API objects. The default -// client provided by the manager reads from a local shared cache (pkg/cache) -// and writes directly to the API server, but clients can be constructed that -// only talk to the API server, without a cache. The Cache will auto-populate -// with watched objects, as well as when other structured objects are -// requested. The default split client does not promise to invalidate the cache -// during writes (nor does it promise sequential create/get coherence), and code -// should not assume a get immediately following a create/update will return -// the updated resource. Caches may also have indexes, which can be created via -// a FieldIndexer (pkg/client) obtained from the manager. Indexes can used to -// quickly and easily look up all objects with certain fields set. Reconcilers -// may retrieve event recorders (pkg/recorder) to emit events using the -// manager. -// -// # Schemes -// -// Clients, Caches, and many other things in Kubernetes use Schemes -// (pkg/scheme) to associate Go types to Kubernetes API Kinds -// (Group-Version-Kinds, to be specific). -// -// # Webhooks -// -// Similarly, webhooks (pkg/webhook/admission) may be implemented directly, but -// are often constructed using a builder (pkg/webhook/admission/builder). They -// are run via a server (pkg/webhook) which is managed by a Manager. -// -// # Logging and Metrics -// -// Logging (pkg/log) in controller-runtime is done via structured logs, using a -// log set of interfaces called logr -// (https://pkg.go.dev/github.com/go-logr/logr). While controller-runtime -// provides easy setup for using Zap (https://go.uber.org/zap, pkg/log/zap), -// you can provide any implementation of logr as the base logger for -// controller-runtime. -// -// Metrics (pkg/metrics) provided by controller-runtime are registered into a -// controller-runtime-specific Prometheus metrics registry. The manager can -// serve these by an HTTP endpoint, and additional metrics may be registered to -// this Registry as normal. -// -// # Testing -// -// You can easily build integration and unit tests for your controllers and -// webhooks using the test Environment (pkg/envtest). This will automatically -// stand up a copy of etcd and kube-apiserver, and provide the correct options -// to connect to the API server. It's designed to work well with the Ginkgo -// testing framework, but should work with any testing setup. -package controllerruntime diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/builder/controller.go b/vendor/sigs.k8s.io/controller-runtime/pkg/builder/controller.go deleted file mode 100644 index efaf06920..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/pkg/builder/controller.go +++ /dev/null @@ -1,333 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package builder - -import ( - "fmt" - "strings" - - "github.com/go-logr/logr" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/klog/v2" - - "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/client/apiutil" - "sigs.k8s.io/controller-runtime/pkg/controller" - "sigs.k8s.io/controller-runtime/pkg/handler" - "sigs.k8s.io/controller-runtime/pkg/manager" - "sigs.k8s.io/controller-runtime/pkg/predicate" - "sigs.k8s.io/controller-runtime/pkg/reconcile" - "sigs.k8s.io/controller-runtime/pkg/source" -) - -// Supporting mocking out functions for testing. -var newController = controller.New -var getGvk = apiutil.GVKForObject - -// project represents other forms that the we can use to -// send/receive a given resource (metadata-only, unstructured, etc). -type objectProjection int - -const ( - // projectAsNormal doesn't change the object from the form given. - projectAsNormal objectProjection = iota - // projectAsMetadata turns this into an metadata-only watch. - projectAsMetadata -) - -// Builder builds a Controller. -type Builder struct { - forInput ForInput - ownsInput []OwnsInput - watchesInput []WatchesInput - mgr manager.Manager - globalPredicates []predicate.Predicate - ctrl controller.Controller - ctrlOptions controller.Options - name string -} - -// ControllerManagedBy returns a new controller builder that will be started by the provided Manager. -func ControllerManagedBy(m manager.Manager) *Builder { - return &Builder{mgr: m} -} - -// ForInput represents the information set by For method. -type ForInput struct { - object client.Object - predicates []predicate.Predicate - objectProjection objectProjection - err error -} - -// For defines the type of Object being *reconciled*, and configures the ControllerManagedBy to respond to create / delete / -// update events by *reconciling the object*. -// This is the equivalent of calling -// Watches(&source.Kind{Type: apiType}, &handler.EnqueueRequestForObject{}). -func (blder *Builder) For(object client.Object, opts ...ForOption) *Builder { - if blder.forInput.object != nil { - blder.forInput.err = fmt.Errorf("For(...) should only be called once, could not assign multiple objects for reconciliation") - return blder - } - input := ForInput{object: object} - for _, opt := range opts { - opt.ApplyToFor(&input) - } - - blder.forInput = input - return blder -} - -// OwnsInput represents the information set by Owns method. -type OwnsInput struct { - object client.Object - predicates []predicate.Predicate - objectProjection objectProjection -} - -// Owns defines types of Objects being *generated* by the ControllerManagedBy, and configures the ControllerManagedBy to respond to -// create / delete / update events by *reconciling the owner object*. This is the equivalent of calling -// Watches(&source.Kind{Type: }, &handler.EnqueueRequestForOwner{OwnerType: apiType, IsController: true}). -func (blder *Builder) Owns(object client.Object, opts ...OwnsOption) *Builder { - input := OwnsInput{object: object} - for _, opt := range opts { - opt.ApplyToOwns(&input) - } - - blder.ownsInput = append(blder.ownsInput, input) - return blder -} - -// WatchesInput represents the information set by Watches method. -type WatchesInput struct { - src source.Source - eventhandler handler.EventHandler - predicates []predicate.Predicate - objectProjection objectProjection -} - -// Watches exposes the lower-level ControllerManagedBy Watches functions through the builder. Consider using -// Owns or For instead of Watches directly. -// Specified predicates are registered only for given source. -func (blder *Builder) Watches(src source.Source, eventhandler handler.EventHandler, opts ...WatchesOption) *Builder { - input := WatchesInput{src: src, eventhandler: eventhandler} - for _, opt := range opts { - opt.ApplyToWatches(&input) - } - - blder.watchesInput = append(blder.watchesInput, input) - return blder -} - -// WithEventFilter sets the event filters, to filter which create/update/delete/generic events eventually -// trigger reconciliations. For example, filtering on whether the resource version has changed. -// Given predicate is added for all watched objects. -// Defaults to the empty list. -func (blder *Builder) WithEventFilter(p predicate.Predicate) *Builder { - blder.globalPredicates = append(blder.globalPredicates, p) - return blder -} - -// WithOptions overrides the controller options use in doController. Defaults to empty. -func (blder *Builder) WithOptions(options controller.Options) *Builder { - blder.ctrlOptions = options - return blder -} - -// WithLogConstructor overrides the controller options's LogConstructor. -func (blder *Builder) WithLogConstructor(logConstructor func(*reconcile.Request) logr.Logger) *Builder { - blder.ctrlOptions.LogConstructor = logConstructor - return blder -} - -// Named sets the name of the controller to the given name. The name shows up -// in metrics, among other things, and thus should be a prometheus compatible name -// (underscores and alphanumeric characters only). -// -// By default, controllers are named using the lowercase version of their kind. -func (blder *Builder) Named(name string) *Builder { - blder.name = name - return blder -} - -// Complete builds the Application Controller. -func (blder *Builder) Complete(r reconcile.Reconciler) error { - _, err := blder.Build(r) - return err -} - -// Build builds the Application Controller and returns the Controller it created. -func (blder *Builder) Build(r reconcile.Reconciler) (controller.Controller, error) { - if r == nil { - return nil, fmt.Errorf("must provide a non-nil Reconciler") - } - if blder.mgr == nil { - return nil, fmt.Errorf("must provide a non-nil Manager") - } - if blder.forInput.err != nil { - return nil, blder.forInput.err - } - // Checking the reconcile type exist or not - if blder.forInput.object == nil { - return nil, fmt.Errorf("must provide an object for reconciliation") - } - - // Set the ControllerManagedBy - if err := blder.doController(r); err != nil { - return nil, err - } - - // Set the Watch - if err := blder.doWatch(); err != nil { - return nil, err - } - - return blder.ctrl, nil -} - -func (blder *Builder) project(obj client.Object, proj objectProjection) (client.Object, error) { - switch proj { - case projectAsNormal: - return obj, nil - case projectAsMetadata: - metaObj := &metav1.PartialObjectMetadata{} - gvk, err := getGvk(obj, blder.mgr.GetScheme()) - if err != nil { - return nil, fmt.Errorf("unable to determine GVK of %T for a metadata-only watch: %w", obj, err) - } - metaObj.SetGroupVersionKind(gvk) - return metaObj, nil - default: - panic(fmt.Sprintf("unexpected projection type %v on type %T, should not be possible since this is an internal field", proj, obj)) - } -} - -func (blder *Builder) doWatch() error { - // Reconcile type - typeForSrc, err := blder.project(blder.forInput.object, blder.forInput.objectProjection) - if err != nil { - return err - } - src := &source.Kind{Type: typeForSrc} - hdler := &handler.EnqueueRequestForObject{} - allPredicates := append(blder.globalPredicates, blder.forInput.predicates...) - if err := blder.ctrl.Watch(src, hdler, allPredicates...); err != nil { - return err - } - - // Watches the managed types - for _, own := range blder.ownsInput { - typeForSrc, err := blder.project(own.object, own.objectProjection) - if err != nil { - return err - } - src := &source.Kind{Type: typeForSrc} - hdler := &handler.EnqueueRequestForOwner{ - OwnerType: blder.forInput.object, - IsController: true, - } - allPredicates := append([]predicate.Predicate(nil), blder.globalPredicates...) - allPredicates = append(allPredicates, own.predicates...) - if err := blder.ctrl.Watch(src, hdler, allPredicates...); err != nil { - return err - } - } - - // Do the watch requests - for _, w := range blder.watchesInput { - allPredicates := append([]predicate.Predicate(nil), blder.globalPredicates...) - allPredicates = append(allPredicates, w.predicates...) - - // If the source of this watch is of type *source.Kind, project it. - if srckind, ok := w.src.(*source.Kind); ok { - typeForSrc, err := blder.project(srckind.Type, w.objectProjection) - if err != nil { - return err - } - srckind.Type = typeForSrc - } - - if err := blder.ctrl.Watch(w.src, w.eventhandler, allPredicates...); err != nil { - return err - } - } - return nil -} - -func (blder *Builder) getControllerName(gvk schema.GroupVersionKind) string { - if blder.name != "" { - return blder.name - } - return strings.ToLower(gvk.Kind) -} - -func (blder *Builder) doController(r reconcile.Reconciler) error { - globalOpts := blder.mgr.GetControllerOptions() - - ctrlOptions := blder.ctrlOptions - if ctrlOptions.Reconciler == nil { - ctrlOptions.Reconciler = r - } - - // Retrieve the GVK from the object we're reconciling - // to prepopulate logger information, and to optionally generate a default name. - gvk, err := getGvk(blder.forInput.object, blder.mgr.GetScheme()) - if err != nil { - return err - } - - // Setup concurrency. - if ctrlOptions.MaxConcurrentReconciles == 0 { - groupKind := gvk.GroupKind().String() - - if concurrency, ok := globalOpts.GroupKindConcurrency[groupKind]; ok && concurrency > 0 { - ctrlOptions.MaxConcurrentReconciles = concurrency - } - } - - // Setup cache sync timeout. - if ctrlOptions.CacheSyncTimeout == 0 && globalOpts.CacheSyncTimeout != nil { - ctrlOptions.CacheSyncTimeout = *globalOpts.CacheSyncTimeout - } - - controllerName := blder.getControllerName(gvk) - - // Setup the logger. - if ctrlOptions.LogConstructor == nil { - log := blder.mgr.GetLogger().WithValues( - "controller", controllerName, - "controllerGroup", gvk.Group, - "controllerKind", gvk.Kind, - ) - - ctrlOptions.LogConstructor = func(req *reconcile.Request) logr.Logger { - log := log - if req != nil { - log = log.WithValues( - gvk.Kind, klog.KRef(req.Namespace, req.Name), - "namespace", req.Namespace, "name", req.Name, - ) - } - return log - } - } - - // Build the controller and return. - blder.ctrl, err = newController(controllerName, blder.mgr, ctrlOptions) - return err -} diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/builder/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/builder/doc.go deleted file mode 100644 index e4df1b709..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/pkg/builder/doc.go +++ /dev/null @@ -1,28 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package builder wraps other controller-runtime libraries and exposes simple -// patterns for building common Controllers. -// -// Projects built with the builder package can trivially be rebased on top of the underlying -// packages if the project requires more customized behavior in the future. -package builder - -import ( - logf "sigs.k8s.io/controller-runtime/pkg/internal/log" -) - -var log = logf.RuntimeLog.WithName("builder") diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/builder/options.go b/vendor/sigs.k8s.io/controller-runtime/pkg/builder/options.go deleted file mode 100644 index c738ba7d1..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/pkg/builder/options.go +++ /dev/null @@ -1,140 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package builder - -import ( - "sigs.k8s.io/controller-runtime/pkg/predicate" -) - -// {{{ "Functional" Option Interfaces - -// ForOption is some configuration that modifies options for a For request. -type ForOption interface { - // ApplyToFor applies this configuration to the given for input. - ApplyToFor(*ForInput) -} - -// OwnsOption is some configuration that modifies options for a owns request. -type OwnsOption interface { - // ApplyToOwns applies this configuration to the given owns input. - ApplyToOwns(*OwnsInput) -} - -// WatchesOption is some configuration that modifies options for a watches request. -type WatchesOption interface { - // ApplyToWatches applies this configuration to the given watches options. - ApplyToWatches(*WatchesInput) -} - -// }}} - -// {{{ Multi-Type Options - -// WithPredicates sets the given predicates list. -func WithPredicates(predicates ...predicate.Predicate) Predicates { - return Predicates{ - predicates: predicates, - } -} - -// Predicates filters events before enqueuing the keys. -type Predicates struct { - predicates []predicate.Predicate -} - -// ApplyToFor applies this configuration to the given ForInput options. -func (w Predicates) ApplyToFor(opts *ForInput) { - opts.predicates = w.predicates -} - -// ApplyToOwns applies this configuration to the given OwnsInput options. -func (w Predicates) ApplyToOwns(opts *OwnsInput) { - opts.predicates = w.predicates -} - -// ApplyToWatches applies this configuration to the given WatchesInput options. -func (w Predicates) ApplyToWatches(opts *WatchesInput) { - opts.predicates = w.predicates -} - -var _ ForOption = &Predicates{} -var _ OwnsOption = &Predicates{} -var _ WatchesOption = &Predicates{} - -// }}} - -// {{{ For & Owns Dual-Type options - -// asProjection configures the projection (currently only metadata) on the input. -// Currently only metadata is supported. We might want to expand -// this to arbitrary non-special local projections in the future. -type projectAs objectProjection - -// ApplyToFor applies this configuration to the given ForInput options. -func (p projectAs) ApplyToFor(opts *ForInput) { - opts.objectProjection = objectProjection(p) -} - -// ApplyToOwns applies this configuration to the given OwnsInput options. -func (p projectAs) ApplyToOwns(opts *OwnsInput) { - opts.objectProjection = objectProjection(p) -} - -// ApplyToWatches applies this configuration to the given WatchesInput options. -func (p projectAs) ApplyToWatches(opts *WatchesInput) { - opts.objectProjection = objectProjection(p) -} - -var ( - // OnlyMetadata tells the controller to *only* cache metadata, and to watch - // the the API server in metadata-only form. This is useful when watching - // lots of objects, really big objects, or objects for which you only know - // the the GVK, but not the structure. You'll need to pass - // metav1.PartialObjectMetadata to the client when fetching objects in your - // reconciler, otherwise you'll end up with a duplicate structured or - // unstructured cache. - // - // When watching a resource with OnlyMetadata, for example the v1.Pod, you - // should not Get and List using the v1.Pod type. Instead, you should use - // the special metav1.PartialObjectMetadata type. - // - // ❌ Incorrect: - // - // pod := &v1.Pod{} - // mgr.GetClient().Get(ctx, nsAndName, pod) - // - // ✅ Correct: - // - // pod := &metav1.PartialObjectMetadata{} - // pod.SetGroupVersionKind(schema.GroupVersionKind{ - // Group: "", - // Version: "v1", - // Kind: "Pod", - // }) - // mgr.GetClient().Get(ctx, nsAndName, pod) - // - // In the first case, controller-runtime will create another cache for the - // concrete type on top of the metadata cache; this increases memory - // consumption and leads to race conditions as caches are not in sync. - OnlyMetadata = projectAs(projectAsMetadata) - - _ ForOption = OnlyMetadata - _ OwnsOption = OnlyMetadata - _ WatchesOption = OnlyMetadata -) - -// }}} diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/builder/webhook.go b/vendor/sigs.k8s.io/controller-runtime/pkg/builder/webhook.go deleted file mode 100644 index 534e6d64c..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/pkg/builder/webhook.go +++ /dev/null @@ -1,216 +0,0 @@ -/* -Copyright 2019 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package builder - -import ( - "errors" - "net/http" - "net/url" - "strings" - - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/client-go/rest" - "sigs.k8s.io/controller-runtime/pkg/client/apiutil" - "sigs.k8s.io/controller-runtime/pkg/manager" - "sigs.k8s.io/controller-runtime/pkg/webhook/admission" - "sigs.k8s.io/controller-runtime/pkg/webhook/conversion" -) - -// WebhookBuilder builds a Webhook. -type WebhookBuilder struct { - apiType runtime.Object - withDefaulter admission.CustomDefaulter - withValidator admission.CustomValidator - gvk schema.GroupVersionKind - mgr manager.Manager - config *rest.Config - recoverPanic bool -} - -// WebhookManagedBy allows inform its manager.Manager. -func WebhookManagedBy(m manager.Manager) *WebhookBuilder { - return &WebhookBuilder{mgr: m} -} - -// TODO(droot): update the GoDoc for conversion. - -// For takes a runtime.Object which should be a CR. -// If the given object implements the admission.Defaulter interface, a MutatingWebhook will be wired for this type. -// If the given object implements the admission.Validator interface, a ValidatingWebhook will be wired for this type. -func (blder *WebhookBuilder) For(apiType runtime.Object) *WebhookBuilder { - blder.apiType = apiType - return blder -} - -// WithDefaulter takes a admission.WithDefaulter interface, a MutatingWebhook will be wired for this type. -func (blder *WebhookBuilder) WithDefaulter(defaulter admission.CustomDefaulter) *WebhookBuilder { - blder.withDefaulter = defaulter - return blder -} - -// WithValidator takes a admission.WithValidator interface, a ValidatingWebhook will be wired for this type. -func (blder *WebhookBuilder) WithValidator(validator admission.CustomValidator) *WebhookBuilder { - blder.withValidator = validator - return blder -} - -// RecoverPanic indicates whether the panic caused by webhook should be recovered. -func (blder *WebhookBuilder) RecoverPanic() *WebhookBuilder { - blder.recoverPanic = true - return blder -} - -// Complete builds the webhook. -func (blder *WebhookBuilder) Complete() error { - // Set the Config - blder.loadRestConfig() - - // Set the Webhook if needed - return blder.registerWebhooks() -} - -func (blder *WebhookBuilder) loadRestConfig() { - if blder.config == nil { - blder.config = blder.mgr.GetConfig() - } -} - -func (blder *WebhookBuilder) registerWebhooks() error { - typ, err := blder.getType() - if err != nil { - return err - } - - // Create webhook(s) for each type - blder.gvk, err = apiutil.GVKForObject(typ, blder.mgr.GetScheme()) - if err != nil { - return err - } - - blder.registerDefaultingWebhook() - blder.registerValidatingWebhook() - - err = blder.registerConversionWebhook() - if err != nil { - return err - } - return nil -} - -// registerDefaultingWebhook registers a defaulting webhook if th. -func (blder *WebhookBuilder) registerDefaultingWebhook() { - mwh := blder.getDefaultingWebhook() - if mwh != nil { - path := generateMutatePath(blder.gvk) - - // Checking if the path is already registered. - // If so, just skip it. - if !blder.isAlreadyHandled(path) { - log.Info("Registering a mutating webhook", - "GVK", blder.gvk, - "path", path) - blder.mgr.GetWebhookServer().Register(path, mwh) - } - } -} - -func (blder *WebhookBuilder) getDefaultingWebhook() *admission.Webhook { - if defaulter := blder.withDefaulter; defaulter != nil { - return admission.WithCustomDefaulter(blder.apiType, defaulter).WithRecoverPanic(blder.recoverPanic) - } - if defaulter, ok := blder.apiType.(admission.Defaulter); ok { - return admission.DefaultingWebhookFor(defaulter).WithRecoverPanic(blder.recoverPanic) - } - log.Info( - "skip registering a mutating webhook, object does not implement admission.Defaulter or WithDefaulter wasn't called", - "GVK", blder.gvk) - return nil -} - -func (blder *WebhookBuilder) registerValidatingWebhook() { - vwh := blder.getValidatingWebhook() - if vwh != nil { - path := generateValidatePath(blder.gvk) - - // Checking if the path is already registered. - // If so, just skip it. - if !blder.isAlreadyHandled(path) { - log.Info("Registering a validating webhook", - "GVK", blder.gvk, - "path", path) - blder.mgr.GetWebhookServer().Register(path, vwh) - } - } -} - -func (blder *WebhookBuilder) getValidatingWebhook() *admission.Webhook { - if validator := blder.withValidator; validator != nil { - return admission.WithCustomValidator(blder.apiType, validator).WithRecoverPanic(blder.recoverPanic) - } - if validator, ok := blder.apiType.(admission.Validator); ok { - return admission.ValidatingWebhookFor(validator).WithRecoverPanic(blder.recoverPanic) - } - log.Info( - "skip registering a validating webhook, object does not implement admission.Validator or WithValidator wasn't called", - "GVK", blder.gvk) - return nil -} - -func (blder *WebhookBuilder) registerConversionWebhook() error { - ok, err := conversion.IsConvertible(blder.mgr.GetScheme(), blder.apiType) - if err != nil { - log.Error(err, "conversion check failed", "GVK", blder.gvk) - return err - } - if ok { - if !blder.isAlreadyHandled("/convert") { - blder.mgr.GetWebhookServer().Register("/convert", &conversion.Webhook{}) - } - log.Info("Conversion webhook enabled", "GVK", blder.gvk) - } - - return nil -} - -func (blder *WebhookBuilder) getType() (runtime.Object, error) { - if blder.apiType != nil { - return blder.apiType, nil - } - return nil, errors.New("For() must be called with a valid object") -} - -func (blder *WebhookBuilder) isAlreadyHandled(path string) bool { - if blder.mgr.GetWebhookServer().WebhookMux == nil { - return false - } - h, p := blder.mgr.GetWebhookServer().WebhookMux.Handler(&http.Request{URL: &url.URL{Path: path}}) - if p == path && h != nil { - return true - } - return false -} - -func generateMutatePath(gvk schema.GroupVersionKind) string { - return "/mutate-" + strings.ReplaceAll(gvk.Group, ".", "-") + "-" + - gvk.Version + "-" + strings.ToLower(gvk.Kind) -} - -func generateValidatePath(gvk schema.GroupVersionKind) string { - return "/validate-" + strings.ReplaceAll(gvk.Group, ".", "-") + "-" + - gvk.Version + "-" + strings.ToLower(gvk.Kind) -} diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/client/config/config.go b/vendor/sigs.k8s.io/controller-runtime/pkg/client/config/config.go deleted file mode 100644 index ff44a225f..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/pkg/client/config/config.go +++ /dev/null @@ -1,157 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package config - -import ( - "flag" - "fmt" - "os" - "os/user" - "path/filepath" - - "k8s.io/client-go/rest" - "k8s.io/client-go/tools/clientcmd" - clientcmdapi "k8s.io/client-go/tools/clientcmd/api" - logf "sigs.k8s.io/controller-runtime/pkg/internal/log" -) - -var ( - kubeconfig string - log = logf.RuntimeLog.WithName("client").WithName("config") -) - -func init() { - // TODO: Fix this to allow double vendoring this library but still register flags on behalf of users - flag.StringVar(&kubeconfig, "kubeconfig", "", - "Paths to a kubeconfig. Only required if out-of-cluster.") -} - -// GetConfig creates a *rest.Config for talking to a Kubernetes API server. -// If --kubeconfig is set, will use the kubeconfig file at that location. Otherwise will assume running -// in cluster and use the cluster provided kubeconfig. -// -// It also applies saner defaults for QPS and burst based on the Kubernetes -// controller manager defaults (20 QPS, 30 burst) -// -// Config precedence: -// -// * --kubeconfig flag pointing at a file -// -// * KUBECONFIG environment variable pointing at a file -// -// * In-cluster config if running in cluster -// -// * $HOME/.kube/config if exists. -func GetConfig() (*rest.Config, error) { - return GetConfigWithContext("") -} - -// GetConfigWithContext creates a *rest.Config for talking to a Kubernetes API server with a specific context. -// If --kubeconfig is set, will use the kubeconfig file at that location. Otherwise will assume running -// in cluster and use the cluster provided kubeconfig. -// -// It also applies saner defaults for QPS and burst based on the Kubernetes -// controller manager defaults (20 QPS, 30 burst) -// -// Config precedence: -// -// * --kubeconfig flag pointing at a file -// -// * KUBECONFIG environment variable pointing at a file -// -// * In-cluster config if running in cluster -// -// * $HOME/.kube/config if exists. -func GetConfigWithContext(context string) (*rest.Config, error) { - cfg, err := loadConfig(context) - if err != nil { - return nil, err - } - - if cfg.QPS == 0.0 { - cfg.QPS = 20.0 - cfg.Burst = 30.0 - } - - return cfg, nil -} - -// loadInClusterConfig is a function used to load the in-cluster -// Kubernetes client config. This variable makes is possible to -// test the precedence of loading the config. -var loadInClusterConfig = rest.InClusterConfig - -// loadConfig loads a REST Config as per the rules specified in GetConfig. -func loadConfig(context string) (*rest.Config, error) { - // If a flag is specified with the config location, use that - if len(kubeconfig) > 0 { - return loadConfigWithContext("", &clientcmd.ClientConfigLoadingRules{ExplicitPath: kubeconfig}, context) - } - - // If the recommended kubeconfig env variable is not specified, - // try the in-cluster config. - kubeconfigPath := os.Getenv(clientcmd.RecommendedConfigPathEnvVar) - if len(kubeconfigPath) == 0 { - if c, err := loadInClusterConfig(); err == nil { - return c, nil - } - } - - // If the recommended kubeconfig env variable is set, or there - // is no in-cluster config, try the default recommended locations. - // - // NOTE: For default config file locations, upstream only checks - // $HOME for the user's home directory, but we can also try - // os/user.HomeDir when $HOME is unset. - // - // TODO(jlanford): could this be done upstream? - loadingRules := clientcmd.NewDefaultClientConfigLoadingRules() - if _, ok := os.LookupEnv("HOME"); !ok { - u, err := user.Current() - if err != nil { - return nil, fmt.Errorf("could not get current user: %w", err) - } - loadingRules.Precedence = append(loadingRules.Precedence, filepath.Join(u.HomeDir, clientcmd.RecommendedHomeDir, clientcmd.RecommendedFileName)) - } - - return loadConfigWithContext("", loadingRules, context) -} - -func loadConfigWithContext(apiServerURL string, loader clientcmd.ClientConfigLoader, context string) (*rest.Config, error) { - return clientcmd.NewNonInteractiveDeferredLoadingClientConfig( - loader, - &clientcmd.ConfigOverrides{ - ClusterInfo: clientcmdapi.Cluster{ - Server: apiServerURL, - }, - CurrentContext: context, - }).ClientConfig() -} - -// GetConfigOrDie creates a *rest.Config for talking to a Kubernetes apiserver. -// If --kubeconfig is set, will use the kubeconfig file at that location. Otherwise will assume running -// in cluster and use the cluster provided kubeconfig. -// -// Will log an error and exit if there is an error creating the rest.Config. -func GetConfigOrDie() *rest.Config { - config, err := GetConfig() - if err != nil { - log.Error(err, "unable to get kubeconfig") - os.Exit(1) - } - return config -} diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/client/config/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/client/config/doc.go deleted file mode 100644 index 796c9cf59..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/pkg/client/config/doc.go +++ /dev/null @@ -1,18 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package config contains libraries for initializing REST configs for talking to the Kubernetes API -package config diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/controller/controllerutil/controllerutil.go b/vendor/sigs.k8s.io/controller-runtime/pkg/controller/controllerutil/controllerutil.go deleted file mode 100644 index aa53a77d4..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/pkg/controller/controllerutil/controllerutil.go +++ /dev/null @@ -1,394 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package controllerutil - -import ( - "context" - "fmt" - "reflect" - - "k8s.io/apimachinery/pkg/api/equality" - apierrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/utils/pointer" - "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/client/apiutil" -) - -// AlreadyOwnedError is an error returned if the object you are trying to assign -// a controller reference is already owned by another controller Object is the -// subject and Owner is the reference for the current owner. -type AlreadyOwnedError struct { - Object metav1.Object - Owner metav1.OwnerReference -} - -func (e *AlreadyOwnedError) Error() string { - return fmt.Sprintf("Object %s/%s is already owned by another %s controller %s", e.Object.GetNamespace(), e.Object.GetName(), e.Owner.Kind, e.Owner.Name) -} - -func newAlreadyOwnedError(obj metav1.Object, owner metav1.OwnerReference) *AlreadyOwnedError { - return &AlreadyOwnedError{ - Object: obj, - Owner: owner, - } -} - -// SetControllerReference sets owner as a Controller OwnerReference on controlled. -// This is used for garbage collection of the controlled object and for -// reconciling the owner object on changes to controlled (with a Watch + EnqueueRequestForOwner). -// Since only one OwnerReference can be a controller, it returns an error if -// there is another OwnerReference with Controller flag set. -func SetControllerReference(owner, controlled metav1.Object, scheme *runtime.Scheme) error { - // Validate the owner. - ro, ok := owner.(runtime.Object) - if !ok { - return fmt.Errorf("%T is not a runtime.Object, cannot call SetControllerReference", owner) - } - if err := validateOwner(owner, controlled); err != nil { - return err - } - - // Create a new controller ref. - gvk, err := apiutil.GVKForObject(ro, scheme) - if err != nil { - return err - } - ref := metav1.OwnerReference{ - APIVersion: gvk.GroupVersion().String(), - Kind: gvk.Kind, - Name: owner.GetName(), - UID: owner.GetUID(), - BlockOwnerDeletion: pointer.BoolPtr(true), - Controller: pointer.BoolPtr(true), - } - - // Return early with an error if the object is already controlled. - if existing := metav1.GetControllerOf(controlled); existing != nil && !referSameObject(*existing, ref) { - return newAlreadyOwnedError(controlled, *existing) - } - - // Update owner references and return. - upsertOwnerRef(ref, controlled) - return nil -} - -// SetOwnerReference is a helper method to make sure the given object contains an object reference to the object provided. -// This allows you to declare that owner has a dependency on the object without specifying it as a controller. -// If a reference to the same object already exists, it'll be overwritten with the newly provided version. -func SetOwnerReference(owner, object metav1.Object, scheme *runtime.Scheme) error { - // Validate the owner. - ro, ok := owner.(runtime.Object) - if !ok { - return fmt.Errorf("%T is not a runtime.Object, cannot call SetOwnerReference", owner) - } - if err := validateOwner(owner, object); err != nil { - return err - } - - // Create a new owner ref. - gvk, err := apiutil.GVKForObject(ro, scheme) - if err != nil { - return err - } - ref := metav1.OwnerReference{ - APIVersion: gvk.GroupVersion().String(), - Kind: gvk.Kind, - UID: owner.GetUID(), - Name: owner.GetName(), - } - - // Update owner references and return. - upsertOwnerRef(ref, object) - return nil -} - -func upsertOwnerRef(ref metav1.OwnerReference, object metav1.Object) { - owners := object.GetOwnerReferences() - if idx := indexOwnerRef(owners, ref); idx == -1 { - owners = append(owners, ref) - } else { - owners[idx] = ref - } - object.SetOwnerReferences(owners) -} - -// indexOwnerRef returns the index of the owner reference in the slice if found, or -1. -func indexOwnerRef(ownerReferences []metav1.OwnerReference, ref metav1.OwnerReference) int { - for index, r := range ownerReferences { - if referSameObject(r, ref) { - return index - } - } - return -1 -} - -func validateOwner(owner, object metav1.Object) error { - ownerNs := owner.GetNamespace() - if ownerNs != "" { - objNs := object.GetNamespace() - if objNs == "" { - return fmt.Errorf("cluster-scoped resource must not have a namespace-scoped owner, owner's namespace %s", ownerNs) - } - if ownerNs != objNs { - return fmt.Errorf("cross-namespace owner references are disallowed, owner's namespace %s, obj's namespace %s", owner.GetNamespace(), object.GetNamespace()) - } - } - return nil -} - -// Returns true if a and b point to the same object. -func referSameObject(a, b metav1.OwnerReference) bool { - aGV, err := schema.ParseGroupVersion(a.APIVersion) - if err != nil { - return false - } - - bGV, err := schema.ParseGroupVersion(b.APIVersion) - if err != nil { - return false - } - - return aGV.Group == bGV.Group && a.Kind == b.Kind && a.Name == b.Name -} - -// OperationResult is the action result of a CreateOrUpdate call. -type OperationResult string - -const ( // They should complete the sentence "Deployment default/foo has been ..." - // OperationResultNone means that the resource has not been changed. - OperationResultNone OperationResult = "unchanged" - // OperationResultCreated means that a new resource is created. - OperationResultCreated OperationResult = "created" - // OperationResultUpdated means that an existing resource is updated. - OperationResultUpdated OperationResult = "updated" - // OperationResultUpdatedStatus means that an existing resource and its status is updated. - OperationResultUpdatedStatus OperationResult = "updatedStatus" - // OperationResultUpdatedStatusOnly means that only an existing status is updated. - OperationResultUpdatedStatusOnly OperationResult = "updatedStatusOnly" -) - -// CreateOrUpdate creates or updates the given object in the Kubernetes -// cluster. The object's desired state must be reconciled with the existing -// state inside the passed in callback MutateFn. -// -// The MutateFn is called regardless of creating or updating an object. -// -// It returns the executed operation and an error. -func CreateOrUpdate(ctx context.Context, c client.Client, obj client.Object, f MutateFn) (OperationResult, error) { - key := client.ObjectKeyFromObject(obj) - if err := c.Get(ctx, key, obj); err != nil { - if !apierrors.IsNotFound(err) { - return OperationResultNone, err - } - if err := mutate(f, key, obj); err != nil { - return OperationResultNone, err - } - if err := c.Create(ctx, obj); err != nil { - return OperationResultNone, err - } - return OperationResultCreated, nil - } - - existing := obj.DeepCopyObject() //nolint - if err := mutate(f, key, obj); err != nil { - return OperationResultNone, err - } - - if equality.Semantic.DeepEqual(existing, obj) { - return OperationResultNone, nil - } - - if err := c.Update(ctx, obj); err != nil { - return OperationResultNone, err - } - return OperationResultUpdated, nil -} - -// CreateOrPatch creates or patches the given object in the Kubernetes -// cluster. The object's desired state must be reconciled with the before -// state inside the passed in callback MutateFn. -// -// The MutateFn is called regardless of creating or updating an object. -// -// It returns the executed operation and an error. -func CreateOrPatch(ctx context.Context, c client.Client, obj client.Object, f MutateFn) (OperationResult, error) { - key := client.ObjectKeyFromObject(obj) - if err := c.Get(ctx, key, obj); err != nil { - if !apierrors.IsNotFound(err) { - return OperationResultNone, err - } - if f != nil { - if err := mutate(f, key, obj); err != nil { - return OperationResultNone, err - } - } - if err := c.Create(ctx, obj); err != nil { - return OperationResultNone, err - } - return OperationResultCreated, nil - } - - // Create patches for the object and its possible status. - objPatch := client.MergeFrom(obj.DeepCopyObject().(client.Object)) - statusPatch := client.MergeFrom(obj.DeepCopyObject().(client.Object)) - - // Create a copy of the original object as well as converting that copy to - // unstructured data. - before, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj.DeepCopyObject()) - if err != nil { - return OperationResultNone, err - } - - // Attempt to extract the status from the resource for easier comparison later - beforeStatus, hasBeforeStatus, err := unstructured.NestedFieldCopy(before, "status") - if err != nil { - return OperationResultNone, err - } - - // If the resource contains a status then remove it from the unstructured - // copy to avoid unnecessary patching later. - if hasBeforeStatus { - unstructured.RemoveNestedField(before, "status") - } - - // Mutate the original object. - if f != nil { - if err := mutate(f, key, obj); err != nil { - return OperationResultNone, err - } - } - - // Convert the resource to unstructured to compare against our before copy. - after, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj) - if err != nil { - return OperationResultNone, err - } - - // Attempt to extract the status from the resource for easier comparison later - afterStatus, hasAfterStatus, err := unstructured.NestedFieldCopy(after, "status") - if err != nil { - return OperationResultNone, err - } - - // If the resource contains a status then remove it from the unstructured - // copy to avoid unnecessary patching later. - if hasAfterStatus { - unstructured.RemoveNestedField(after, "status") - } - - result := OperationResultNone - - if !reflect.DeepEqual(before, after) { - // Only issue a Patch if the before and after resources (minus status) differ - if err := c.Patch(ctx, obj, objPatch); err != nil { - return result, err - } - result = OperationResultUpdated - } - - if (hasBeforeStatus || hasAfterStatus) && !reflect.DeepEqual(beforeStatus, afterStatus) { - // Only issue a Status Patch if the resource has a status and the beforeStatus - // and afterStatus copies differ - if result == OperationResultUpdated { - // If Status was replaced by Patch before, set it to afterStatus - objectAfterPatch, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj) - if err != nil { - return result, err - } - if err = unstructured.SetNestedField(objectAfterPatch, afterStatus, "status"); err != nil { - return result, err - } - // If Status was replaced by Patch before, restore patched structure to the obj - if err = runtime.DefaultUnstructuredConverter.FromUnstructured(objectAfterPatch, obj); err != nil { - return result, err - } - } - if err := c.Status().Patch(ctx, obj, statusPatch); err != nil { - return result, err - } - if result == OperationResultUpdated { - result = OperationResultUpdatedStatus - } else { - result = OperationResultUpdatedStatusOnly - } - } - - return result, nil -} - -// mutate wraps a MutateFn and applies validation to its result. -func mutate(f MutateFn, key client.ObjectKey, obj client.Object) error { - if err := f(); err != nil { - return err - } - if newKey := client.ObjectKeyFromObject(obj); key != newKey { - return fmt.Errorf("MutateFn cannot mutate object name and/or object namespace") - } - return nil -} - -// MutateFn is a function which mutates the existing object into its desired state. -type MutateFn func() error - -// AddFinalizer accepts an Object and adds the provided finalizer if not present. -// It returns an indication of whether it updated the object's list of finalizers. -func AddFinalizer(o client.Object, finalizer string) (finalizersUpdated bool) { - f := o.GetFinalizers() - for _, e := range f { - if e == finalizer { - return false - } - } - o.SetFinalizers(append(f, finalizer)) - return true -} - -// RemoveFinalizer accepts an Object and removes the provided finalizer if present. -// It returns an indication of whether it updated the object's list of finalizers. -func RemoveFinalizer(o client.Object, finalizer string) (finalizersUpdated bool) { - f := o.GetFinalizers() - for i := 0; i < len(f); i++ { - if f[i] == finalizer { - f = append(f[:i], f[i+1:]...) - i-- - finalizersUpdated = true - } - } - o.SetFinalizers(f) - return -} - -// ContainsFinalizer checks an Object that the provided finalizer is present. -func ContainsFinalizer(o client.Object, finalizer string) bool { - f := o.GetFinalizers() - for _, e := range f { - if e == finalizer { - return true - } - } - return false -} - -// Object allows functions to work indistinctly with any resource that -// implements both Object interfaces. -// -// Deprecated: Use client.Object instead. -type Object = client.Object diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/conversion/conversion.go b/vendor/sigs.k8s.io/controller-runtime/pkg/conversion/conversion.go deleted file mode 100644 index da32ab48e..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/pkg/conversion/conversion.go +++ /dev/null @@ -1,40 +0,0 @@ -/* -Copyright 2019 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -/* -Package conversion provides interface definitions that an API Type needs to -implement for it to be supported by the generic conversion webhook handler -defined under pkg/webhook/conversion. -*/ -package conversion - -import "k8s.io/apimachinery/pkg/runtime" - -// Convertible defines capability of a type to convertible i.e. it can be converted to/from a hub type. -type Convertible interface { - runtime.Object - ConvertTo(dst Hub) error - ConvertFrom(src Hub) error -} - -// Hub marks that a given type is the hub type for conversion. This means that -// all conversions will first convert to the hub type, then convert from the hub -// type to the destination type. All types besides the hub type should implement -// Convertible. -type Hub interface { - runtime.Object - Hub() -} diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/doc.go deleted file mode 100644 index 737cc7eff..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/doc.go +++ /dev/null @@ -1,20 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package signals contains libraries for handling signals to gracefully -// shutdown the manager in combination with Kubernetes pod graceful termination -// policy. -package signals diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/signal.go b/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/signal.go deleted file mode 100644 index a79cfb42d..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/signal.go +++ /dev/null @@ -1,45 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package signals - -import ( - "context" - "os" - "os/signal" -) - -var onlyOneSignalHandler = make(chan struct{}) - -// SetupSignalHandler registers for SIGTERM and SIGINT. A context is returned -// which is canceled on one of these signals. If a second signal is caught, the program -// is terminated with exit code 1. -func SetupSignalHandler() context.Context { - close(onlyOneSignalHandler) // panics when called twice - - ctx, cancel := context.WithCancel(context.Background()) - - c := make(chan os.Signal, 2) - signal.Notify(c, shutdownSignals...) - go func() { - <-c - cancel() - <-c - os.Exit(1) // second signal. Exit directly. - }() - - return ctx -} diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/signal_posix.go b/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/signal_posix.go deleted file mode 100644 index a0f00a732..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/signal_posix.go +++ /dev/null @@ -1,27 +0,0 @@ -//go:build !windows -// +build !windows - -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package signals - -import ( - "os" - "syscall" -) - -var shutdownSignals = []os.Signal{os.Interrupt, syscall.SIGTERM} diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/signal_windows.go b/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/signal_windows.go deleted file mode 100644 index 4907d573f..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/signal_windows.go +++ /dev/null @@ -1,23 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package signals - -import ( - "os" -) - -var shutdownSignals = []os.Signal{os.Interrupt} diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/conversion/conversion.go b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/conversion/conversion.go deleted file mode 100644 index a5b7a282c..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/conversion/conversion.go +++ /dev/null @@ -1,345 +0,0 @@ -/* -Copyright 2019 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -/* -Package conversion provides implementation for CRD conversion webhook that implements handler for version conversion requests for types that are convertible. - -See pkg/conversion for interface definitions required to ensure an API Type is convertible. -*/ -package conversion - -import ( - "encoding/json" - "fmt" - "net/http" - - apix "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" - "k8s.io/apimachinery/pkg/api/meta" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "sigs.k8s.io/controller-runtime/pkg/conversion" - logf "sigs.k8s.io/controller-runtime/pkg/log" -) - -var ( - log = logf.Log.WithName("conversion-webhook") -) - -// Webhook implements a CRD conversion webhook HTTP handler. -type Webhook struct { - scheme *runtime.Scheme - decoder *Decoder -} - -// InjectScheme injects a scheme into the webhook, in order to construct a Decoder. -func (wh *Webhook) InjectScheme(s *runtime.Scheme) error { - var err error - wh.scheme = s - wh.decoder, err = NewDecoder(s) - if err != nil { - return err - } - - return nil -} - -// ensure Webhook implements http.Handler -var _ http.Handler = &Webhook{} - -func (wh *Webhook) ServeHTTP(w http.ResponseWriter, r *http.Request) { - convertReview := &apix.ConversionReview{} - err := json.NewDecoder(r.Body).Decode(convertReview) - if err != nil { - log.Error(err, "failed to read conversion request") - w.WriteHeader(http.StatusBadRequest) - return - } - - // TODO(droot): may be move the conversion logic to a separate module to - // decouple it from the http layer ? - resp, err := wh.handleConvertRequest(convertReview.Request) - if err != nil { - log.Error(err, "failed to convert", "request", convertReview.Request.UID) - convertReview.Response = errored(err) - } else { - convertReview.Response = resp - } - convertReview.Response.UID = convertReview.Request.UID - convertReview.Request = nil - - err = json.NewEncoder(w).Encode(convertReview) - if err != nil { - log.Error(err, "failed to write response") - return - } -} - -// handles a version conversion request. -func (wh *Webhook) handleConvertRequest(req *apix.ConversionRequest) (*apix.ConversionResponse, error) { - if req == nil { - return nil, fmt.Errorf("conversion request is nil") - } - var objects []runtime.RawExtension - - for _, obj := range req.Objects { - src, gvk, err := wh.decoder.Decode(obj.Raw) - if err != nil { - return nil, err - } - dst, err := wh.allocateDstObject(req.DesiredAPIVersion, gvk.Kind) - if err != nil { - return nil, err - } - err = wh.convertObject(src, dst) - if err != nil { - return nil, err - } - objects = append(objects, runtime.RawExtension{Object: dst}) - } - return &apix.ConversionResponse{ - UID: req.UID, - ConvertedObjects: objects, - Result: metav1.Status{ - Status: metav1.StatusSuccess, - }, - }, nil -} - -// convertObject will convert given a src object to dst object. -// Note(droot): couldn't find a way to reduce the cyclomatic complexity under 10 -// without compromising readability, so disabling gocyclo linter -func (wh *Webhook) convertObject(src, dst runtime.Object) error { - srcGVK := src.GetObjectKind().GroupVersionKind() - dstGVK := dst.GetObjectKind().GroupVersionKind() - - if srcGVK.GroupKind() != dstGVK.GroupKind() { - return fmt.Errorf("src %T and dst %T does not belong to same API Group", src, dst) - } - - if srcGVK == dstGVK { - return fmt.Errorf("conversion is not allowed between same type %T", src) - } - - srcIsHub, dstIsHub := isHub(src), isHub(dst) - srcIsConvertible, dstIsConvertible := isConvertible(src), isConvertible(dst) - - switch { - case srcIsHub && dstIsConvertible: - return dst.(conversion.Convertible).ConvertFrom(src.(conversion.Hub)) - case dstIsHub && srcIsConvertible: - return src.(conversion.Convertible).ConvertTo(dst.(conversion.Hub)) - case srcIsConvertible && dstIsConvertible: - return wh.convertViaHub(src.(conversion.Convertible), dst.(conversion.Convertible)) - default: - return fmt.Errorf("%T is not convertible to %T", src, dst) - } -} - -func (wh *Webhook) convertViaHub(src, dst conversion.Convertible) error { - hub, err := wh.getHub(src) - if err != nil { - return err - } - - if hub == nil { - return fmt.Errorf("%s does not have any Hub defined", src) - } - - err = src.ConvertTo(hub) - if err != nil { - return fmt.Errorf("%T failed to convert to hub version %T : %w", src, hub, err) - } - - err = dst.ConvertFrom(hub) - if err != nil { - return fmt.Errorf("%T failed to convert from hub version %T : %w", dst, hub, err) - } - - return nil -} - -// getHub returns an instance of the Hub for passed-in object's group/kind. -func (wh *Webhook) getHub(obj runtime.Object) (conversion.Hub, error) { - gvks, err := objectGVKs(wh.scheme, obj) - if err != nil { - return nil, err - } - if len(gvks) == 0 { - return nil, fmt.Errorf("error retrieving gvks for object : %v", obj) - } - - var hub conversion.Hub - var hubFoundAlready bool - for _, gvk := range gvks { - instance, err := wh.scheme.New(gvk) - if err != nil { - return nil, fmt.Errorf("failed to allocate an instance for gvk %v: %w", gvk, err) - } - if val, isHub := instance.(conversion.Hub); isHub { - if hubFoundAlready { - return nil, fmt.Errorf("multiple hub version defined for %T", obj) - } - hubFoundAlready = true - hub = val - } - } - return hub, nil -} - -// allocateDstObject returns an instance for a given GVK. -func (wh *Webhook) allocateDstObject(apiVersion, kind string) (runtime.Object, error) { - gvk := schema.FromAPIVersionAndKind(apiVersion, kind) - - obj, err := wh.scheme.New(gvk) - if err != nil { - return obj, err - } - - t, err := meta.TypeAccessor(obj) - if err != nil { - return obj, err - } - - t.SetAPIVersion(apiVersion) - t.SetKind(kind) - - return obj, nil -} - -// IsConvertible determines if given type is convertible or not. For a type -// to be convertible, the group-kind needs to have a Hub type defined and all -// non-hub types must be able to convert to/from Hub. -func IsConvertible(scheme *runtime.Scheme, obj runtime.Object) (bool, error) { - var hubs, spokes, nonSpokes []runtime.Object - - gvks, err := objectGVKs(scheme, obj) - if err != nil { - return false, err - } - if len(gvks) == 0 { - return false, fmt.Errorf("error retrieving gvks for object : %v", obj) - } - - for _, gvk := range gvks { - instance, err := scheme.New(gvk) - if err != nil { - return false, fmt.Errorf("failed to allocate an instance for gvk %v: %w", gvk, err) - } - - if isHub(instance) { - hubs = append(hubs, instance) - continue - } - - if !isConvertible(instance) { - nonSpokes = append(nonSpokes, instance) - continue - } - - spokes = append(spokes, instance) - } - - if len(gvks) == 1 { - return false, nil // single version - } - - if len(hubs) == 0 && len(spokes) == 0 { - // multiple version detected with no conversion implementation. This is - // true for multi-version built-in types. - return false, nil - } - - if len(hubs) == 1 && len(nonSpokes) == 0 { // convertible - return true, nil - } - - return false, PartialImplementationError{ - hubs: hubs, - nonSpokes: nonSpokes, - spokes: spokes, - } -} - -// objectGVKs returns all (Group,Version,Kind) for the Group/Kind of given object. -func objectGVKs(scheme *runtime.Scheme, obj runtime.Object) ([]schema.GroupVersionKind, error) { - // NB: we should not use `obj.GetObjectKind().GroupVersionKind()` to get the - // GVK here, since it is parsed from apiVersion and kind fields and it may - // return empty GVK if obj is an uninitialized object. - objGVKs, _, err := scheme.ObjectKinds(obj) - if err != nil { - return nil, err - } - if len(objGVKs) != 1 { - return nil, fmt.Errorf("expect to get only one GVK for %v", obj) - } - objGVK := objGVKs[0] - knownTypes := scheme.AllKnownTypes() - - var gvks []schema.GroupVersionKind - for gvk := range knownTypes { - if objGVK.GroupKind() == gvk.GroupKind() { - gvks = append(gvks, gvk) - } - } - return gvks, nil -} - -// PartialImplementationError represents an error due to partial conversion -// implementation such as hub without spokes, multiple hubs or spokes without hub. -type PartialImplementationError struct { - gvk schema.GroupVersionKind - hubs []runtime.Object - nonSpokes []runtime.Object - spokes []runtime.Object -} - -func (e PartialImplementationError) Error() string { - if len(e.hubs) == 0 { - return fmt.Sprintf("no hub defined for gvk %s", e.gvk) - } - if len(e.hubs) > 1 { - return fmt.Sprintf("multiple(%d) hubs defined for group-kind '%s' ", - len(e.hubs), e.gvk.GroupKind()) - } - if len(e.nonSpokes) > 0 { - return fmt.Sprintf("%d inconvertible types detected for group-kind '%s'", - len(e.nonSpokes), e.gvk.GroupKind()) - } - return "" -} - -// isHub determines if passed-in object is a Hub or not. -func isHub(obj runtime.Object) bool { - _, yes := obj.(conversion.Hub) - return yes -} - -// isConvertible determines if passed-in object is a convertible. -func isConvertible(obj runtime.Object) bool { - _, yes := obj.(conversion.Convertible) - return yes -} - -// helper to construct error response. -func errored(err error) *apix.ConversionResponse { - return &apix.ConversionResponse{ - Result: metav1.Status{ - Status: metav1.StatusFailure, - Message: err.Error(), - }, - } -} diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/conversion/decoder.go b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/conversion/decoder.go deleted file mode 100644 index 6a9e9c236..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/conversion/decoder.go +++ /dev/null @@ -1,47 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package conversion - -import ( - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/runtime/serializer" -) - -// Decoder knows how to decode the contents of a CRD version conversion -// request into a concrete object. -// TODO(droot): consider reusing decoder from admission pkg for this. -type Decoder struct { - codecs serializer.CodecFactory -} - -// NewDecoder creates a Decoder given the runtime.Scheme -func NewDecoder(scheme *runtime.Scheme) (*Decoder, error) { - return &Decoder{codecs: serializer.NewCodecFactory(scheme)}, nil -} - -// Decode decodes the inlined object. -func (d *Decoder) Decode(content []byte) (runtime.Object, *schema.GroupVersionKind, error) { - deserializer := d.codecs.UniversalDeserializer() - return deserializer.Decode(content, nil, nil) -} - -// DecodeInto decodes the inlined object in the into the passed-in runtime.Object. -func (d *Decoder) DecodeInto(content []byte, into runtime.Object) error { - deserializer := d.codecs.UniversalDeserializer() - return runtime.DecodeInto(deserializer, content, into) -}